@dooboostore/dom-parser 1.0.2 → 1.0.3

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 (518) hide show
  1. package/dist/cjs/DomParser.js +10 -1
  2. package/dist/cjs/DomParser.js.map +2 -2
  3. package/dist/cjs/factory/ElementFactory.js +27 -6
  4. package/dist/cjs/factory/ElementFactory.js.map +2 -2
  5. package/dist/cjs/index.js +4 -0
  6. package/dist/cjs/index.js.map +2 -2
  7. package/dist/cjs/node/CharacterData.js.map +1 -1
  8. package/dist/cjs/node/ChildNode.js +0 -15
  9. package/dist/cjs/node/ChildNode.js.map +3 -3
  10. package/dist/cjs/node/ChildNodeBase.js +20 -0
  11. package/dist/cjs/node/ChildNodeBase.js.map +2 -2
  12. package/dist/cjs/node/Comment.js.map +2 -2
  13. package/dist/cjs/node/Document.js +0 -27
  14. package/dist/cjs/node/Document.js.map +4 -4
  15. package/dist/cjs/node/DocumentBase.js +168 -205
  16. package/dist/cjs/node/DocumentBase.js.map +2 -2
  17. package/dist/cjs/node/DocumentFragment.js +0 -15
  18. package/dist/cjs/node/DocumentFragment.js.map +3 -3
  19. package/dist/cjs/node/DocumentFragmentBase.js.map +2 -2
  20. package/dist/cjs/node/Node.js.map +1 -1
  21. package/dist/cjs/node/NodeBase.js +44 -2
  22. package/dist/cjs/node/NodeBase.js.map +2 -2
  23. package/dist/cjs/node/NodeFilter.js +43 -0
  24. package/dist/cjs/node/NodeFilter.js.map +7 -0
  25. package/dist/cjs/node/NodeIterator.js +1 -28
  26. package/dist/cjs/node/NodeIterator.js.map +2 -2
  27. package/dist/cjs/node/ParentNode.js +0 -15
  28. package/dist/cjs/node/ParentNode.js.map +3 -3
  29. package/dist/cjs/node/ParentNodeBase.js +10 -10
  30. package/dist/cjs/node/ParentNodeBase.js.map +3 -3
  31. package/dist/cjs/node/ShadowRootBase.js +79 -0
  32. package/dist/cjs/node/ShadowRootBase.js.map +7 -0
  33. package/dist/cjs/node/Text.js +0 -15
  34. package/dist/cjs/node/Text.js.map +3 -3
  35. package/dist/cjs/node/TextBase.js +0 -3
  36. package/dist/cjs/node/TextBase.js.map +2 -2
  37. package/dist/cjs/node/TreeWalker.js +272 -0
  38. package/dist/cjs/node/TreeWalker.js.map +7 -0
  39. package/dist/cjs/node/collection/{HTMLCollection.js → HTMLCollectionImp.js} +7 -6
  40. package/dist/cjs/node/collection/HTMLCollectionImp.js.map +7 -0
  41. package/dist/cjs/node/collection/HTMLCollectionOfImp.js +26 -0
  42. package/dist/cjs/node/collection/HTMLCollectionOfImp.js.map +7 -0
  43. package/dist/cjs/node/collection/NodeList.js.map +1 -1
  44. package/dist/cjs/node/collection/{NodeListOf.js → NodeListOfImp.js} +6 -6
  45. package/dist/cjs/node/collection/NodeListOfImp.js.map +7 -0
  46. package/dist/cjs/node/collection/StylePropertyMapImpl.js +65 -0
  47. package/dist/cjs/node/collection/StylePropertyMapImpl.js.map +7 -0
  48. package/dist/cjs/node/collection/index.js +6 -6
  49. package/dist/cjs/node/collection/index.js.map +2 -2
  50. package/dist/cjs/node/elements/Element.js +0 -15
  51. package/dist/cjs/node/elements/Element.js.map +3 -3
  52. package/dist/cjs/node/elements/ElementBase.js +163 -331
  53. package/dist/cjs/node/elements/ElementBase.js.map +3 -3
  54. package/dist/cjs/node/elements/HTMLAreaElement.js.map +2 -2
  55. package/dist/cjs/node/{collection/HTMLCollectionOf.js → elements/HTMLAudioElement.js} +9 -16
  56. package/dist/cjs/node/elements/HTMLAudioElement.js.map +7 -0
  57. package/dist/cjs/node/elements/HTMLButtonElement.js +1 -1
  58. package/dist/cjs/node/elements/HTMLButtonElement.js.map +2 -2
  59. package/dist/cjs/node/elements/HTMLDListElement.js +29 -0
  60. package/dist/cjs/node/elements/HTMLDListElement.js.map +7 -0
  61. package/dist/cjs/node/elements/HTMLDataElement.js +29 -0
  62. package/dist/cjs/node/elements/HTMLDataElement.js.map +7 -0
  63. package/dist/cjs/node/elements/HTMLDataListElement.js +29 -0
  64. package/dist/cjs/node/elements/HTMLDataListElement.js.map +7 -0
  65. package/dist/cjs/node/elements/HTMLDetailsElement.js +29 -0
  66. package/dist/cjs/node/elements/HTMLDetailsElement.js.map +7 -0
  67. package/dist/cjs/node/elements/HTMLDialogElement.js +29 -0
  68. package/dist/cjs/node/elements/HTMLDialogElement.js.map +7 -0
  69. package/dist/cjs/node/elements/HTMLElement.js +10 -0
  70. package/dist/cjs/node/elements/HTMLElement.js.map +2 -2
  71. package/dist/cjs/node/elements/HTMLElementBase.js +41 -43
  72. package/dist/cjs/node/elements/HTMLElementBase.js.map +2 -2
  73. package/dist/cjs/node/elements/HTMLEmbedElement.js.map +2 -2
  74. package/dist/cjs/node/elements/HTMLFieldSetElement.js +29 -0
  75. package/dist/cjs/node/elements/HTMLFieldSetElement.js.map +7 -0
  76. package/dist/cjs/node/elements/HTMLHRElement.js +29 -0
  77. package/dist/cjs/node/elements/HTMLHRElement.js.map +7 -0
  78. package/dist/cjs/node/elements/HTMLIFrameElement.js +29 -0
  79. package/dist/cjs/node/elements/HTMLIFrameElement.js.map +7 -0
  80. package/dist/cjs/node/elements/HTMLLabelElement.js +29 -0
  81. package/dist/cjs/node/elements/HTMLLabelElement.js.map +7 -0
  82. package/dist/cjs/node/elements/HTMLLegendElement.js +29 -0
  83. package/dist/cjs/node/elements/HTMLLegendElement.js.map +7 -0
  84. package/dist/cjs/node/elements/HTMLMapElement.js +29 -0
  85. package/dist/cjs/node/elements/HTMLMapElement.js.map +7 -0
  86. package/dist/cjs/node/elements/HTMLMeterElement.js +29 -0
  87. package/dist/cjs/node/elements/HTMLMeterElement.js.map +7 -0
  88. package/dist/cjs/node/elements/HTMLModElement.js +29 -0
  89. package/dist/cjs/node/elements/HTMLModElement.js.map +7 -0
  90. package/dist/cjs/node/elements/HTMLObjectElement.js +29 -0
  91. package/dist/cjs/node/elements/HTMLObjectElement.js.map +7 -0
  92. package/dist/cjs/node/elements/HTMLOptGroupElement.js +29 -0
  93. package/dist/cjs/node/elements/HTMLOptGroupElement.js.map +7 -0
  94. package/dist/cjs/node/elements/HTMLOptionElement.js +29 -0
  95. package/dist/cjs/node/elements/HTMLOptionElement.js.map +7 -0
  96. package/dist/cjs/node/elements/HTMLOutputElement.js +29 -0
  97. package/dist/cjs/node/elements/HTMLOutputElement.js.map +7 -0
  98. package/dist/cjs/node/elements/HTMLParamElement.js +29 -0
  99. package/dist/cjs/node/elements/HTMLParamElement.js.map +7 -0
  100. package/dist/cjs/node/elements/HTMLPictureElement.js +29 -0
  101. package/dist/cjs/node/elements/HTMLPictureElement.js.map +7 -0
  102. package/dist/cjs/node/elements/HTMLPreElement.js +29 -0
  103. package/dist/cjs/node/elements/HTMLPreElement.js.map +7 -0
  104. package/dist/cjs/node/elements/HTMLProgressElement.js +29 -0
  105. package/dist/cjs/node/elements/HTMLProgressElement.js.map +7 -0
  106. package/dist/cjs/node/elements/HTMLQuoteElement.js +29 -0
  107. package/dist/cjs/node/elements/HTMLQuoteElement.js.map +7 -0
  108. package/dist/cjs/node/elements/HTMLSelectElement.js +29 -0
  109. package/dist/cjs/node/elements/HTMLSelectElement.js.map +7 -0
  110. package/dist/cjs/node/elements/HTMLSlotElement.js +29 -0
  111. package/dist/cjs/node/elements/HTMLSlotElement.js.map +7 -0
  112. package/dist/cjs/node/elements/HTMLSourceElement.js +29 -0
  113. package/dist/cjs/node/elements/HTMLSourceElement.js.map +7 -0
  114. package/dist/cjs/node/elements/HTMLTableElement.js.map +2 -2
  115. package/dist/cjs/node/elements/HTMLTbodyElement.js.map +2 -2
  116. package/dist/cjs/node/elements/HTMLTdElement.js.map +2 -2
  117. package/dist/cjs/node/elements/HTMLTemplateElement.js.map +2 -2
  118. package/dist/cjs/node/elements/HTMLTextAreaElement.js +29 -0
  119. package/dist/cjs/node/elements/HTMLTextAreaElement.js.map +7 -0
  120. package/dist/cjs/node/elements/HTMLTfootElement.js.map +2 -2
  121. package/dist/cjs/node/elements/HTMLTheadElement.js.map +2 -2
  122. package/dist/cjs/node/elements/HTMLTimeElement.js +29 -0
  123. package/dist/cjs/node/elements/HTMLTimeElement.js.map +7 -0
  124. package/dist/cjs/node/elements/HTMLTrElement.js.map +2 -2
  125. package/dist/cjs/node/elements/HTMLTrackElement.js +29 -0
  126. package/dist/cjs/node/elements/HTMLTrackElement.js.map +7 -0
  127. package/dist/cjs/node/elements/HTMLVideoElement.js +29 -0
  128. package/dist/cjs/node/elements/HTMLVideoElement.js.map +7 -0
  129. package/dist/cjs/node/elements/index.js +181 -92
  130. package/dist/cjs/node/elements/index.js.map +2 -2
  131. package/dist/cjs/node/index.js +6 -16
  132. package/dist/cjs/node/index.js.map +2 -2
  133. package/dist/cjs/utils/CSSSelector.js.map +2 -2
  134. package/dist/cjs/window/CustomElementRegistryImp.js +105 -0
  135. package/dist/cjs/window/CustomElementRegistryImp.js.map +7 -0
  136. package/dist/cjs/window/Window.js +0 -15
  137. package/dist/cjs/window/Window.js.map +3 -3
  138. package/dist/cjs/window/WindowBase.js +210 -613
  139. package/dist/cjs/window/WindowBase.js.map +2 -2
  140. package/dist/cjs/window/index.js +0 -5
  141. package/dist/cjs/window/index.js.map +2 -2
  142. package/dist/esm/DomParser.js +10 -1
  143. package/dist/esm/DomParser.js.map +2 -2
  144. package/dist/esm/factory/ElementFactory.js +27 -6
  145. package/dist/esm/factory/ElementFactory.js.map +2 -2
  146. package/dist/esm/index.js +4 -0
  147. package/dist/esm/index.js.map +2 -2
  148. package/dist/esm/node/ChildNodeBase.js +20 -0
  149. package/dist/esm/node/ChildNodeBase.js.map +2 -2
  150. package/dist/esm/node/Comment.js.map +2 -2
  151. package/dist/esm/node/Document.js +0 -8
  152. package/dist/esm/node/Document.js.map +4 -4
  153. package/dist/esm/node/DocumentBase.js +165 -202
  154. package/dist/esm/node/DocumentBase.js.map +2 -2
  155. package/dist/esm/node/DocumentFragmentBase.js.map +2 -2
  156. package/dist/esm/node/Node.js.map +1 -1
  157. package/dist/esm/node/NodeBase.js +45 -22
  158. package/dist/esm/node/NodeBase.js.map +2 -2
  159. package/dist/esm/node/NodeFilter.js +24 -0
  160. package/dist/esm/node/NodeFilter.js.map +7 -0
  161. package/dist/esm/node/NodeIterator.js +1 -28
  162. package/dist/esm/node/NodeIterator.js.map +2 -2
  163. package/dist/esm/node/ParentNodeBase.js +4 -4
  164. package/dist/esm/node/ParentNodeBase.js.map +2 -2
  165. package/dist/esm/node/ShadowRootBase.js +60 -0
  166. package/dist/esm/node/ShadowRootBase.js.map +7 -0
  167. package/dist/esm/node/TextBase.js +0 -3
  168. package/dist/esm/node/TextBase.js.map +2 -2
  169. package/dist/esm/node/TreeWalker.js +253 -0
  170. package/dist/esm/node/TreeWalker.js.map +7 -0
  171. package/dist/esm/node/collection/{HTMLCollection.js → HTMLCollectionImp.js} +4 -3
  172. package/dist/esm/node/collection/HTMLCollectionImp.js.map +7 -0
  173. package/dist/esm/node/collection/HTMLCollectionOfImp.js +7 -0
  174. package/dist/esm/node/collection/HTMLCollectionOfImp.js.map +7 -0
  175. package/dist/esm/node/collection/NodeList.js.map +1 -1
  176. package/dist/esm/node/collection/{NodeListOf.js → NodeListOfImp.js} +3 -3
  177. package/dist/esm/node/collection/NodeListOfImp.js.map +7 -0
  178. package/dist/esm/node/collection/StylePropertyMapImpl.js +46 -0
  179. package/dist/esm/node/collection/StylePropertyMapImpl.js.map +7 -0
  180. package/dist/esm/node/collection/index.js +6 -6
  181. package/dist/esm/node/collection/index.js.map +2 -2
  182. package/dist/esm/node/elements/ElementBase.js +163 -331
  183. package/dist/esm/node/elements/ElementBase.js.map +3 -3
  184. package/dist/esm/node/elements/HTMLAreaElement.js.map +2 -2
  185. package/dist/esm/node/elements/HTMLAudioElement.js +10 -0
  186. package/dist/esm/node/elements/HTMLAudioElement.js.map +7 -0
  187. package/dist/esm/node/elements/HTMLButtonElement.js +1 -1
  188. package/dist/esm/node/elements/HTMLButtonElement.js.map +2 -2
  189. package/dist/esm/node/elements/HTMLDListElement.js +10 -0
  190. package/dist/esm/node/elements/HTMLDListElement.js.map +7 -0
  191. package/dist/esm/node/elements/HTMLDataElement.js +10 -0
  192. package/dist/esm/node/elements/HTMLDataElement.js.map +7 -0
  193. package/dist/esm/node/elements/HTMLDataListElement.js +10 -0
  194. package/dist/esm/node/elements/HTMLDataListElement.js.map +7 -0
  195. package/dist/esm/node/elements/HTMLDetailsElement.js +10 -0
  196. package/dist/esm/node/elements/HTMLDetailsElement.js.map +7 -0
  197. package/dist/esm/node/elements/HTMLDialogElement.js +10 -0
  198. package/dist/esm/node/elements/HTMLDialogElement.js.map +7 -0
  199. package/dist/esm/node/elements/HTMLElement.js +6 -0
  200. package/dist/esm/node/elements/HTMLElement.js.map +3 -3
  201. package/dist/esm/node/elements/HTMLElementBase.js +40 -42
  202. package/dist/esm/node/elements/HTMLElementBase.js.map +2 -2
  203. package/dist/esm/node/elements/HTMLEmbedElement.js.map +2 -2
  204. package/dist/esm/node/elements/HTMLFieldSetElement.js +10 -0
  205. package/dist/esm/node/elements/HTMLFieldSetElement.js.map +7 -0
  206. package/dist/esm/node/elements/HTMLHRElement.js +10 -0
  207. package/dist/esm/node/elements/HTMLHRElement.js.map +7 -0
  208. package/dist/esm/node/elements/HTMLIFrameElement.js +10 -0
  209. package/dist/esm/node/elements/HTMLIFrameElement.js.map +7 -0
  210. package/dist/esm/node/elements/HTMLLabelElement.js +10 -0
  211. package/dist/esm/node/elements/HTMLLabelElement.js.map +7 -0
  212. package/dist/esm/node/elements/HTMLLegendElement.js +10 -0
  213. package/dist/esm/node/elements/HTMLLegendElement.js.map +7 -0
  214. package/dist/esm/node/elements/HTMLMapElement.js +10 -0
  215. package/dist/esm/node/elements/HTMLMapElement.js.map +7 -0
  216. package/dist/esm/node/elements/HTMLMeterElement.js +10 -0
  217. package/dist/esm/node/elements/HTMLMeterElement.js.map +7 -0
  218. package/dist/esm/node/elements/HTMLModElement.js +10 -0
  219. package/dist/esm/node/elements/HTMLModElement.js.map +7 -0
  220. package/dist/esm/node/elements/HTMLObjectElement.js +10 -0
  221. package/dist/esm/node/elements/HTMLObjectElement.js.map +7 -0
  222. package/dist/esm/node/elements/HTMLOptGroupElement.js +10 -0
  223. package/dist/esm/node/elements/HTMLOptGroupElement.js.map +7 -0
  224. package/dist/esm/node/elements/HTMLOptionElement.js +10 -0
  225. package/dist/esm/node/elements/HTMLOptionElement.js.map +7 -0
  226. package/dist/esm/node/elements/HTMLOutputElement.js +10 -0
  227. package/dist/esm/node/elements/HTMLOutputElement.js.map +7 -0
  228. package/dist/esm/node/elements/HTMLParamElement.js +10 -0
  229. package/dist/esm/node/elements/HTMLParamElement.js.map +7 -0
  230. package/dist/esm/node/elements/HTMLPictureElement.js +10 -0
  231. package/dist/esm/node/elements/HTMLPictureElement.js.map +7 -0
  232. package/dist/esm/node/elements/HTMLPreElement.js +10 -0
  233. package/dist/esm/node/elements/HTMLPreElement.js.map +7 -0
  234. package/dist/esm/node/elements/HTMLProgressElement.js +10 -0
  235. package/dist/esm/node/elements/HTMLProgressElement.js.map +7 -0
  236. package/dist/esm/node/elements/HTMLQuoteElement.js +10 -0
  237. package/dist/esm/node/elements/HTMLQuoteElement.js.map +7 -0
  238. package/dist/esm/node/elements/HTMLSelectElement.js +10 -0
  239. package/dist/esm/node/elements/HTMLSelectElement.js.map +7 -0
  240. package/dist/esm/node/elements/HTMLSlotElement.js +10 -0
  241. package/dist/esm/node/elements/HTMLSlotElement.js.map +7 -0
  242. package/dist/esm/node/elements/HTMLSourceElement.js +10 -0
  243. package/dist/esm/node/elements/HTMLSourceElement.js.map +7 -0
  244. package/dist/esm/node/elements/HTMLTableElement.js.map +2 -2
  245. package/dist/esm/node/elements/HTMLTbodyElement.js.map +2 -2
  246. package/dist/esm/node/elements/HTMLTdElement.js.map +2 -2
  247. package/dist/esm/node/elements/HTMLTemplateElement.js.map +2 -2
  248. package/dist/esm/node/elements/HTMLTextAreaElement.js +10 -0
  249. package/dist/esm/node/elements/HTMLTextAreaElement.js.map +7 -0
  250. package/dist/esm/node/elements/HTMLTfootElement.js.map +2 -2
  251. package/dist/esm/node/elements/HTMLTheadElement.js.map +2 -2
  252. package/dist/esm/node/elements/HTMLTimeElement.js +10 -0
  253. package/dist/esm/node/elements/HTMLTimeElement.js.map +7 -0
  254. package/dist/esm/node/elements/HTMLTrElement.js.map +2 -2
  255. package/dist/esm/node/elements/HTMLTrackElement.js +10 -0
  256. package/dist/esm/node/elements/HTMLTrackElement.js.map +7 -0
  257. package/dist/esm/node/elements/HTMLVideoElement.js +10 -0
  258. package/dist/esm/node/elements/HTMLVideoElement.js.map +7 -0
  259. package/dist/esm/node/elements/index.js +182 -93
  260. package/dist/esm/node/elements/index.js.map +2 -2
  261. package/dist/esm/node/index.js +7 -17
  262. package/dist/esm/node/index.js.map +2 -2
  263. package/dist/esm/utils/CSSSelector.js.map +2 -2
  264. package/dist/esm/window/CustomElementRegistryImp.js +86 -0
  265. package/dist/esm/window/CustomElementRegistryImp.js.map +7 -0
  266. package/dist/esm/window/WindowBase.js +259 -597
  267. package/dist/esm/window/WindowBase.js.map +2 -2
  268. package/dist/esm/window/index.js +0 -5
  269. package/dist/esm/window/index.js.map +2 -2
  270. package/dist/esm-bundle/dooboostore-dom-parser.esm.js +3449 -3551
  271. package/dist/esm-bundle/dooboostore-dom-parser.esm.js.map +4 -4
  272. package/dist/types/DomParser.d.ts.map +1 -1
  273. package/dist/types/factory/ElementFactory.d.ts +1 -1
  274. package/dist/types/factory/ElementFactory.d.ts.map +1 -1
  275. package/dist/types/index.d.ts +3 -1
  276. package/dist/types/index.d.ts.map +1 -1
  277. package/dist/types/node/CharacterData.d.ts +0 -2
  278. package/dist/types/node/CharacterData.d.ts.map +1 -1
  279. package/dist/types/node/ChildNode.d.ts +0 -38
  280. package/dist/types/node/ChildNode.d.ts.map +1 -1
  281. package/dist/types/node/ChildNodeBase.d.ts +6 -4
  282. package/dist/types/node/ChildNodeBase.d.ts.map +1 -1
  283. package/dist/types/node/Comment.d.ts +1 -1
  284. package/dist/types/node/Comment.d.ts.map +1 -1
  285. package/dist/types/node/Document.d.ts +0 -856
  286. package/dist/types/node/Document.d.ts.map +1 -1
  287. package/dist/types/node/DocumentBase.d.ts +68 -110
  288. package/dist/types/node/DocumentBase.d.ts.map +1 -1
  289. package/dist/types/node/DocumentFragment.d.ts +0 -38
  290. package/dist/types/node/DocumentFragment.d.ts.map +1 -1
  291. package/dist/types/node/DocumentFragmentBase.d.ts +1 -8
  292. package/dist/types/node/DocumentFragmentBase.d.ts.map +1 -1
  293. package/dist/types/node/Node.d.ts +0 -213
  294. package/dist/types/node/Node.d.ts.map +1 -1
  295. package/dist/types/node/NodeBase.d.ts +11 -8
  296. package/dist/types/node/NodeBase.d.ts.map +1 -1
  297. package/dist/types/node/NodeFilter.d.ts +25 -0
  298. package/dist/types/node/NodeFilter.d.ts.map +1 -0
  299. package/dist/types/node/NodeIterator.d.ts +0 -34
  300. package/dist/types/node/NodeIterator.d.ts.map +1 -1
  301. package/dist/types/node/ParentNode.d.ts +0 -84
  302. package/dist/types/node/ParentNode.d.ts.map +1 -1
  303. package/dist/types/node/ParentNodeBase.d.ts +0 -5
  304. package/dist/types/node/ParentNodeBase.d.ts.map +1 -1
  305. package/dist/types/node/ShadowRootBase.d.ts +36 -0
  306. package/dist/types/node/ShadowRootBase.d.ts.map +1 -0
  307. package/dist/types/node/Text.d.ts +0 -24
  308. package/dist/types/node/Text.d.ts.map +1 -1
  309. package/dist/types/node/TextBase.d.ts +2 -3
  310. package/dist/types/node/TextBase.d.ts.map +1 -1
  311. package/dist/types/node/TreeWalker.d.ts +48 -0
  312. package/dist/types/node/TreeWalker.d.ts.map +1 -0
  313. package/dist/types/node/collection/{HTMLCollection.d.ts → HTMLCollectionImp.d.ts} +2 -3
  314. package/dist/types/node/collection/HTMLCollectionImp.d.ts.map +1 -0
  315. package/dist/types/node/collection/HTMLCollectionOfImp.d.ts +9 -0
  316. package/dist/types/node/collection/HTMLCollectionOfImp.d.ts.map +1 -0
  317. package/dist/types/node/collection/NodeList.d.ts +0 -1
  318. package/dist/types/node/collection/NodeList.d.ts.map +1 -1
  319. package/dist/types/node/collection/{NodeListOf.d.ts → NodeListOfImp.d.ts} +3 -4
  320. package/dist/types/node/collection/NodeListOfImp.d.ts.map +1 -0
  321. package/dist/types/node/collection/StylePropertyMapImpl.d.ts +20 -0
  322. package/dist/types/node/collection/StylePropertyMapImpl.d.ts.map +1 -0
  323. package/dist/types/node/collection/index.d.ts +3 -3
  324. package/dist/types/node/collection/index.d.ts.map +1 -1
  325. package/dist/types/node/elements/Element.d.ts +0 -687
  326. package/dist/types/node/elements/Element.d.ts.map +1 -1
  327. package/dist/types/node/elements/ElementBase.d.ts +98 -74
  328. package/dist/types/node/elements/ElementBase.d.ts.map +1 -1
  329. package/dist/types/node/elements/HTMLAreaElement.d.ts +0 -1
  330. package/dist/types/node/elements/HTMLAreaElement.d.ts.map +1 -1
  331. package/dist/types/node/elements/HTMLAudioElement.d.ts +8 -0
  332. package/dist/types/node/elements/HTMLAudioElement.d.ts.map +1 -0
  333. package/dist/types/node/elements/HTMLButtonElement.d.ts +1 -1
  334. package/dist/types/node/elements/HTMLButtonElement.d.ts.map +1 -1
  335. package/dist/types/node/elements/HTMLDListElement.d.ts +5 -0
  336. package/dist/types/node/elements/HTMLDListElement.d.ts.map +1 -0
  337. package/dist/types/node/elements/HTMLDataElement.d.ts +5 -0
  338. package/dist/types/node/elements/HTMLDataElement.d.ts.map +1 -0
  339. package/dist/types/node/elements/HTMLDataListElement.d.ts +5 -0
  340. package/dist/types/node/elements/HTMLDataListElement.d.ts.map +1 -0
  341. package/dist/types/node/elements/HTMLDetailsElement.d.ts +5 -0
  342. package/dist/types/node/elements/HTMLDetailsElement.d.ts.map +1 -0
  343. package/dist/types/node/elements/HTMLDialogElement.d.ts +5 -0
  344. package/dist/types/node/elements/HTMLDialogElement.d.ts.map +1 -0
  345. package/dist/types/node/elements/HTMLElement.d.ts +2 -119
  346. package/dist/types/node/elements/HTMLElement.d.ts.map +1 -1
  347. package/dist/types/node/elements/HTMLElementBase.d.ts +126 -5
  348. package/dist/types/node/elements/HTMLElementBase.d.ts.map +1 -1
  349. package/dist/types/node/elements/HTMLEmbedElement.d.ts +0 -1
  350. package/dist/types/node/elements/HTMLEmbedElement.d.ts.map +1 -1
  351. package/dist/types/node/elements/HTMLFieldSetElement.d.ts +5 -0
  352. package/dist/types/node/elements/HTMLFieldSetElement.d.ts.map +1 -0
  353. package/dist/types/node/elements/HTMLHRElement.d.ts +5 -0
  354. package/dist/types/node/elements/HTMLHRElement.d.ts.map +1 -0
  355. package/dist/types/node/elements/HTMLIFrameElement.d.ts +5 -0
  356. package/dist/types/node/elements/HTMLIFrameElement.d.ts.map +1 -0
  357. package/dist/types/node/elements/HTMLLabelElement.d.ts +5 -0
  358. package/dist/types/node/elements/HTMLLabelElement.d.ts.map +1 -0
  359. package/dist/types/node/elements/HTMLLegendElement.d.ts +5 -0
  360. package/dist/types/node/elements/HTMLLegendElement.d.ts.map +1 -0
  361. package/dist/types/node/elements/HTMLMapElement.d.ts +5 -0
  362. package/dist/types/node/elements/HTMLMapElement.d.ts.map +1 -0
  363. package/dist/types/node/elements/HTMLMeterElement.d.ts +5 -0
  364. package/dist/types/node/elements/HTMLMeterElement.d.ts.map +1 -0
  365. package/dist/types/node/elements/HTMLModElement.d.ts +5 -0
  366. package/dist/types/node/elements/HTMLModElement.d.ts.map +1 -0
  367. package/dist/types/node/elements/HTMLObjectElement.d.ts +5 -0
  368. package/dist/types/node/elements/HTMLObjectElement.d.ts.map +1 -0
  369. package/dist/types/node/elements/HTMLOptGroupElement.d.ts +5 -0
  370. package/dist/types/node/elements/HTMLOptGroupElement.d.ts.map +1 -0
  371. package/dist/types/node/elements/HTMLOptionElement.d.ts +5 -0
  372. package/dist/types/node/elements/HTMLOptionElement.d.ts.map +1 -0
  373. package/dist/types/node/elements/HTMLOutputElement.d.ts +5 -0
  374. package/dist/types/node/elements/HTMLOutputElement.d.ts.map +1 -0
  375. package/dist/types/node/elements/HTMLParamElement.d.ts +5 -0
  376. package/dist/types/node/elements/HTMLParamElement.d.ts.map +1 -0
  377. package/dist/types/node/elements/HTMLPictureElement.d.ts +5 -0
  378. package/dist/types/node/elements/HTMLPictureElement.d.ts.map +1 -0
  379. package/dist/types/node/elements/HTMLPreElement.d.ts +5 -0
  380. package/dist/types/node/elements/HTMLPreElement.d.ts.map +1 -0
  381. package/dist/types/node/elements/HTMLProgressElement.d.ts +5 -0
  382. package/dist/types/node/elements/HTMLProgressElement.d.ts.map +1 -0
  383. package/dist/types/node/elements/HTMLQuoteElement.d.ts +5 -0
  384. package/dist/types/node/elements/HTMLQuoteElement.d.ts.map +1 -0
  385. package/dist/types/node/elements/HTMLSelectElement.d.ts +5 -0
  386. package/dist/types/node/elements/HTMLSelectElement.d.ts.map +1 -0
  387. package/dist/types/node/elements/HTMLSlotElement.d.ts +5 -0
  388. package/dist/types/node/elements/HTMLSlotElement.d.ts.map +1 -0
  389. package/dist/types/node/elements/HTMLSourceElement.d.ts +5 -0
  390. package/dist/types/node/elements/HTMLSourceElement.d.ts.map +1 -0
  391. package/dist/types/node/elements/HTMLTableElement.d.ts +3 -4
  392. package/dist/types/node/elements/HTMLTableElement.d.ts.map +1 -1
  393. package/dist/types/node/elements/HTMLTbodyElement.d.ts +2 -3
  394. package/dist/types/node/elements/HTMLTbodyElement.d.ts.map +1 -1
  395. package/dist/types/node/elements/HTMLTemplateElement.d.ts +0 -1
  396. package/dist/types/node/elements/HTMLTemplateElement.d.ts.map +1 -1
  397. package/dist/types/node/elements/HTMLTextAreaElement.d.ts +5 -0
  398. package/dist/types/node/elements/HTMLTextAreaElement.d.ts.map +1 -0
  399. package/dist/types/node/elements/HTMLTfootElement.d.ts +2 -3
  400. package/dist/types/node/elements/HTMLTfootElement.d.ts.map +1 -1
  401. package/dist/types/node/elements/HTMLTheadElement.d.ts +2 -3
  402. package/dist/types/node/elements/HTMLTheadElement.d.ts.map +1 -1
  403. package/dist/types/node/elements/HTMLTimeElement.d.ts +5 -0
  404. package/dist/types/node/elements/HTMLTimeElement.d.ts.map +1 -0
  405. package/dist/types/node/elements/HTMLTrElement.d.ts +2 -3
  406. package/dist/types/node/elements/HTMLTrElement.d.ts.map +1 -1
  407. package/dist/types/node/elements/HTMLTrackElement.d.ts +5 -0
  408. package/dist/types/node/elements/HTMLTrackElement.d.ts.map +1 -0
  409. package/dist/types/node/elements/HTMLVideoElement.d.ts +8 -0
  410. package/dist/types/node/elements/HTMLVideoElement.d.ts.map +1 -0
  411. package/dist/types/node/elements/index.d.ts +106 -52
  412. package/dist/types/node/elements/index.d.ts.map +1 -1
  413. package/dist/types/node/index.d.ts +4 -7
  414. package/dist/types/node/index.d.ts.map +1 -1
  415. package/dist/types/utils/CSSSelector.d.ts +0 -1
  416. package/dist/types/utils/CSSSelector.d.ts.map +1 -1
  417. package/dist/types/window/CustomElementRegistryImp.d.ts +18 -0
  418. package/dist/types/window/CustomElementRegistryImp.d.ts.map +1 -0
  419. package/dist/types/window/Window.d.ts +0 -619
  420. package/dist/types/window/Window.d.ts.map +1 -1
  421. package/dist/types/window/WindowBase.d.ts +253 -286
  422. package/dist/types/window/WindowBase.d.ts.map +1 -1
  423. package/dist/types/window/index.d.ts +0 -1
  424. package/dist/types/window/index.d.ts.map +1 -1
  425. package/dist/umd-bundle/dooboostore-dom-parser.umd.js +3460 -3562
  426. package/dist/umd-bundle/dooboostore-dom-parser.umd.js.map +4 -4
  427. package/package.json +1 -1
  428. package/src/DomParser.ts +28 -20
  429. package/src/factory/ElementFactory.ts +79 -53
  430. package/src/index.ts +11 -10
  431. package/src/node/CharacterData.ts +0 -2
  432. package/src/node/ChildNode.ts +42 -42
  433. package/src/node/ChildNodeBase.ts +60 -39
  434. package/src/node/Comment.ts +60 -60
  435. package/src/node/Document.ts +129 -882
  436. package/src/node/DocumentBase.ts +371 -467
  437. package/src/node/DocumentFragment.ts +38 -44
  438. package/src/node/DocumentFragmentBase.ts +4 -9
  439. package/src/node/Node.ts +231 -224
  440. package/src/node/NodeBase.ts +469 -443
  441. package/src/node/NodeFilter.ts +50 -0
  442. package/src/node/NodeIterator.ts +117 -172
  443. package/src/node/ParentNode.ts +93 -93
  444. package/src/node/ParentNodeBase.ts +7 -10
  445. package/src/node/ShadowRootBase.ts +87 -0
  446. package/src/node/Text.ts +30 -30
  447. package/src/node/TextBase.ts +92 -94
  448. package/src/node/TreeWalker.ts +280 -0
  449. package/src/node/collection/{HTMLCollection.ts → HTMLCollectionImp.ts} +3 -2
  450. package/src/node/collection/HTMLCollectionOfImp.ts +12 -0
  451. package/src/node/collection/NodeList.ts +1 -1
  452. package/src/node/collection/{NodeListOf.ts → NodeListOfImp.ts} +3 -3
  453. package/src/node/collection/StylePropertyMapImpl.ts +60 -0
  454. package/src/node/collection/index.ts +3 -3
  455. package/src/node/elements/Element.ts +212 -772
  456. package/src/node/elements/ElementBase.ts +840 -1204
  457. package/src/node/elements/HTMLAreaElement.ts +0 -1
  458. package/src/node/elements/HTMLAudioElement.ts +10 -0
  459. package/src/node/elements/HTMLButtonElement.ts +63 -63
  460. package/src/node/elements/HTMLDListElement.ts +2 -0
  461. package/src/node/elements/HTMLDataElement.ts +6 -0
  462. package/src/node/elements/HTMLDataListElement.ts +2 -0
  463. package/src/node/elements/HTMLDetailsElement.ts +2 -0
  464. package/src/node/elements/HTMLDialogElement.ts +2 -0
  465. package/src/node/elements/HTMLElement.ts +2 -137
  466. package/src/node/elements/HTMLElementBase.ts +466 -355
  467. package/src/node/elements/HTMLEmbedElement.ts +0 -1
  468. package/src/node/elements/HTMLFieldSetElement.ts +2 -0
  469. package/src/node/elements/HTMLHRElement.ts +2 -0
  470. package/src/node/elements/HTMLIFrameElement.ts +2 -0
  471. package/src/node/elements/HTMLLabelElement.ts +2 -0
  472. package/src/node/elements/HTMLLegendElement.ts +2 -0
  473. package/src/node/elements/HTMLMapElement.ts +2 -0
  474. package/src/node/elements/HTMLMeterElement.ts +2 -0
  475. package/src/node/elements/HTMLModElement.ts +2 -0
  476. package/src/node/elements/HTMLObjectElement.ts +2 -0
  477. package/src/node/elements/HTMLOptGroupElement.ts +2 -0
  478. package/src/node/elements/HTMLOptionElement.ts +2 -0
  479. package/src/node/elements/HTMLOutputElement.ts +2 -0
  480. package/src/node/elements/HTMLParamElement.ts +2 -0
  481. package/src/node/elements/HTMLPictureElement.ts +2 -0
  482. package/src/node/elements/HTMLPreElement.ts +2 -0
  483. package/src/node/elements/HTMLProgressElement.ts +2 -0
  484. package/src/node/elements/HTMLQuoteElement.ts +2 -0
  485. package/src/node/elements/HTMLSelectElement.ts +2 -0
  486. package/src/node/elements/HTMLSlotElement.ts +2 -0
  487. package/src/node/elements/HTMLSourceElement.ts +2 -0
  488. package/src/node/elements/HTMLTableElement.ts +3 -7
  489. package/src/node/elements/HTMLTbodyElement.ts +2 -3
  490. package/src/node/elements/HTMLTdElement.ts +1 -1
  491. package/src/node/elements/HTMLTemplateElement.ts +3 -6
  492. package/src/node/elements/HTMLTextAreaElement.ts +2 -0
  493. package/src/node/elements/HTMLTfootElement.ts +2 -3
  494. package/src/node/elements/HTMLTheadElement.ts +2 -3
  495. package/src/node/elements/HTMLTimeElement.ts +2 -0
  496. package/src/node/elements/HTMLTrElement.ts +3 -4
  497. package/src/node/elements/HTMLTrackElement.ts +2 -0
  498. package/src/node/elements/HTMLVideoElement.ts +10 -0
  499. package/src/node/elements/index.ts +226 -149
  500. package/src/node/index.ts +8 -8
  501. package/src/utils/CSSSelector.ts +0 -1
  502. package/src/window/CustomElementRegistryImp.ts +120 -0
  503. package/src/window/Window.ts +716 -715
  504. package/src/window/WindowBase.ts +482 -847
  505. package/src/window/index.ts +0 -1
  506. package/tsconfig.json +1 -0
  507. package/dist/cjs/node/collection/HTMLCollection.js.map +0 -7
  508. package/dist/cjs/node/collection/HTMLCollectionOf.js.map +0 -7
  509. package/dist/cjs/node/collection/NodeListOf.js.map +0 -7
  510. package/dist/esm/node/collection/HTMLCollection.js.map +0 -7
  511. package/dist/esm/node/collection/HTMLCollectionOf.js +0 -17
  512. package/dist/esm/node/collection/HTMLCollectionOf.js.map +0 -7
  513. package/dist/esm/node/collection/NodeListOf.js.map +0 -7
  514. package/dist/types/node/collection/HTMLCollection.d.ts.map +0 -1
  515. package/dist/types/node/collection/HTMLCollectionOf.d.ts +0 -14
  516. package/dist/types/node/collection/HTMLCollectionOf.d.ts.map +0 -1
  517. package/dist/types/node/collection/NodeListOf.d.ts.map +0 -1
  518. package/src/node/collection/HTMLCollectionOf.ts +0 -26
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/node/Node.ts", "../../src/node/collection/NodeList.ts", "../../src/node/collection/NodeListOf.ts", "../../src/node/NodeBase.ts", "../../src/node/ChildNodeBase.ts", "../../src/node/TextBase.ts", "../../src/node/Comment.ts", "../../src/node/collection/HTMLCollection.ts", "../../src/utils/CSSSelector.ts", "../../src/node/ParentNodeBase.ts", "../../src/node/DocumentFragmentBase.ts", "../../src/node/collection/HTMLCollectionOf.ts", "../../src/node/collection/index.ts", "../../src/node/elements/ElementBase.ts", "../../src/node/elements/HTMLElementBase.ts", "../../src/node/elements/HTMLGenericElement.ts", "../../src/node/elements/HTMLAnchorElement.ts", "../../src/node/elements/HTMLBodyElement.ts", "../../src/node/elements/HTMLDivElement.ts", "../../src/node/elements/HTMLSpanElement.ts", "../../src/node/elements/HTMLPElement.ts", "../../src/node/elements/HTMLImgElement.ts", "../../src/node/elements/HTMLButtonElement.ts", "../../src/node/elements/HTMLCanvasElement.ts", "../../src/node/elements/HTMLInputElement.ts", "../../src/node/elements/HTMLH1Element.ts", "../../src/node/elements/HTMLHeadElement.ts", "../../src/node/elements/HTMLHtmlElement.ts", "../../src/node/elements/HTMLTitleElement.ts", "../../src/node/elements/HTMLLinkElement.ts", "../../src/node/elements/HTMLScriptElement.ts", "../../src/node/elements/HTMLStyleElement.ts", "../../src/node/elements/HTMLFormElement.ts", "../../src/node/elements/HTMLTableElement.ts", "../../src/node/elements/HTMLUListElement.ts", "../../src/node/elements/HTMLOListElement.ts", "../../src/node/elements/HTMLLIElement.ts", "../../src/node/elements/SVGElement.ts", "../../src/node/elements/SVGCircleElement.ts", "../../src/node/elements/SVGRectElement.ts", "../../src/node/elements/HTMLMetaElement.ts", "../../src/node/elements/HTMLTemplateElement.ts", "../../src/node/elements/HTMLTheadElement.ts", "../../src/node/elements/HTMLTfootElement.ts", "../../src/node/elements/HTMLTrElement.ts", "../../src/node/elements/HTMLTdElement.ts", "../../src/node/elements/HTMLThElement.ts", "../../src/node/elements/HTMLCaptionElement.ts", "../../src/node/elements/HTMLTbodyElement.ts", "../../src/node/elements/HTMLEmbedElement.ts", "../../src/node/elements/HTMLAreaElement.ts", "../../src/node/elements/HTMLBaseElement.ts", "../../src/node/elements/MathMLElement.ts", "../../src/node/elements/index.ts", "../../src/factory/ElementFactory.ts", "../../src/index.ts", "../../src/DomParser.ts", "../../src/node/DocumentBase.ts", "../../src/factory/index.ts", "../../src/node/NodeIterator.ts", "../../src/window/WindowBase.ts"],
4
- "sourcesContent": ["import { type NodeListOf } from './collection/NodeListOf';\nimport { NodeList } from './collection/NodeList';\nimport { type ChildNode } from './ChildNode';\nimport { type ParentNode } from './ParentNode';\nimport { type Document } from './Document';\nimport { type HTMLElement } from './elements/HTMLElement';\nimport { type GetRootNodeOptions } from './GetRootNodeOptions';\n// Node \uC0C1\uC218\uB4E4\uC744 \uBCC4\uB3C4\uB85C export\nexport const ELEMENT_NODE = 1 as const;\nexport const ATTRIBUTE_NODE = 2 as const;\nexport const TEXT_NODE = 3 as const;\nexport const CDATA_SECTION_NODE = 4 as const;\nexport const ENTITY_REFERENCE_NODE = 5 as const;\nexport const ENTITY_NODE = 6 as const;\nexport const PROCESSING_INSTRUCTION_NODE = 7 as const;\nexport const COMMENT_NODE = 8 as const;\nexport const DOCUMENT_NODE = 9 as const;\nexport const DOCUMENT_TYPE_NODE = 10 as const;\nexport const DOCUMENT_FRAGMENT_NODE = 11 as const;\nexport const NOTATION_NODE = 12 as const;\nexport const DOCUMENT_POSITION_DISCONNECTED = 0x01 as const;\nexport const DOCUMENT_POSITION_PRECEDING = 0x02 as const;\nexport const DOCUMENT_POSITION_FOLLOWING = 0x04 as const;\nexport const DOCUMENT_POSITION_CONTAINS = 0x08 as const;\nexport const DOCUMENT_POSITION_CONTAINED_BY = 0x10 as const;\nexport const DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20 as const;\n\n// Forward declarations for circular dependencies\n// interface ChildNode extends Node {}\n// interface ParentNode extends Node {}\n// interface Document extends Node {}\n// interface HTMLElement {}\n// interface GetRootNodeOptions {\n// composed?: boolean;\n// }\n\nexport interface Node {\n /** node is an element. */\n readonly ELEMENT_NODE: 1;\n readonly ATTRIBUTE_NODE: 2;\n /** node is a Text node. */\n readonly TEXT_NODE: 3;\n /** node is a CDATASection node. */\n readonly CDATA_SECTION_NODE: 4;\n readonly ENTITY_REFERENCE_NODE: 5;\n readonly ENTITY_NODE: 6;\n /** node is a ProcessingInstruction node. */\n readonly PROCESSING_INSTRUCTION_NODE: 7;\n /** node is a Comment node. */\n readonly COMMENT_NODE: 8;\n /** node is a document. */\n readonly DOCUMENT_NODE: 9;\n /** node is a doctype. */\n readonly DOCUMENT_TYPE_NODE: 10;\n /** node is a DocumentFragment node. */\n readonly DOCUMENT_FRAGMENT_NODE: 11;\n readonly NOTATION_NODE: 12;\n /** Set when node and other are not in the same tree. */\n readonly DOCUMENT_POSITION_DISCONNECTED: 0x01;\n /** Set when other is preceding node. */\n readonly DOCUMENT_POSITION_PRECEDING: 0x02;\n /** Set when other is following node. */\n readonly DOCUMENT_POSITION_FOLLOWING: 0x04;\n /** Set when other is an ancestor of node. */\n readonly DOCUMENT_POSITION_CONTAINS: 0x08;\n /** Set when other is a descendant of node. */\n readonly DOCUMENT_POSITION_CONTAINED_BY: 0x10;\n readonly DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20;\n\n\n /**\n * The read-only **`baseURI`** property of the Node interface returns the absolute base URL of the document containing the node.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/baseURI)\n */\n readonly baseURI: string;\n /**\n * The read-only **`childNodes`** property of the Node interface returns a live the first child node is assigned index `0`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/childNodes)\n */\n readonly childNodes: NodeListOf<ChildNode>;\n /**\n * The read-only **`firstChild`** property of the Node interface returns the node's first child in the tree, or `null` if the node has no children.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/firstChild)\n */\n readonly firstChild: ChildNode | null;\n /**\n * The read-only **`isConnected`** property of the Node interface returns a boolean indicating whether the node is connected (directly or indirectly) to a Document object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/isConnected)\n */\n readonly isConnected: boolean;\n /**\n * The read-only **`lastChild`** property of the Node interface returns the last child of the node, or `null` if there are no child nodes.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/lastChild)\n */\n readonly lastChild: ChildNode | null;\n /**\n * The read-only **`nextSibling`** property of the Node interface returns the node immediately following the specified one in their parent's Node.childNodes, or returns `null` if the specified node is the last child in the parent element.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/nextSibling)\n */\n readonly nextSibling: ChildNode | null;\n /**\n * The read-only **`nodeName`** property of Node returns the name of the current node as a string.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/nodeName)\n */\n readonly nodeName: string;\n /**\n * The read-only **`nodeType`** property of a Node interface is an integer that identifies what the node is.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/nodeType)\n */\n readonly nodeType: number;\n /**\n * The **`nodeValue`** property of the Node interface returns or sets the value of the current node.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/nodeValue)\n */\n nodeValue: string | null;\n /**\n * The read-only **`ownerDocument`** property of the Node interface returns the top-level document object of the node.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/ownerDocument)\n */\n readonly ownerDocument: Document | null;\n /**\n * The read-only **`parentElement`** property of Node interface returns the DOM node's parent Element, or `null` if the node either has no parent, or its parent isn't a DOM Element.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/parentElement)\n */\n readonly parentElement: HTMLElement | null;\n /**\n * The read-only **`parentNode`** property of the Node interface returns the parent of the specified node in the DOM tree.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/parentNode)\n */\n readonly parentNode: ParentNode | null;\n /**\n * The read-only **`previousSibling`** property of the Node interface returns the node immediately preceding the specified one in its parent's or `null` if the specified node is the first in that list.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/previousSibling)\n */\n readonly previousSibling: ChildNode | null;\n /**\n * The **`textContent`** property of the Node interface represents the text content of the node and its descendants.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/textContent)\n */\n textContent: string | null;\n /**\n * The **`appendChild()`** method of the Node interface adds a node to the end of the list of children of a specified parent node.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/appendChild)\n */\n appendChild<T extends Node>(node: T): T;\n /**\n * The **`cloneNode()`** method of the Node interface returns a duplicate of the node on which this method was called.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/cloneNode)\n */\n cloneNode(subtree?: boolean): Node;\n /**\n * The **`compareDocumentPosition()`** method of the Node interface reports the position of its argument node relative to the node on which it is called.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/compareDocumentPosition)\n */\n compareDocumentPosition(other: Node): number;\n /**\n * The **`contains()`** method of the Node interface returns a boolean value indicating whether a node is a descendant of a given node, that is the node itself, one of its direct children (Node.childNodes), one of the children's direct children, and so on.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/contains)\n */\n contains(other: Node | null): boolean;\n /**\n * The **`getRootNode()`** method of the Node interface returns the context object's root, which optionally includes the shadow root if it is available.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/getRootNode)\n */\n getRootNode(options?: GetRootNodeOptions): Node;\n /**\n * The **`hasChildNodes()`** method of the Node interface returns a boolean value indicating whether the given Node has child nodes or not.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/hasChildNodes)\n */\n hasChildNodes(): boolean;\n /**\n * The **`insertBefore()`** method of the Node interface inserts a node before a _reference node_ as a child of a specified _parent node_.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/insertBefore)\n */\n insertBefore<T extends Node>(node: T, child: Node | null): T;\n /**\n * The **`isDefaultNamespace()`** method of the Node interface accepts a namespace URI as an argument.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/isDefaultNamespace)\n */\n isDefaultNamespace(namespace: string | null): boolean;\n /**\n * The **`isEqualNode()`** method of the Node interface tests whether two nodes are equal.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/isEqualNode)\n */\n isEqualNode(otherNode: Node | null): boolean;\n /**\n * The **`isSameNode()`** method of the Node interface is a legacy alias the for the `===` strict equality operator.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/isSameNode)\n */\n isSameNode(otherNode: Node | null): boolean;\n /**\n * The **`lookupNamespaceURI()`** method of the Node interface takes a prefix as parameter and returns the namespace URI associated with it on the given node if found (and `null` if not).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/lookupNamespaceURI)\n */\n lookupNamespaceURI(prefix: string | null): string | null;\n /**\n * The **`lookupPrefix()`** method of the Node interface returns a string containing the prefix for a given namespace URI, if present, and `null` if not.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/lookupPrefix)\n */\n lookupPrefix(namespace: string | null): string | null;\n /**\n * The **`normalize()`** method of the Node interface puts the specified node and all of its sub-tree into a _normalized_ form.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/normalize)\n */\n normalize(): void;\n /**\n * The **`removeChild()`** method of the Node interface removes a child node from the DOM and returns the removed node.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/removeChild)\n */\n removeChild<T extends Node>(child: T): T;\n /**\n * The **`replaceChild()`** method of the Node interface replaces a child node within the given (parent) node.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/replaceChild)\n */\n replaceChild<T extends Node>(node: Node, child: T): T;\n}", "import { Node } from '../Node';\n\n/**\n * **`NodeList`** objects are collections of nodes, usually returned by properties such as Node.childNodes and methods such as document.querySelectorAll().\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList)\n */\nexport class NodeList<T extends Node = Node> {\n // \uC778\uB371\uC2A4 \uC2DC\uADF8\uB2C8\uCC98 \uC120\uC5B8\n [index: number]: T;\n \n private _nodes: T[] = [];\n\n constructor(nodes: T[] = []) {\n this._nodes = [...nodes];\n \n // \uC778\uB371\uC2A4 \uC2DC\uADF8\uB2C8\uCC98 \uAD6C\uD604\uC744 \uC704\uD55C \uD504\uB85D\uC2DC \uC124\uC815\n return new Proxy(this, {\n get(target, prop) {\n // \uC22B\uC790 \uC778\uB371\uC2A4\uC778 \uACBD\uC6B0\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n const index = parseInt(prop, 10);\n return target._nodes[index] || null;\n }\n // \uC77C\uBC18 \uD504\uB85C\uD37C\uD2F0/\uBA54\uC11C\uB4DC\uC778 \uACBD\uC6B0\n return (target as any)[prop];\n },\n \n set(target, prop, value) {\n // \uC22B\uC790 \uC778\uB371\uC2A4 \uC124\uC815 \uBC29\uC9C0 (\uC77D\uAE30 \uC804\uC6A9)\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n return false;\n }\n (target as any)[prop] = value;\n return true;\n },\n \n has(target, prop) {\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n const index = parseInt(prop, 10);\n return index >= 0 && index < target._nodes.length;\n }\n return prop in target;\n }\n });\n }\n\n /**\n * The **`NodeList.length`** property returns the number of items in a NodeList.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList/length)\n */\n get length(): number {\n return this._nodes.length;\n }\n\n /**\n * Returns a node from a `NodeList` by index.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList/item)\n */\n item(index: number): T | null {\n if (index < 0 || index >= this._nodes.length) {\n return null;\n }\n return this._nodes[index];\n }\n\n /**\n * Executes a provided function once for each `Node` value in the `NodeList`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList/forEach)\n */\n forEach(callbackfn: (value: T, key: number, parent: NodeList) => void, thisArg?: any): void {\n this._nodes.forEach((node, index) => {\n callbackfn.call(thisArg, node, index, this);\n });\n }\n\n // \uB0B4\uBD80\uC801\uC73C\uB85C \uB178\uB4DC \uCD94\uAC00/\uC81C\uAC70\uB97C \uC704\uD55C \uBA54\uC11C\uB4DC\uB4E4 (DOM \uC870\uC791 \uC2DC \uC0AC\uC6A9)\n _addNode(node: T): void {\n this._nodes.push(node);\n }\n\n _removeNode(node: T): boolean {\n const index = this._nodes.indexOf(node);\n if (index !== -1) {\n this._nodes.splice(index, 1);\n return true;\n }\n return false;\n }\n\n _insertNode(index: number, node: T): void {\n this._nodes.splice(index, 0, node);\n }\n\n // Iterator \uC9C0\uC6D0 (for...of \uC0AC\uC6A9 \uAC00\uB2A5)\n *[Symbol.iterator](): Iterator<T> {\n for (const node of this._nodes) {\n yield node;\n }\n }\n\n /**\n * Returns an iterator allowing to go through all keys contained in this object.\n * The keys are unsigned integer (index).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList/keys)\n */\n *keys(): IterableIterator<number> {\n for (let i = 0; i < this._nodes.length; i++) {\n yield i;\n }\n }\n\n /**\n * Returns an iterator allowing to go through all values contained in this object.\n * The values are Node objects.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList/values)\n */\n *values(): IterableIterator<T> {\n for (const node of this._nodes) {\n yield node;\n }\n }\n\n /**\n * Returns an iterator allowing to go through all key/value pairs contained in this object.\n * The key is an unsigned integer (index) and the value is a Node object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList/entries)\n */\n *entries(): IterableIterator<[number, T]> {\n for (let i = 0; i < this._nodes.length; i++) {\n yield [i, this._nodes[i]];\n }\n }\n}", "import { Node } from '../Node';\nimport { NodeList } from './NodeList';\n\n/**\n * **`NodeListOf<TNode>`** is a generic version of NodeList that provides type safety for specific node types.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList)\n */\nexport class NodeListOf<TNode extends Node> extends NodeList<TNode> {\n // \uC778\uB371\uC2A4 \uC2DC\uADF8\uB2C8\uCC98\uB97C \uBA85\uC2DC\uC801\uC73C\uB85C \uC120\uC5B8\uD558\uC5EC \uD0C0\uC785 \uCD94\uB860 \uC9C0\uC6D0\n [index: number]: TNode;\n \n constructor(nodes: TNode[] = []) {\n // \uBD80\uBAA8 NodeList\uC758 \uC0DD\uC131\uC790\uB97C \uD638\uCD9C\uD558\uBA74\uC11C \uD0C0\uC785\uC774 \uC9C0\uC815\uB41C \uB178\uB4DC\uB4E4\uC744 \uC804\uB2EC\n super(nodes as TNode[]);\n }\n\n // \uD0C0\uC785 \uC548\uC804\uC131\uC744 \uC704\uD55C \uC624\uBC84\uB77C\uC774\uB4DC - \uB2E8\uC21C \uCE90\uC2A4\uD305\uB9CC\n item(index: number): TNode | null {\n return super.item(index) as TNode | null;\n }\n\n forEach(callbackfn: (value: TNode, key: number, parent: NodeListOf<TNode>) => void, thisArg?: any): void {\n super.forEach((node, index) => {\n callbackfn.call(thisArg, node as TNode, index, this);\n }, thisArg);\n }\n}", "import { Node,\n ELEMENT_NODE ,\n ATTRIBUTE_NODE ,\n TEXT_NODE ,\n CDATA_SECTION_NODE ,\n ENTITY_REFERENCE_NODE ,\n ENTITY_NODE ,\n PROCESSING_INSTRUCTION_NODE ,\n COMMENT_NODE ,\n DOCUMENT_NODE ,\n DOCUMENT_TYPE_NODE ,\n DOCUMENT_FRAGMENT_NODE ,\n NOTATION_NODE ,\n DOCUMENT_POSITION_DISCONNECTED ,\n DOCUMENT_POSITION_PRECEDING ,\n DOCUMENT_POSITION_FOLLOWING ,\n DOCUMENT_POSITION_CONTAINS ,\n DOCUMENT_POSITION_CONTAINED_BY ,\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n} from './Node';\nimport { ChildNode } from './ChildNode';\nimport { ParentNode } from './ParentNode';\nimport { NodeListOf } from './collection/NodeListOf';\nimport { GetRootNodeOptions } from './GetRootNodeOptions';\nimport { HTMLElement } from './elements/HTMLElement';\nimport { Document } from './Document';\nimport { Text } from './Text';\n\n/**\n * Base implementation of the Node interface\n */\nexport abstract class NodeBase implements Node {\n // Node constants as instance properties\n static readonly ELEMENT_NODE = ELEMENT_NODE;\n static readonly ATTRIBUTE_NODE = ATTRIBUTE_NODE;\n static readonly TEXT_NODE = TEXT_NODE;\n static readonly CDATA_SECTION_NODE = CDATA_SECTION_NODE;\n static readonly ENTITY_REFERENCE_NODE = ENTITY_REFERENCE_NODE;\n static readonly ENTITY_NODE = ENTITY_NODE;\n static readonly PROCESSING_INSTRUCTION_NODE = PROCESSING_INSTRUCTION_NODE;\n static readonly COMMENT_NODE = COMMENT_NODE;\n static readonly DOCUMENT_NODE = DOCUMENT_NODE;\n static readonly DOCUMENT_TYPE_NODE = DOCUMENT_TYPE_NODE;\n static readonly DOCUMENT_FRAGMENT_NODE = DOCUMENT_FRAGMENT_NODE;\n static readonly NOTATION_NODE = NOTATION_NODE;\n static readonly DOCUMENT_POSITION_DISCONNECTED = DOCUMENT_POSITION_DISCONNECTED;\n static readonly DOCUMENT_POSITION_PRECEDING = DOCUMENT_POSITION_PRECEDING;\n static readonly DOCUMENT_POSITION_FOLLOWING = DOCUMENT_POSITION_FOLLOWING;\n static readonly DOCUMENT_POSITION_CONTAINS = DOCUMENT_POSITION_CONTAINS;\n static readonly DOCUMENT_POSITION_CONTAINED_BY = DOCUMENT_POSITION_CONTAINED_BY;\n static readonly DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n\n ELEMENT_NODE: typeof ELEMENT_NODE;\n ATTRIBUTE_NODE: typeof ATTRIBUTE_NODE;\n TEXT_NODE: typeof TEXT_NODE;\n CDATA_SECTION_NODE: typeof CDATA_SECTION_NODE;\n ENTITY_REFERENCE_NODE: typeof ENTITY_REFERENCE_NODE;\n ENTITY_NODE: typeof ENTITY_NODE;\n PROCESSING_INSTRUCTION_NODE: typeof PROCESSING_INSTRUCTION_NODE;\n COMMENT_NODE: typeof COMMENT_NODE;\n DOCUMENT_NODE: typeof DOCUMENT_NODE;\n DOCUMENT_TYPE_NODE: typeof DOCUMENT_TYPE_NODE;\n DOCUMENT_FRAGMENT_NODE: typeof DOCUMENT_FRAGMENT_NODE;\n NOTATION_NODE: typeof NOTATION_NODE;\n DOCUMENT_POSITION_DISCONNECTED: typeof DOCUMENT_POSITION_DISCONNECTED;\n DOCUMENT_POSITION_PRECEDING: typeof DOCUMENT_POSITION_PRECEDING;\n DOCUMENT_POSITION_FOLLOWING: typeof DOCUMENT_POSITION_FOLLOWING;\n DOCUMENT_POSITION_CONTAINS: typeof DOCUMENT_POSITION_CONTAINS;\n DOCUMENT_POSITION_CONTAINED_BY: typeof DOCUMENT_POSITION_CONTAINED_BY;\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: typeof DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n // Internal properties (for Base class implementations)\n protected _childNodesInternal: NodeBase[] = [];\n public _parentNodeInternal: NodeBase | null = null; // Internal parent reference\n public _ownerDocument: Document | null = null; // Made public for ChildNodeBase access\n protected _nodeValue: string | null = null;\n protected _textContent: string | null = null;\n\n constructor(\n public readonly nodeType: number,\n public readonly nodeName: string,\n ownerDocument?: Document | null\n ) {\n this._ownerDocument = ownerDocument || null;\n }\n\n\n\n // Node interface implementation\n get baseURI(): string {\n return this._ownerDocument?.URL || '';\n }\n\n // External interface - returns proper Node interface types\n get childNodes(): NodeListOf<ChildNode> {\n return new NodeListOf<ChildNode>(this._childNodesInternal as unknown as ChildNode[]);\n }\n\n get firstChild(): ChildNode | null {\n return this._childNodesInternal.length > 0 ? this._childNodesInternal[0] as unknown as ChildNode : null;\n }\n\n get lastChild(): ChildNode | null {\n const length = this._childNodesInternal.length;\n return length > 0 ? this._childNodesInternal[length - 1] as unknown as ChildNode : null;\n }\n\n get nextSibling(): ChildNode | null {\n if (!this._parentNodeInternal) return null;\n const siblings = this._parentNodeInternal._childNodesInternal;\n const index = this._findIndexInParent();\n return index !== -1 && index < siblings.length - 1 ? siblings[index + 1] as unknown as ChildNode : null;\n }\n\n get previousSibling(): ChildNode | null {\n if (!this._parentNodeInternal) return null;\n const siblings = this._parentNodeInternal._childNodesInternal;\n const index = this._findIndexInParent();\n return index > 0 ? siblings[index - 1] as unknown as ChildNode : null;\n }\n\n get parentNode(): ParentNode | null {\n return this._parentNodeInternal as unknown as ParentNode | null;\n }\n\n get parentElement(): HTMLElement | null {\n return this._parentNodeInternal && this._parentNodeInternal.nodeType === ELEMENT_NODE\n ? this._parentNodeInternal as unknown as HTMLElement\n : null;\n }\n\n get ownerDocument(): Document | null {\n return this._ownerDocument;\n }\n\n get isConnected(): boolean {\n let node: Node | null = this;\n while (node) {\n if (node.nodeType === DOCUMENT_NODE) return true;\n node = node.parentNode;\n }\n return false;\n }\n\n get nodeValue(): string | null {\n return this._nodeValue;\n }\n\n set nodeValue(value: string | null) {\n this._nodeValue = value;\n }\n\n get textContent(): string | null {\n if (this.nodeType === TEXT_NODE || this.nodeType === COMMENT_NODE) {\n // For text nodes, decode HTML entities to return original text\n return this._nodeValue ? this.decodeHTMLEntities(this._nodeValue) : this._nodeValue;\n }\n\n // For elements, return the stored original text content if available\n if (this._textContent !== undefined && this._textContent !== null) {\n return this._textContent;\n }\n\n // Fallback: collect from children (for HTML parsed content)\n let text = '';\n for (const child of this._childNodesInternal) {\n const childText = child.textContent;\n if (childText !== null && childText !== undefined) {\n text += childText;\n }\n }\n return text.length > 0 ? text : null;\n }\n\n set textContent(value: string | null) {\n // Convert to string (including null and undefined)\n const stringValue = String(value);\n // Store original text content\n this._textContent = stringValue;\n // Clear all children and add a single text node\n this._childNodesInternal = [];\n if (stringValue) {\n // Create text node implementation with escaped value for innerHTML\n const escapedValue = this.escapeHTMLEntities(stringValue);\n const { TextBase } = require('./TextBase');\n const textNode = new TextBase(escapedValue, this._ownerDocument);\n this._childNodesInternal.push(textNode);\n textNode._parentNodeInternal = this;\n }\n }\n\n /**\n * Escape HTML entities in a string to prevent XSS\n */\n protected escapeHTMLEntities(str: string): string {\n const entityMap: { [key: string]: string } = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n\n return str.replace(/[&<>\"']/g, (char) => {\n return entityMap[char] || char;\n });\n }\n\n /**\n * Decode HTML entities in a string\n */\n protected 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 // Node methods - external interface uses Node types, internal uses NodeBase\n appendChild<T extends Node>(node: T): T {\n const nodeBase = node as any as NodeBase; // Internal cast\n\n // Special handling for DocumentFragment\n if (nodeBase.nodeType === DOCUMENT_FRAGMENT_NODE) {\n // When appending a DocumentFragment, move its children instead\n const fragment = nodeBase;\n \n // Move all children from fragment to this node\n while (fragment._childNodesInternal.length > 0) {\n const child = fragment._childNodesInternal[0];\n if (child) {\n fragment.removeChild(child);\n this.appendChild(child);\n }\n }\n \n return node;\n }\n\n if (nodeBase._parentNodeInternal) {\n nodeBase._parentNodeInternal.removeChild(nodeBase);\n }\n\n this._childNodesInternal.push(nodeBase);\n nodeBase._parentNodeInternal = this;\n nodeBase._ownerDocument = this._ownerDocument;\n\n return node;\n }\n\n removeChild<T extends Node>(child: T): T {\n const childBase = child as any as NodeBase; // Internal cast\n const index = this._findChildIndex(childBase);\n if (index === -1) {\n throw new Error('Node not found');\n }\n\n this._childNodesInternal.splice(index, 1);\n childBase._parentNodeInternal = null;\n\n return child;\n }\n\n insertBefore<T extends Node>(node: T, child: Node | null): T {\n if (child === null) {\n return this.appendChild(node);\n }\n\n const nodeBase = node as any as NodeBase; // Internal cast\n const childBase = child as any as NodeBase; // Internal cast\n const index = this._findChildIndex(childBase);\n if (index === -1) {\n throw new Error('Reference node not found');\n }\n\n // Handle DocumentFragment - move all its children\n if (nodeBase.nodeType === DOCUMENT_FRAGMENT_NODE) {\n const fragment = nodeBase as any;\n const children = [...fragment._childNodesInternal]; // Copy array to avoid modification during iteration\n \n let insertIndex = index;\n for (const fragmentChild of children) {\n // Remove from fragment\n fragment.removeChild(fragmentChild);\n // Insert at the current insert position\n this._childNodesInternal.splice(insertIndex, 0, fragmentChild);\n fragmentChild._parentNodeInternal = this;\n fragmentChild._ownerDocument = this._ownerDocument;\n // Increment insert index for next child to maintain order\n insertIndex++;\n }\n \n return node;\n }\n\n if (nodeBase._parentNodeInternal) {\n nodeBase._parentNodeInternal.removeChild(nodeBase);\n }\n\n this._childNodesInternal.splice(index, 0, nodeBase);\n nodeBase._parentNodeInternal = this;\n nodeBase._ownerDocument = this._ownerDocument;\n\n return node;\n }\n\n replaceChild<T extends Node>(node: Node, child: T): T {\n this.insertBefore(node, child);\n this.removeChild(child);\n return child;\n }\n\n cloneNode(deep?: boolean): Node {\n // Basic clone implementation - would need to be overridden by specific node types\n throw new Error('cloneNode must be implemented by subclasses');\n }\n\n hasChildNodes(): boolean {\n return this._childNodesInternal.length > 0;\n }\n\n contains(other: Node | null): boolean {\n if (!other || other === this) return other === this;\n\n let node: Node | null = other;\n while (node) {\n if (node.parentNode === this as unknown as ParentNode) return true;\n node = node.parentNode;\n }\n return false;\n }\n\n compareDocumentPosition(other: Node): number {\n if (this === other) return 0;\n \n const otherBase = other as any as NodeBase;\n \n // Check if nodes are disconnected (not in same tree)\n const thisRoot = this.getRootNode();\n const otherRoot = otherBase.getRootNode();\n if (thisRoot !== otherRoot) {\n return DOCUMENT_POSITION_DISCONNECTED;\n }\n \n // Check containment relationships\n if (this.contains(other)) return DOCUMENT_POSITION_CONTAINED_BY;\n if (other.contains(this)) return DOCUMENT_POSITION_CONTAINS;\n \n // Find document order by traversing up to common ancestor\n const thisAncestors = this._getAncestors();\n const otherAncestors = otherBase._getAncestors();\n \n // Find common ancestor\n let commonAncestor: NodeBase | null = null;\n for (let i = 0; i < thisAncestors.length; i++) {\n if (otherAncestors.includes(thisAncestors[i])) {\n commonAncestor = thisAncestors[i];\n break;\n }\n }\n \n if (!commonAncestor) {\n return DOCUMENT_POSITION_DISCONNECTED;\n }\n \n // Compare positions within common ancestor\n const thisChild = this._getChildInAncestor(commonAncestor);\n const otherChild = otherBase._getChildInAncestor(commonAncestor);\n \n if (thisChild && otherChild && commonAncestor._childNodesInternal) {\n const thisIndex = commonAncestor._childNodesInternal.indexOf(thisChild);\n const otherIndex = commonAncestor._childNodesInternal.indexOf(otherChild);\n \n if (thisIndex < otherIndex) {\n return DOCUMENT_POSITION_FOLLOWING;\n } else if (thisIndex > otherIndex) {\n return DOCUMENT_POSITION_PRECEDING;\n }\n }\n \n return DOCUMENT_POSITION_DISCONNECTED;\n }\n\n getRootNode(options?: GetRootNodeOptions): Node {\n let root: Node = this;\n while (root.parentNode) {\n root = root.parentNode;\n }\n return root;\n }\n\n isEqualNode(otherNode: Node | null): boolean {\n if (!otherNode) return false;\n if (this === otherNode) return true;\n if (this.nodeType !== otherNode.nodeType) return false;\n if (this.nodeName !== otherNode.nodeName) return false;\n return true; // Simplified comparison\n }\n\n isSameNode(otherNode: Node | null): boolean {\n return this === otherNode;\n }\n\n isDefaultNamespace(namespace: string | null): boolean {\n // Simplified implementation\n return namespace === null || namespace === 'http://www.w3.org/1999/xhtml';\n }\n\n lookupNamespaceURI(prefix: string | null): string | null {\n // Simplified implementation\n if (prefix === null || prefix === '') {\n return 'http://www.w3.org/1999/xhtml';\n }\n return null;\n }\n\n lookupPrefix(namespace: string | null): string | null {\n // Simplified implementation\n return null;\n }\n\n normalize(): void {\n // Merge adjacent text nodes\n for (let i = this._childNodesInternal.length - 1; i >= 0; i--) {\n const child = this._childNodesInternal[i];\n if (child && child.nodeType === TEXT_NODE) {\n const nextSibling = child.nextSibling;\n if (nextSibling && nextSibling.nodeType === TEXT_NODE) {\n child.nodeValue = (child.nodeValue || '') + (nextSibling.nodeValue || '');\n this.removeChild(nextSibling);\n }\n }\n }\n }\n\n // Helper methods\n private _findIndexInParent(): number {\n if (!this._parentNodeInternal) return -1;\n return this._parentNodeInternal._childNodesInternal.indexOf(this);\n }\n\n private _findChildIndex(child: NodeBase): number {\n return this._childNodesInternal.indexOf(child);\n }\n\n private _getAncestors(): NodeBase[] {\n const ancestors: NodeBase[] = [];\n let current: NodeBase | null = this._parentNodeInternal;\n while (current) {\n ancestors.push(current);\n current = current._parentNodeInternal;\n }\n return ancestors;\n }\n\n private _getChildInAncestor(ancestor: NodeBase): NodeBase | null {\n let current: NodeBase = this;\n while (current._parentNodeInternal && current._parentNodeInternal !== ancestor) {\n current = current._parentNodeInternal;\n }\n return current._parentNodeInternal === ancestor ? current : null;\n }\n}", "import { NodeBase } from './NodeBase';\nimport { ChildNode } from './ChildNode';\n// import {Text} from \"./Text\";\n\n/**\n * Base implementation of the ChildNode interface\n */\nexport abstract class ChildNodeBase extends NodeBase implements ChildNode {\n \n // ChildNode interface implementation\n after(...nodes: (NodeBase | string)[]): void {\n if (!this.parentNode) return;\n \n const nextSibling = this.nextSibling;\n for (const node of nodes) {\n if (typeof node === 'string') {\n const { TextBase } = require('./TextBase');\n const textNode = new TextBase(node, this._ownerDocument);\n this.parentNode.insertBefore(textNode, nextSibling);\n } else {\n this.parentNode.insertBefore(node, nextSibling);\n }\n }\n }\n\n before(...nodes: (NodeBase | string)[]): void {\n if (!this.parentNode) return;\n \n for (const node of nodes) {\n if (typeof node === 'string') {\n const { TextBase } = require('./TextBase');\n const textNode = new TextBase(node, this._ownerDocument);\n this.parentNode.insertBefore(textNode, this);\n } else {\n this.parentNode.insertBefore(node, this);\n }\n }\n }\n\n remove(): void {\n if (this.parentNode) {\n this.parentNode.removeChild(this);\n }\n }\n\n replaceWith(...nodes: (NodeBase | string)[]): void {\n if (!this.parentNode) return;\n \n this.before(...nodes);\n this.remove();\n }\n}\n\n// TextNode is now in a separate file", "import { ChildNodeBase } from './ChildNodeBase';\nimport { TEXT_NODE } from './Node';\nimport { Text } from './Text';\n\n/**\n * The **`TextBase`** class represents a text node implementation in the DOM.\n */\nexport class TextBase extends ChildNodeBase implements Text {\n private _data: string;\n \n // Override nodeType to match Text interface\n readonly nodeType: 3 = TEXT_NODE as 3;\n readonly nodeName: '#text' = '#text';\n\n constructor(data: string, ownerDocument?: any) {\n super(TEXT_NODE, '#text', ownerDocument);\n this._data = data;\n this._nodeValue = data;\n }\n\n get data(): string {\n return this._data;\n }\n\n set data(value: string) {\n this._data = value;\n this._nodeValue = value;\n }\n\n get length(): number {\n return this._data.length;\n }\n\n get textContent(): string | null {\n // Decode HTML entities to return original text\n return this._data ? this.decodeHTMLEntities(this._data) : this._data;\n }\n\n set textContent(value: string | null) {\n this._data = value || '';\n this._nodeValue = this._data;\n }\n\n get wholeText(): string {\n // For now, just return the current text\n // In a full implementation, this would collect adjacent text nodes\n return this._data;\n }\n\n // CharacterData methods\n appendData(data: string): void {\n this._data += data;\n this._nodeValue = this._data;\n }\n\n deleteData(offset: number, count: number): void {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n const endOffset = Math.min(offset + count, this._data.length);\n this._data = this._data.slice(0, offset) + this._data.slice(endOffset);\n this._nodeValue = this._data;\n }\n\n insertData(offset: number, data: string): void {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n this._data = this._data.slice(0, offset) + data + this._data.slice(offset);\n this._nodeValue = this._data;\n }\n\n replaceData(offset: number, count: number, data: string): void {\n this.deleteData(offset, count);\n this.insertData(offset, data);\n }\n\n substringData(offset: number, count: number): string {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n const endOffset = Math.min(offset + count, this._data.length);\n return this._data.slice(offset, endOffset);\n }\n\n splitText(offset: number): Text {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n\n const newData = this._data.slice(offset);\n this._data = this._data.slice(0, offset);\n this._nodeValue = this._data;\n\n const newTextNode = new TextBase(newData, this._ownerDocument);\n\n // Insert the new text node after this one\n if (this._parentNodeInternal) {\n const nextSibling = this.nextSibling;\n this._parentNodeInternal.insertBefore(newTextNode, nextSibling);\n }\n\n return newTextNode as Text;\n }\n\n cloneNode(deep?: boolean): Text {\n return new TextBase(this._data, this._ownerDocument) as Text;\n }\n\n toString(): string {\n return this._data;\n }\n}", "import { ChildNodeBase } from './ChildNodeBase';\nimport { COMMENT_NODE } from './Node';\n\n/**\n * The **`Comment`** interface represents textual notations within markup; although it is generally not visually shown, such comments are available to be read in the source view.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Comment)\n */\n// export interface Comment {\n// readonly nodeType: typeof COMMENT_NODE;\n// readonly nodeName: '#comment';\n// data: string;\n// readonly length: number;\n// appendData(data: string): void;\n// deleteData(offset: number, count: number): void;\n// insertData(offset: number, data: string): void;\n// replaceData(offset: number, count: number, data: string): void;\n// substringData(offset: number, count: number): string;\n// }\n\n/**\n * The **`CommentNode`** class represents a comment node in the DOM.\n */\nexport class Comment extends ChildNodeBase {\n private _data: string;\n\n constructor(data: string, ownerDocument?: any) {\n super(COMMENT_NODE, '#comment', ownerDocument);\n this._data = data;\n this._nodeValue = data;\n }\n\n get data(): string {\n return this._data;\n }\n\n set data(value: string) {\n this._data = value;\n this._nodeValue = value;\n }\n\n get length(): number {\n return this._data.length;\n }\n\n get textContent(): string | null {\n return this._data;\n }\n\n set textContent(value: string | null) {\n this._data = value || '';\n this._nodeValue = this._data;\n }\n\n // CharacterData methods\n appendData(data: string): void {\n this._data += data;\n this._nodeValue = this._data;\n }\n\n deleteData(offset: number, count: number): void {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n const endOffset = Math.min(offset + count, this._data.length);\n this._data = this._data.slice(0, offset) + this._data.slice(endOffset);\n this._nodeValue = this._data;\n }\n\n insertData(offset: number, data: string): void {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n this._data = this._data.slice(0, offset) + data + this._data.slice(offset);\n this._nodeValue = this._data;\n }\n\n replaceData(offset: number, count: number, data: string): void {\n this.deleteData(offset, count);\n this.insertData(offset, data);\n }\n\n substringData(offset: number, count: number): string {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n const endOffset = Math.min(offset + count, this._data.length);\n return this._data.slice(offset, endOffset);\n }\n\n cloneNode(deep?: boolean): Comment {\n return new Comment(this._data, this._ownerDocument);\n }\n\n toString(): string {\n return `<!--${this._data}-->`;\n }\n}", "import { Element } from '../elements/Element';\n\n/**\n * **`HTMLCollection`** represents a generic collection of HTML elements.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLCollection)\n */\nexport class HTMLCollection {\n // \uC778\uB371\uC2A4 \uC2DC\uADF8\uB2C8\uCC98 \uC120\uC5B8\n [index: number]: Element;\n \n private _elements: Element[] = [];\n\n constructor(elements: Element[] = []) {\n this._elements = [...elements];\n \n // \uC778\uB371\uC2A4 \uC2DC\uADF8\uB2C8\uCC98 \uAD6C\uD604\uC744 \uC704\uD55C \uD504\uB85D\uC2DC \uC124\uC815\n return new Proxy(this, {\n get(target, prop) {\n // \uC22B\uC790 \uC778\uB371\uC2A4\uC778 \uACBD\uC6B0\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n const index = parseInt(prop, 10);\n return target._elements[index] || null;\n }\n // \uC77C\uBC18 \uD504\uB85C\uD37C\uD2F0/\uBA54\uC11C\uB4DC\uC778 \uACBD\uC6B0\n return (target as any)[prop];\n },\n \n set(target, prop, value) {\n // \uC22B\uC790 \uC778\uB371\uC2A4 \uC124\uC815 \uBC29\uC9C0 (\uC77D\uAE30 \uC804\uC6A9)\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n return false;\n }\n (target as any)[prop] = value;\n return true;\n },\n \n has(target, prop) {\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n const index = parseInt(prop, 10);\n return index >= 0 && index < target._elements.length;\n }\n return prop in target;\n }\n });\n }\n\n /**\n * Returns the number of elements in the collection.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLCollection/length)\n */\n get length(): number {\n return this._elements.length;\n }\n\n /**\n * Returns the element at the specified index, or null if the index is out of range.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLCollection/item)\n */\n item(index: number): Element | null {\n if (index < 0 || index >= this._elements.length) {\n return null;\n }\n return this._elements[index];\n }\n\n /**\n * Returns the element with the specified ID or name, or null if no such element exists.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLCollection/namedItem)\n */\n namedItem(name: string): Element | null {\n for (const element of this._elements) {\n if (element.id === name || element.getAttribute('name') === name) {\n return element;\n }\n }\n return null;\n }\n\n /**\n * Returns an iterator for the collection.\n */\n [Symbol.iterator](): IterableIterator<Element> {\n return this._elements[Symbol.iterator]();\n }\n\n // \uB0B4\uBD80\uC801\uC73C\uB85C \uC694\uC18C \uCD94\uAC00/\uC81C\uAC70\uB97C \uC704\uD55C \uBA54\uC11C\uB4DC\uB4E4 (DOM \uC870\uC791 \uC2DC \uC0AC\uC6A9)\n _addElement(element: Element): void {\n this._elements.push(element);\n }\n\n _removeElement(element: Element): boolean {\n const index = this._elements.indexOf(element);\n if (index !== -1) {\n this._elements.splice(index, 1);\n return true;\n }\n return false;\n }\n\n _insertElement(index: number, element: Element): void {\n this._elements.splice(index, 0, element);\n }\n}\n", "import { Element } from '../node/elements/Element';\n\n/**\n * CSS Selector Parser and Matcher\n * Supports various CSS selector types including complex selectors\n */\nexport class CSSSelector {\n /**\n * Main method to check if an element matches a CSS selector\n */\n static matches(element: Element, selector: string): boolean {\n selector = selector.trim();\n\n // Handle compound selectors (e.g., \"meta[charset]\", \"div.class\", \"input#id\")\n const components = this.parseSelector(selector);\n\n // All components must match for the selector to match\n for (const component of components) {\n if (!this.matchesSingleSelector(element, component)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Parse a selector into individual components\n * e.g., \"div.user-panel[data-id='123']\" -> [\"div\", \".user-panel\", \"[data-id='123']\"]\n */\n private static parseSelector(selector: string): string[] {\n const components: string[] = [];\n let current = '';\n let inBrackets = false;\n let inQuotes = false;\n let quoteChar = '';\n\n for (let i = 0; i < selector.length; i++) {\n const char = selector[i];\n const prevChar = i > 0 ? selector[i - 1] : '';\n\n if (inQuotes) {\n current += char;\n if (char === quoteChar && prevChar !== '\\\\') {\n inQuotes = false;\n quoteChar = '';\n }\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n inQuotes = true;\n quoteChar = char;\n current += char;\n continue;\n }\n\n if (char === '[') {\n inBrackets = true;\n if (current) {\n components.push(current);\n current = '';\n }\n current += char;\n } else if (char === ']') {\n inBrackets = false;\n current += char;\n components.push(current);\n current = '';\n } else if (!inBrackets && (char === '.' || char === '#')) {\n if (current) {\n components.push(current);\n current = '';\n }\n current += char;\n } else if (!inBrackets && char === ':' && prevChar !== '\\\\') {\n // Only treat colon as pseudo-class separator if it's not escaped\n if (current) {\n components.push(current);\n current = '';\n }\n current += char;\n } else {\n current += char;\n }\n }\n\n if (current) {\n components.push(current);\n }\n\n return components;\n }\n\n /**\n * Match a single selector component against an element\n */\n private static matchesSingleSelector(element: Element, selector: string): boolean {\n selector = selector.trim();\n\n // Tag selector (e.g., \"div\", \"dr-wow\", \"wow\\\\:zz\")\n // Handle escaped colons in tag names\n const unescapedSelector = selector.replace(/\\\\:/g, ':');\n if (unescapedSelector.match(/^[a-zA-Z][a-zA-Z0-9:-]*$/)) {\n return element.tagName.toLowerCase() === unescapedSelector.toLowerCase();\n }\n\n // ID selector (e.g., \"#myId\")\n if (selector.startsWith('#')) {\n const id = selector.substring(1);\n return element.id === id;\n }\n\n // Class selector (e.g., \".myClass\")\n if (selector.startsWith('.')) {\n const className = selector.substring(1);\n return element.className.split(/\\s+/).includes(className);\n }\n\n // Pseudo-class selectors\n if (selector.startsWith(':')) {\n return this.matchesPseudoClass(element, selector);\n }\n\n // Attribute selector (e.g., \"[type='text']\", \"[disabled]\", \"[value*='test']\")\n if (selector.startsWith('[') && selector.endsWith(']')) {\n return this.matchesAttributeSelector(element, selector);\n }\n\n // Universal selector\n if (selector === '*') {\n return true;\n }\n\n // Unsupported selector\n return false;\n }\n\n /**\n * Match attribute selectors with various operators\n */\n private static matchesAttributeSelector(element: Element, selector: string): boolean {\n const attrContent = selector.slice(1, -1); // Remove [ and ]\n\n // Parse attribute selector: attr, attr=value, attr*=value, etc.\n const match = attrContent.match(/^([^=!*^$~|]+)(?:([=!*^$~|]+)(['\"]?)([^'\"]*)(['\"]?))?$/);\n\n if (!match) return false;\n\n let attrName = match[1].trim();\n const operator = match[2] || '';\n const attrValue = match[4] || '';\n\n // Handle escaped colons in attribute names\n attrName = attrName.replace(/\\\\:/g, ':');\n\n if (!operator) {\n // Just check if attribute exists: [disabled]\n return element.hasAttribute(attrName);\n }\n\n const elementValue = element.getAttribute(attrName);\n if (elementValue === null) return false;\n\n switch (operator) {\n case '=':\n // Exact match: [type=\"text\"]\n return elementValue === attrValue;\n\n case '!=':\n // Not equal: [value!=\"test\"]\n return elementValue !== attrValue;\n\n case '*=':\n // Contains: [value*=\"test\"]\n return elementValue.includes(attrValue);\n\n case '^=':\n // Starts with: [value^=\"test\"]\n return elementValue.startsWith(attrValue);\n\n case '$=':\n // Ends with: [value$=\"test\"]\n return elementValue.endsWith(attrValue);\n\n case '~=':\n // Word match: [class~=\"test\"]\n return elementValue.split(/\\s+/).includes(attrValue);\n\n case '|=':\n // Language match: [lang|=\"en\"]\n return elementValue === attrValue || elementValue.startsWith(attrValue + '-');\n\n default:\n return false;\n }\n }\n\n /**\n * Match pseudo-class selectors\n */\n private static matchesPseudoClass(element: Element, selector: string): boolean {\n const pseudoClass = selector.substring(1); // Remove :\n\n // Parse pseudo-class with parameters: nth-child(2), contains('text')\n const match = pseudoClass.match(/^([^(]+)(?:\\(([^)]*)\\))?$/);\n if (!match) return false;\n\n const pseudoName = match[1];\n const pseudoParam = match[2];\n\n switch (pseudoName) {\n case 'checked':\n // :checked - for input elements\n return this.isInputElement(element) &&\n (element.getAttribute('checked') !== null ||\n element.getAttribute('selected') !== null);\n\n case 'disabled':\n // :disabled\n return element.hasAttribute('disabled');\n\n case 'enabled':\n // :enabled\n return !element.hasAttribute('disabled');\n\n case 'focus':\n // :focus - check if element has focus (autofocus attribute or programmatically focused)\n return element.hasAttribute('autofocus') ||\n element.getAttribute('data-focused') === 'true';\n\n case 'first':\n case 'first-child':\n // :first or :first-child\n return this.isFirstChild(element);\n\n case 'last':\n case 'last-child':\n // :last or :last-child\n return this.isLastChild(element);\n\n case 'even':\n // :even (0-based indexing)\n return this.getChildIndex(element) % 2 === 0;\n\n case 'odd':\n // :odd (0-based indexing)\n return this.getChildIndex(element) % 2 === 1;\n\n case 'nth-child':\n // :nth-child(n)\n if (pseudoParam) {\n const n = parseInt(pseudoParam, 10);\n return this.getChildIndex(element) === n - 1; // Convert to 0-based\n }\n return false;\n\n case 'eq':\n // :eq(n) - jQuery-style\n if (pseudoParam) {\n const n = parseInt(pseudoParam, 10);\n return this.getChildIndex(element) === n;\n }\n return false;\n\n case 'gt':\n // :gt(n) - jQuery-style\n if (pseudoParam) {\n const n = parseInt(pseudoParam, 10);\n return this.getChildIndex(element) > n;\n }\n return false;\n\n case 'lt':\n // :lt(n) - jQuery-style\n if (pseudoParam) {\n const n = parseInt(pseudoParam, 10);\n return this.getChildIndex(element) < n;\n }\n return false;\n\n case 'contains':\n // :contains('text')\n if (pseudoParam) {\n const text = pseudoParam.replace(/^['\"]|['\"]$/g, ''); // Remove quotes\n return (element.textContent || '').includes(text);\n }\n return false;\n\n case 'visible':\n // :visible - simplified check\n return !element.hasAttribute('hidden') &&\n element.getAttribute('style')?.includes('display:none') !== true;\n\n case 'hidden':\n // :hidden\n return element.hasAttribute('hidden') ||\n element.getAttribute('style')?.includes('display:none') === true;\n\n case 'has':\n // :has(selector) - simplified implementation\n if (pseudoParam && 'querySelector' in element) {\n try {\n return (element as any).querySelector(pseudoParam) !== null;\n } catch {\n return false;\n }\n }\n return false;\n\n case 'not':\n // :not(selector) - simplified implementation\n if (pseudoParam) {\n return !CSSSelector.matches(element, pseudoParam);\n }\n return false;\n\n default:\n // Unsupported pseudo-class\n return false;\n }\n }\n\n /**\n * Helper methods for pseudo-class matching\n */\n private static isInputElement(element: Element): boolean {\n const tagName = element.tagName.toLowerCase();\n return tagName === 'input' || tagName === 'select' || tagName === 'textarea';\n }\n\n private static isFirstChild(element: Element): boolean {\n const parent = element.parentNode;\n if (!parent || !('children' in parent)) return false;\n\n const children = (parent as any).children;\n return children.length > 0 && children[0] === element;\n }\n\n private static isLastChild(element: Element): boolean {\n const parent = element.parentNode;\n if (!parent || !('children' in parent)) return false;\n\n const children = (parent as any).children;\n return children.length > 0 && children[children.length - 1] === element;\n }\n\n private static getChildIndex(element: Element): number {\n const parent = element.parentNode;\n if (!parent || !('children' in parent)) return -1;\n\n const children = (parent as any).children;\n for (let i = 0; i < children.length; i++) {\n if (children[i] === element) {\n return i;\n }\n }\n return -1;\n }\n}", "import { Node } from './Node';\nimport { ChildNodeBase } from './ChildNodeBase';\nimport { ParentNode } from './ParentNode';\nimport { Element } from './elements/Element';\nimport { HTMLCollection } from './collection/HTMLCollection';\nimport { NodeListOf } from './collection/NodeListOf';\nimport { ELEMENT_NODE, TEXT_NODE } from './Node';\nimport { TextBase } from './TextBase';\nimport { CSSSelector } from '../utils/CSSSelector';\n\n/**\n * Base implementation of the ParentNode interface\n */\nexport abstract class ParentNodeBase extends ChildNodeBase implements ParentNode {\n\n // ParentNode interface implementation\n get childElementCount(): number {\n let count = 0;\n for (const child of this._childNodesInternal) {\n if (child && child.nodeType === ELEMENT_NODE) {\n count++;\n }\n }\n return count;\n }\n\n get children(): HTMLCollection {\n const elements: Element[] = [];\n for (const child of this._childNodesInternal) {\n if (child && child.nodeType === ELEMENT_NODE) {\n elements.push(child as unknown as Element);\n }\n }\n return new HTMLCollection(elements);\n }\n\n get firstElementChild(): Element | null {\n for (const child of this._childNodesInternal) {\n if (child && child.nodeType === ELEMENT_NODE) {\n return child as unknown as Element;\n }\n }\n return null;\n }\n\n get lastElementChild(): Element | null {\n for (let i = this._childNodesInternal.length - 1; i >= 0; i--) {\n const child = this._childNodesInternal[i];\n if (child && child.nodeType === ELEMENT_NODE) {\n return child as unknown as Element;\n }\n }\n return null;\n }\n\n append(...nodes: (Node | string)[]): void {\n for (const node of nodes) {\n if (typeof node === 'string') {\n const textNode = new TextBase(node, this._ownerDocument);\n this.appendChild(textNode);\n } else {\n this.appendChild(node);\n }\n }\n }\n\n prepend(...nodes: (Node | string)[]): void {\n const firstChild = this.firstChild;\n for (const node of nodes) {\n if (typeof node === 'string') {\n const textNode = new TextBase(node, this._ownerDocument);\n this.insertBefore(textNode, firstChild);\n } else {\n this.insertBefore(node, firstChild);\n }\n }\n }\n\n replaceChildren(...nodes: (Node | string)[]): void {\n // Remove all existing children\n while (this._childNodesInternal.length > 0) {\n const child = this._childNodesInternal[0];\n if (child) {\n this.removeChild(child);\n }\n }\n\n // Add new nodes\n this.append(...nodes);\n }\n\n // Query selector implementation\n querySelector<E extends Element>(selectors: string): E | null {\n const elements = this.querySelectorAll(selectors);\n return elements.length > 0 ? elements.item(0) as E: null;\n }\n\n querySelectorAll<E extends Element = Element>(selectors: string): NodeListOf<E> {\n const results: E[] = [];\n \n // Split selectors by comma and process each one\n const selectorList = selectors.split(',').map(s => s.trim());\n \n for (const selector of selectorList) {\n if (selector) {\n this._querySelectorAllRecursive(selector, results);\n }\n }\n \n // Remove duplicates while preserving order\n const uniqueResults: E[] = [];\n const seen = new Set();\n for (const element of results) {\n if (!seen.has(element)) {\n seen.add(element);\n uniqueResults.push(element);\n }\n }\n \n return new NodeListOf<E>(uniqueResults);\n }\n\n // Private helper methods for querySelector\n private _querySelectorAllRecursive(selectors: string, results: Element[]): void {\n for (const child of this._childNodesInternal) {\n if (child && child.nodeType === ELEMENT_NODE) {\n const element = child as unknown as Element;\n\n // Check if this element matches the selector\n if (CSSSelector.matches(element, selectors)) {\n results.push(element);\n }\n\n // Recursively search in child elements\n if (child instanceof ParentNodeBase) {\n child._querySelectorAllRecursive(selectors, results);\n }\n }\n }\n }\n\n\n}\n\n// TextNode is now in a separate file", "import { ParentNodeBase } from './ParentNodeBase';\nimport { DocumentFragment } from './DocumentFragment';\nimport { Document } from './Document';\nimport {DOCUMENT_FRAGMENT_NODE, ELEMENT_NODE, Node} from './Node';\nimport { NodeBase } from './NodeBase';\nimport { Element } from './elements/Element';\nimport { HTMLElement } from './elements/HTMLElement';\nimport { HTMLElementTagNameMap, SVGElementTagNameMap, MathMLElementTagNameMap } from './elements';\nimport { NodeListOf } from './collection/NodeListOf';\n\n/**\n * The **`DocumentFragmentBase`** class is the concrete implementation of the DocumentFragment interface.\n * \n * DocumentFragment is a minimal document object that has no parent. It is used as a lightweight version of Document\n * that stores a segment of a document structure comprised of nodes just like a standard document.\n */\nexport class DocumentFragmentBase extends ParentNodeBase implements DocumentFragment {\n constructor(ownerDocument?: Document) {\n super(DOCUMENT_FRAGMENT_NODE, '#document-fragment', ownerDocument); // DOCUMENT_FRAGMENT_NODE = 11\n }\n\n /**\n * Returns the number of child elements of this DocumentFragment.\n */\n get childElementCount(): number {\n let count = 0;\n for (const child of this._childNodesInternal) {\n if (child && child.nodeType === ELEMENT_NODE) { // ELEMENT_NODE\n count++;\n }\n }\n return count;\n }\n\n /**\n * Returns the first Element node within the DocumentFragment that matches the specified selectors.\n */\n querySelector<K extends keyof HTMLElementTagNameMap>(selectors: K): HTMLElementTagNameMap[K] | null;\n querySelector<K extends keyof SVGElementTagNameMap>(selectors: K): SVGElementTagNameMap[K] | null;\n querySelector<K extends keyof MathMLElementTagNameMap>(selectors: K): MathMLElementTagNameMap[K] | null;\n querySelector<E extends Element = Element>(selectors: string): E | null;\n querySelector(selectors: string): Element | null;\n querySelector(selectors: string): Element | null {\n const elements = this.querySelectorAll(selectors);\n return elements.length > 0 ? elements.item(0) : null;\n }\n\n /**\n * Returns all Element nodes within the DocumentFragment that match the specified selectors.\n */\n querySelectorAll<K extends keyof HTMLElementTagNameMap>(selectors: K): NodeListOf<HTMLElementTagNameMap[K]>;\n querySelectorAll<K extends keyof SVGElementTagNameMap>(selectors: K): NodeListOf<SVGElementTagNameMap[K]>;\n querySelectorAll<K extends keyof MathMLElementTagNameMap>(selectors: K): NodeListOf<MathMLElementTagNameMap[K]>;\n querySelectorAll<E extends Element = Element>(selectors: string): NodeListOf<E>;\n querySelectorAll(selectors: string): NodeListOf<Element>;\n querySelectorAll(selectors: string): NodeListOf<Element> {\n // Use the inherited querySelectorAll from ParentNodeBase\n return super.querySelectorAll(selectors);\n }\n\n /**\n * Returns the Element within the DocumentFragment that has the specified ID.\n */\n getElementById(elementId: string): HTMLElement | null {\n const element = this.querySelector(`#${elementId}`);\n return element as HTMLElement | null;\n }\n\n /**\n * Override cloneNode to return DocumentFragment\n */\n cloneNode(deep?: boolean): DocumentFragmentBase {\n const clone = new DocumentFragmentBase(this._ownerDocument as Document);\n \n if (deep) {\n for (const child of this._childNodesInternal) {\n if (child && 'cloneNode' in child) {\n clone.appendChild((child as any).cloneNode(true));\n }\n }\n }\n \n return clone;\n }\n\n /**\n * Override appendChild to handle DocumentFragment behavior\n * When a DocumentFragment is appended to another node, its children are moved, not the fragment itself\n */\n appendChild<T extends Node>(node: T): T {\n // If the node being appended is a DocumentFragment, move its children instead\n if (node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n const fragment = node as any;\n \n // Move all children from fragment to this node\n while (fragment._childNodesInternal && fragment._childNodesInternal.length > 0) {\n const child = fragment._childNodesInternal[0];\n if (child) {\n fragment.removeChild(child);\n super.appendChild(child);\n }\n }\n \n return node;\n }\n \n return super.appendChild(node);\n }\n}", "import { Element } from '../elements/Element';\nimport { HTMLCollection } from './HTMLCollection';\n\n/**\n * **`HTMLCollectionOf<T>`** is a generic version of HTMLCollection that provides type safety for specific element types.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLCollection)\n */\nexport class HTMLCollectionOf<T extends Element> extends HTMLCollection {\n // \uC778\uB371\uC2A4 \uC2DC\uADF8\uB2C8\uCC98\uB97C \uBA85\uC2DC\uC801\uC73C\uB85C \uC120\uC5B8\uD558\uC5EC \uD0C0\uC785 \uCD94\uB860 \uC9C0\uC6D0\n [index: number]: T;\n \n constructor(elements: T[] = []) {\n // \uBD80\uBAA8 HTMLCollection\uC758 \uC0DD\uC131\uC790\uB97C \uD638\uCD9C\uD558\uBA74\uC11C \uD0C0\uC785\uC774 \uC9C0\uC815\uB41C \uC694\uC18C\uB4E4\uC744 \uC804\uB2EC\n super(elements as Element[]);\n }\n\n // \uD0C0\uC785 \uC548\uC804\uC131\uC744 \uC704\uD55C \uC624\uBC84\uB77C\uC774\uB4DC - \uB2E8\uC21C \uCE90\uC2A4\uD305\uB9CC\n item(index: number): T | null {\n return super.item(index) as T | null;\n }\n\n namedItem(name: string): T | null {\n return super.namedItem(name) as T | null;\n }\n}", "export { HTMLCollection } from './HTMLCollection';\nexport { HTMLCollectionOf } from './HTMLCollectionOf';\nexport { NodeList } from './NodeList';\nexport { NodeListOf } from './NodeListOf';", "import { ParentNodeBase } from '../ParentNodeBase';\nimport { ChildNodeBase } from '../ChildNodeBase';\nimport { HTMLCollection } from \"../collection\";\nimport { Text } from \"../Text\";\nimport { ElementFactory } from \"../../factory/ElementFactory\";\nimport { Element, DOMTokenList, Attr, NamedNodeMap, DOMRect } from './Element';\nimport { ELEMENT_NODE, TEXT_NODE, ATTRIBUTE_NODE } from '../Node';\nimport { CSSSelector } from '../../utils/CSSSelector';\nimport { HTMLElementTagNameMap } from \"./index\";\nimport { NodeBase } from '../NodeBase';\n\n// InsertPosition type for insertAdjacent methods\ntype InsertPosition = 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend';\n\n// Simple DOMException class for error handling\nclass DOMException extends Error {\n constructor(message: string, public name: string = 'DOMException') {\n super(message);\n this.name = name;\n }\n}\n/**\n * Base implementation of the Element interface\n */\nexport abstract class ElementBase extends ParentNodeBase implements Element {\n private _id: string = '';\n private _className: string = '';\n private _attributes: Map<string, string> = new Map();\n\n constructor(\n public _tagName: string,\n ownerDocument?: any\n ) {\n super(ELEMENT_NODE, _tagName.toUpperCase(), ownerDocument);\n }\n\n get tagName(): string {\n return this._tagName.toUpperCase();\n }\n\n get localName(): string {\n return this._tagName.toLowerCase();\n }\n\n // Element interface implementation\n get id(): string {\n return this._id;\n }\n\n set id(value: string) {\n this._id = value;\n this._attributes.set('id', value);\n }\n\n get className(): string {\n return this._className;\n }\n\n set className(value: string) {\n this._className = value;\n this._attributes.set('class', value);\n }\n\n get classList(): DOMTokenList {\n return new DOMTokenListImpl(this);\n }\n\n get innerHTML(): string {\n // Generate innerHTML from actual child nodes\n let html = '';\n for (const child of this._childNodesInternal) {\n if (child.nodeType === TEXT_NODE) {\n // For text nodes, use the escaped content stored in _nodeValue\n html += (child as any)._nodeValue || '';\n } else if (child.nodeType === ELEMENT_NODE) {\n // Generate outerHTML directly to avoid circular dependency\n html += this.generateChildElementHTML(child as any);\n } else if (child.nodeType === 8) { // COMMENT_NODE\n html += `<!--${(child as any).textContent || ''}-->`;\n }\n }\n return html;\n }\n\n get innerText(): string {\n // innerText should return the decoded text content\n return this.textContent || '';\n }\n\n set innerText(value: string | null) {\n // Clear all children and add escaped text content\n this._childNodesInternal = [];\n if (value !== null && value !== undefined) {\n const stringValue = String(value);\n const escapedValue = this.escapeHTMLEntities(stringValue);\n // Create text node with escaped content\n const { TextBase } = require('../TextBase');\n const textNode = new TextBase(escapedValue, this._ownerDocument);\n this._childNodesInternal.push(textNode);\n textNode._parentNodeInternal = this;\n }\n }\n\n set innerHTML(value: string) {\n // Clear existing children\n while (this._childNodesInternal.length > 0) {\n const child = this._childNodesInternal[0];\n if (child) {\n this.removeChild(child);\n }\n }\n\n // Parse HTML and create child nodes\n if (value.trim()) {\n this.parseAndAppendHTML(value);\n }\n }\n\n /**\n * Generate HTML for a child element without using outerHTML to avoid circular dependency\n */\n private generateChildElementHTML(element: any): string {\n const tagName = element.tagName.toLowerCase();\n // Get attributes\n const attrs = Array.from(element._attributes?.entries() || [])\n .map(([name, value]: [string, string]) => value === '' ? ` ${name}` : ` ${name}=\"${String(value).replace(/\"/g, '&quot;')}\"`)\n .join('');\n\n // Check if it's a self-closing tag\n const selfClosingTags = ['img', 'input', 'br', 'hr', 'meta', 'link', 'area', 'base', 'col', 'embed', 'source', 'track', 'wbr'];\n const isSelfClosing = selfClosingTags.includes(tagName);\n\n if (isSelfClosing) {\n return `<${tagName}${attrs} />`;\n } else {\n // Generate innerHTML directly without calling element.innerHTML to avoid recursion\n let childHTML = '';\n for (const child of element._childNodesInternal || []) {\n if (child.nodeType === TEXT_NODE) {\n childHTML += (child as any)._nodeValue || '';\n } else if (child.nodeType === ELEMENT_NODE) {\n childHTML += this.generateChildElementHTML(child as any);\n } else if (child.nodeType === 8) { // COMMENT_NODE\n childHTML += `<!--${(child as any).textContent || ''}-->`;\n }\n }\n return `<${tagName}${attrs}>${childHTML}</${tagName}>`;\n }\n }\n\n /**\n * Improved HTML parser for innerHTML using a stack-based approach\n */\n private parseAndAppendHTML(html: string): void {\n const ElementFactory = require('../../factory/ElementFactory').ElementFactory;\n\n let i = 0;\n const length = html.length;\n\n while (i < length) {\n const nextTagStart = html.indexOf('<', i);\n\n // Handle text content before next tag\n if (nextTagStart === -1) {\n // No more tags, rest is text\n let text = html.substring(i).trim();\n if (text) {\n // Fix broken closing tags (e.g., \"/div>\" -> \"</div>\")\n text = this.fixBrokenClosingTags(text);\n const { TextBase } = require('../TextBase');\n const textNode = new TextBase(text, this._ownerDocument);\n this.appendChild(textNode);\n }\n break;\n } else if (nextTagStart > i) {\n // Text content before the tag\n let text = html.substring(i, nextTagStart).trim();\n if (text) {\n // Fix broken closing tags (e.g., \"/div>\" -> \"</div>\")\n text = this.fixBrokenClosingTags(text);\n const { TextBase } = require('../TextBase');\n const textNode = new TextBase(text, this._ownerDocument);\n this.appendChild(textNode);\n }\n }\n\n i = nextTagStart;\n\n // Parse the tag - find the real tag end, considering quoted attributes\n const tagEnd = this.findTagEnd(html, i);\n if (tagEnd === -1) break;\n\n const tagContent = html.substring(i + 1, tagEnd);\n\n // Handle comments\n if (tagContent.startsWith('!--')) {\n const commentEnd = html.indexOf('-->', i);\n if (commentEnd !== -1) {\n const commentContent = html.substring(i + 4, commentEnd);\n const { Comment } = require('../Comment');\n const commentNode = new Comment(commentContent, this._ownerDocument);\n this.appendChild(commentNode);\n i = commentEnd + 3;\n continue;\n }\n }\n\n // Handle self-closing tags\n if (tagContent.endsWith('/')) {\n const parts = tagContent.slice(0, -1).trim().split(/\\s+/);\n const tagName = parts[0];\n const attributeString = tagContent.slice(tagName.length, -1).trim();\n\n const element = ElementFactory.createElement(tagName, this._ownerDocument);\n this.parseAttributes(element, attributeString);\n this.appendChild(element);\n i = tagEnd + 1;\n continue;\n }\n\n // Handle closing tags - if they don't have matching opening tags, treat as text\n if (tagContent.startsWith('/')) {\n // For now, treat unmatched closing tags as text content\n const closingTagText = `<${tagContent}>`;\n const { TextBase } = require('../TextBase');\n const textNode = new TextBase(closingTagText, this._ownerDocument);\n this.appendChild(textNode);\n i = tagEnd + 1;\n continue;\n }\n\n // Handle opening tags\n const parts = tagContent.split(/\\s+/);\n const tagName = parts[0];\n const attributeString = tagContent.slice(tagName.length).trim();\n\n // Special handling for style and script tags\n if (tagName === 'style' || tagName === 'script') {\n const closingTag = `</${tagName}>`;\n const closingTagIndex = html.indexOf(closingTag, tagEnd + 1);\n\n if (closingTagIndex !== -1) {\n const element = ElementFactory.createElement(tagName, this._ownerDocument);\n this.parseAttributes(element, attributeString);\n\n const content = html.substring(tagEnd + 1, closingTagIndex);\n if (content) {\n const { TextBase } = require('../TextBase');\n const textNode = new TextBase(content, this._ownerDocument);\n element.appendChild(textNode);\n }\n\n this.appendChild(element);\n i = closingTagIndex + closingTag.length;\n continue;\n }\n }\n\n // Handle regular opening tags with content\n const closingTag = `</${tagName}>`;\n const closingTagIndex = this.findMatchingClosingTag(html, tagName, tagEnd + 1);\n\n if (closingTagIndex !== -1) {\n const element = ElementFactory.createElement(tagName, this._ownerDocument);\n this.parseAttributes(element, attributeString);\n\n const content = html.substring(tagEnd + 1, closingTagIndex);\n if (content.trim()) {\n element.innerHTML = content;\n }\n\n this.appendChild(element);\n i = closingTagIndex + closingTag.length;\n } else {\n // No matching closing tag found, treat as self-closing\n const element = ElementFactory.createElement(tagName, this._ownerDocument);\n this.parseAttributes(element, attributeString);\n this.appendChild(element);\n i = tagEnd + 1;\n }\n }\n }\n\n /**\n * Find the real end of a tag, considering quoted attributes\n */\n private findTagEnd(html: string, startIndex: number): number {\n let i = startIndex + 1; // Skip the '<'\n let inQuotes = false;\n let quoteChar = '';\n\n while (i < html.length) {\n const char = html[i];\n\n if (!inQuotes) {\n if (char === '\"' || char === \"'\") {\n inQuotes = true;\n quoteChar = char;\n } else if (char === '>') {\n return i;\n }\n } else {\n if (char === quoteChar) {\n inQuotes = false;\n quoteChar = '';\n }\n }\n\n i++;\n }\n\n return -1; // No closing '>' found\n }\n\n /**\n * Fix broken closing tags in text content\n * Converts patterns like \"/div>\" to \"</div>\"\n */\n private fixBrokenClosingTags(text: string): string {\n // Pattern to match broken closing tags: /tagname>\n return text.replace(/\\/(\\w+)>/g, '</$1>');\n }\n\n /**\n * Find the matching closing tag, accounting for nested tags of the same type\n */\n private findMatchingClosingTag(html: string, tagName: string, startIndex: number): number {\n const openTag = `<${tagName}`;\n const closeTag = `</${tagName}>`;\n let depth = 1;\n let i = startIndex;\n\n while (i < html.length && depth > 0) {\n const nextOpen = html.indexOf(openTag, i);\n const nextClose = html.indexOf(closeTag, i);\n\n if (nextClose === -1) {\n return -1; // No closing tag found\n }\n\n if (nextOpen !== -1 && nextOpen < nextClose) {\n // Found another opening tag before the closing tag\n // Make sure it's a complete tag (not just a substring)\n const afterTag = html.charAt(nextOpen + openTag.length);\n if (afterTag === ' ' || afterTag === '>' || afterTag === '/') {\n depth++;\n }\n i = nextOpen + openTag.length;\n } else {\n // Found a closing tag\n depth--;\n if (depth === 0) {\n return nextClose;\n }\n i = nextClose + closeTag.length;\n }\n }\n\n return -1;\n }\n\n /**\n * Parse attributes from attribute string\n */\n private parseAttributes(element: any, attributeString: string): 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 * Escape HTML entities in a string to prevent XSS\n */\n protected escapeHTMLEntities(str: string): string {\n const entityMap: { [key: string]: string } = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n\n return str.replace(/[&<>\"']/g, (char) => {\n return entityMap[char] || char;\n });\n }\n\n /**\n * Decode HTML entities in a string\n */\n protected 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 get outerHTML(): string {\n const attrs = Array.from(this._attributes.entries())\n .map(([name, value]) => value === '' ? ` ${name}` : ` ${name}=\"${value.replace(/\"/g, '&quot;')}\"`)\n .join('');\n\n // Check if it's a self-closing tag\n const selfClosingTags = ['img', 'input', 'br', 'hr', 'meta', 'link', 'area', 'base', 'col', 'embed', 'source', 'track', 'wbr'];\n const isSelfClosing = selfClosingTags.includes(this.tagName.toLowerCase());\n\n if (isSelfClosing) {\n return `<${this.tagName.toLowerCase()}${attrs} />`;\n } else {\n return `<${this.tagName.toLowerCase()}${attrs}>${this.innerHTML}</${this.tagName.toLowerCase()}>`;\n }\n }\n\n get namespaceURI(): string | null {\n return 'http://www.w3.org/1999/xhtml';\n }\n\n get prefix(): string | null {\n return null;\n }\n\n // Attribute methods\n getAttribute(qualifiedName: string): string | null {\n const value = this._attributes.get(qualifiedName.toLowerCase());\n return value !== undefined ? value : null;\n }\n\n setAttribute(qualifiedName: string, value: string): void {\n const name = qualifiedName.toLowerCase();\n this._attributes.set(name, value);\n\n // Update special properties\n if (name === 'id') {\n this._id = value;\n } else if (name === 'class') {\n this._className = value;\n }\n }\n\n removeAttribute(qualifiedName: string): void {\n const name = qualifiedName.toLowerCase();\n this._attributes.delete(name);\n\n // Update special properties\n if (name === 'id') {\n this._id = '';\n } else if (name === 'class') {\n this._className = '';\n }\n }\n\n hasAttribute(qualifiedName: string): boolean {\n return this._attributes.has(qualifiedName.toLowerCase());\n }\n\n /**\n * Returns the closest ancestor element (including the element itself) that matches the specified CSS selector.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/closest)\n */\n closest<K extends keyof HTMLElementTagNameMap>(selector: K): HTMLElementTagNameMap[K] | null;\n closest<K extends keyof SVGElementTagNameMap>(selector: K): SVGElementTagNameMap[K] | null;\n closest<K extends keyof MathMLElementTagNameMap>(selector: K): MathMLElementTagNameMap[K] | null;\n closest<E extends Element = Element>(selectors: string): E | null;\n closest(selectors: string): Element | null {\n let element: Element | null = this as any;\n\n while (element) {\n if (element.matches && element.matches(selectors)) {\n return element;\n }\n element = element.parentElement;\n }\n\n return null;\n }\n\n /**\n * Returns true if the element would be selected by the specified CSS selector; otherwise, returns false.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/matches)\n */\n matches(selectors: string): boolean {\n return CSSSelector.matches(this as any, selectors);\n }\n\n // ChildNode methods are inherited from ParentNodeBase -> ChildNodeBase\n\n // Additional Element properties and methods - Not implemented yet\n\n get attributes(): NamedNodeMap {\n return new NamedNodeMapImpl(this._attributes);\n }\n\n get clientHeight(): number {\n throw new Error('Element.clientHeight is not implemented yet');\n }\n\n get clientLeft(): number {\n throw new Error('Element.clientLeft is not implemented yet');\n }\n\n get clientTop(): number {\n throw new Error('Element.clientTop is not implemented yet');\n }\n\n get clientWidth(): number {\n throw new Error('Element.clientWidth is not implemented yet');\n }\n\n get currentCSSZoom(): number {\n throw new Error('Element.currentCSSZoom is not implemented yet');\n }\n\n onfullscreenchange: ((this: Element, ev: Event) => any) | null = null;\n onfullscreenerror: ((this: Element, ev: Event) => any) | null = null;\n\n get part(): any {\n throw new Error('Element.part is not implemented yet');\n }\n\n get scrollHeight(): number {\n throw new Error('Element.scrollHeight is not implemented yet');\n }\n\n get scrollLeft(): number {\n throw new Error('Element.scrollLeft is not implemented yet');\n }\n\n set scrollLeft(value: number) {\n throw new Error('Element.scrollLeft setter is not implemented yet');\n }\n\n get scrollTop(): number {\n throw new Error('Element.scrollTop is not implemented yet');\n }\n\n set scrollTop(value: number) {\n throw new Error('Element.scrollTop setter is not implemented yet');\n }\n\n get scrollWidth(): number {\n throw new Error('Element.scrollWidth is not implemented yet');\n }\n\n get shadowRoot(): any {\n throw new Error('Element.shadowRoot is not implemented yet');\n }\n\n get slot(): string {\n throw new Error('Element.slot is not implemented yet');\n }\n\n set slot(value: string) {\n throw new Error('Element.slot setter is not implemented yet');\n }\n\n // Methods - Not implemented yet\n\n attachShadow(init: any): any {\n throw new Error('Element.attachShadow() is not implemented yet');\n }\n\n checkVisibility(options?: any): boolean {\n throw new Error('Element.checkVisibility() is not implemented yet');\n }\n\n computedStyleMap(): any {\n throw new Error('Element.computedStyleMap() is not implemented yet');\n }\n\n getAttributeNS(namespace: string | null, localName: string): string | null {\n // For simplicity, we'll ignore namespace and use localName\n return this.getAttribute(localName);\n }\n\n getAttributeNames(): string[] {\n return Array.from(this._attributes.keys());\n }\n\n getAttributeNode(qualifiedName: string): Attr | null {\n const value = this.getAttribute(qualifiedName);\n if (value !== null) {\n return new AttrImpl(qualifiedName, value);\n }\n return null;\n }\n\n getAttributeNodeNS(namespace: string | null, localName: string): Attr | null {\n // For simplicity, we'll ignore namespace and use localName\n return this.getAttributeNode(localName);\n }\n\n getBoundingClientRect(): DOMRect {\n return {\n bottom: 0,\n height: 0,\n left: 0,\n right: 0,\n top: 0,\n width: 0,\n x: 0,\n y: 0,\n toJSON: () => ({})\n };\n }\n\n getClientRects(): any {\n throw new Error('Element.getClientRects() is not implemented yet');\n }\n\n getElementsByClassName(classNames: string): HTMLCollection {\n const result: Element[] = [];\n const classNameList = classNames.trim().split(/\\s+/);\n\n // Helper function to check if element has all specified classes\n const hasAllClasses = (element: Element, classes: string[]): boolean => {\n const elementClasses = element.className.trim().split(/\\s+/);\n return classes.every(cls => elementClasses.includes(cls));\n };\n\n // Recursive function to traverse all descendants\n const traverse = (node: any) => {\n if (node.nodeType === ELEMENT_NODE) {\n const element = node as Element;\n if (hasAllClasses(element, classNameList)) {\n result.push(element);\n }\n }\n\n // Traverse children\n for (let i = 0; i < node.childNodes.length; i++) {\n traverse(node.childNodes[i]);\n }\n };\n\n // Start traversal from this element's children\n for (let i = 0; i < this.childNodes.length; i++) {\n traverse(this.childNodes[i]);\n }\n\n return new HTMLCollection(result);\n }\n\n getElementsByTagName(qualifiedName: string): HTMLCollection {\n const result: Element[] = [];\n const tagName = qualifiedName.toLowerCase();\n const isWildcard = tagName === '*';\n\n // Recursive function to traverse all descendants\n const traverse = (node: any) => {\n if (node.nodeType === ELEMENT_NODE) {\n const element = node as Element;\n if (isWildcard || element.localName === tagName) {\n result.push(element);\n }\n }\n\n // Traverse children\n for (let i = 0; i < node.childNodes.length; i++) {\n traverse(node.childNodes[i]);\n }\n };\n\n // Start traversal from this element's children\n for (let i = 0; i < this.childNodes.length; i++) {\n traverse(this.childNodes[i]);\n }\n\n return new HTMLCollection(result);\n }\n\n getElementsByTagNameNS(namespace: string | null, localName: string): any {\n // For simplicity, we'll implement this similar to getElementsByTagName\n // In a full implementation, namespace handling would be more complex\n return this.getElementsByTagName(localName);\n }\n\n getHTML(options?: any): string {\n throw new Error('Element.getHTML() is not implemented yet');\n }\n\n hasAttributeNS(namespace: string | null, localName: string): boolean {\n // For simplicity, we'll ignore namespace and use localName\n return this.hasAttribute(localName);\n }\n\n hasAttributes(): boolean {\n return this._attributes.size > 0;\n }\n\n hasPointerCapture(pointerId: number): boolean {\n throw new Error('Element.hasPointerCapture() is not implemented yet');\n }\n\n insertAdjacentElement(where: InsertPosition, element: Element): Element | null {\n const position = where.toLowerCase();\n\n switch (position) {\n case 'beforebegin':\n // Insert before this element\n if (this.parentNode) {\n this.parentNode.insertBefore(element as any, this as any);\n return element;\n }\n return null;\n\n case 'afterbegin':\n // Insert as first child of this element\n if (this.firstChild) {\n this.insertBefore(element as any, this.firstChild);\n } else {\n this.appendChild(element as any);\n }\n return element;\n\n case 'beforeend':\n // Insert as last child of this element\n this.appendChild(element as any);\n return element;\n\n case 'afterend':\n // Insert after this element\n if (this.parentNode) {\n if (this.nextSibling) {\n this.parentNode.insertBefore(element as any, this.nextSibling);\n } else {\n this.parentNode.appendChild(element as any);\n }\n return element;\n }\n return null;\n\n default:\n throw new DOMException(`Invalid position: ${where}`, 'SyntaxError');\n }\n }\n\n insertAdjacentHTML(position: InsertPosition, html: string): void {\n const pos = position.toLowerCase();\n\n // Parse HTML string into elements\n const tempDiv = this._ownerDocument.createElement('div');\n tempDiv.innerHTML = html;\n\n // Move all parsed nodes to the target position\n const fragment = this._ownerDocument.createDocumentFragment();\n while (tempDiv.firstChild) {\n fragment.appendChild(tempDiv.firstChild);\n }\n\n switch (pos) {\n case 'beforebegin':\n if (this.parentNode) {\n this.parentNode.insertBefore(fragment, this as any);\n }\n break;\n\n case 'afterbegin':\n if (this.firstChild) {\n this.insertBefore(fragment, this.firstChild);\n } else {\n this.appendChild(fragment);\n }\n break;\n\n case 'beforeend':\n this.appendChild(fragment);\n break;\n\n case 'afterend':\n if (this.parentNode) {\n if (this.nextSibling) {\n this.parentNode.insertBefore(fragment, this.nextSibling);\n } else {\n this.parentNode.appendChild(fragment);\n }\n }\n break;\n\n default:\n throw new DOMException(`Invalid position: ${position}`, 'SyntaxError');\n }\n }\n\n insertAdjacentText(where: InsertPosition, data: string): void {\n const position = where.toLowerCase();\n\n // Create text node\n const textNode = this._ownerDocument.createTextNode(data);\n\n switch (position) {\n case 'beforebegin':\n if (this.parentNode) {\n this.parentNode.insertBefore(textNode, this as any);\n }\n break;\n\n case 'afterbegin':\n if (this.firstChild) {\n this.insertBefore(textNode, this.firstChild);\n } else {\n this.appendChild(textNode);\n }\n break;\n\n case 'beforeend':\n this.appendChild(textNode);\n break;\n\n case 'afterend':\n if (this.parentNode) {\n if (this.nextSibling) {\n this.parentNode.insertBefore(textNode, this.nextSibling);\n } else {\n this.parentNode.appendChild(textNode);\n }\n }\n break;\n\n default:\n throw new DOMException(`Invalid position: ${where}`, 'SyntaxError');\n }\n }\n\n releasePointerCapture(pointerId: number): void {\n // throw new Error('Element.releasePointerCapture() is not implemented yet');\n }\n\n removeAttributeNS(namespace: string | null, localName: string): void {\n // For simplicity, we'll ignore namespace and use localName\n this.removeAttribute(localName);\n }\n\n removeAttributeNode(attr: Attr): Attr {\n const oldValue = this.getAttribute(attr.name);\n if (oldValue !== null) {\n this.removeAttribute(attr.name);\n return new AttrImpl(attr.name, oldValue);\n }\n throw new DOMException('The attribute node is not an attribute of this element', 'NotFoundError');\n }\n\n requestFullscreen(options?: any): Promise<void> {\n throw new Error('Element.requestFullscreen() is not implemented yet');\n }\n\n requestPointerLock(options?: any): Promise<void> {\n throw new Error('Element.requestPointerLock() is not implemented yet');\n }\n\n scroll(options?: any): void;\n scroll(x: number, y: number): void;\n scroll(optionsOrX?: any, y?: number): void {\n // throw new Error('Element.scroll() is not implemented yet');\n }\n\n scrollBy(options?: any): void;\n scrollBy(x: number, y: number): void;\n scrollBy(optionsOrX?: any, y?: number): void {\n // throw new Error('Element.scrollBy() is not implemented yet');\n }\n\n scrollIntoView(arg?: boolean | any): void {\n // throw new Error('Element.scrollIntoView() is not implemented yet');\n }\n\n scrollTo(options?: any): void;\n scrollTo(x: number, y: number): void;\n scrollTo(optionsOrX?: any, y?: number): void {\n // throw new Error('Element.scrollTo() is not implemented yet');\n }\n\n setAttributeNS(namespace: string | null, qualifiedName: string, value: string): void {\n // For simplicity, we'll ignore namespace and use qualifiedName\n this.setAttribute(qualifiedName, value);\n }\n\n setAttributeNode(attr: Attr): Attr | null {\n const oldAttr = this.getAttributeNode(attr.name);\n this.setAttribute(attr.name, attr.value);\n return oldAttr;\n }\n\n setAttributeNodeNS(attr: Attr): Attr | null {\n // For simplicity, we'll ignore namespace\n return this.setAttributeNode(attr);\n }\n\n setHTMLUnsafe(html: string): void {\n // throw new Error('Element.setHTMLUnsafe() is not implemented yet');\n }\n\n setPointerCapture(pointerId: number): void {\n // throw new Error('Element.setPointerCapture() is not implemented yet');\n }\n\n toggleAttribute(qualifiedName: string, force?: boolean): boolean {\n const hasAttr = this.hasAttribute(qualifiedName);\n\n if (force === true || (force === undefined && !hasAttr)) {\n this.setAttribute(qualifiedName, '');\n return true;\n } else if (force === false || (force === undefined && hasAttr)) {\n this.removeAttribute(qualifiedName);\n return false;\n }\n\n return hasAttr;\n }\n\n webkitMatchesSelector(selectors: string): boolean {\n // throw new Error('Element.webkitMatchesSelector() is not implemented yet');\n return false;\n }\n\n // EventTarget methods - Not implemented yet\n addEventListener(type: string, listener: any, options?: any): void {\n // throw new Error('Element.addEventListener() is not implemented yet');\n }\n\n removeEventListener(type: string, listener: any, options?: any): void {\n // throw new Error('Element.removeEventListener() is not implemented yet');\n }\n\n dispatchEvent(event: any): boolean {\n // throw new Error('Element.dispatchEvent() is not implemented yet');\n return true;\n }\n\n cloneNode(deep?: boolean): ElementBase {\n // Use ElementFactory to create the correct element type\n const clone = ElementFactory.createElement(this.tagName, this._ownerDocument);\n\n // Copy attributes\n for (const [name, value] of this._attributes) {\n clone.setAttribute(name, value);\n }\n\n // Copy children if deep clone\n if (deep) {\n for (const child of this._childNodesInternal) {\n if (child && 'cloneNode' in child) {\n clone.appendChild((child as any).cloneNode(true));\n }\n }\n }\n\n return clone;\n }\n}\n\n// DOMTokenList implementation\nclass DOMTokenListImpl implements DOMTokenList {\n constructor(private element: ElementBase) { }\n\n get length(): number {\n return this.element.className.split(/\\s+/).filter(c => c.length > 0).length;\n }\n\n get value(): string {\n return this.element.className;\n }\n\n set value(value: string) {\n this.element.className = value;\n }\n\n add(...tokens: string[]): void {\n const classes = new Set(this.element.className.split(/\\s+/).filter(c => c.length > 0));\n for (const token of tokens) {\n classes.add(token);\n }\n this.element.className = Array.from(classes).join(' ');\n }\n\n remove(...tokens: string[]): void {\n const classes = new Set(this.element.className.split(/\\s+/).filter(c => c.length > 0));\n for (const token of tokens) {\n classes.delete(token);\n }\n this.element.className = Array.from(classes).join(' ');\n }\n\n contains(token: string): boolean {\n return this.element.className.split(/\\s+/).includes(token);\n }\n\n toggle(token: string, force?: boolean): boolean {\n const hasToken = this.contains(token);\n\n if (force === true || (force === undefined && !hasToken)) {\n this.add(token);\n return true;\n } else {\n this.remove(token);\n return false;\n }\n }\n\n replace(oldToken: string, newToken: string): boolean {\n if (this.contains(oldToken)) {\n this.remove(oldToken);\n this.add(newToken);\n return true;\n }\n return false;\n }\n\n item(index: number): string | null {\n const classes = this.element.className.split(/\\s+/).filter(c => c.length > 0);\n return index >= 0 && index < classes.length ? classes[index] : null;\n }\n\n [index: number]: string;\n}\n\n\n\n// Attr implementation\nclass AttrImpl extends NodeBase implements Attr {\n public ownerElement: Element | null = null;\n public namespaceURI: string | null = null;\n public prefix: string | null = null;\n public specified: boolean = true;\n\n constructor(public name: string, public value: string) {\n super(ATTRIBUTE_NODE, name);\n }\n\n get localName(): string {\n return this.name;\n }\n}\n\n// NamedNodeMap implementation\nclass NamedNodeMapImpl implements NamedNodeMap {\n constructor(private attributes: Map<string, string>) { }\n\n get length(): number {\n return this.attributes.size;\n }\n\n getNamedItem(qualifiedName: string): Attr | null {\n const value = this.attributes.get(qualifiedName.toLowerCase());\n return value !== undefined ? new AttrImpl(qualifiedName, value) : null;\n }\n\n getNamedItemNS(namespace: string | null, localName: string): Attr | null {\n // For simplicity, ignore namespace\n return this.getNamedItem(localName);\n }\n\n item(index: number): Attr | null {\n const keys = Array.from(this.attributes.keys());\n if (index >= 0 && index < keys.length) {\n const key = keys[index];\n const value = this.attributes.get(key)!;\n return new AttrImpl(key, value);\n }\n return null;\n }\n\n removeNamedItem(qualifiedName: string): Attr {\n const value = this.attributes.get(qualifiedName.toLowerCase());\n if (value !== undefined) {\n this.attributes.delete(qualifiedName.toLowerCase());\n return new AttrImpl(qualifiedName, value);\n }\n throw new DOMException('The attribute is not found', 'NotFoundError');\n }\n\n removeNamedItemNS(namespace: string | null, localName: string): Attr {\n // For simplicity, ignore namespace\n return this.removeNamedItem(localName);\n }\n\n setNamedItem(attr: Attr): Attr | null {\n const oldValue = this.attributes.get(attr.name.toLowerCase());\n this.attributes.set(attr.name.toLowerCase(), attr.value);\n return oldValue !== undefined ? new AttrImpl(attr.name, oldValue) : null;\n }\n\n setNamedItemNS(attr: Attr): Attr | null {\n // For simplicity, ignore namespace\n return this.setNamedItem(attr);\n }\n\n // Iterator implementation\n *[Symbol.iterator](): IterableIterator<Attr> {\n const keys = Array.from(this.attributes.keys());\n for (const key of keys) {\n const value = this.attributes.get(key)!;\n yield new AttrImpl(key, value);\n }\n }\n\n // Additional iterator methods for compatibility\n keys(): IterableIterator<string> {\n return this.attributes.keys();\n }\n\n values(): IterableIterator<Attr> {\n const self = this;\n return (function* () {\n for (const [key, value] of self.attributes) {\n yield new AttrImpl(key, value);\n }\n })();\n }\n\n entries(): IterableIterator<[string, Attr]> {\n const self = this;\n return (function* () {\n for (const [key, value] of self.attributes) {\n yield [key, new AttrImpl(key, value)] as [string, Attr];\n }\n })();\n }\n\n // forEach method for compatibility\n forEach(callback: (attr: Attr, index: number, map: NamedNodeMap) => void, thisArg?: any): void {\n const keys = Array.from(this.attributes.keys());\n keys.forEach((key, index) => {\n const value = this.attributes.get(key)!;\n const attr = new AttrImpl(key, value);\n callback.call(thisArg, attr, index, this);\n });\n }\n\n [index: number]: Attr;\n}", "import { ElementBase } from './ElementBase';\nimport { HTMLElement, FocusOptions, CSSStyleDeclaration, DOMStringMap, ElementCSSInlineStyle, StylePropertyMap } from './HTMLElement';\nimport { Text } from '../Text';\nimport { ElementFactory } from '../../factory';\n\n/**\n * Base implementation for all HTML elements\n */\nexport abstract class HTMLElementBase extends ElementBase implements HTMLElement, ElementCSSInlineStyle {\n private _title: string = '';\n private _lang: string = '';\n private _dir: string = '';\n private _hidden: boolean = false;\n private _tabIndex: number = -1;\n private _accessKey: string = '';\n private _contentEditable: string = 'inherit';\n private _innerText: string = '';\n private _outerText: string = '';\n\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n // HTMLElement interface implementation\n get title(): string {\n return this._title;\n }\n\n set title(value: string) {\n this._title = value;\n this.setAttribute('title', value);\n }\n\n get lang(): string {\n return this._lang;\n }\n\n set lang(value: string) {\n this._lang = value;\n this.setAttribute('lang', value);\n }\n\n get dir(): string {\n return this._dir;\n }\n\n set dir(value: string) {\n this._dir = value;\n this.setAttribute('dir', value);\n }\n\n get hidden(): boolean {\n return this._hidden;\n }\n\n set hidden(value: boolean) {\n this._hidden = value;\n if (value) {\n this.setAttribute('hidden', '');\n } else {\n this.removeAttribute('hidden');\n }\n }\n\n get tabIndex(): number {\n return this._tabIndex;\n }\n\n set tabIndex(value: number) {\n this._tabIndex = value;\n this.setAttribute('tabindex', value.toString());\n }\n\n get accessKey(): string {\n return this._accessKey;\n }\n\n set accessKey(value: string) {\n this._accessKey = value;\n this.setAttribute('accesskey', value);\n }\n\n get contentEditable(): string {\n return this._contentEditable;\n }\n\n set contentEditable(value: string) {\n this._contentEditable = value;\n this.setAttribute('contenteditable', value);\n }\n\n get isContentEditable(): boolean {\n return this._contentEditable === 'true';\n }\n\n get innerText(): string {\n return this._innerText || this.textContent || '';\n }\n\n set innerText(value: string) {\n this._innerText = value;\n this.textContent = value;\n }\n\n get outerText(): string {\n return this._outerText || this.innerText;\n }\n\n set outerText(value: string) {\n this._outerText = value;\n if (this.parentNode) {\n const { TextBase } = require('../TextBase');\n const textNode = new TextBase(value, this._ownerDocument);\n this.parentNode.replaceChild(textNode, this);\n }\n }\n\n // innerHTML functionality is inherited from ElementBase\n\n // HTMLElement methods\n click(): void {\n // Simulate click event - in a real implementation, this would dispatch events\n console.log(`Clicked on ${this.tagName} element`);\n }\n\n focus(options?: FocusOptions): void {\n }\n\n blur(): void {\n // Remove focus state\n this.removeAttribute('data-focused');\n console.log(`Blurred ${this.tagName} element`);\n }\n\n // Override setAttribute to sync with properties\n setAttribute(qualifiedName: string, value: string): void {\n super.setAttribute(qualifiedName, value);\n\n // Sync with properties\n const name = qualifiedName.toLowerCase();\n switch (name) {\n case 'title':\n this._title = value;\n break;\n case 'lang':\n this._lang = value;\n break;\n case 'dir':\n this._dir = value;\n break;\n case 'hidden':\n this._hidden = true;\n break;\n case 'tabindex':\n this._tabIndex = parseInt(value, 10) || -1;\n break;\n case 'accesskey':\n this._accessKey = value;\n break;\n case 'contenteditable':\n this._contentEditable = 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 'title':\n this._title = '';\n break;\n case 'lang':\n this._lang = '';\n break;\n case 'dir':\n this._dir = '';\n break;\n case 'hidden':\n this._hidden = false;\n break;\n case 'tabindex':\n this._tabIndex = -1;\n break;\n case 'accesskey':\n this._accessKey = '';\n break;\n case 'contenteditable':\n this._contentEditable = 'inherit';\n break;\n }\n }\n\n // New implementations for style, dataset, nonce\n private _style: CSSStyleDeclaration | null = null;\n private _dataset: DOMStringMap | null = null;\n\n get style(): CSSStyleDeclaration {\n if (!this._style) {\n this._style = new Proxy(new CSSStyleDeclarationImpl(this), {\n get: (target, prop: string | symbol) => {\n if (typeof prop === 'string' && !(prop in target)) {\n // Convert camelCase to kebab-case for CSS properties\n const cssProp = prop.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`);\n return target.getPropertyValue(cssProp);\n }\n return (target as any)[prop];\n },\n set: (target, prop: string | symbol, value: any) => {\n if (typeof prop === 'string' && !(prop in target)) {\n // Convert camelCase to kebab-case for CSS properties\n const cssProp = prop.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`);\n target.setProperty(cssProp, String(value));\n return true;\n }\n (target as any)[prop] = value;\n return true;\n }\n }) as unknown as CSSStyleDeclaration;\n }\n return this._style;\n }\n\n set style(value: string | CSSStyleDeclaration) {\n if (typeof value === 'string') {\n this.style.cssText = value;\n }\n }\n\n private _attributeStyleMap: StylePropertyMap | null = null;\n\n get attributeStyleMap(): StylePropertyMap {\n if (!this._attributeStyleMap) {\n this._attributeStyleMap = new StylePropertyMapImpl(this);\n }\n return this._attributeStyleMap;\n }\n\n get dataset(): DOMStringMap {\n if (!this._dataset) {\n this._dataset = new Proxy({}, {\n get: (target, prop: string | symbol) => {\n if (typeof prop === 'string') {\n // Convert camelCase to kebab-case: fooBar -> data-foo-bar\n const attrName = 'data-' + prop.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`);\n return this.getAttribute(attrName);\n }\n return undefined;\n },\n set: (target, prop: string | symbol, value: any) => {\n if (typeof prop === 'string') {\n // Convert camelCase to kebab-case: fooBar -> data-foo-bar\n const attrName = 'data-' + prop.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`);\n this.setAttribute(attrName, String(value));\n return true;\n }\n return false;\n },\n deleteProperty: (target, prop: string | symbol) => {\n if (typeof prop === 'string') {\n const attrName = 'data-' + prop.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`);\n this.removeAttribute(attrName);\n return true;\n }\n return false;\n }\n });\n }\n return this._dataset;\n }\n\n get nonce(): string {\n return this.getAttribute('nonce') || '';\n }\n\n set nonce(value: string) {\n this.setAttribute('nonce', value);\n }\n}\n\n// CSSStyleDeclaration implementation\nclass CSSStyleDeclarationImpl {\n [key: string]: any;\n\n constructor(private element: HTMLElementBase) { }\n\n parentRule: any = null;\n\n getPropertyPriority(property: string): string {\n return '';\n }\n\n get cssText(): string {\n return this.element.getAttribute('style') || '';\n }\n\n set cssText(value: string) {\n this.element.setAttribute('style', value);\n }\n\n get length(): number {\n return this.parseStyle(this.cssText).size;\n }\n\n getPropertyValue(property: string): string {\n const style = this.parseStyle(this.cssText);\n return style.get(property) || '';\n }\n\n setProperty(property: string, value: string | null, priority: string = ''): void {\n const style = this.parseStyle(this.cssText);\n if (value === null || value === '') {\n style.delete(property);\n } else {\n style.set(property, value); // TODO: handle priority\n }\n this.cssText = this.serializeStyle(style);\n }\n\n removeProperty(property: string): string {\n const style = this.parseStyle(this.cssText);\n const value = style.get(property) || '';\n style.delete(property);\n this.cssText = this.serializeStyle(style);\n return value;\n }\n\n item(index: number): string {\n const style = this.parseStyle(this.cssText);\n return Array.from(style.keys())[index] || '';\n }\n\n private parseStyle(cssText: string): Map<string, string> {\n const style = new Map<string, string>();\n if (!cssText) return style;\n\n cssText.split(';').forEach(declaration => {\n const part = declaration.trim();\n if (!part) return;\n\n const colonIndex = part.indexOf(':');\n if (colonIndex !== -1) {\n const property = part.substring(0, colonIndex).trim();\n const value = part.substring(colonIndex + 1).trim();\n if (property && value) {\n style.set(property, value);\n }\n }\n });\n return style;\n }\n\n private serializeStyle(style: Map<string, string>): string {\n return Array.from(style.entries())\n .map(([property, value]) => `${property}: ${value}`)\n .join('; ');\n }\n}\n\n// StylePropertyMap implementation\nclass StylePropertyMapImpl implements StylePropertyMap {\n [key: string]: any;\n\n constructor(private element: HTMLElementBase) { }\n\n set(property: string, ...values: (string | any)[]): void {\n const value = values[0];\n this.element.style.setProperty(property, String(value));\n }\n\n append(property: string, ...values: (string | any)[]): void {\n this.set(property, ...values);\n }\n\n delete(property: string): void {\n this.element.style.removeProperty(property);\n }\n\n clear(): void {\n this.element.style.cssText = '';\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\nexport class HTMLGenericElement extends HTMLElementBase {\n\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n\n get localName(): string {\n return this._tagName.toLowerCase();\n }\n}", "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}", "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}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLDivElement`** class represents an HTML `<div>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDivElement)\n */\nexport class HTMLDivElement extends HTMLElementBase implements HTMLDivElement {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLSpanElement`** class represents an HTML `<span>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSpanElement)\n */\nexport class HTMLSpanElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLPElement`** class represents an HTML `<p>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLParagraphElement)\n */\nexport class HTMLPElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLImgElement`** class represents an HTML `<img>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)\n */\nexport class HTMLImgElement extends HTMLElementBase {\n private _src: string = '';\n private _alt: string = '';\n private _width: number = 0;\n private _height: number = 0;\n\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n\n get src(): string {\n return this._src;\n }\n\n set src(value: string) {\n this._src = value;\n this.setAttribute('src', value);\n }\n\n get alt(): string {\n return this._alt;\n }\n\n set alt(value: string) {\n this._alt = value;\n this.setAttribute('alt', value);\n }\n\n get width(): number {\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 return this._height;\n }\n\n set height(value: number) {\n this._height = value;\n this.setAttribute('height', value.toString());\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 'src':\n this._src = value;\n break;\n case 'alt':\n this._alt = value;\n break;\n case 'width':\n this._width = parseInt(value, 10) || 0;\n break;\n case 'height':\n this._height = parseInt(value, 10) || 0;\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 'src':\n this._src = '';\n break;\n case 'alt':\n this._alt = '';\n break;\n case 'width':\n this._width = 0;\n break;\n case 'height':\n this._height = 0;\n break;\n }\n }\n}", "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, 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}", "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}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLInputElement`** class represents an HTML `<input>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement)\n */\nexport class HTMLInputElement extends HTMLElementBase {\n private _type: string = 'text';\n private _value: string = '';\n private _placeholder: string = '';\n private _disabled: boolean = false;\n private _readonly: boolean = false;\n private _required: boolean = false;\n private _checked: boolean = false;\n\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\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 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 get placeholder(): string {\n return this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n this.setAttribute('placeholder', 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 readOnly(): boolean {\n return this._readonly;\n }\n\n set readOnly(value: boolean) {\n this._readonly = value;\n if (value) {\n this.setAttribute('readonly', '');\n } else {\n this.removeAttribute('readonly');\n }\n }\n\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = value;\n if (value) {\n this.setAttribute('required', '');\n } else {\n this.removeAttribute('required');\n }\n }\n\n get checked(): boolean {\n return this._checked;\n }\n\n set checked(value: boolean) {\n this._checked = value;\n if (value) {\n this.setAttribute('checked', '');\n } else {\n this.removeAttribute('checked');\n }\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 'value':\n this._value = value;\n break;\n case 'placeholder':\n this._placeholder = value;\n break;\n case 'disabled':\n this._disabled = true;\n break;\n case 'readonly':\n this._readonly = true;\n break;\n case 'required':\n this._required = true;\n break;\n case 'checked':\n this._checked = true;\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 = 'text';\n break;\n case 'value':\n this._value = '';\n break;\n case 'placeholder':\n this._placeholder = '';\n break;\n case 'disabled':\n this._disabled = false;\n break;\n case 'readonly':\n this._readonly = false;\n break;\n case 'required':\n this._required = false;\n break;\n case 'checked':\n this._checked = false;\n break;\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLH1Element`** class represents an HTML `<h1>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLHeadingElement)\n */\nexport class HTMLH1Element extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLHeadElement`** class represents an HTML `<head>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLHeadElement)\n */\nexport class HTMLHeadElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLHtmlElement`** class represents an HTML `<html>` element.\n * This is the root element of an HTML document.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLHtmlElement)\n */\nexport class HTMLHtmlElement extends HTMLElementBase {\n // private _lang: string = '';\n // private _dir: string = '';\n\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n // /**\n // * Gets or sets the language of the document.\n // */\n // get lang(): string {\n // return this._lang;\n // }\n //\n // set lang(value: string) {\n // this._lang = value;\n // this.setAttribute('lang', value);\n // }\n //\n // /**\n // * Gets or sets the text direction of the document.\n // */\n // get dir(): string {\n // return this._dir;\n // }\n //\n // set dir(value: string) {\n // this._dir = value;\n // this.setAttribute('dir', value);\n // }\n\n /**\n * Gets the version attribute (deprecated in HTML5).\n * @deprecated\n */\n get version(): string {\n return this.getAttribute('version') || '';\n }\n\n set version(value: string) {\n this.setAttribute('version', 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 'lang':\n // this.__lang = value;\n // break;\n // case 'dir':\n // this.__dir = 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 'lang':\n // this.__lang = '';\n // break;\n // case 'dir':\n // this.__dir = '';\n // break;\n // }\n // }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLTitleElement`** class represents an HTML `<title>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTitleElement)\n */\nexport class HTMLTitleElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n /**\n * Gets or sets the text content of the title element.\n */\n get text(): string {\n return this.textContent || '';\n }\n\n set text(value: string) {\n this.textContent = value;\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLLinkElement`** class represents an HTML `<link>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLLinkElement)\n */\nexport class HTMLLinkElement extends HTMLElementBase {\n private _href: string = '';\n private _rel: string = '';\n private _type: string = '';\n private _media: 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 rel(): string {\n return this._rel;\n }\n\n set rel(value: string) {\n this._rel = value;\n this.setAttribute('rel', value);\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 media(): string {\n return this._media;\n }\n\n set media(value: string) {\n this._media = value;\n this.setAttribute('media', 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 'rel':\n this._rel = value;\n break;\n case 'type':\n this._type = value;\n break;\n case 'media':\n this._media = 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 'rel':\n this._rel = '';\n break;\n case 'type':\n this._type = '';\n break;\n case 'media':\n this._media = '';\n break;\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLScriptElement`** class represents an HTML `<script>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLScriptElement)\n */\nexport class HTMLScriptElement extends HTMLElementBase {\n private _src: string = '';\n private _type: string = 'text/javascript';\n private _async: boolean = false;\n private _defer: boolean = false;\n private _crossOrigin: string = '';\n \n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get src(): string {\n return this._src;\n }\n\n set src(value: string) {\n this._src = value;\n this.setAttribute('src', value);\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 async(): boolean {\n return this._async;\n }\n\n set async(value: boolean) {\n this._async = value;\n if (value) {\n this.setAttribute('async', '');\n } else {\n this.removeAttribute('async');\n }\n }\n\n get defer(): boolean {\n return this._defer;\n }\n\n set defer(value: boolean) {\n this._defer = value;\n if (value) {\n this.setAttribute('defer', '');\n } else {\n this.removeAttribute('defer');\n }\n }\n\n get crossOrigin(): string {\n return this._crossOrigin;\n }\n\n set crossOrigin(value: string) {\n this._crossOrigin = value;\n this.setAttribute('crossorigin', value);\n }\n\n get text(): string {\n return this.textContent || '';\n }\n\n set text(value: string) {\n this.textContent = 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 'src':\n this._src = value;\n break;\n case 'type':\n this._type = value;\n break;\n case 'async':\n this._async = true;\n break;\n case 'defer':\n this._defer = true;\n break;\n case 'crossorigin':\n this._crossOrigin = 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 'src':\n this._src = '';\n break;\n case 'type':\n this._type = 'text/javascript';\n break;\n case 'async':\n this._async = false;\n break;\n case 'defer':\n this._defer = false;\n break;\n case 'crossorigin':\n this._crossOrigin = '';\n break;\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLStyleElement`** class represents an HTML `<style>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLStyleElement)\n */\nexport class HTMLStyleElement extends HTMLElementBase {\n private _type: string = 'text/css';\n private _media: string = '';\n \n constructor(tagName: string, 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 media(): string {\n return this._media;\n }\n\n set media(value: string) {\n this._media = value;\n this.setAttribute('media', 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 'media':\n this._media = 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 = 'text/css';\n break;\n case 'media':\n this._media = '';\n break;\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLFormElement`** class represents an HTML `<form>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFormElement)\n */\nexport class HTMLFormElement extends HTMLElementBase {\n private _action: string = '';\n private _method: string = 'get';\n private _enctype: string = 'application/x-www-form-urlencoded';\n private _target: string = '';\n private _noValidate: boolean = false;\n \n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get action(): string {\n return this._action;\n }\n\n set action(value: string) {\n this._action = value;\n this.setAttribute('action', value);\n }\n\n get method(): string {\n return this._method;\n }\n\n set method(value: string) {\n this._method = value.toLowerCase();\n this.setAttribute('method', value);\n }\n\n get enctype(): string {\n return this._enctype;\n }\n\n set enctype(value: string) {\n this._enctype = value;\n this.setAttribute('enctype', 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 get noValidate(): boolean {\n return this._noValidate;\n }\n\n set noValidate(value: boolean) {\n this._noValidate = value;\n if (value) {\n this.setAttribute('novalidate', '');\n } else {\n this.removeAttribute('novalidate');\n }\n }\n\n // Form methods\n submit(): void {\n // Form submission logic would go here\n console.log('Form submitted');\n }\n\n reset(): void {\n // Form reset logic would go here\n console.log('Form reset');\n }\n\n checkValidity(): boolean {\n // Form validation logic would go here\n return true;\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 'action':\n this._action = value;\n break;\n case 'method':\n this._method = value.toLowerCase();\n break;\n case 'enctype':\n this._enctype = value;\n break;\n case 'target':\n this._target = value;\n break;\n case 'novalidate':\n this._noValidate = true;\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 'action':\n this._action = '';\n break;\n case 'method':\n this._method = 'get';\n break;\n case 'enctype':\n this._enctype = 'application/x-www-form-urlencoded';\n break;\n case 'target':\n this._target = '';\n break;\n case 'novalidate':\n this._noValidate = false;\n break;\n }\n }\n}", "import { Element } from './Element';\nimport { Document } from '../Document';\nimport { HTMLElement } from './HTMLElement';\nimport { HTMLElementBase } from './HTMLElementBase';\nimport { HTMLCollection } from '../collection/HTMLCollection'\nimport { HTMLElementTagNameMap } from './index';\n\n/**\n * The **`HTMLTableElement`** class represents an HTML `<table>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableElement)\n */\nexport class HTMLTableElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get caption(): HTMLElement | null {\n return this.querySelector('caption');\n }\n\n get tHead(): HTMLElement | null {\n return this.querySelector('thead');\n }\n\n get tFoot(): HTMLElement | null {\n return this.querySelector('tfoot');\n }\n\n get tBodies(): HTMLCollection {\n return this.querySelectorAll('tbody') as any;\n }\n\n get rows(): HTMLCollection {\n return this.querySelectorAll('tr') as any;\n }\n\n createCaption(): HTMLElement {\n let caption = this.caption;\n if (!caption) {\n caption = this.ownerDocument.createElement('caption');\n this.insertBefore(caption, this.firstChild);\n }\n return caption;\n }\n\n deleteCaption(): void {\n const caption = this.caption;\n if (caption) {\n this.removeChild(caption);\n }\n }\n\n createTHead(): HTMLElement {\n let thead = this.tHead;\n if (!thead) {\n thead = this.ownerDocument.createElement('thead');\n const firstTBody = this.querySelector('tbody');\n this.insertBefore(thead, firstTBody);\n }\n return thead;\n }\n\n deleteTHead(): void {\n const thead = this.tHead;\n if (thead) {\n this.removeChild(thead);\n }\n }\n\n createTFoot(): HTMLElement {\n let tfoot = this.tFoot;\n if (!tfoot) {\n tfoot = this.ownerDocument.createElement('tfoot');\n this.appendChild(tfoot);\n }\n return tfoot;\n }\n\n deleteTFoot(): void {\n const tfoot = this.tFoot;\n if (tfoot) {\n this.removeChild(tfoot);\n }\n }\n\n insertRow(index?: number): HTMLElement {\n const row = this.ownerDocument.createElement('tr');\n const rows = this.rows;\n \n if (index === undefined || index === -1) {\n // Append to the end\n const lastTBody = this.querySelector('tbody:last-child');\n if (lastTBody) {\n lastTBody.appendChild(row);\n } else {\n this.appendChild(row);\n }\n } else {\n // Insert at specific index\n if (index >= 0 && index < rows.length) {\n const referenceRow = rows[index];\n referenceRow.parentNode?.insertBefore(row, referenceRow);\n }\n }\n \n return row;\n }\n\n deleteRow(index: number): void {\n const rows = this.rows;\n if (index >= 0 && index < rows.length) {\n const row = rows[index];\n row.parentNode?.removeChild(row);\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLUListElement`** class represents an HTML `<ul>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLUListElement)\n */\nexport class HTMLUListElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLOListElement`** class represents an HTML `<ol>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOListElement)\n */\nexport class HTMLOListElement extends HTMLElementBase {\n private _start: number = 1;\n private _type: string = '';\n private _reversed: boolean = false;\n \n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get start(): number {\n return this._start;\n }\n\n set start(value: number) {\n this._start = value;\n this.setAttribute('start', value.toString());\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 reversed(): boolean {\n return this._reversed;\n }\n\n set reversed(value: boolean) {\n this._reversed = value;\n if (value) {\n this.setAttribute('reversed', '');\n } else {\n this.removeAttribute('reversed');\n }\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 'start':\n this._start = parseInt(value, 10) || 1;\n break;\n case 'type':\n this._type = value;\n break;\n case 'reversed':\n this._reversed = true;\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 'start':\n this._start = 1;\n break;\n case 'type':\n this._type = '';\n break;\n case 'reversed':\n this._reversed = false;\n break;\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLLIElement`** class represents an HTML `<li>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLLIElement)\n */\nexport class HTMLLIElement extends HTMLElementBase {\n private _value: number = 0;\n \n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get value(): number {\n return this._value;\n }\n\n set value(value: number) {\n this._value = value;\n this.setAttribute('value', value.toString());\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 'value':\n this._value = parseInt(value, 10) || 0;\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 'value':\n this._value = 0;\n break;\n }\n }\n}", "import { ElementBase } from './ElementBase';\n\n/**\n * The **`SVGElement`** class represents the base class for all SVG elements.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGElement)\n */\nexport class SVGElement extends ElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get namespaceURI(): string | null {\n return 'http://www.w3.org/2000/svg';\n }\n}", "import { SVGElement } from './SVGElement';\n\n/**\n * The **`SVGCircleElement`** class represents an SVG `<circle>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGCircleElement)\n */\nexport class SVGCircleElement extends SVGElement {\n private _cx: number = 0;\n private _cy: number = 0;\n private _r: number = 0;\n\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get cx(): number {\n return this._cx;\n }\n\n set cx(value: number) {\n this._cx = value;\n this.setAttribute('cx', value.toString());\n }\n\n get cy(): number {\n return this._cy;\n }\n\n set cy(value: number) {\n this._cy = value;\n this.setAttribute('cy', value.toString());\n }\n\n get r(): number {\n return this._r;\n }\n\n set r(value: number) {\n this._r = value;\n this.setAttribute('r', value.toString());\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 'cx':\n this._cx = parseFloat(value) || 0;\n break;\n case 'cy':\n this._cy = parseFloat(value) || 0;\n break;\n case 'r':\n this._r = parseFloat(value) || 0;\n break;\n }\n }\n}", "import { SVGElement } from './SVGElement';\n\n/**\n * The **`SVGRectElement`** class represents an SVG `<rect>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGRectElement)\n */\nexport class SVGRectElement extends SVGElement {\n private _x: number = 0;\n private _y: number = 0;\n private _width: number = 0;\n private _height: number = 0;\n\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get x(): number {\n return this._x;\n }\n\n set x(value: number) {\n this._x = value;\n this.setAttribute('x', value.toString());\n }\n\n get y(): number {\n return this._y;\n }\n\n set y(value: number) {\n this._y = value;\n this.setAttribute('y', value.toString());\n }\n\n get width(): number {\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 return this._height;\n }\n\n set height(value: number) {\n this._height = value;\n this.setAttribute('height', value.toString());\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 'x':\n this._x = parseFloat(value) || 0;\n break;\n case 'y':\n this._y = parseFloat(value) || 0;\n break;\n case 'width':\n this._width = parseFloat(value) || 0;\n break;\n case 'height':\n this._height = parseFloat(value) || 0;\n break;\n }\n }\n}", "import { ElementBase } from './ElementBase';\n\n/**\n * The **`HTMLMetaElement`** class represents an HTML `<meta>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMetaElement)\n */\nexport class HTMLMetaElement extends ElementBase {\n constructor(tagName: string, ownerDocument?: any){\n super(tagName, ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nimport { DocumentFragmentBase } from '../DocumentFragmentBase';\nimport { Node, TEXT_NODE } from \"../Node\";\nimport {Text} from '../Text'\nimport {ElementFactory} from '../../factory/ElementFactory';\nimport { NodeBase } from \"../NodeBase\";\n\n/**\n * The **`HTMLTemplateElement`** class represents an HTML `<template>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTemplateElement)\n */\nexport class HTMLTemplateElement extends HTMLElementBase {\n private _content: DocumentFragmentBase;\n \n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n \n // Create the content DocumentFragment\n this._content = new DocumentFragmentBase(ownerDocument);\n \n // Parse innerHTML into the content fragment instead of the template itself\n this._parseContentFromInnerHTML();\n }\n\n /**\n * Gets the content DocumentFragment of the template.\n */\n get content(): DocumentFragmentBase {\n return this._content;\n }\n\n /**\n * Override innerHTML setter to populate the content fragment\n */\n set innerHTML(value: string) {\n // Clear existing content\n while (this._content.childNodes.length > 0) {\n const child = this._content.childNodes[0];\n if (child) {\n this._content.removeChild(child);\n }\n }\n\n // Parse HTML into content fragment\n if (value.trim()) {\n this._parseHTMLIntoContent(value);\n }\n }\n\n /**\n * Override innerHTML getter to return content fragment's innerHTML\n */\n get innerHTML(): string {\n // Generate HTML from content fragment's children\n let html = '';\n for (let i = 0; i < this._content.childNodes.length; i++) {\n const child = this._content.childNodes[i];\n if (child && 'outerHTML' in child) {\n html += (child as any).outerHTML;\n } else if (child && child.nodeType === TEXT_NODE) {\n html += (child as any).textContent || '';\n } else if (child && child.nodeType === 8) { // COMMENT_NODE\n html += `<!--${(child as any).textContent || ''}-->`;\n }\n }\n return html;\n }\n\n /**\n * Override appendChild to add children to both template and content\n * Template elements can have direct children, and they're also copied to content\n */\n appendChild<T extends Node>(node: T): T {\n // Add to template itself (like normal element)\n const result = super.appendChild(node);\n \n // Also add a clone to the content fragment\n if ('cloneNode' in node) {\n this._content.appendChild((node as any).cloneNode(true));\n }\n \n return result;\n }\n\n private _parseContentFromInnerHTML(): void {\n // If template already has children from parsing, move them to content\n const children = [...this._childNodesInternal];\n for (const child of children) {\n if (child) {\n this.removeChild(child);\n this._content.appendChild(child);\n }\n }\n }\n\n private _parseHTMLIntoContent(html: string): void {\n // Better approach: Create a temporary container and leverage ElementBase's innerHTML\n // This avoids code duplication and ensures consistency\n const tempContainer = new (require('./ElementBase').ElementBase)('div', this._ownerDocument);\n \n // Use ElementBase's proven innerHTML parsing\n tempContainer.innerHTML = html;\n \n // Move all parsed children to the content fragment\n while (tempContainer.firstChild) {\n this._content.appendChild(tempContainer.firstChild);\n }\n }\n\n\n}", "import {HTMLElementBase} from './HTMLElementBase';\nimport {HTMLCollection} from '../collection';\nimport {HTMLElement} from './HTMLElement';\n\n/**\n * The **`HTMLTheadElement`** class represents an HTML `<thead>` element.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableSectionElement)\n */\nexport class HTMLTheadElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get rows(): HTMLCollection {\n return this.querySelectorAll('tr') as any;\n }\n\n insertRow(index?: number): HTMLElement {\n const row = this.ownerDocument.createElement('tr');\n const rows = this.rows;\n\n if (index === undefined || index === -1) {\n // Append to the end\n this.appendChild(row);\n } else {\n // Insert at specific index\n if (index >= 0 && index < rows.length) {\n const referenceRow = rows[index];\n this.insertBefore(row, referenceRow);\n } else if (index >= rows.length) {\n this.appendChild(row);\n }\n }\n\n return row;\n }\n\n deleteRow(index: number): void {\n const rows = this.rows;\n if (index >= 0 && index < rows.length) {\n const row = rows[index];\n this.removeChild(row);\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nimport { HTMLCollection } from '../collection';\nimport { HTMLElement } from './HTMLElement';\n/**\n * The **`HTMLTfootElement`** class represents an HTML `<tfoot>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableSectionElement)\n */\nexport class HTMLTfootElement extends HTMLElementBase {\n static readonly TAG_NAME = 'TFOOT';\n \n constructor(ownerDocument?: any) {\n super(HTMLTfootElement.TAG_NAME, ownerDocument);\n }\n\n get rows(): HTMLCollection {\n return this.querySelectorAll('tr') as any;\n }\n\n insertRow(index?: number): HTMLElement {\n const row = this.ownerDocument.createElement('tr');\n const rows = this.rows;\n \n if (index === undefined || index === -1) {\n // Append to the end\n this.appendChild(row);\n } else {\n // Insert at specific index\n if (index >= 0 && index < rows.length) {\n const referenceRow = rows[index];\n this.insertBefore(row, referenceRow);\n } else if (index >= rows.length) {\n this.appendChild(row);\n }\n }\n \n return row;\n }\n\n deleteRow(index: number): void {\n const rows = this.rows;\n if (index >= 0 && index < rows.length) {\n const row = rows[index];\n this.removeChild(row);\n }\n }\n}", "import { HTMLElement } from './HTMLElement';\nimport { HTMLElementBase } from './HTMLElementBase';\nimport { HTMLCollection, NodeListOf, NodeList, HTMLCollectionOf } from '../collection';\n/**\n * The **`HTMLTrElement`** class represents an HTML `<tr>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableRowElement)\n */\nexport class HTMLTrElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get cells(): HTMLCollection {\n return this.querySelectorAll('td, th') as any;\n }\n\n get rowIndex(): number {\n const table = this.closest('table');\n if (!table) return -1;\n \n const allRows = table.querySelectorAll('tr');\n for (let i = 0; i < allRows.length; i++) {\n const a = allRows[i];\n if (allRows[i] === this) {\n return i;\n }\n }\n return -1;\n }\n\n get sectionRowIndex(): number {\n const section = this.parentElement;\n if (!section) return -1;\n \n const sectionRows = section.querySelectorAll('tr');\n for (let i = 0; i < sectionRows.length; i++) {\n if (sectionRows[i] === this) {\n return i;\n }\n }\n return -1;\n }\n\n insertCell(index?: number): HTMLElement {\n const cell = this.ownerDocument.createElement('td');\n const cells = this.cells;\n \n if (index === undefined || index === -1) {\n // Append to the end\n this.appendChild(cell);\n } else {\n // Insert at specific index\n if (index >= 0 && index < cells.length) {\n const referenceCell = cells[index];\n this.insertBefore(cell, referenceCell);\n } else if (index >= cells.length) {\n this.appendChild(cell);\n }\n }\n \n return cell;\n }\n\n deleteCell(index: number): void {\n const cells = this.cells;\n if (index >= 0 && index < cells.length) {\n const cell = cells[index];\n this.removeChild(cell);\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLTdElement`** class represents an HTML `<td>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableCellElement)\n */\nexport class HTMLTdElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get cellIndex(): number {\n const row = this.parentElement;\n if (!row) return -1;\n \n const cells = row.querySelectorAll('td, th');\n for (let i = 0; i < cells.length; i++) {\n if (cells[i] === this) {\n return i;\n }\n }\n return -1;\n }\n\n get colSpan(): number {\n const value = this.getAttribute('colspan');\n return value ? parseInt(value, 10) : 1;\n }\n\n set colSpan(value: number) {\n this.setAttribute('colspan', value.toString());\n }\n\n get rowSpan(): number {\n const value = this.getAttribute('rowspan');\n return value ? parseInt(value, 10) : 1;\n }\n\n set rowSpan(value: number) {\n this.setAttribute('rowspan', value.toString());\n }\n\n get headers(): string {\n return this.getAttribute('headers') || '';\n }\n\n set headers(value: string) {\n this.setAttribute('headers', value);\n }\n\n get scope(): string {\n return this.getAttribute('scope') || '';\n }\n\n set scope(value: string) {\n this.setAttribute('scope', value);\n }\n\n get abbr(): string {\n return this.getAttribute('abbr') || '';\n }\n\n set abbr(value: string) {\n this.setAttribute('abbr', value);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLThElement`** class represents an HTML `<th>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableCellElement)\n */\nexport class HTMLThElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get cellIndex(): number {\n const row = this.parentElement;\n if (!row) return -1;\n \n const cells = row.querySelectorAll('td, th');\n for (let i = 0; i < cells.length; i++) {\n if (cells[i] === this) {\n return i;\n }\n }\n return -1;\n }\n\n get colSpan(): number {\n const value = this.getAttribute('colspan');\n return value ? parseInt(value, 10) : 1;\n }\n\n set colSpan(value: number) {\n this.setAttribute('colspan', value.toString());\n }\n\n get rowSpan(): number {\n const value = this.getAttribute('rowspan');\n return value ? parseInt(value, 10) : 1;\n }\n\n set rowSpan(value: number) {\n this.setAttribute('rowspan', value.toString());\n }\n\n get headers(): string {\n return this.getAttribute('headers') || '';\n }\n\n set headers(value: string) {\n this.setAttribute('headers', value);\n }\n\n get scope(): string {\n return this.getAttribute('scope') || '';\n }\n\n set scope(value: string) {\n this.setAttribute('scope', value);\n }\n\n get abbr(): string {\n return this.getAttribute('abbr') || '';\n }\n\n set abbr(value: string) {\n this.setAttribute('abbr', value);\n }\n}", "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}", "import { HTMLElementBase } from './HTMLElementBase';\nimport { HTMLCollection } from '../collection';\nimport {HTMLElement} from \"./HTMLElement\";\n\n/**\n * The **`HTMLTbodyElement`** class represents an HTML `<tbody>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableSectionElement)\n */\nexport class HTMLTbodyElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get rows(): HTMLCollection {\n return this.querySelectorAll('tr') as any;\n }\n\n insertRow(index?: number): HTMLElement {\n const row = this.ownerDocument.createElement('tr');\n const rows = this.rows;\n \n if (index === undefined || index === -1) {\n // Append to the end\n this.appendChild(row);\n } else {\n // Insert at specific index\n if (index >= 0 && index < rows.length) {\n const referenceRow = rows[index];\n this.insertBefore(row, referenceRow);\n } else if (index >= rows.length) {\n this.appendChild(row);\n }\n }\n\n return row;\n }\n\n deleteRow(index: number): void {\n const rows = this.rows;\n if (index >= 0 && index < rows.length) {\n const row = rows[index];\n this.removeChild(row);\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nimport { Document } from '../Document';\n\n/**\n * The **`HTMLEmbedElement`** interface provides special properties (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating `<embed>` elements.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLEmbedElement)\n */\nexport class HTMLEmbedElement extends HTMLElementBase {\n /**\n * A string reflecting the `src` HTML attribute, containing the address of the resource.\n */\n src: string = '';\n\n /**\n * A string reflecting the `type` HTML attribute, containing the type of the resource.\n */\n type: string = '';\n\n /**\n * A string reflecting the `width` HTML attribute, containing the displayed width of the resource in CSS pixels.\n */\n width: string = '';\n\n /**\n * A string reflecting the `height` HTML attribute, containing the displayed height of the resource in CSS pixels.\n */\n height: string = '';\n\n constructor(ownerDocument: Document) {\n super('embed', ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nimport { Document } from '../Document';\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}", "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}", "import { ElementBase } from './ElementBase';\n\n/**\n * The **`MathMLElement`** class represents the base class for all MathML elements.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MathMLElement)\n */\nexport class MathMLElement extends ElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName.toUpperCase(), ownerDocument);\n }\n\n get namespaceURI(): string | null {\n return 'http://www.w3.org/1998/Math/MathML';\n }\n}", "// Base Element interfaces and types\nexport { Element, DOMTokenList } from './Element';\nexport { HTMLCollection, HTMLCollectionOf } from '../collection';\n\n// Base Element implementations\nexport { ElementBase } from './ElementBase';\nexport { HTMLElementBase } from './HTMLElementBase';\nexport { HTMLGenericElement } from './HTMLGenericElement';\n\n// Import all element classes\nimport { HTMLAnchorElement } from './HTMLAnchorElement';\nimport { HTMLBodyElement } from './HTMLBodyElement';\nimport { HTMLDivElement } from './HTMLDivElement';\nimport { HTMLSpanElement } from './HTMLSpanElement';\nimport { HTMLPElement } from './HTMLPElement';\nimport { HTMLImgElement } from './HTMLImgElement';\nimport { HTMLButtonElement } from './HTMLButtonElement';\nimport { HTMLCanvasElement } from './HTMLCanvasElement';\nimport { HTMLInputElement } from './HTMLInputElement';\nimport { HTMLH1Element } from './HTMLH1Element';\nimport { HTMLHeadElement } from './HTMLHeadElement';\nimport { HTMLHtmlElement } from './HTMLHtmlElement';\nimport { HTMLTitleElement } from './HTMLTitleElement';\nimport { HTMLLinkElement } from './HTMLLinkElement';\nimport { HTMLScriptElement } from './HTMLScriptElement';\nimport { HTMLStyleElement } from './HTMLStyleElement';\nimport { HTMLFormElement } from './HTMLFormElement';\nimport { HTMLTableElement } from './HTMLTableElement';\nimport { HTMLUListElement } from './HTMLUListElement';\nimport { HTMLOListElement } from './HTMLOListElement';\nimport { HTMLLIElement } from './HTMLLIElement';\nimport { SVGElement } from './SVGElement';\nimport { SVGCircleElement } from './SVGCircleElement';\nimport { SVGRectElement } from './SVGRectElement';\nimport { HTMLMetaElement } from './HTMLMetaElement';\nimport { HTMLTemplateElement } from './HTMLTemplateElement';\nimport { HTMLTheadElement } from './HTMLTheadElement';\nimport { HTMLTfootElement } from './HTMLTfootElement';\nimport { HTMLTrElement } from './HTMLTrElement';\nimport { HTMLTdElement } from './HTMLTdElement';\nimport { HTMLThElement } from './HTMLThElement';\nimport { HTMLCaptionElement } from './HTMLCaptionElement';\nimport { HTMLTbodyElement } from './HTMLTbodyElement';\nimport { HTMLEmbedElement } from './HTMLEmbedElement';\nimport { HTMLAreaElement } from './HTMLAreaElement';\nimport { HTMLBaseElement } from './HTMLBaseElement';\nimport { MathMLElement } from './MathMLElement';\n\n// Export all element classes\nexport {\n HTMLAnchorElement,\n HTMLBodyElement,\n HTMLDivElement,\n HTMLHeadElement,\n HTMLHtmlElement,\n HTMLSpanElement,\n HTMLPElement,\n HTMLImgElement,\n HTMLButtonElement,\n HTMLCanvasElement,\n HTMLInputElement,\n HTMLH1Element,\n HTMLTitleElement,\n HTMLLinkElement,\n HTMLScriptElement,\n HTMLStyleElement,\n HTMLFormElement,\n HTMLTableElement,\n HTMLUListElement,\n HTMLOListElement,\n HTMLLIElement,\n SVGElement,\n SVGCircleElement,\n SVGRectElement,\n HTMLMetaElement,\n HTMLTemplateElement,\n HTMLTheadElement,\n HTMLTfootElement,\n HTMLTrElement,\n HTMLTdElement,\n HTMLThElement,\n HTMLCaptionElement,\n HTMLTbodyElement,\n HTMLEmbedElement,\n HTMLAreaElement,\n HTMLBaseElement,\n MathMLElement,\n};\n\n// HTML Elements mapping with explicit string keys for proper type inference\nexport const htmlElements = {\n 'a': HTMLAnchorElement,\n 'body': HTMLBodyElement,\n 'button': HTMLButtonElement,\n 'canvas': HTMLCanvasElement,\n 'div': HTMLDivElement,\n 'h1': HTMLH1Element,\n 'head': HTMLHeadElement,\n 'html': HTMLHtmlElement,\n 'img': HTMLImgElement,\n 'input': HTMLInputElement,\n 'p': HTMLPElement,\n 'meta': HTMLMetaElement,\n 'span': HTMLSpanElement,\n 'title': HTMLTitleElement,\n 'link': HTMLLinkElement,\n 'script': HTMLScriptElement,\n 'style': HTMLStyleElement,\n 'form': HTMLFormElement,\n 'table': HTMLTableElement,\n 'ul': HTMLUListElement,\n 'ol': HTMLOListElement,\n 'li': HTMLLIElement,\n 'template': HTMLTemplateElement,\n 'thead': HTMLTheadElement,\n 'tfoot': HTMLTfootElement,\n 'tr': HTMLTrElement,\n 'td': HTMLTdElement,\n 'th': HTMLThElement,\n 'caption': HTMLCaptionElement,\n 'tbody': HTMLTbodyElement,\n 'embed': HTMLEmbedElement,\n 'area': HTMLAreaElement,\n 'base': HTMLBaseElement,\n} as const;\n\n// SVG Elements mapping with explicit string keys\nexport const svgElements = {\n 'svg': SVGElement,\n 'circle': SVGCircleElement,\n 'rect': SVGRectElement,\n} as const;\n\n// MathML Elements mapping - all use MathMLElement\nexport const mathmlElements = {\n 'annotation': MathMLElement,\n 'annotation-xml': MathMLElement,\n 'maction': MathMLElement,\n 'math': MathMLElement,\n 'merror': MathMLElement,\n 'mfrac': MathMLElement,\n 'mi': MathMLElement,\n 'mmultiscripts': MathMLElement,\n 'mn': MathMLElement,\n 'mo': MathMLElement,\n 'mover': MathMLElement,\n 'mpadded': MathMLElement,\n 'mphantom': MathMLElement,\n 'mprescripts': MathMLElement,\n 'mroot': MathMLElement,\n 'mrow': MathMLElement,\n 'ms': MathMLElement,\n 'mspace': MathMLElement,\n 'msqrt': MathMLElement,\n 'mstyle': MathMLElement,\n 'msub': MathMLElement,\n 'msubsup': MathMLElement,\n 'msup': MathMLElement,\n 'mtable': MathMLElement,\n 'mtd': MathMLElement,\n 'mtext': MathMLElement,\n 'mtr': MathMLElement,\n 'munder': MathMLElement,\n 'munderover': MathMLElement,\n 'semantics': MathMLElement,\n} as const;\n\n// Type-safe tag name mappings - back to the working approach\nexport type HTMLElementTagNameMap = {\n [K in keyof typeof htmlElements]: InstanceType<typeof htmlElements[K]>;\n};\n\nexport type SVGElementTagNameMap = {\n [K in keyof typeof svgElements]: InstanceType<typeof svgElements[K]>;\n};\n\nexport type MathMLElementTagNameMap = {\n [K in keyof typeof mathmlElements]: InstanceType<typeof mathmlElements[K]>;\n};\n\nexport interface HTMLElementDeprecatedTagNameMap {\n // deprecated \uD0DC\uADF8\uB4E4\n}\n\n// Type aliases for Document interface compatibility\nexport type HTMLImageElement = HTMLImgElement;", "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): HTMLElementBase {\n const normalizedTagName = tagName.toLowerCase();\n \n // Check HTML elements\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 [\n ...ElementFactory.getSupportedHTMLTagNames(),\n ...ElementFactory.getSupportedSVGTagNames(),\n ...ElementFactory.getSupportedMathMLTagNames()\n ];\n }\n}", "import { DomParser, DomParserOptions } from \"./DomParser\";\n\n// Main exports - what users actually need\nexport { DomParser };\n\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\";", "import {DocumentBase} from './node/DocumentBase';\nimport {TextBase} from './node/TextBase';\nimport {Comment} from './node/Comment';\nimport {WindowBase} from './window/WindowBase';\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 // Simple HTML parsing implementation\n if (!html.trim()) {\n return;\n }\n\n // Basic HTML parsing - this is a simplified version\n // In a real implementation, you'd use a proper HTML parser\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\n // Create element\n const element = this.document.createElement(tagName.toLowerCase());\n\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\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\n // For now, just use the elements as they are parsed\n // TODO: Implement proper DOM structure reorganization later\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}", "import {ParentNodeBase} from './ParentNodeBase';\nimport {DOCUMENT_NODE, Node} from './Node';\nimport {Document, ElementCreationOptions, DocumentReadyState, DocumentVisibilityState, ImportNodeOptions, CaretPositionFromPointOptions, StartViewTransitionOptions, ViewTransitionUpdateCallback} from './Document';\nimport {Location} from '../window/Window';\nimport {Comment} from './Comment';\nimport {Text} from './Text';\nimport {DocumentFragment} from './DocumentFragment';\nimport {DocumentFragmentBase} from './DocumentFragmentBase';\nimport {Element} from './elements/Element';\nimport {HTMLElement} from './elements/HTMLElement';\nimport {HTMLCollection, HTMLCollectionOf} from './collection';\nimport {HTMLElementTagNameMap, SVGElementTagNameMap, MathMLElementTagNameMap, HTMLElementDeprecatedTagNameMap} from './elements';\nimport {NodeListOf} from './collection/NodeListOf';\nimport {ElementFactory} from '../factory';\nimport {NodeIterator, NodeFilter} from './NodeIterator';\n\n// Document event listener interface\ninterface DocumentEventListener {\n type: string;\n listener: (event: any) => void;\n options?: boolean | AddEventListenerOptions;\n}\n\n/**\n * The **`DocumentBase`** class is the concrete implementation of the Document interface.\n */\nexport class DocumentBase extends ParentNodeBase implements Document {\n // Event system\n private _eventListeners: DocumentEventListener[] = [];\n private _readyState: DocumentReadyState = 'uninitialized' as any;\n private _window: any = null; // Reference to window for load event\n // Properties\n readonly URL: string = 'about:blank';\n alinkColor: string = '';\n readonly all: any = null;\n readonly anchors: HTMLCollectionOf<any> = new HTMLCollectionOf([]);\n readonly applets: HTMLCollection = new HTMLCollection([]);\n bgColor: string = '';\n body: HTMLElement = null as any;\n readonly characterSet: string = 'UTF-8';\n readonly charset: string = 'UTF-8';\n readonly compatMode: string = 'CSS1Compat';\n readonly contentType: string = 'text/html';\n cookie: string = '';\n readonly currentScript: any = null;\n readonly defaultView: any = null;\n designMode: string = 'off';\n dir: string = '';\n readonly doctype: any = null;\n readonly documentElement: HTMLElement = null as any;\n readonly documentURI: string = 'about:blank';\n domain: string = '';\n readonly embeds: HTMLCollectionOf<any> = new HTMLCollectionOf([]);\n fgColor: string = '';\n readonly forms: HTMLCollectionOf<any> = new HTMLCollectionOf([]);\n readonly fragmentDirective: any = null;\n readonly fullscreen: boolean = false;\n readonly fullscreenEnabled: boolean = false;\n readonly head: any = null;\n readonly hidden: boolean = false;\n readonly images: HTMLCollectionOf<any> = new HTMLCollectionOf([]);\n readonly implementation: any = null;\n readonly inputEncoding: string = 'UTF-8';\n readonly lastModified: string = new Date().toString();\n linkColor: string = '';\n readonly links: HTMLCollectionOf<any> = new HTMLCollectionOf([]);\n \n // Location property - simple implementation for Document\n private _location: Location = {\n href: 'about:blank',\n protocol: 'about:',\n host: '',\n hostname: '',\n port: '',\n pathname: 'blank',\n search: '',\n hash: '',\n origin: 'null',\n assign: (url: string) => { this._location.href = url; },\n replace: (url: string) => { this._location.href = url; },\n reload: () => {},\n // @ts-ignore\n toString: () => this._location.href\n };\n\n setLocation(location: Location): void {\n this._location = location;\n }\n get location(): any {\n return this._location;\n }\n \n set location(href: string) {\n this._location.href = href;\n // Simple URL parsing for document location\n try {\n const url = new URL(href);\n this._location.protocol = url.protocol;\n this._location.host = url.host;\n this._location.hostname = url.hostname;\n this._location.port = url.port;\n this._location.pathname = url.pathname;\n this._location.search = url.search;\n this._location.hash = url.hash;\n this._location.origin = url.origin;\n } catch (e) {\n // Keep defaults for invalid URLs\n }\n }\n \n // Event handlers\n onfullscreenchange: ((this: Document, ev: Event) => any) | null = null;\n onfullscreenerror: ((this: Document, ev: Event) => any) | null = null;\n onpointerlockchange: ((this: Document, ev: Event) => any) | null = null;\n onpointerlockerror: ((this: Document, ev: Event) => any) | null = null;\n onreadystatechange: ((this: Document, ev: Event) => any) | null = null;\n onvisibilitychange: ((this: Document, ev: Event) => any) | null = null;\n \n get ownerDocument(): null {\n return null;\n }\n readonly pictureInPictureEnabled: boolean = false;\n readonly plugins: HTMLCollectionOf<any> = new HTMLCollectionOf([]);\n get readyState(): DocumentReadyState {\n return this._readyState;\n }\n readonly referrer: string = '';\n readonly rootElement: any = null;\n readonly scripts: HTMLCollectionOf<any> = new HTMLCollectionOf([]);\n readonly scrollingElement: Element | null = null;\n readonly timeline: any = null;\n get title(): string {\n const titleElement = this.querySelector('title');\n return titleElement ? titleElement.textContent || '' : '';\n }\n \n set title(value: string) {\n let titleElement = this.querySelector('title');\n if (!titleElement) {\n // Create title element if it doesn't exist\n titleElement = this.createElement('title');\n const head = this.head || this.querySelector('head');\n if (head) {\n head.appendChild(titleElement);\n }\n }\n titleElement.textContent = value;\n }\n readonly visibilityState: DocumentVisibilityState = 'visible';\n vlinkColor: string = '';\n\n constructor() {\n super(DOCUMENT_NODE, '#document');\n this._ownerDocument = null;\n\n // Create basic document structure\n const documentElement = this.createElement('html') as HTMLElement;\n const head = this.createElement('head') as HTMLElement;\n const body = this.createElement('body') as HTMLElement;\n\n documentElement.appendChild(head);\n documentElement.appendChild(body);\n this.appendChild(documentElement);\n\n // Set readonly properties\n (this as any).documentElement = documentElement;\n (this as any).head = head;\n this.body = body;\n }\n\n get textContent(): null {\n return null;\n }\n\n // Methods\n adoptNode<T extends Node>(node: T): T {\n (node as any)._ownerDocument = this;\n return node;\n }\n\n captureEvents(): void {}\n\n caretPositionFromPoint(_x: number, _y: number, _options?: CaretPositionFromPointOptions): any {\n return null;\n }\n\n caretRangeFromPoint(_x: number, _y: number): any {\n return null;\n }\n\n clear(): void {}\n\n close(): void {}\n\n createAttribute(localName: string): any {\n return { name: localName, value: '' };\n }\n\n createAttributeNS(_namespace: string | null, qualifiedName: string): any {\n return { name: qualifiedName, value: '' };\n }\n\n createCDATASection(data: string): any {\n return { data, nodeType: 4 };\n }\n\n createComment(data: string): Comment {\n return new Comment(data, this);\n }\n\n createDocumentFragment(): DocumentFragment {\n return new DocumentFragmentBase(this);\n }\n\n createElement<K extends keyof HTMLElementTagNameMap>(tagName: K, _options?: ElementCreationOptions): HTMLElementTagNameMap[K];\n createElement<K extends keyof HTMLElementDeprecatedTagNameMap>(tagName: K, _options?: ElementCreationOptions): HTMLElementDeprecatedTagNameMap[K];\n createElement(tagName: string, _options?: ElementCreationOptions): HTMLElement;\n createElement(tagName: string, _options?: ElementCreationOptions): HTMLElement {\n return ElementFactory.createElement(tagName, this);\n }\n\n createElementNS(namespaceURI: \"http://www.w3.org/1999/xhtml\", qualifiedName: string): HTMLElement;\n createElementNS<K extends keyof SVGElementTagNameMap>(namespaceURI: \"http://www.w3.org/2000/svg\", qualifiedName: K): SVGElementTagNameMap[K];\n createElementNS(namespaceURI: \"http://www.w3.org/2000/svg\", qualifiedName: string): any;\n createElementNS<K extends keyof MathMLElementTagNameMap>(namespaceURI: \"http://www.w3.org/1998/Math/MathML\", qualifiedName: K): MathMLElementTagNameMap[K];\n createElementNS(namespaceURI: \"http://www.w3.org/1998/Math/MathML\", qualifiedName: string): any;\n createElementNS(namespaceURI: string | null, qualifiedName: string, options?: ElementCreationOptions): Element;\n createElementNS(_namespace: string | null, qualifiedName: string, _options?: string | ElementCreationOptions): Element;\n createElementNS(_namespaceURI: string | null, qualifiedName: string, _options?: ElementCreationOptions | string): Element {\n return ElementFactory.createElement(qualifiedName, this);\n }\n\n createEvent(_eventInterface: string): any {\n return {};\n }\n\n createNodeIterator(root: Node, whatToShow: number = NodeFilter.SHOW_ALL, filter: NodeFilter | null = null): NodeIterator {\n return new NodeIterator(root, whatToShow, filter);\n }\n\n createProcessingInstruction(target: string, data: string): any {\n return { target, data, nodeType: 7 };\n }\n\n createRange(): any {\n return {};\n }\n\n createTextNode(data: string): Text {\n const { TextBase } = require('./TextBase');\n return new TextBase(data, this);\n }\n\n createTreeWalker(_root: Node, _whatToShow?: number, _filter?: any): any {\n return {};\n }\n\n execCommand(_commandId: string, _showUI?: boolean, _value?: string): boolean {\n return false;\n }\n\n exitFullscreen(): Promise<void> {\n return Promise.resolve();\n }\n\n exitPictureInPicture(): Promise<void> {\n return Promise.resolve();\n }\n\n exitPointerLock(): void {}\n\n getElementById(elementId: string): HTMLElement | null {\n const elements = this.querySelectorAll(`#${elementId}`);\n return elements.length > 0 ? elements[0] as HTMLElement : null;\n }\n\n getElementsByClassName(classNames: string): HTMLCollectionOf<Element> {\n const elements = this.querySelectorAll(`.${classNames.split(' ').join('.')}`);\n return new HTMLCollectionOf(Array.from(elements));\n }\n\n getElementsByName(elementName: string): NodeListOf<HTMLElement> {\n const elements = this.querySelectorAll(`[name=\"${elementName}\"]`);\n return new NodeListOf(Array.from(elements) as HTMLElement[]);\n }\n\n getElementsByTagName<K extends keyof HTMLElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<HTMLElementTagNameMap[K]>;\n getElementsByTagName<K extends keyof SVGElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<SVGElementTagNameMap[K]>;\n getElementsByTagName<K extends keyof MathMLElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<MathMLElementTagNameMap[K]>;\n getElementsByTagName<K extends keyof HTMLElementDeprecatedTagNameMap>(qualifiedName: K): HTMLCollectionOf<HTMLElementDeprecatedTagNameMap[K]>;\n getElementsByTagName(qualifiedName: string): HTMLCollectionOf<Element>;\n getElementsByTagName(qualifiedName: string): HTMLCollectionOf<Element> {\n const elements = this.querySelectorAll<Element>(qualifiedName);\n return new HTMLCollectionOf(Array.from(elements));\n }\n\n getElementsByTagNameNS(namespaceURI: \"http://www.w3.org/1999/xhtml\", localName: string): HTMLCollectionOf<HTMLElement>;\n getElementsByTagNameNS(namespaceURI: \"http://www.w3.org/2000/svg\", localName: string): HTMLCollectionOf<any>;\n getElementsByTagNameNS(namespaceURI: \"http://www.w3.org/1998/Math/MathML\", localName: string): HTMLCollectionOf<any>;\n getElementsByTagNameNS(_namespace: string | null, localName: string): HTMLCollectionOf<Element>;\n getElementsByTagNameNS(_namespace: string | null, localName: string): HTMLCollectionOf<Element> {\n return this.getElementsByTagName(localName);\n }\n\n getSelection(): any {\n return null;\n }\n\n hasFocus(): boolean {\n return false;\n }\n\n hasStorageAccess(): Promise<boolean> {\n return Promise.resolve(false);\n }\n\n importNode<T extends Node>(node: T, _options?: boolean | ImportNodeOptions): T {\n const cloned = (node as any).cloneNode(typeof _options === 'boolean' ? _options : _options?.deep);\n (cloned as any)._ownerDocument = this;\n return cloned;\n }\n\n open(_unused1?: string, _unused2?: string): Document;\n open(_url: string | URL, _name: string, _features: string): any;\n open(_arg1?: string | URL, _arg2?: string, _arg3?: string): Document | any {\n if (arguments.length <= 2) {\n return this;\n }\n return null;\n }\n\n queryCommandEnabled(_commandId: string): boolean {\n return false;\n }\n\n queryCommandIndeterm(_commandId: string): boolean {\n return false;\n }\n\n queryCommandState(_commandId: string): boolean {\n return false;\n }\n\n queryCommandSupported(_commandId: string): boolean {\n return false;\n }\n\n queryCommandValue(_commandId: string): string {\n return '';\n }\n\n releaseEvents(): void {}\n\n requestStorageAccess(): Promise<void> {\n return Promise.resolve();\n }\n\n startViewTransition(_callbackOptions?: ViewTransitionUpdateCallback | StartViewTransitionOptions): any {\n return {};\n }\n\n write(...text: string[]): void {\n console.log('Document.write:', text.join(''));\n }\n\n writeln(...text: string[]): void {\n this.write(...text, '\\n');\n }\n\n addEventListener(type: string, listener: any, options?: boolean | any): void {\n // Support DOMContentLoaded and readystatechange events\n if (type === 'DOMContentLoaded' || type === 'readystatechange') {\n this._eventListeners.push({\n type,\n listener: typeof listener === 'function' ? listener : listener.handleEvent,\n options\n });\n }\n }\n\n removeEventListener(type: string, listener: any, options?: boolean | any): void {\n if (type === 'DOMContentLoaded' || type === 'readystatechange') {\n const targetListener = typeof listener === 'function' ? listener : listener.handleEvent;\n this._eventListeners = this._eventListeners.filter(\n eventListener => !(eventListener.type === type && eventListener.listener === targetListener)\n );\n }\n }\n\n dispatchEvent(event: any): boolean {\n const eventListeners = this._eventListeners.filter(listener => listener.type === event.type);\n \n for (const eventListener of eventListeners) {\n try {\n eventListener.listener.call(this, event);\n \n // Handle 'once' option\n if (eventListener.options && typeof eventListener.options === 'object' && eventListener.options.once) {\n this.removeEventListener(event.type, eventListener.listener);\n }\n } catch (error) {\n console.error('Error in document event listener:', error);\n }\n }\n \n return true;\n }\n\n /**\n * Set window reference for load event dispatching\n */\n setWindow(window: any): void {\n this._window = window;\n }\n\n /**\n * Change document ready state and dispatch events\n */\n setReadyState(state: DocumentReadyState): void {\n if (this._readyState === state) return;\n \n this._readyState = state;\n \n // Dispatch readystatechange event\n this.dispatchEvent({\n type: 'readystatechange',\n target: this,\n readyState: state\n });\n \n // Dispatch DOMContentLoaded when interactive\n if (state === 'interactive') {\n this.dispatchEvent({\n type: 'DOMContentLoaded',\n target: this\n });\n }\n \n // Dispatch load event on window when complete\n if (state === 'complete' && this._window) {\n // Use setTimeout to ensure it's dispatched after current execution\n setTimeout(() => {\n if (this._window && this._window.dispatchEvent) {\n this._window.dispatchEvent({\n type: 'load',\n target: this._window\n });\n }\n }, 0);\n }\n }\n\n /**\n * Simulate document loading process\n */\n simulateLoading(): void {\n // Start with loading state\n this.setReadyState('loading');\n \n // Simulate DOM parsing completion\n setTimeout(() => {\n this.setReadyState('interactive');\n \n // Simulate resource loading completion\n setTimeout(() => {\n this.setReadyState('complete');\n }, 10);\n }, 5);\n }\n}", "export { ElementFactory } from './ElementFactory';", "import { Node } from './Node';\nimport { NodeBase } from './NodeBase';\n\n/**\n * NodeFilter interface for filtering nodes in NodeIterator\n */\nexport interface NodeFilter {\n acceptNode(node: Node): number;\n}\n\n/**\n * NodeFilter constants\n */\nexport const NodeFilter = {\n // Constants for acceptNode return values\n FILTER_ACCEPT: 1,\n FILTER_REJECT: 2,\n FILTER_SKIP: 3,\n \n // Constants for whatToShow\n SHOW_ALL: 0xFFFFFFFF,\n SHOW_ELEMENT: 0x1,\n SHOW_ATTRIBUTE: 0x2,\n SHOW_TEXT: 0x4,\n SHOW_CDATA_SECTION: 0x8,\n SHOW_ENTITY_REFERENCE: 0x10,\n SHOW_ENTITY: 0x20,\n SHOW_PROCESSING_INSTRUCTION: 0x40,\n SHOW_COMMENT: 0x80,\n SHOW_DOCUMENT: 0x100,\n SHOW_DOCUMENT_TYPE: 0x200,\n SHOW_DOCUMENT_FRAGMENT: 0x400,\n SHOW_NOTATION: 0x800\n};\n\n/**\n * NodeIterator implementation for traversing DOM nodes\n */\nexport class NodeIterator {\n private _root: Node;\n private _whatToShow: number;\n private _filter: NodeFilter | null;\n private _currentNode: Node;\n private _beforeReferenceNode: boolean = true;\n\n constructor(root: Node, whatToShow: number = NodeFilter.SHOW_ALL, filter: NodeFilter | null = null) {\n this._root = root;\n this._whatToShow = whatToShow;\n this._filter = filter;\n this._currentNode = root;\n }\n\n get root(): Node {\n return this._root;\n }\n\n get whatToShow(): number {\n return this._whatToShow;\n }\n\n get filter(): NodeFilter | null {\n return this._filter;\n }\n\n get referenceNode(): Node {\n return this._currentNode;\n }\n\n get pointerBeforeReferenceNode(): boolean {\n return this._beforeReferenceNode;\n }\n\n /**\n * Move to the next node in document order\n */\n nextNode(): Node | null {\n let node = this._currentNode;\n \n // If we're before the reference node, start from the reference node\n if (this._beforeReferenceNode) {\n this._beforeReferenceNode = false;\n if (this._acceptNode(node)) {\n return node;\n }\n }\n\n // Traverse in document order\n while (node) {\n // First, try to go to first child\n const firstChild = (node as any).firstChild;\n if (firstChild) {\n node = firstChild;\n if (this._acceptNode(node)) {\n this._currentNode = node;\n return node;\n }\n continue;\n }\n\n // If no children, try next sibling\n while (node && !(node as any).nextSibling) {\n node = (node as any).parentNode;\n // Don't go beyond root\n if (!node || node === (this._root as any).parentNode) {\n return null;\n }\n }\n\n if (!node) {\n return null;\n }\n\n node = (node as any).nextSibling;\n if (this._acceptNode(node)) {\n this._currentNode = node;\n return node;\n }\n }\n\n return null;\n }\n\n /**\n * Move to the previous node in document order\n */\n previousNode(): Node | null {\n let node = this._currentNode;\n\n // If we're after the reference node, start from the reference node\n if (!this._beforeReferenceNode) {\n this._beforeReferenceNode = true;\n if (this._acceptNode(node)) {\n return node;\n }\n }\n\n // Traverse in reverse document order\n while (node && node !== this._root) {\n // Try previous sibling\n const prevSibling = (node as any).previousSibling;\n if (prevSibling) {\n node = prevSibling;\n \n // Go to the deepest last child\n while ((node as any).lastChild) {\n node = (node as any).lastChild;\n }\n \n if (this._acceptNode(node)) {\n this._currentNode = node;\n return node;\n }\n continue;\n }\n\n // Go to parent\n node = (node as any).parentNode;\n if (!node || node === (this._root as any).parentNode) {\n return null;\n }\n\n if (this._acceptNode(node)) {\n this._currentNode = node;\n return node;\n }\n }\n\n return null;\n }\n\n /**\n * Detach the iterator (no-op in this implementation)\n */\n detach(): void {\n // Modern browsers don't require this, but we implement for compatibility\n }\n\n /**\n * Check if a node should be accepted based on whatToShow and filter\n */\n private _acceptNode(node: Node | null): boolean {\n if (!node) {\n return false;\n }\n\n // Check whatToShow filter\n const nodeTypeMask = 1 << (node.nodeType - 1);\n if (!(this._whatToShow & nodeTypeMask)) {\n return false;\n }\n\n // Check custom filter\n if (this._filter) {\n const result = this._filter.acceptNode(node);\n return result === NodeFilter.FILTER_ACCEPT;\n }\n\n return true;\n }\n}", "import {Window, Location, History, Navigator} from './Window';\nimport {Document} from '../node/Document';\nimport {DocumentBase} from '../node/DocumentBase';\nimport {NodeBase} from '../node/NodeBase';\nimport {ElementBase} from '../node/elements/ElementBase';\n\n// Import all element classes\nimport {HTMLAnchorElement} from '../node/elements/HTMLAnchorElement';\nimport {HTMLBodyElement} from '../node/elements/HTMLBodyElement';\nimport {HTMLButtonElement} from '../node/elements/HTMLButtonElement';\nimport {HTMLCanvasElement} from '../node/elements/HTMLCanvasElement';\nimport {HTMLDivElement} from '../node/elements/HTMLDivElement';\nimport {HTMLH1Element} from '../node/elements/HTMLH1Element';\nimport {HTMLHeadElement} from '../node/elements/HTMLHeadElement';\nimport {HTMLHtmlElement} from '../node/elements/HTMLHtmlElement';\nimport {HTMLImgElement} from '../node/elements/HTMLImgElement';\nimport {HTMLInputElement} from '../node/elements/HTMLInputElement';\nimport {HTMLPElement} from '../node/elements/HTMLPElement';\nimport {HTMLSpanElement} from '../node/elements/HTMLSpanElement';\nimport {HTMLTitleElement} from '../node/elements/HTMLTitleElement';\nimport {HTMLLinkElement} from '../node/elements/HTMLLinkElement';\nimport {HTMLScriptElement} from '../node/elements/HTMLScriptElement';\nimport {HTMLStyleElement} from '../node/elements/HTMLStyleElement';\nimport {HTMLFormElement} from '../node/elements/HTMLFormElement';\nimport {HTMLTableElement} from '../node/elements/HTMLTableElement';\nimport {HTMLUListElement} from '../node/elements/HTMLUListElement';\nimport {HTMLOListElement} from '../node/elements/HTMLOListElement';\nimport {HTMLLIElement} from '../node/elements/HTMLLIElement';\nimport {HTMLMetaElement} from '../node/elements/HTMLMetaElement';\nimport {HTMLTemplateElement} from '../node/elements/HTMLTemplateElement';\nimport {HTMLTheadElement} from '../node/elements/HTMLTheadElement';\nimport {HTMLTfootElement} from '../node/elements/HTMLTfootElement';\nimport {HTMLTrElement} from '../node/elements/HTMLTrElement';\nimport {HTMLTdElement} from '../node/elements/HTMLTdElement';\nimport {HTMLThElement} from '../node/elements/HTMLThElement';\nimport {HTMLCaptionElement} from '../node/elements/HTMLCaptionElement';\nimport {HTMLTbodyElement} from '../node/elements/HTMLTbodyElement';\n\nclass LocationBase implements Location {\n private _href: string = 'about:blank';\n private _protocol: string = 'about:';\n private _host: string = '';\n private _hostname: string = '';\n private _port: string = '';\n private _pathname: string = 'blank';\n private _search: string = '';\n private _hash: string = '';\n private _origin: string = 'null';\n private urlChangeCallback?: (url: string) => void;\n\n constructor(initialUrl: string = 'about:blank', urlChangeCallback?: (url: string) => void) {\n this.urlChangeCallback = urlChangeCallback;\n this.parseUrl(initialUrl);\n }\n\n get href(): string {\n return this._href;\n }\n\n set href(url: string) {\n const oldHref = this._href;\n this.parseUrl(url);\n\n // Call URL change callback if URL actually changed\n if (this._href !== oldHref && this.urlChangeCallback) {\n this.urlChangeCallback(this._href);\n }\n }\n\n get protocol(): string {\n return this._protocol;\n }\n\n set protocol(value: string) {\n if (!value.endsWith(':')) {\n value += ':';\n }\n this._protocol = value;\n this.reconstructUrl();\n }\n\n get host(): string {\n return this._host;\n }\n\n set host(value: string) {\n this._host = value;\n // Parse hostname and port from host\n const colonIndex = value.lastIndexOf(':');\n if (colonIndex !== -1 && colonIndex > value.lastIndexOf(']')) {\n // IPv6 addresses are enclosed in brackets, so check if colon is after the closing bracket\n this._hostname = value.substring(0, colonIndex);\n this._port = value.substring(colonIndex + 1);\n } else {\n this._hostname = value;\n this._port = '';\n }\n this.reconstructUrl();\n }\n\n get hostname(): string {\n return this._hostname;\n }\n\n set hostname(value: string) {\n this._hostname = value;\n this._host = this._port ? `${value}:${this._port}` : value;\n this.reconstructUrl();\n }\n\n get port(): string {\n return this._port;\n }\n\n set port(value: string) {\n this._port = value;\n this._host = value ? `${this._hostname}:${value}` : this._hostname;\n this.reconstructUrl();\n }\n\n get pathname(): string {\n return this._pathname;\n }\n\n set pathname(value: string) {\n if (!value.startsWith('/')) {\n value = '/' + value;\n }\n this._pathname = value;\n this.reconstructUrl();\n }\n\n get search(): string {\n return this._search;\n }\n\n set search(value: string) {\n if (value && !value.startsWith('?')) {\n value = '?' + value;\n }\n this._search = value;\n this.reconstructUrl();\n }\n\n get hash(): string {\n return this._hash;\n }\n\n set hash(value: string) {\n if (value && !value.startsWith('#')) {\n value = '#' + value;\n }\n this._hash = value;\n this.reconstructUrl();\n }\n\n get origin(): string {\n return this._origin;\n }\n\n assign(url: string): void {\n const oldHref = this._href;\n this.parseUrl(url);\n\n // Call URL change callback if URL actually changed\n if (this._href !== oldHref && this.urlChangeCallback) {\n this.urlChangeCallback(this._href);\n }\n }\n\n replace(url: string): void {\n const oldHref = this._href;\n this.parseUrl(url);\n\n // Call URL change callback if URL actually changed\n if (this._href !== oldHref && this.urlChangeCallback) {\n this.urlChangeCallback(this._href);\n }\n }\n\n reload(forcedReload?: boolean): void {\n // No-op in server-side environment\n // In a real browser, this would reload the page\n }\n\n toString(): string {\n return this._href;\n }\n\n private parseUrl(url: string): void {\n try {\n // Handle relative URLs by creating a base URL\n let parsedUrl: URL;\n\n if (url.startsWith('//')) {\n // Protocol-relative URL\n parsedUrl = new URL(this._protocol + url);\n } else if (url.startsWith('/')) {\n // Absolute path\n parsedUrl = new URL(url, `${this._protocol}//${this._host}`);\n } else if (url.includes('://')) {\n // Absolute URL\n parsedUrl = new URL(url);\n } else {\n // Relative URL\n const base = `${this._protocol}//${this._host}${this._pathname}`;\n parsedUrl = new URL(url, base);\n }\n\n this._href = parsedUrl.href;\n this._protocol = parsedUrl.protocol;\n this._host = parsedUrl.host;\n this._hostname = parsedUrl.hostname;\n this._port = parsedUrl.port;\n this._pathname = parsedUrl.pathname;\n this._search = parsedUrl.search;\n this._hash = parsedUrl.hash;\n this._origin = parsedUrl.origin;\n } catch (e) {\n // Invalid URL, handle special cases\n if (url === 'about:blank') {\n this._href = 'about:blank';\n this._protocol = 'about:';\n this._host = '';\n this._hostname = '';\n this._port = '';\n this._pathname = 'blank';\n this._search = '';\n this._hash = '';\n this._origin = 'null';\n }\n // For other invalid URLs, keep current values\n }\n }\n\n private reconstructUrl(): void {\n try {\n // Reconstruct the URL from components\n let url = this._protocol;\n\n if (this._protocol !== 'about:' && this._protocol !== 'data:') {\n url += '//';\n if (this._host) {\n url += this._host;\n }\n }\n\n url += this._pathname;\n url += this._search;\n url += this._hash;\n\n // Validate the reconstructed URL\n const testUrl = new URL(url);\n this._href = testUrl.href;\n this._origin = testUrl.origin;\n } catch (e) {\n // If reconstruction fails, keep the current href\n }\n }\n}\n\nclass HistoryBase implements History {\n length: number = 1;\n state: any = null;\n private window: WindowBase;\n private historyStack: Array<{ state: any; title: string; url?: string }> = [];\n private currentIndex: number = -1;\n\n constructor(window: WindowBase) {\n this.window = window;\n }\n\n back(): void {\n this.go(-1);\n }\n\n forward(): void {\n this.go(1);\n }\n\n go(delta?: number): void {\n if (!delta || this.historyStack.length === 0) return;\n\n const newIndex = this.currentIndex + delta;\n if (newIndex >= 0 && newIndex < this.historyStack.length) {\n this.currentIndex = newIndex;\n const entry = this.historyStack[this.currentIndex];\n this.state = entry.state;\n\n // Update location if URL is provided\n if (entry.url && this.window.location) {\n (this.window.location as any)._href = entry.url;\n (this.window.location as any).parseUrl(entry.url);\n }\n\n // Dispatch popstate event\n (this.window as any).dispatchPopStateEvent(entry.state, entry.url);\n }\n }\n\n pushState(data: any, title: string, url?: string): void {\n // Remove any forward history when pushing new state\n this.historyStack = this.historyStack.slice(0, this.currentIndex + 1);\n\n // Add new state\n this.historyStack.push({state: data, title, url});\n this.currentIndex = this.historyStack.length - 1;\n this.state = data;\n this.length = this.historyStack.length;\n\n // Update location if URL is provided\n if (url && this.window.location) {\n const oldHref = (this.window.location as any)._href;\n (this.window.location as any)._href = url;\n (this.window.location as any).parseUrl(url);\n\n // Trigger URL change callback for dynamic HTML loading\n if (url !== oldHref && (this.window.location as any).urlChangeCallback) {\n (this.window.location as any).urlChangeCallback(url);\n }\n }\n\n // Note: pushState does NOT dispatch popstate event (per HTML spec)\n }\n\n replaceState(data: any, title: string, url?: string): void {\n if (this.currentIndex >= 0 && this.currentIndex < this.historyStack.length) {\n // Replace current state\n this.historyStack[this.currentIndex] = {state: data, title, url};\n } else {\n // No current state, create one\n this.historyStack = [{state: data, title, url}];\n this.currentIndex = 0;\n this.length = 1;\n }\n\n this.state = data;\n\n // Update location if URL is provided\n if (url && this.window.location) {\n const oldHref = (this.window.location as any)._href;\n (this.window.location as any)._href = url;\n (this.window.location as any).parseUrl(url);\n\n // Trigger URL change callback for dynamic HTML loading\n if (url !== oldHref && (this.window.location as any).urlChangeCallback) {\n (this.window.location as any).urlChangeCallback(url);\n }\n }\n\n // Note: replaceState does NOT dispatch popstate event (per HTML spec)\n }\n}\n\nclass NavigatorBase implements Navigator {\n userAgent: string = 'Mozilla/5.0 (Server-Side Rendering)';\n language: string = 'en-US';\n languages: readonly string[] = ['en-US', 'en'];\n platform: string = 'Server';\n cookieEnabled: boolean = false;\n onLine: boolean = true;\n}\n\n// Simple event system for WindowBase\ninterface EventListener {\n type: string;\n listener: (event: any) => void;\n options?: boolean | AddEventListenerOptions;\n}\n\ninterface PopStateEvent {\n type: 'popstate';\n state: any;\n url?: string;\n}\n\nexport class WindowBase {\n // Suppress type errors for complex event handler types\n [key: string]: any;\n\n // Event system\n private _eventListeners: EventListener[] = [];\n // Timers and intervals tracking\n private _timers: Set<number> = new Set();\n private _intervals: Set<number> = new Set();\n private _animationFrames: Set<number> = new Set();\n // Properties\n readonly clientInformation: Navigator;\n private _closed: boolean = false;\n\n get closed(): boolean {\n return this._closed;\n }\n\n readonly cookieStore: CookieStore = {} as CookieStore;\n readonly customElements: CustomElementRegistry = {} as CustomElementRegistry;\n readonly devicePixelRatio: number = 1;\n readonly document: Document;\n readonly event: Event | undefined = undefined;\n readonly external: External = {} as External;\n readonly frameElement: Element | null = null;\n readonly frames: WindowProxy = {} as WindowProxy;\n readonly history: History;\n readonly innerHeight: number = 768;\n readonly innerWidth: number = 1024;\n readonly length: number = 0;\n readonly locationbar: BarProp = {} as BarProp;\n readonly menubar: BarProp = {} as BarProp;\n name: string = '';\n readonly navigator: Navigator;\n ondevicemotion: ((this: Window, ev: DeviceMotionEvent) => any) | null = null;\n ondeviceorientation: ((this: Window, ev: DeviceOrientationEvent) => any) | null = null;\n ondeviceorientationabsolute: ((this: Window, ev: DeviceOrientationEvent) => any) | null = null;\n onorientationchange: ((this: Window, ev: Event) => any) | null = null;\n opener: any = null;\n readonly orientation: number = 0;\n readonly originAgentCluster: boolean = false;\n readonly outerHeight: number = 768;\n readonly outerWidth: number = 1024;\n readonly pageXOffset: number = 0;\n readonly pageYOffset: number = 0;\n readonly parent: WindowProxy = {} as WindowProxy;\n readonly personalbar: BarProp = {} as BarProp;\n readonly screen: Screen = {} as Screen;\n readonly screenLeft: number = 0;\n readonly screenTop: number = 0;\n readonly screenX: number = 0;\n readonly screenY: number = 0;\n readonly scrollX: number = 0;\n readonly scrollY: number = 0;\n readonly scrollbars: BarProp = {} as BarProp;\n readonly self: Window & typeof globalThis = this as any;\n readonly speechSynthesis: SpeechSynthesis = {} as SpeechSynthesis;\n status: string = '';\n readonly statusbar: BarProp = {} as BarProp;\n readonly toolbar: BarProp = {} as BarProp;\n readonly top: WindowProxy | null = null;\n readonly visualViewport: VisualViewport | null = null;\n readonly window: Window & typeof globalThis = this as any;\n\n // Location property with getter/setter\n private _location: Location;\n get location(): Location {\n return this._location;\n }\n\n set location(href: string | Location) {\n if (typeof href === 'string') {\n this._location.href = href;\n } else {\n this._location.href = href.href;\n }\n }\n\n // Global constructors\n Node = NodeBase;\n Element = ElementBase;\n HTMLElement = ElementBase;\n Event = class Event {\n };\n PopStateEvent = class PopStateEvent extends this.Event {\n };\n IntersectionObserver = class IntersectionObserver {\n };\n NodeFilter = class NodeFilter {\n };\n DocumentFragment = class DocumentFragment {\n };\n HTMLMetaElement = HTMLMetaElement;\n HTMLCanvasElement = HTMLCanvasElement;\n CanvasRenderingContext2D = class CanvasRenderingContext2D {\n };\n CanvasPattern = class CanvasPattern {\n };\n CanvasGradient = class CanvasGradient {\n };\n Path2D = class Path2D {\n };\n ImageData = class ImageData {\n };\n\n // HTML element constructors\n HTMLAnchorElement = HTMLAnchorElement;\n HTMLBodyElement = HTMLBodyElement;\n HTMLButtonElement = HTMLButtonElement;\n HTMLDivElement = HTMLDivElement;\n HTMLH1Element = HTMLH1Element;\n HTMLHeadElement = HTMLHeadElement;\n HTMLHtmlElement = HTMLHtmlElement;\n HTMLImgElement = HTMLImgElement;\n HTMLInputElement = HTMLInputElement;\n HTMLPElement = HTMLPElement;\n HTMLSpanElement = HTMLSpanElement;\n HTMLTitleElement = HTMLTitleElement;\n HTMLLinkElement = HTMLLinkElement;\n HTMLScriptElement = HTMLScriptElement;\n HTMLStyleElement = HTMLStyleElement;\n HTMLFormElement = HTMLFormElement;\n HTMLTableElement = HTMLTableElement;\n HTMLUListElement = HTMLUListElement;\n HTMLOListElement = HTMLOListElement;\n HTMLLIElement = HTMLLIElement;\n HTMLTemplateElement = HTMLTemplateElement;\n HTMLTheadElement = HTMLTheadElement;\n HTMLTfootElement = HTMLTfootElement;\n HTMLTrElement = HTMLTrElement;\n HTMLTdElement = HTMLTdElement;\n HTMLThElement = HTMLThElement;\n HTMLCaptionElement = HTMLCaptionElement;\n HTMLTbodyElement = HTMLTbodyElement;\n\n constructor(config?: { initialUrl?: string }) {\n const documentBase = new DocumentBase();\n\n // Set window reference in document for load event\n if (this.document && (this.document as any).setWindow) {\n (this.document as any).setWindow(this);\n }\n\n this._location = new LocationBase(config?.initialUrl);\n documentBase.setLocation(this._location);\n this.document = documentBase;\n this.history = new HistoryBase(this);\n this.navigator = new NavigatorBase();\n this.clientInformation = this.navigator;\n\n // Return a Proxy to handle the [index: number]: Window signature\n return new Proxy(this, {\n get(target: WindowBase, prop: string | symbol): any {\n // Handle numeric indices - return the window itself\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n return target;\n }\n // Return the actual property\n return (target as any)[prop];\n },\n\n set(target: WindowBase, prop: string | symbol, value: any): boolean {\n // Handle numeric indices - ignore setting\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n return true;\n }\n // Set the actual property\n (target as any)[prop] = value;\n return true;\n },\n\n has(target: WindowBase, prop: string | symbol): boolean {\n // Handle numeric indices\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n return true;\n }\n // Check if property exists\n return prop in target;\n },\n\n ownKeys(target: WindowBase): ArrayLike<string | symbol> {\n // Get all own keys plus numeric indices for length\n const keys = Object.getOwnPropertyNames(target);\n // Add numeric indices based on length property\n for (let i = 0; i < target.length; i++) {\n keys.push(i.toString());\n }\n return keys;\n },\n\n getOwnPropertyDescriptor(target: WindowBase, prop: string | symbol): PropertyDescriptor | undefined {\n // Handle numeric indices\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n return {\n enumerable: true,\n configurable: true,\n value: target\n };\n }\n // Return actual property descriptor\n return Object.getOwnPropertyDescriptor(target, prop);\n }\n });\n }\n\n // Window methods - all with empty implementations for server-side\n alert(message?: any): void {\n }\n\n blur(): void {\n }\n\n cancelIdleCallback(handle: number): void {\n }\n\n captureEvents(): void {\n }\n\n close(): void {\n if (this._closed) return;\n\n this._closed = true;\n\n // Clear all timers\n this._timers.forEach(id => clearTimeout(id));\n this._timers.clear();\n\n // Clear all intervals\n this._intervals.forEach(id => clearInterval(id));\n this._intervals.clear();\n\n // Clear all animation frames\n this._animationFrames.forEach(id => clearTimeout(id));\n this._animationFrames.clear();\n\n // Remove all event listeners (clear references to prevent memory leaks)\n this._eventListeners.forEach(listener => {\n // Explicitly null out the listener function reference\n (listener as any).listener = null;\n });\n this._eventListeners.length = 0;\n\n // Clear all on* event handler properties\n this.onload = null;\n this.onunload = null;\n this.onbeforeunload = null;\n this.onpopstate = null;\n this.onerror = null;\n this.onmessage = null;\n this.onhashchange = null;\n\n // Clear document references\n if (this.document) {\n const doc = this.document as any;\n\n // Clear document content recursively\n if (doc.body) {\n this.clearNodeRecursively(doc.body);\n }\n\n if (doc.head) {\n this.clearNodeRecursively(doc.head);\n }\n\n if (doc.documentElement) {\n this.clearNodeRecursively(doc.documentElement);\n }\n\n // Break circular references\n if (doc.setWindow) {\n doc.setWindow(null);\n }\n\n // Clear document event listeners\n if (doc._eventListeners) {\n doc._eventListeners.forEach((listener: any) => {\n listener.listener = null;\n });\n doc._eventListeners.length = 0;\n }\n }\n\n // Clear history\n if (this.history) {\n const hist = this.history as any;\n if (hist.historyStack) {\n hist.historyStack.forEach((entry: any) => {\n entry.state = null;\n });\n hist.historyStack.length = 0;\n }\n hist.state = null;\n hist.window = null;\n }\n\n // Clear location callback\n if (this._location) {\n (this._location as any).urlChangeCallback = null;\n }\n }\n\n /**\n * Recursively clear a node and its children to prevent memory leaks\n */\n private clearNodeRecursively(node: any): void {\n if (!node) return;\n\n // Clear children first\n while (node.firstChild) {\n const child = node.firstChild;\n node.removeChild(child);\n this.clearNodeRecursively(child);\n }\n\n // Clear event listeners on the node\n if (node._eventListeners) {\n node._eventListeners.forEach((listener: any) => {\n listener.listener = null;\n });\n node._eventListeners.length = 0;\n }\n\n // Clear node properties that might hold references (safely)\n try {\n if (node.parentNode) {\n node.parentNode = null;\n }\n } catch (e) {\n // parentNode might be read-only\n }\n\n try {\n if (node.ownerDocument) {\n node.ownerDocument = null;\n }\n } catch (e) {\n // ownerDocument might be read-only (getter-only)\n }\n\n // Clear other potential circular references\n if (node._childNodes) {\n if (Array.isArray(node._childNodes)) {\n node._childNodes = [];\n } else if (node._childNodes instanceof Map) {\n node._childNodes.clear();\n }\n }\n if (node._attributes) {\n if (Array.isArray(node._attributes)) {\n node._attributes = [];\n } else if (node._attributes instanceof Map) {\n node._attributes.clear();\n }\n }\n }\n\n confirm(message?: string): boolean {\n return false;\n }\n\n focus(): void {\n }\n\n getComputedStyle(elt: Element, pseudoElt?: string | null): CSSStyleDeclaration {\n return {} as CSSStyleDeclaration;\n }\n\n getSelection(): Selection | null {\n return null;\n }\n\n matchMedia(query: string): MediaQueryList {\n return {} as MediaQueryList;\n }\n\n moveBy(x: number, y: number): void {\n }\n\n moveTo(x: number, y: number): void {\n }\n\n open(url?: string | URL, target?: string, features?: string): WindowProxy | null {\n return null;\n }\n\n postMessage(message: any, targetOrigin: string, transfer?: Transferable[]): void;\n postMessage(message: any, options?: WindowPostMessageOptions): void;\n postMessage(message: any, targetOriginOrOptions?: string | WindowPostMessageOptions, transfer?: Transferable[]): void {\n }\n\n print(): void {\n }\n\n prompt(message?: string, _default?: string): string | null {\n return null;\n }\n\n releaseEvents(): void {\n }\n\n requestIdleCallback(callback: IdleRequestCallback, options?: IdleRequestOptions): number {\n return 0;\n }\n\n resizeBy(x: number, y: number): void {\n }\n\n resizeTo(width: number, height: number): void {\n }\n\n scroll(options?: ScrollToOptions): void;\n scroll(x: number, y: number): void;\n scroll(optionsOrX?: ScrollToOptions | number, y?: number): void {\n }\n\n scrollBy(options?: ScrollToOptions): void;\n scrollBy(x: number, y: number): void;\n scrollBy(optionsOrX?: ScrollToOptions | number, y?: number): void {\n }\n\n scrollTo(options?: ScrollToOptions): void;\n scrollTo(x: number, y: number): void;\n scrollTo(optionsOrX?: ScrollToOptions | number, y?: number): void {\n }\n\n stop(): void {\n }\n\n // Timer methods\n setTimeout(callback: Function, delay?: number, ...args: any[]): number {\n if (this._closed) return 0;\n\n const id = setTimeout(() => {\n this._timers.delete(id);\n callback(...args);\n }, delay) as any;\n\n this._timers.add(id);\n return id;\n }\n\n clearTimeout(id: number): void {\n clearTimeout(id);\n this._timers.delete(id);\n }\n\n setInterval(callback: Function, delay?: number, ...args: any[]): number {\n if (this._closed) return 0;\n\n const id = setInterval(callback, delay, ...args) as any;\n this._intervals.add(id);\n return id;\n }\n\n clearInterval(id: number): void {\n clearInterval(id);\n this._intervals.delete(id);\n }\n\n // Animation methods\n requestAnimationFrame(callback: FrameRequestCallback): number {\n if (this._closed) return 0;\n\n const id = this.setTimeout(callback, 16) as number;\n this._animationFrames.add(id);\n return id;\n }\n\n cancelAnimationFrame(id: number): void {\n this.clearTimeout(id);\n this._animationFrames.delete(id);\n }\n\n // Event methods\n addEventListener<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: any, listener: any, options?: any): void {\n // Support popstate, load, unload, and beforeunload events\n if (type === 'popstate' || type === 'load' || type === 'unload' || type === 'beforeunload') {\n this._eventListeners.push({\n type,\n listener: typeof listener === 'function' ? listener : listener.handleEvent,\n options\n });\n }\n }\n\n removeEventListener<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: any, listener: any, options?: any): void {\n if (type === 'popstate' || type === 'load' || type === 'unload' || type === 'beforeunload') {\n const targetListener = typeof listener === 'function' ? listener : listener.handleEvent;\n this._eventListeners = this._eventListeners.filter(\n eventListener => !(eventListener.type === type && eventListener.listener === targetListener)\n );\n }\n }\n\n dispatchEvent(event: any): boolean {\n const eventListeners = this._eventListeners.filter(listener => listener.type === event.type);\n\n for (const eventListener of eventListeners) {\n try {\n eventListener.listener.call(this, event);\n\n // Handle 'once' option\n if (eventListener.options && typeof eventListener.options === 'object' && eventListener.options.once) {\n this.removeEventListener(event.type, eventListener.listener);\n }\n } catch (error) {\n console.error('Error in event listener:', error);\n }\n }\n\n return true;\n }\n\n /**\n * Dispatch a popstate event to registered listeners\n */\n private dispatchPopStateEvent(state: any, url?: string): void {\n const popStateEvent: PopStateEvent = {\n type: 'popstate',\n state,\n url\n };\n\n this.dispatchEvent(popStateEvent);\n }\n\n // EventTarget methods (inherited)\n // These are already covered by addEventListener/removeEventListener/dispatchEvent\n\n // GlobalEventHandlers - empty implementations\n onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null;\n onanimationcancel: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;\n onanimationend: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;\n onanimationiteration: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;\n onanimationstart: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null;\n onauxclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null = null;\n onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null;\n oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n oncontextmenu: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null = null;\n oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null = null;\n ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;\n ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;\n ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;\n ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;\n ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;\n ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;\n ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null;\n ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onended: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onerror: OnErrorEventHandler = null;\n onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null;\n onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null = null;\n ongotpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null = null;\n onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null = null;\n onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null = null;\n onload: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onlostpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null = null;\n onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null = null;\n onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onpointercancel: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onpointerdown: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onpointerenter: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onpointerleave: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onpointermove: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onpointerout: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onpointerover: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null;\n onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent<EventTarget>) => any) | null = null;\n onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null;\n onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onsecuritypolicyviolation: ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any) | null = null;\n onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null = null;\n onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n ontoggle: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n ontouchcancel?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;\n ontouchend?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;\n ontouchmove?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;\n ontouchstart?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null = null;\n ontransitioncancel: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;\n ontransitionend: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;\n ontransitionrun: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;\n ontransitionstart: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null;\n onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onwebkitanimationend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onwebkitanimationiteration: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onwebkitanimationstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onwebkittransitionend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null;\n onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null = null;\n\n // WindowEventHandlers - empty implementations\n onafterprint: ((this: WindowEventHandlers, ev: Event) => any) | null = null;\n onbeforeprint: ((this: WindowEventHandlers, ev: Event) => any) | null = null;\n onbeforeunload: ((this: WindowEventHandlers, ev: BeforeUnloadEvent) => any) | null = null;\n onhashchange: ((this: WindowEventHandlers, ev: HashChangeEvent) => any) | null = null;\n onlanguagechange: ((this: WindowEventHandlers, ev: Event) => any) | null = null;\n onmessage: ((this: WindowEventHandlers, ev: MessageEvent) => any) | null = null;\n onmessageerror: ((this: WindowEventHandlers, ev: MessageEvent) => any) | null = null;\n onoffline: ((this: WindowEventHandlers, ev: Event) => any) | null = null;\n ononline: ((this: WindowEventHandlers, ev: Event) => any) | null = null;\n onpagehide: ((this: WindowEventHandlers, ev: PageTransitionEvent) => any) | null = null;\n onpageshow: ((this: WindowEventHandlers, ev: PageTransitionEvent) => any) | null = null;\n onpopstate: ((this: WindowEventHandlers, ev: PopStateEvent) => any) | null = null;\n onrejectionhandled: ((this: WindowEventHandlers, ev: PromiseRejectionEvent) => any) | null = null;\n onstorage: ((this: WindowEventHandlers, ev: StorageEvent) => any) | null = null;\n onunhandledrejection: ((this: WindowEventHandlers, ev: PromiseRejectionEvent) => any) | null = null;\n onunload: ((this: WindowEventHandlers, ev: Event) => any) | null = null;\n\n // WindowLocalStorage\n readonly localStorage: Storage = {} as Storage;\n\n // WindowOrWorkerGlobalScope - empty implementations\n readonly caches: CacheStorage = {} as CacheStorage;\n readonly crossOriginIsolated: boolean = false;\n readonly crypto: Crypto = {} as Crypto;\n readonly indexedDB: IDBFactory = {} as IDBFactory;\n readonly isSecureContext: boolean = false;\n readonly origin: string = 'null';\n readonly performance: Performance = {} as Performance;\n\n atob(data: string): string {\n return '';\n }\n\n btoa(data: string): string {\n return '';\n }\n\n createImageBitmap(image: ImageBitmapSource, options?: ImageBitmapOptions): Promise<ImageBitmap>;\n createImageBitmap(image: ImageBitmapSource, sx: number, sy: number, sw: number, sh: number, options?: ImageBitmapOptions): Promise<ImageBitmap>;\n createImageBitmap(...args: any[]): Promise<ImageBitmap> {\n return Promise.resolve({} as ImageBitmap);\n }\n\n fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n return Promise.resolve({} as Response);\n }\n\n queueMicrotask(callback: VoidFunction): void {\n }\n\n reportError(e: any): void {\n }\n\n structuredClone(value: any, options?: StructuredSerializeOptions): any {\n return value;\n }\n\n // WindowSessionStorage\n readonly sessionStorage: Storage = {} as Storage;\n\n // AnimationFrameProvider - already implemented above\n\n // Index signature - getter implementation\n [index: number]: Window;\n\n\n /**\n * Recursive HTML parsing\n */\n private parseHTMLRecursive(html: string, parent: any): void {\n let position = 0;\n\n while (position < html.length) {\n const tagStart = html.indexOf('<', position);\n\n if (tagStart === -1) {\n const remainingText = html.substring(position).trim();\n if (remainingText) {\n const textNode = this.document.createTextNode(remainingText);\n parent.appendChild(textNode);\n }\n break;\n }\n\n if (tagStart > position) {\n const textContent = html.substring(position, tagStart).trim();\n if (textContent) {\n const textNode = this.document.createTextNode(textContent);\n parent.appendChild(textNode);\n }\n }\n\n const tagEnd = html.indexOf('>', tagStart);\n if (tagEnd === -1) break;\n\n const tagContent = html.substring(tagStart + 1, tagEnd);\n\n if (tagContent.startsWith('/')) {\n position = tagEnd + 1;\n break;\n }\n\n const isSelfClosing = tagContent.endsWith('/') || this.isSelfClosingTag(tagContent.split(/\\s+/)[0]);\n const spaceIndex = tagContent.indexOf(' ');\n const tagName = spaceIndex === -1 ? tagContent.replace('/', '') : tagContent.substring(0, spaceIndex);\n const attributes = spaceIndex === -1 ? '' : tagContent.substring(spaceIndex + 1).replace('/', '');\n\n const element = this.document.createElement(tagName.toLowerCase());\n\n if (attributes.trim()) {\n this.parseAttributes(attributes, element);\n }\n\n // Handle special HTML structure tags\n if (tagName.toLowerCase() === 'html') {\n // Replace documentElement\n (this.document as any).documentElement = element;\n this.document.appendChild(element);\n } else if (tagName.toLowerCase() === 'head') {\n (this.document as any).head = element;\n if (this.document.documentElement) {\n this.document.documentElement.appendChild(element);\n } else {\n parent.appendChild(element);\n }\n } else if (tagName.toLowerCase() === 'body') {\n (this.document as any).body = element;\n if (this.document.documentElement) {\n this.document.documentElement.appendChild(element);\n } else {\n parent.appendChild(element);\n }\n } else {\n parent.appendChild(element);\n }\n\n if (isSelfClosing) {\n position = tagEnd + 1;\n } else {\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 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) return -1;\n\n if (nextOpen !== -1 && nextOpen < nextClose) {\n depth++;\n pos = nextOpen + openTag.length;\n } else {\n depth--;\n if (depth === 0) return nextClose;\n pos = nextClose + closeTag.length;\n }\n }\n\n return -1;\n }\n\n private parseAttributes(attributeString: string, element: any): void {\n // Updated regex to handle hyphenated attribute names like dr-for-of, data-bind, etc.\n const attrRegex = /([\\w:-]+)(?:\\s*=\\s*(['\"])(.*?)\\2)?/g;\n let match;\n\n while ((match = attrRegex.exec(attributeString)) !== null) {\n const name = match[1];\n let value = match[3] || ''; // match[3] is the content between quotes\n element.setAttribute(name, value);\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 * Clear current document content\n */\n private clearDocumentContent(): void {\n const doc = this.document as any;\n\n // Clear head content\n if (doc.head) {\n while (doc.head.firstChild) {\n doc.head.removeChild(doc.head.firstChild);\n }\n }\n\n // Clear body content\n if (doc.body) {\n while (doc.body.firstChild) {\n doc.body.removeChild(doc.body.firstChild);\n }\n }\n }\n\n\n}"],
5
- "mappings": "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",
6
- "names": ["TextBase", "TextBase", "TextBase", "ElementFactory", "Comment", "parts", "tagName", "attributeString", "closingTag", "closingTagIndex", "TextBase", "TextBase"]
3
+ "sources": ["../../src/node/Node.ts", "../../src/node/collection/NodeList.ts", "../../src/node/collection/NodeListOfImp.ts", "../../src/node/NodeBase.ts", "../../src/node/ChildNodeBase.ts", "../../src/node/TextBase.ts", "../../src/node/Comment.ts", "../../src/node/collection/HTMLCollectionImp.ts", "../../src/utils/CSSSelector.ts", "../../src/node/ParentNodeBase.ts", "../../src/node/collection/HTMLCollectionOfImp.ts", "../../src/node/collection/index.ts", "../../src/node/DocumentFragmentBase.ts", "../../src/node/ShadowRootBase.ts", "../../src/node/elements/ElementBase.ts", "../../src/node/NodeIterator.ts", "../../src/node/NodeFilter.ts", "../../src/node/TreeWalker.ts", "../../src/index.ts", "../../src/DomParser.ts", "../../src/node/DocumentBase.ts", "../../src/node/elements/HTMLElementBase.ts", "../../src/node/collection/StylePropertyMapImpl.ts", "../../src/node/elements/HTMLGenericElement.ts", "../../src/node/elements/HTMLElement.ts", "../../src/node/elements/HTMLAnchorElement.ts", "../../src/node/elements/HTMLAreaElement.ts", "../../src/node/elements/HTMLAudioElement.ts", "../../src/node/elements/HTMLBaseElement.ts", "../../src/node/elements/HTMLBodyElement.ts", "../../src/node/elements/HTMLButtonElement.ts", "../../src/node/elements/HTMLCanvasElement.ts", "../../src/node/elements/HTMLCaptionElement.ts", "../../src/node/elements/HTMLDataElement.ts", "../../src/node/elements/HTMLDataListElement.ts", "../../src/node/elements/HTMLDetailsElement.ts", "../../src/node/elements/HTMLDialogElement.ts", "../../src/node/elements/HTMLDivElement.ts", "../../src/node/elements/HTMLDListElement.ts", "../../src/node/elements/HTMLEmbedElement.ts", "../../src/node/elements/HTMLFieldSetElement.ts", "../../src/node/elements/HTMLFormElement.ts", "../../src/node/elements/HTMLH1Element.ts", "../../src/node/elements/HTMLHeadElement.ts", "../../src/node/elements/HTMLHRElement.ts", "../../src/node/elements/HTMLHtmlElement.ts", "../../src/node/elements/HTMLIFrameElement.ts", "../../src/node/elements/HTMLImgElement.ts", "../../src/node/elements/HTMLInputElement.ts", "../../src/node/elements/HTMLLabelElement.ts", "../../src/node/elements/HTMLLegendElement.ts", "../../src/node/elements/HTMLLIElement.ts", "../../src/node/elements/HTMLLinkElement.ts", "../../src/node/elements/HTMLMapElement.ts", "../../src/node/elements/HTMLMetaElement.ts", "../../src/node/elements/HTMLMeterElement.ts", "../../src/node/elements/HTMLModElement.ts", "../../src/node/elements/HTMLObjectElement.ts", "../../src/node/elements/HTMLOListElement.ts", "../../src/node/elements/HTMLOptGroupElement.ts", "../../src/node/elements/HTMLOptionElement.ts", "../../src/node/elements/HTMLOutputElement.ts", "../../src/node/elements/HTMLPElement.ts", "../../src/node/elements/HTMLParamElement.ts", "../../src/node/elements/HTMLPictureElement.ts", "../../src/node/elements/HTMLPreElement.ts", "../../src/node/elements/HTMLProgressElement.ts", "../../src/node/elements/HTMLQuoteElement.ts", "../../src/node/elements/HTMLScriptElement.ts", "../../src/node/elements/HTMLSelectElement.ts", "../../src/node/elements/HTMLSlotElement.ts", "../../src/node/elements/HTMLSourceElement.ts", "../../src/node/elements/HTMLSpanElement.ts", "../../src/node/elements/HTMLStyleElement.ts", "../../src/node/elements/HTMLTableElement.ts", "../../src/node/elements/HTMLTbodyElement.ts", "../../src/node/elements/HTMLTdElement.ts", "../../src/node/elements/HTMLTemplateElement.ts", "../../src/node/elements/HTMLTextAreaElement.ts", "../../src/node/elements/HTMLTfootElement.ts", "../../src/node/elements/HTMLTheadElement.ts", "../../src/node/elements/HTMLThElement.ts", "../../src/node/elements/HTMLTimeElement.ts", "../../src/node/elements/HTMLTitleElement.ts", "../../src/node/elements/HTMLTrackElement.ts", "../../src/node/elements/HTMLTrElement.ts", "../../src/node/elements/HTMLUListElement.ts", "../../src/node/elements/HTMLVideoElement.ts", "../../src/node/elements/MathMLElement.ts", "../../src/node/elements/SVGElement.ts", "../../src/node/elements/SVGCircleElement.ts", "../../src/node/elements/SVGRectElement.ts", "../../src/node/elements/index.ts", "../../src/factory/ElementFactory.ts", "../../src/window/WindowBase.ts", "../../src/window/CustomElementRegistryImp.ts"],
4
+ "sourcesContent": ["// import { type NodeListOf } from './collection/NodeListOf';\n// import { NodeList } from './collection/NodeList';\n// import { type ChildNode } from './ChildNode';\n// import { type ParentNode } from './ParentNode';\n// import { type Document } from './Document';\n// import { type HTMLElement } from './elements/HTMLElement';\n// import { type GetRootNodeOptions } from './GetRootNodeOptions';\n// Node \uC0C1\uC218\uB4E4\uC744 \uBCC4\uB3C4\uB85C export\nexport const ELEMENT_NODE = 1 as const;\nexport const ATTRIBUTE_NODE = 2 as const;\nexport const TEXT_NODE = 3 as const;\nexport const CDATA_SECTION_NODE = 4 as const;\nexport const ENTITY_REFERENCE_NODE = 5 as const;\nexport const ENTITY_NODE = 6 as const;\nexport const PROCESSING_INSTRUCTION_NODE = 7 as const;\nexport const COMMENT_NODE = 8 as const;\nexport const DOCUMENT_NODE = 9 as const;\nexport const DOCUMENT_TYPE_NODE = 10 as const;\nexport const DOCUMENT_FRAGMENT_NODE = 11 as const;\nexport const NOTATION_NODE = 12 as const;\nexport const DOCUMENT_POSITION_DISCONNECTED = 0x01 as const;\nexport const DOCUMENT_POSITION_PRECEDING = 0x02 as const;\nexport const DOCUMENT_POSITION_FOLLOWING = 0x04 as const;\nexport const DOCUMENT_POSITION_CONTAINS = 0x08 as const;\nexport const DOCUMENT_POSITION_CONTAINED_BY = 0x10 as const;\nexport const DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20 as const;\n\n// export interface Event {\n// readonly type: string;\n// readonly target: any;\n// readonly currentTarget: any;\n// readonly bubbles: boolean;\n// readonly cancelable: boolean;\n// readonly defaultPrevented: boolean;\n// preventDefault(): void;\n// stopPropagation(): void;\n// stopImmediatePropagation(): void;\n// }\n//\n// export interface Node {\n// /** node is an element. */\n// readonly ELEMENT_NODE: 1;\n// readonly ATTRIBUTE_NODE: 2;\n// /** node is a Text node. */\n// readonly TEXT_NODE: 3;\n// /** node is a CDATASection node. */\n// readonly CDATA_SECTION_NODE: 4;\n// readonly ENTITY_REFERENCE_NODE: 5;\n// readonly ENTITY_NODE: 6;\n// /** node is a ProcessingInstruction node. */\n// readonly PROCESSING_INSTRUCTION_NODE: 7;\n// /** node is a Comment node. */\n// readonly COMMENT_NODE: 8;\n// /** node is a document. */\n// readonly DOCUMENT_NODE: 9;\n// /** node is a doctype. */\n// readonly DOCUMENT_TYPE_NODE: 10;\n// /** node is a DocumentFragment node. */\n// readonly DOCUMENT_FRAGMENT_NODE: 11;\n// readonly NOTATION_NODE: 12;\n// /** Set when node and other are not in the same tree. */\n// readonly DOCUMENT_POSITION_DISCONNECTED: 0x01;\n// /** Set when other is preceding node. */\n// readonly DOCUMENT_POSITION_PRECEDING: 0x02;\n// /** Set when other is following node. */\n// readonly DOCUMENT_POSITION_FOLLOWING: 0x04;\n// /** Set when other is an ancestor of node. */\n// readonly DOCUMENT_POSITION_CONTAINS: 0x08;\n// /** Set when other is a descendant of node. */\n// readonly DOCUMENT_POSITION_CONTAINED_BY: 0x10;\n// readonly DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20;\n//\n// /**\n// * The read-only **`baseURI`** property of the Node interface returns the absolute base URL of the document containing the node.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/baseURI)\n// */\n// readonly baseURI: string;\n// /**\n// * The read-only **`childNodes`** property of the Node interface returns a live the first child node is assigned index `0`.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/childNodes)\n// */\n// readonly childNodes: NodeListOf<ChildNode>;\n// /**\n// * The read-only **`firstChild`** property of the Node interface returns the node's first child in the tree, or `null` if the node has no children.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/firstChild)\n// */\n// readonly firstChild: ChildNode | null;\n// /**\n// * The read-only **`isConnected`** property of the Node interface returns a boolean indicating whether the node is connected (directly or indirectly) to a Document object.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/isConnected)\n// */\n// readonly isConnected: boolean;\n// /**\n// * The read-only **`lastChild`** property of the Node interface returns the last child of the node, or `null` if there are no child nodes.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/lastChild)\n// */\n// readonly lastChild: ChildNode | null;\n// /**\n// * The read-only **`nextSibling`** property of the Node interface returns the node immediately following the specified one in their parent's Node.childNodes, or returns `null` if the specified node is the last child in the parent element.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/nextSibling)\n// */\n// readonly nextSibling: ChildNode | null;\n// /**\n// * The read-only **`nodeName`** property of Node returns the name of the current node as a string.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/nodeName)\n// */\n// readonly nodeName: string;\n// /**\n// * The read-only **`nodeType`** property of a Node interface is an integer that identifies what the node is.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/nodeType)\n// */\n// readonly nodeType: number;\n// /**\n// * The **`nodeValue`** property of the Node interface returns or sets the value of the current node.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/nodeValue)\n// */\n// nodeValue: string | null;\n// /**\n// * The read-only **`ownerDocument`** property of the Node interface returns the top-level document object of the node.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/ownerDocument)\n// */\n// readonly ownerDocument: Document | null;\n// /**\n// * The read-only **`parentElement`** property of Node interface returns the DOM node's parent Element, or `null` if the node either has no parent, or its parent isn't a DOM Element.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/parentElement)\n// */\n// readonly parentElement: HTMLElement | null;\n// /**\n// * The read-only **`parentNode`** property of the Node interface returns the parent of the specified node in the DOM tree.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/parentNode)\n// */\n// readonly parentNode: ParentNode | null;\n// /**\n// * The read-only **`previousSibling`** property of the Node interface returns the node immediately preceding the specified one in its parent's or `null` if the specified node is the first in that list.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/previousSibling)\n// */\n// readonly previousSibling: ChildNode | null;\n// /**\n// * The **`textContent`** property of the Node interface represents the text content of the node and its descendants.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/textContent)\n// */\n// textContent: string | null;\n// /**\n// * The **`appendChild()`** method of the Node interface adds a node to the end of the list of children of a specified parent node.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/appendChild)\n// */\n// appendChild<T extends Node>(node: T): T;\n// /**\n// * The **`cloneNode()`** method of the Node interface returns a duplicate of the node on which this method was called.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/cloneNode)\n// */\n// cloneNode(subtree?: boolean): Node;\n// /**\n// * The **`compareDocumentPosition()`** method of the Node interface reports the position of its argument node relative to the node on which it is called.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/compareDocumentPosition)\n// */\n// compareDocumentPosition(other: Node): number;\n// /**\n// * The **`contains()`** method of the Node interface returns a boolean value indicating whether a node is a descendant of a given node, that is the node itself, one of its direct children (Node.childNodes), one of the children's direct children, and so on.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/contains)\n// */\n// contains(other: Node | null): boolean;\n// /**\n// * The **`getRootNode()`** method of the Node interface returns the context object's root, which optionally includes the shadow root if it is available.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/getRootNode)\n// */\n// getRootNode(options?: GetRootNodeOptions): Node;\n// /**\n// * The **`hasChildNodes()`** method of the Node interface returns a boolean value indicating whether the given Node has child nodes or not.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/hasChildNodes)\n// */\n// hasChildNodes(): boolean;\n// /**\n// * The **`insertBefore()`** method of the Node interface inserts a node before a _reference node_ as a child of a specified _parent node_.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/insertBefore)\n// */\n// insertBefore<T extends Node>(node: T, child: Node | null): T;\n// /**\n// * The **`isDefaultNamespace()`** method of the Node interface accepts a namespace URI as an argument.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/isDefaultNamespace)\n// */\n// isDefaultNamespace(namespace: string | null): boolean;\n// /**\n// * The **`isEqualNode()`** method of the Node interface tests whether two nodes are equal.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/isEqualNode)\n// */\n// isEqualNode(otherNode: Node | null): boolean;\n// /**\n// * The **`isSameNode()`** method of the Node interface is a legacy alias the for the `===` strict equality operator.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/isSameNode)\n// */\n// isSameNode(otherNode: Node | null): boolean;\n// /**\n// * The **`lookupNamespaceURI()`** method of the Node interface takes a prefix as parameter and returns the namespace URI associated with it on the given node if found (and `null` if not).\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/lookupNamespaceURI)\n// */\n// lookupNamespaceURI(prefix: string | null): string | null;\n// /**\n// * The **`lookupPrefix()`** method of the Node interface returns a string containing the prefix for a given namespace URI, if present, and `null` if not.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/lookupPrefix)\n// */\n// lookupPrefix(namespace: string | null): string | null;\n// /**\n// * The **`normalize()`** method of the Node interface puts the specified node and all of its sub-tree into a _normalized_ form.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/normalize)\n// */\n// normalize(): void;\n// /**\n// * The **`removeChild()`** method of the Node interface removes a child node from the DOM and returns the removed node.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/removeChild)\n// */\n// removeChild<T extends Node>(child: T): T;\n// /**\n// * The **`replaceChild()`** method of the Node interface replaces a child node within the given (parent) node.\n// *\n// * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/replaceChild)\n// */\n// replaceChild<T extends Node>(node: Node, child: T): T;\n//\n// // Add event methods manually to Node interface to avoid conflict with EventTarget\n// addEventListener(type: string, listener: any, options?: any): void;\n// removeEventListener(type: string, listener: any, options?: any): void;\n// dispatchEvent(event: any): boolean;\n// }\n", "// import { Node } from '../Node';\n\n/**\n * **`NodeList`** objects are collections of nodes, usually returned by properties such as Node.childNodes and methods such as document.querySelectorAll().\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList)\n */\nexport class NodeList<T extends Node = Node> {\n // \uC778\uB371\uC2A4 \uC2DC\uADF8\uB2C8\uCC98 \uC120\uC5B8\n [index: number]: T;\n \n private _nodes: T[] = [];\n\n constructor(nodes: T[] = []) {\n this._nodes = [...nodes];\n \n // \uC778\uB371\uC2A4 \uC2DC\uADF8\uB2C8\uCC98 \uAD6C\uD604\uC744 \uC704\uD55C \uD504\uB85D\uC2DC \uC124\uC815\n return new Proxy(this, {\n get(target, prop) {\n // \uC22B\uC790 \uC778\uB371\uC2A4\uC778 \uACBD\uC6B0\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n const index = parseInt(prop, 10);\n return target._nodes[index] || null;\n }\n // \uC77C\uBC18 \uD504\uB85C\uD37C\uD2F0/\uBA54\uC11C\uB4DC\uC778 \uACBD\uC6B0\n return (target as any)[prop];\n },\n \n set(target, prop, value) {\n // \uC22B\uC790 \uC778\uB371\uC2A4 \uC124\uC815 \uBC29\uC9C0 (\uC77D\uAE30 \uC804\uC6A9)\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n return false;\n }\n (target as any)[prop] = value;\n return true;\n },\n \n has(target, prop) {\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n const index = parseInt(prop, 10);\n return index >= 0 && index < target._nodes.length;\n }\n return prop in target;\n }\n });\n }\n\n /**\n * The **`NodeList.length`** property returns the number of items in a NodeList.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList/length)\n */\n get length(): number {\n return this._nodes.length;\n }\n\n /**\n * Returns a node from a `NodeList` by index.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList/item)\n */\n item(index: number): T | null {\n if (index < 0 || index >= this._nodes.length) {\n return null;\n }\n return this._nodes[index];\n }\n\n /**\n * Executes a provided function once for each `Node` value in the `NodeList`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList/forEach)\n */\n forEach(callbackfn: (value: T, key: number, parent: NodeList) => void, thisArg?: any): void {\n this._nodes.forEach((node, index) => {\n callbackfn.call(thisArg, node, index, this);\n });\n }\n\n // \uB0B4\uBD80\uC801\uC73C\uB85C \uB178\uB4DC \uCD94\uAC00/\uC81C\uAC70\uB97C \uC704\uD55C \uBA54\uC11C\uB4DC\uB4E4 (DOM \uC870\uC791 \uC2DC \uC0AC\uC6A9)\n _addNode(node: T): void {\n this._nodes.push(node);\n }\n\n _removeNode(node: T): boolean {\n const index = this._nodes.indexOf(node);\n if (index !== -1) {\n this._nodes.splice(index, 1);\n return true;\n }\n return false;\n }\n\n _insertNode(index: number, node: T): void {\n this._nodes.splice(index, 0, node);\n }\n\n // Iterator \uC9C0\uC6D0 (for...of \uC0AC\uC6A9 \uAC00\uB2A5)\n *[Symbol.iterator](): Iterator<T> {\n for (const node of this._nodes) {\n yield node;\n }\n }\n\n /**\n * Returns an iterator allowing to go through all keys contained in this object.\n * The keys are unsigned integer (index).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList/keys)\n */\n *keys(): IterableIterator<number> {\n for (let i = 0; i < this._nodes.length; i++) {\n yield i;\n }\n }\n\n /**\n * Returns an iterator allowing to go through all values contained in this object.\n * The values are Node objects.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList/values)\n */\n *values(): IterableIterator<T> {\n for (const node of this._nodes) {\n yield node;\n }\n }\n\n /**\n * Returns an iterator allowing to go through all key/value pairs contained in this object.\n * The key is an unsigned integer (index) and the value is a Node object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList/entries)\n */\n *entries(): IterableIterator<[number, T]> {\n for (let i = 0; i < this._nodes.length; i++) {\n yield [i, this._nodes[i]];\n }\n }\n}", "// import { Node } from '../Node';\nimport { NodeList } from './NodeList';\n\n/**\n * **`NodeListOf<TNode>`** is a generic version of NodeList that provides type safety for specific node types.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NodeList)\n */\nexport class NodeListOfImp<TNode extends Node> extends NodeList<TNode> {\n // \uC778\uB371\uC2A4 \uC2DC\uADF8\uB2C8\uCC98\uB97C \uBA85\uC2DC\uC801\uC73C\uB85C \uC120\uC5B8\uD558\uC5EC \uD0C0\uC785 \uCD94\uB860 \uC9C0\uC6D0\n [index: number]: TNode;\n \n constructor(nodes: TNode[] = []) {\n // \uBD80\uBAA8 NodeList\uC758 \uC0DD\uC131\uC790\uB97C \uD638\uCD9C\uD558\uBA74\uC11C \uD0C0\uC785\uC774 \uC9C0\uC815\uB41C \uB178\uB4DC\uB4E4\uC744 \uC804\uB2EC\n super(nodes as TNode[]);\n }\n\n // \uD0C0\uC785 \uC548\uC804\uC131\uC744 \uC704\uD55C \uC624\uBC84\uB77C\uC774\uB4DC - \uB2E8\uC21C \uCE90\uC2A4\uD305\uB9CC\n item(index: number): TNode | null {\n return super.item(index) as TNode | null;\n }\n\n forEach(callbackfn: (value: TNode, key: number, parent: NodeListOfImp<TNode>) => void, thisArg?: any): void {\n super.forEach((node, index) => {\n callbackfn.call(thisArg, node as TNode, index, this);\n }, thisArg);\n }\n}", "import { ELEMENT_NODE, ATTRIBUTE_NODE, TEXT_NODE, CDATA_SECTION_NODE, ENTITY_REFERENCE_NODE, ENTITY_NODE, PROCESSING_INSTRUCTION_NODE, COMMENT_NODE, DOCUMENT_NODE, DOCUMENT_TYPE_NODE, DOCUMENT_FRAGMENT_NODE, NOTATION_NODE, DOCUMENT_POSITION_DISCONNECTED, DOCUMENT_POSITION_PRECEDING, DOCUMENT_POSITION_FOLLOWING, DOCUMENT_POSITION_CONTAINS, DOCUMENT_POSITION_CONTAINED_BY, DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC } from './Node';\nimport { NodeListOfImp } from './collection/NodeListOfImp';\nimport { GetRootNodeOptions } from './GetRootNodeOptions';\n\n/**\n * Base implementation of the Node interface\n */\nexport abstract class NodeBase implements Node {\n // Node constants as instance properties\n static readonly ELEMENT_NODE = ELEMENT_NODE;\n static readonly ATTRIBUTE_NODE = ATTRIBUTE_NODE;\n static readonly TEXT_NODE = TEXT_NODE;\n static readonly CDATA_SECTION_NODE = CDATA_SECTION_NODE;\n static readonly ENTITY_REFERENCE_NODE = ENTITY_REFERENCE_NODE;\n static readonly ENTITY_NODE = ENTITY_NODE;\n static readonly PROCESSING_INSTRUCTION_NODE = PROCESSING_INSTRUCTION_NODE;\n static readonly COMMENT_NODE = COMMENT_NODE;\n static readonly DOCUMENT_NODE = DOCUMENT_NODE;\n static readonly DOCUMENT_TYPE_NODE = DOCUMENT_TYPE_NODE;\n static readonly DOCUMENT_FRAGMENT_NODE = DOCUMENT_FRAGMENT_NODE;\n static readonly NOTATION_NODE = NOTATION_NODE;\n static readonly DOCUMENT_POSITION_DISCONNECTED = DOCUMENT_POSITION_DISCONNECTED;\n static readonly DOCUMENT_POSITION_PRECEDING = DOCUMENT_POSITION_PRECEDING;\n static readonly DOCUMENT_POSITION_FOLLOWING = DOCUMENT_POSITION_FOLLOWING;\n static readonly DOCUMENT_POSITION_CONTAINS = DOCUMENT_POSITION_CONTAINS;\n static readonly DOCUMENT_POSITION_CONTAINED_BY = DOCUMENT_POSITION_CONTAINED_BY;\n static readonly DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n\n ELEMENT_NODE: typeof ELEMENT_NODE;\n ATTRIBUTE_NODE: typeof ATTRIBUTE_NODE;\n TEXT_NODE: typeof TEXT_NODE;\n CDATA_SECTION_NODE: typeof CDATA_SECTION_NODE;\n ENTITY_REFERENCE_NODE: typeof ENTITY_REFERENCE_NODE;\n ENTITY_NODE: typeof ENTITY_NODE;\n PROCESSING_INSTRUCTION_NODE: typeof PROCESSING_INSTRUCTION_NODE;\n COMMENT_NODE: typeof COMMENT_NODE;\n DOCUMENT_NODE: typeof DOCUMENT_NODE;\n DOCUMENT_TYPE_NODE: typeof DOCUMENT_TYPE_NODE;\n DOCUMENT_FRAGMENT_NODE: typeof DOCUMENT_FRAGMENT_NODE;\n NOTATION_NODE: typeof NOTATION_NODE;\n DOCUMENT_POSITION_DISCONNECTED: typeof DOCUMENT_POSITION_DISCONNECTED;\n DOCUMENT_POSITION_PRECEDING: typeof DOCUMENT_POSITION_PRECEDING;\n DOCUMENT_POSITION_FOLLOWING: typeof DOCUMENT_POSITION_FOLLOWING;\n DOCUMENT_POSITION_CONTAINS: typeof DOCUMENT_POSITION_CONTAINS;\n DOCUMENT_POSITION_CONTAINED_BY: typeof DOCUMENT_POSITION_CONTAINED_BY;\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: typeof DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n // Internal properties (for Base class implementations)\n protected _childNodesInternal: NodeBase[] = [];\n public _parentNodeInternal: NodeBase | null = null; // Internal parent reference\n public _ownerDocument: Document | null = null; // Made public for ChildNodeBase access\n protected _nodeValue: string | null = null;\n protected _textContent: string | null = null;\n protected _eventListeners: Array<{ type: string; listener: any; options?: any }> = [];\n\n constructor(\n public nodeType: number,\n public nodeName: string,\n ownerDocument?: Document | null\n ) {\n this._ownerDocument = ownerDocument || null;\n }\n\n addEventListener(type: string, listener: any, options?: any): void {\n this._eventListeners.push({\n type,\n listener: typeof listener === 'function' ? listener : listener?.handleEvent,\n options\n });\n }\n\n removeEventListener(type: string, listener: any, _options?: any): void {\n const targetListener = typeof listener === 'function' ? listener : listener?.handleEvent;\n this._eventListeners = this._eventListeners.filter(l => !(l.type === type && l.listener === targetListener));\n }\n\n dispatchEvent(event: any): boolean {\n // Simple implementation: only trigger listeners on this node (no bubbling for now)\n const type = typeof event === 'string' ? event : event.type;\n const listeners = this._eventListeners.filter(l => l.type === type);\n for (const l of listeners) {\n try {\n if (typeof l.listener === 'function') {\n l.listener.call(this, event);\n } else if (l.listener && typeof l.listener.handleEvent === 'function') {\n l.listener.handleEvent(event);\n }\n\n if (l.options?.once) {\n this.removeEventListener(type, l.listener, l.options);\n }\n } catch (e) {\n console.error(`Error in event listener for ${type}:`, e);\n }\n }\n return true;\n }\n\n // Node interface implementation\n get baseURI(): string {\n return this._ownerDocument?.URL || '';\n }\n\n // External interface - returns proper Node interface types\n get childNodes(): NodeListOf<ChildNode> {\n return new NodeListOfImp<ChildNode>(this._childNodesInternal as unknown as ChildNode[]) as unknown as NodeListOf<ChildNode>;\n }\n\n get firstChild(): ChildNode | null {\n return this._childNodesInternal.length > 0 ? (this._childNodesInternal[0] as unknown as ChildNode) : null;\n }\n\n get lastChild(): ChildNode | null {\n const length = this._childNodesInternal.length;\n return length > 0 ? (this._childNodesInternal[length - 1] as unknown as ChildNode) : null;\n }\n\n get nextSibling(): ChildNode | null {\n if (!this._parentNodeInternal) return null;\n const siblings = this._parentNodeInternal._childNodesInternal;\n const index = this._findIndexInParent();\n return index !== -1 && index < siblings.length - 1 ? (siblings[index + 1] as unknown as ChildNode) : null;\n }\n\n get previousSibling(): ChildNode | null {\n if (!this._parentNodeInternal) return null;\n const siblings = this._parentNodeInternal._childNodesInternal;\n const index = this._findIndexInParent();\n return index > 0 ? (siblings[index - 1] as unknown as ChildNode) : null;\n }\n\n get parentNode(): ParentNode | null {\n return this._parentNodeInternal as unknown as ParentNode | null;\n }\n\n get parentElement(): HTMLElement | null {\n return this._parentNodeInternal && this._parentNodeInternal.nodeType === ELEMENT_NODE ? (this._parentNodeInternal as unknown as HTMLElement) : null;\n }\n\n get ownerDocument(): Document | null {\n return this._ownerDocument;\n }\n\n get isConnected(): boolean {\n let node: Node | null = this;\n while (node) {\n if (node.nodeType === DOCUMENT_NODE) return true;\n node = node.parentNode;\n }\n return false;\n }\n\n get nodeValue(): string | null {\n return this._nodeValue;\n }\n\n set nodeValue(value: string | null) {\n this._nodeValue = value;\n }\n\n get textContent(): string | null {\n if (this.nodeType === TEXT_NODE || this.nodeType === COMMENT_NODE) {\n // For text nodes, decode HTML entities to return original text\n return this._nodeValue ? this.decodeHTMLEntities(this._nodeValue) : this._nodeValue;\n }\n\n // For elements, return the stored original text content if available\n if (this._textContent !== undefined && this._textContent !== null) {\n return this._textContent;\n }\n\n // Fallback: collect from children (for HTML parsed content)\n let text = '';\n for (const child of this._childNodesInternal) {\n const childText = child.textContent;\n if (childText !== null && childText !== undefined) {\n text += childText;\n }\n }\n return text.length > 0 ? text : null;\n }\n\n set textContent(value: string | null) {\n // Convert to string (including null and undefined)\n const stringValue = String(value);\n // Store original text content\n this._textContent = stringValue;\n // Clear all children and add a single text node\n this._childNodesInternal = [];\n if (stringValue) {\n // Create text node implementation with escaped value for innerHTML\n const escapedValue = this.escapeHTMLEntities(stringValue);\n const { TextBase } = require('./TextBase');\n const textNode = new TextBase(escapedValue, this._ownerDocument);\n this._childNodesInternal.push(textNode);\n textNode._parentNodeInternal = this;\n }\n }\n\n /**\n * Escape HTML entities in a string to prevent XSS\n */\n protected escapeHTMLEntities(str: string): string {\n const entityMap: { [key: string]: string } = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n\n return str.replace(/[&<>\"']/g, char => {\n return entityMap[char] || char;\n });\n }\n\n /**\n * Decode HTML entities in a string\n */\n protected 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 // Node methods - external interface uses Node types, internal uses NodeBase\n appendChild<T extends Node>(node: T): T {\n const nodeBase = node as any as NodeBase; // Internal cast\n\n // Special handling for DocumentFragment\n if (nodeBase.nodeType === DOCUMENT_FRAGMENT_NODE) {\n // When appending a DocumentFragment, move its children instead\n const fragment = nodeBase;\n\n // Move all children from fragment to this node\n while (fragment._childNodesInternal.length > 0) {\n const child = fragment._childNodesInternal[0];\n if (child) {\n fragment.removeChild(child);\n this.appendChild(child);\n }\n }\n\n return node;\n }\n\n if (nodeBase._parentNodeInternal) {\n nodeBase._parentNodeInternal.removeChild(nodeBase);\n }\n\n this._childNodesInternal.push(nodeBase);\n nodeBase._parentNodeInternal = this;\n nodeBase._ownerDocument = this._ownerDocument;\n\n // Trigger connectedCallback if it's a custom element and connected to document\n if (this.isConnected && (nodeBase as any).connectedCallback) {\n console.log(`[NodeBase] Calling connectedCallback for <${nodeBase.nodeName}>`);\n (nodeBase as any).connectedCallback();\n }\n\n return node;\n }\n\n removeChild<T extends Node>(child: T): T {\n const childBase = child as any as NodeBase; // Internal cast\n const index = this._findChildIndex(childBase);\n if (index === -1) {\n throw new Error('Node not found');\n }\n\n const wasConnected = childBase.isConnected;\n\n this._childNodesInternal.splice(index, 1);\n childBase._parentNodeInternal = null;\n\n // Trigger disconnectedCallback if it was connected\n if (wasConnected && (childBase as any).disconnectedCallback) {\n (childBase as any).disconnectedCallback();\n }\n\n return child;\n }\n\n insertBefore<T extends Node>(node: T, child: Node | null): T {\n if (child === null) {\n return this.appendChild(node);\n }\n\n const nodeBase = node as any as NodeBase; // Internal cast\n const childBase = child as any as NodeBase; // Internal cast\n const index = this._findChildIndex(childBase);\n if (index === -1) {\n throw new Error('Reference node not found');\n }\n\n // Handle DocumentFragment - move all its children\n if (nodeBase.nodeType === DOCUMENT_FRAGMENT_NODE) {\n const fragment = nodeBase as any;\n const children = [...fragment._childNodesInternal]; // Copy array to avoid modification during iteration\n\n let insertIndex = index;\n for (const fragmentChild of children) {\n // Remove from fragment\n fragment.removeChild(fragmentChild);\n // Insert at the current insert position\n this._childNodesInternal.splice(insertIndex, 0, fragmentChild);\n fragmentChild._parentNodeInternal = this;\n fragmentChild._ownerDocument = this._ownerDocument;\n // Increment insert index for next child to maintain order\n insertIndex++;\n }\n\n return node;\n }\n\n if (nodeBase._parentNodeInternal) {\n nodeBase._parentNodeInternal.removeChild(nodeBase);\n }\n\n this._childNodesInternal.splice(index, 0, nodeBase);\n nodeBase._parentNodeInternal = this;\n nodeBase._ownerDocument = this._ownerDocument;\n\n // Trigger connectedCallback if it's a custom element and connected to document\n if (this.isConnected && (nodeBase as any).connectedCallback) {\n (nodeBase as any).connectedCallback();\n }\n\n return node;\n }\n\n replaceChild<T extends Node>(node: Node, child: T): T {\n this.insertBefore(node, child);\n this.removeChild(child);\n return child;\n }\n\n cloneNode(deep?: boolean): Node {\n // Basic clone implementation - would need to be overridden by specific node types\n throw new Error('cloneNode must be implemented by subclasses');\n }\n\n hasChildNodes(): boolean {\n return this._childNodesInternal.length > 0;\n }\n\n contains(other: Node | null): boolean {\n if (!other || other === this) return other === this;\n\n let node: Node | null = other;\n while (node) {\n if (node.parentNode === (this as unknown as ParentNode)) return true;\n node = node.parentNode;\n }\n return false;\n }\n\n compareDocumentPosition(other: Node): number {\n if (this === other) return 0;\n\n const otherBase = other as any as NodeBase;\n\n // Check if nodes are disconnected (not in same tree)\n const thisRoot = this.getRootNode();\n const otherRoot = otherBase.getRootNode();\n if (thisRoot !== otherRoot) {\n return DOCUMENT_POSITION_DISCONNECTED;\n }\n\n // Check containment relationships\n if (this.contains(other)) return DOCUMENT_POSITION_CONTAINED_BY;\n if (other.contains(this)) return DOCUMENT_POSITION_CONTAINS;\n\n // Find document order by traversing up to common ancestor\n const thisAncestors = this._getAncestors();\n const otherAncestors = otherBase._getAncestors();\n\n // Find common ancestor\n let commonAncestor: NodeBase | null = null;\n for (let i = 0; i < thisAncestors.length; i++) {\n if (otherAncestors.includes(thisAncestors[i])) {\n commonAncestor = thisAncestors[i];\n break;\n }\n }\n\n if (!commonAncestor) {\n return DOCUMENT_POSITION_DISCONNECTED;\n }\n\n // Compare positions within common ancestor\n const thisChild = this._getChildInAncestor(commonAncestor);\n const otherChild = otherBase._getChildInAncestor(commonAncestor);\n\n if (thisChild && otherChild && commonAncestor._childNodesInternal) {\n const thisIndex = commonAncestor._childNodesInternal.indexOf(thisChild);\n const otherIndex = commonAncestor._childNodesInternal.indexOf(otherChild);\n\n if (thisIndex < otherIndex) {\n return DOCUMENT_POSITION_FOLLOWING;\n } else if (thisIndex > otherIndex) {\n return DOCUMENT_POSITION_PRECEDING;\n }\n }\n\n return DOCUMENT_POSITION_DISCONNECTED;\n }\n\n getRootNode(options?: GetRootNodeOptions): Node {\n let root: Node = this;\n while (root.parentNode) {\n root = root.parentNode;\n }\n return root;\n }\n\n isEqualNode(otherNode: Node | null): boolean {\n if (!otherNode) return false;\n if (this === otherNode) return true;\n if (this.nodeType !== otherNode.nodeType) return false;\n if (this.nodeName !== otherNode.nodeName) return false;\n return true; // Simplified comparison\n }\n\n isSameNode(otherNode: Node | null): boolean {\n return this === otherNode;\n }\n\n isDefaultNamespace(namespace: string | null): boolean {\n // Simplified implementation\n return namespace === null || namespace === 'http://www.w3.org/1999/xhtml';\n }\n\n lookupNamespaceURI(prefix: string | null): string | null {\n // Simplified implementation\n if (prefix === null || prefix === '') {\n return 'http://www.w3.org/1999/xhtml';\n }\n return null;\n }\n\n lookupPrefix(namespace: string | null): string | null {\n // Simplified implementation\n return null;\n }\n\n normalize(): void {\n // Merge adjacent text nodes\n for (let i = this._childNodesInternal.length - 1; i >= 0; i--) {\n const child = this._childNodesInternal[i];\n if (child && child.nodeType === TEXT_NODE) {\n const nextSibling = child.nextSibling;\n if (nextSibling && nextSibling.nodeType === TEXT_NODE) {\n child.nodeValue = (child.nodeValue || '') + (nextSibling.nodeValue || '');\n this.removeChild(nextSibling);\n }\n }\n }\n }\n\n // Helper methods\n private _findIndexInParent(): number {\n if (!this._parentNodeInternal) return -1;\n return this._parentNodeInternal._childNodesInternal.indexOf(this);\n }\n\n private _findChildIndex(child: NodeBase): number {\n return this._childNodesInternal.indexOf(child);\n }\n\n private _getAncestors(): NodeBase[] {\n const ancestors: NodeBase[] = [];\n let current: NodeBase | null = this._parentNodeInternal;\n while (current) {\n ancestors.push(current);\n current = current._parentNodeInternal;\n }\n return ancestors;\n }\n\n private _getChildInAncestor(ancestor: NodeBase): NodeBase | null {\n let current: NodeBase = this;\n while (current._parentNodeInternal && current._parentNodeInternal !== ancestor) {\n current = current._parentNodeInternal;\n }\n return current._parentNodeInternal === ancestor ? current : null;\n }\n}\n", "import { ELEMENT_NODE } from './Node';\nimport { NodeBase } from './NodeBase';\n\n/**\n * Base implementation of the ChildNode interface\n */\n// @ts-ignore\nexport abstract class ChildNodeBase extends NodeBase implements ChildNode {\n get nextElementSibling(): Element | null {\n let next = this.nextSibling;\n while (next) {\n if (next.nodeType === ELEMENT_NODE) return next as unknown as Element;\n next = next.nextSibling;\n }\n return null;\n }\n\n get previousElementSibling(): Element | null {\n let prev = this.previousSibling;\n while (prev) {\n if (prev.nodeType === ELEMENT_NODE) return prev as unknown as Element;\n prev = prev.previousSibling;\n }\n return null;\n }\n\n get assignedSlot(): any | null {\n return null;\n }\n\n // ChildNode interface implementation\n after(...nodes: (Node | string)[]): void {\n if (!this.parentNode) return;\n\n const nextSibling = this.nextSibling;\n for (const node of nodes) {\n if (typeof node === 'string') {\n const { TextBase } = require('./TextBase');\n const textNode = new TextBase(node, this._ownerDocument);\n this.parentNode.insertBefore(textNode, nextSibling);\n } else {\n this.parentNode.insertBefore(node, nextSibling);\n }\n }\n }\n\n before(...nodes: (Node | string)[]): void {\n if (!this.parentNode) return;\n\n for (const node of nodes) {\n if (typeof node === 'string') {\n const { TextBase } = require('./TextBase');\n const textNode = new TextBase(node, this._ownerDocument);\n this.parentNode.insertBefore(textNode, this as unknown as Node);\n } else {\n this.parentNode.insertBefore(node, this as unknown as Node);\n }\n }\n }\n\n remove(): void {\n if (this.parentNode) {\n this.parentNode.removeChild(this as unknown as Node);\n }\n }\n\n replaceWith(...nodes: (Node | string)[]): void {\n if (!this.parentNode) return;\n\n this.before(...nodes);\n this.remove();\n }\n}\n\n// TextNode is now in a separate file\n", "import { ChildNodeBase } from './ChildNodeBase';\nimport { TEXT_NODE } from './Node';\n\n/**\n * The **`TextBase`** class represents a text node implementation in the DOM.\n */\nexport class TextBase extends ChildNodeBase implements Text {\n private _data: string;\n\n declare nodeType: 3;\n declare nodeName: '#text';\n\n constructor(data: string, ownerDocument?: any) {\n super(TEXT_NODE, '#text', ownerDocument);\n this._data = data;\n this._nodeValue = data;\n }\n\n get data(): string {\n return this._data;\n }\n\n set data(value: string) {\n this._data = value;\n this._nodeValue = value;\n }\n\n get length(): number {\n return this._data.length;\n }\n\n get textContent(): string | null {\n // Decode HTML entities to return original text\n return this._data ? this.decodeHTMLEntities(this._data) : this._data;\n }\n\n set textContent(value: string | null) {\n this._data = value || '';\n this._nodeValue = this._data;\n }\n\n get wholeText(): string {\n // For now, just return the current text\n // In a full implementation, this would collect adjacent text nodes\n return this._data;\n }\n\n // CharacterData methods\n appendData(data: string): void {\n this._data += data;\n this._nodeValue = this._data;\n }\n\n deleteData(offset: number, count: number): void {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n const endOffset = Math.min(offset + count, this._data.length);\n this._data = this._data.slice(0, offset) + this._data.slice(endOffset);\n this._nodeValue = this._data;\n }\n\n insertData(offset: number, data: string): void {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n this._data = this._data.slice(0, offset) + data + this._data.slice(offset);\n this._nodeValue = this._data;\n }\n\n replaceData(offset: number, count: number, data: string): void {\n this.deleteData(offset, count);\n this.insertData(offset, data);\n }\n\n substringData(offset: number, count: number): string {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n const endOffset = Math.min(offset + count, this._data.length);\n return this._data.slice(offset, endOffset);\n }\n\n splitText(offset: number): Text {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n\n const newData = this._data.slice(offset);\n this._data = this._data.slice(0, offset);\n this._nodeValue = this._data;\n\n const newTextNode = new TextBase(newData, this._ownerDocument);\n\n // Insert the new text node after this one\n if (this._parentNodeInternal) {\n const nextSibling = this.nextSibling;\n this._parentNodeInternal.insertBefore(newTextNode, nextSibling);\n }\n\n return newTextNode as Text;\n }\n\n cloneNode(deep?: boolean): Text {\n return new TextBase(this._data, this._ownerDocument) as Text;\n }\n\n toString(): string {\n return this._data;\n }\n}\n", "import { ChildNodeBase } from './ChildNodeBase';\nimport { COMMENT_NODE } from './Node';\n\n/**\n * The **`Comment`** interface represents textual notations within markup; although it is generally not visually shown, such comments are available to be read in the source view.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Comment)\n */\n// export interface Comment {\n// readonly nodeType: typeof COMMENT_NODE;\n// readonly nodeName: '#comment';\n// data: string;\n// readonly length: number;\n// appendData(data: string): void;\n// deleteData(offset: number, count: number): void;\n// insertData(offset: number, data: string): void;\n// replaceData(offset: number, count: number, data: string): void;\n// substringData(offset: number, count: number): string;\n// }\n\n/**\n * The **`CommentNode`** class represents a comment node in the DOM.\n */\nexport class Comment extends ChildNodeBase {\n private _data: string;\n\n constructor(data: string, ownerDocument?: any) {\n super(COMMENT_NODE, '#comment', ownerDocument);\n this._data = data;\n this._nodeValue = data;\n }\n\n get data(): string {\n return this._data;\n }\n\n set data(value: string) {\n this._data = value;\n this._nodeValue = value;\n }\n\n get length(): number {\n return this._data.length;\n }\n\n get textContent(): string | null {\n return this._data;\n }\n\n set textContent(value: string | null) {\n this._data = value || '';\n this._nodeValue = this._data;\n }\n\n // CharacterData methods\n appendData(data: string): void {\n this._data += data;\n this._nodeValue = this._data;\n }\n\n deleteData(offset: number, count: number): void {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n const endOffset = Math.min(offset + count, this._data.length);\n this._data = this._data.slice(0, offset) + this._data.slice(endOffset);\n this._nodeValue = this._data;\n }\n\n insertData(offset: number, data: string): void {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n this._data = this._data.slice(0, offset) + data + this._data.slice(offset);\n this._nodeValue = this._data;\n }\n\n replaceData(offset: number, count: number, data: string): void {\n this.deleteData(offset, count);\n this.insertData(offset, data);\n }\n\n substringData(offset: number, count: number): string {\n if (offset < 0 || offset > this._data.length) {\n throw new Error('Index out of bounds');\n }\n const endOffset = Math.min(offset + count, this._data.length);\n return this._data.slice(offset, endOffset);\n }\n\n cloneNode(deep?: boolean): Node {\n return new Comment(this._data, this._ownerDocument) as unknown as Node;\n }\n\n toString(): string {\n return `<!--${this._data}-->`;\n }\n}\n", "// import { Element } from '../elements/Element';\n\n/**\n * **`HTMLCollection`** represents a generic collection of HTML elements.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLCollection)\n */\nexport class HTMLCollectionImp implements HTMLCollection {\n // \uC778\uB371\uC2A4 \uC2DC\uADF8\uB2C8\uCC98 \uC120\uC5B8\n [index: number]: Element;\n \n private _elements: Element[] = [];\n\n constructor(elements: Element[] = []) {\n this._elements = [...elements];\n \n // \uC778\uB371\uC2A4 \uC2DC\uADF8\uB2C8\uCC98 \uAD6C\uD604\uC744 \uC704\uD55C \uD504\uB85D\uC2DC \uC124\uC815\n return new Proxy(this, {\n get(target, prop) {\n // \uC22B\uC790 \uC778\uB371\uC2A4\uC778 \uACBD\uC6B0\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n const index = parseInt(prop, 10);\n return target._elements[index] || null;\n }\n // \uC77C\uBC18 \uD504\uB85C\uD37C\uD2F0/\uBA54\uC11C\uB4DC\uC778 \uACBD\uC6B0\n return (target as any)[prop];\n },\n \n set(target, prop, value) {\n // \uC22B\uC790 \uC778\uB371\uC2A4 \uC124\uC815 \uBC29\uC9C0 (\uC77D\uAE30 \uC804\uC6A9)\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n return false;\n }\n (target as any)[prop] = value;\n return true;\n },\n \n has(target, prop) {\n if (typeof prop === 'string' && /^\\d+$/.test(prop)) {\n const index = parseInt(prop, 10);\n return index >= 0 && index < target._elements.length;\n }\n return prop in target;\n }\n });\n }\n\n /**\n * Returns the number of elements in the collection.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLCollection/length)\n */\n get length(): number {\n return this._elements.length;\n }\n\n /**\n * Returns the element at the specified index, or null if the index is out of range.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLCollection/item)\n */\n item(index: number): Element | null {\n if (index < 0 || index >= this._elements.length) {\n return null;\n }\n return this._elements[index];\n }\n\n /**\n * Returns the element with the specified ID or name, or null if no such element exists.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLCollection/namedItem)\n */\n namedItem(name: string): Element | null {\n for (const element of this._elements) {\n if (element.id === name || element.getAttribute('name') === name) {\n return element;\n }\n }\n return null;\n }\n\n /**\n * Returns an iterator for the collection.\n */\n // @ts-ignore\n [Symbol.iterator](): IterableIterator<Element> {\n return this._elements[Symbol.iterator]();\n }\n\n // \uB0B4\uBD80\uC801\uC73C\uB85C \uC694\uC18C \uCD94\uAC00/\uC81C\uAC70\uB97C \uC704\uD55C \uBA54\uC11C\uB4DC\uB4E4 (DOM \uC870\uC791 \uC2DC \uC0AC\uC6A9)\n _addElement(element: Element): void {\n this._elements.push(element);\n }\n\n _removeElement(element: Element): boolean {\n const index = this._elements.indexOf(element);\n if (index !== -1) {\n this._elements.splice(index, 1);\n return true;\n }\n return false;\n }\n\n _insertElement(index: number, element: Element): void {\n this._elements.splice(index, 0, element);\n }\n}\n", "\n/**\n * CSS Selector Parser and Matcher\n * Supports various CSS selector types including complex selectors\n */\nexport class CSSSelector {\n /**\n * Main method to check if an element matches a CSS selector\n */\n static matches(element: Element, selector: string): boolean {\n selector = selector.trim();\n\n // Handle compound selectors (e.g., \"meta[charset]\", \"div.class\", \"input#id\")\n const components = this.parseSelector(selector);\n\n // All components must match for the selector to match\n for (const component of components) {\n if (!this.matchesSingleSelector(element, component)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Parse a selector into individual components\n * e.g., \"div.user-panel[data-id='123']\" -> [\"div\", \".user-panel\", \"[data-id='123']\"]\n */\n private static parseSelector(selector: string): string[] {\n const components: string[] = [];\n let current = '';\n let inBrackets = false;\n let inQuotes = false;\n let quoteChar = '';\n\n for (let i = 0; i < selector.length; i++) {\n const char = selector[i];\n const prevChar = i > 0 ? selector[i - 1] : '';\n\n if (inQuotes) {\n current += char;\n if (char === quoteChar && prevChar !== '\\\\') {\n inQuotes = false;\n quoteChar = '';\n }\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n inQuotes = true;\n quoteChar = char;\n current += char;\n continue;\n }\n\n if (char === '[') {\n inBrackets = true;\n if (current) {\n components.push(current);\n current = '';\n }\n current += char;\n } else if (char === ']') {\n inBrackets = false;\n current += char;\n components.push(current);\n current = '';\n } else if (!inBrackets && (char === '.' || char === '#')) {\n if (current) {\n components.push(current);\n current = '';\n }\n current += char;\n } else if (!inBrackets && char === ':' && prevChar !== '\\\\') {\n // Only treat colon as pseudo-class separator if it's not escaped\n if (current) {\n components.push(current);\n current = '';\n }\n current += char;\n } else {\n current += char;\n }\n }\n\n if (current) {\n components.push(current);\n }\n\n return components;\n }\n\n /**\n * Match a single selector component against an element\n */\n private static matchesSingleSelector(element: Element, selector: string): boolean {\n selector = selector.trim();\n\n // Tag selector (e.g., \"div\", \"dr-wow\", \"wow\\\\:zz\")\n // Handle escaped colons in tag names\n const unescapedSelector = selector.replace(/\\\\:/g, ':');\n if (unescapedSelector.match(/^[a-zA-Z][a-zA-Z0-9:-]*$/)) {\n return element.tagName.toLowerCase() === unescapedSelector.toLowerCase();\n }\n\n // ID selector (e.g., \"#myId\")\n if (selector.startsWith('#')) {\n const id = selector.substring(1);\n return element.id === id;\n }\n\n // Class selector (e.g., \".myClass\")\n if (selector.startsWith('.')) {\n const className = selector.substring(1);\n return element.className.split(/\\s+/).includes(className);\n }\n\n // Pseudo-class selectors\n if (selector.startsWith(':')) {\n return this.matchesPseudoClass(element, selector);\n }\n\n // Attribute selector (e.g., \"[type='text']\", \"[disabled]\", \"[value*='test']\")\n if (selector.startsWith('[') && selector.endsWith(']')) {\n return this.matchesAttributeSelector(element, selector);\n }\n\n // Universal selector\n if (selector === '*') {\n return true;\n }\n\n // Unsupported selector\n return false;\n }\n\n /**\n * Match attribute selectors with various operators\n */\n private static matchesAttributeSelector(element: Element, selector: string): boolean {\n const attrContent = selector.slice(1, -1); // Remove [ and ]\n\n // Parse attribute selector: attr, attr=value, attr*=value, etc.\n const match = attrContent.match(/^([^=!*^$~|]+)(?:([=!*^$~|]+)(['\"]?)([^'\"]*)(['\"]?))?$/);\n\n if (!match) return false;\n\n let attrName = match[1].trim();\n const operator = match[2] || '';\n const attrValue = match[4] || '';\n\n // Handle escaped colons in attribute names\n attrName = attrName.replace(/\\\\:/g, ':');\n\n if (!operator) {\n // Just check if attribute exists: [disabled]\n return element.hasAttribute(attrName);\n }\n\n const elementValue = element.getAttribute(attrName);\n if (elementValue === null) return false;\n\n switch (operator) {\n case '=':\n // Exact match: [type=\"text\"]\n return elementValue === attrValue;\n\n case '!=':\n // Not equal: [value!=\"test\"]\n return elementValue !== attrValue;\n\n case '*=':\n // Contains: [value*=\"test\"]\n return elementValue.includes(attrValue);\n\n case '^=':\n // Starts with: [value^=\"test\"]\n return elementValue.startsWith(attrValue);\n\n case '$=':\n // Ends with: [value$=\"test\"]\n return elementValue.endsWith(attrValue);\n\n case '~=':\n // Word match: [class~=\"test\"]\n return elementValue.split(/\\s+/).includes(attrValue);\n\n case '|=':\n // Language match: [lang|=\"en\"]\n return elementValue === attrValue || elementValue.startsWith(attrValue + '-');\n\n default:\n return false;\n }\n }\n\n /**\n * Match pseudo-class selectors\n */\n private static matchesPseudoClass(element: Element, selector: string): boolean {\n const pseudoClass = selector.substring(1); // Remove :\n\n // Parse pseudo-class with parameters: nth-child(2), contains('text')\n const match = pseudoClass.match(/^([^(]+)(?:\\(([^)]*)\\))?$/);\n if (!match) return false;\n\n const pseudoName = match[1];\n const pseudoParam = match[2];\n\n switch (pseudoName) {\n case 'checked':\n // :checked - for input elements\n return this.isInputElement(element) &&\n (element.getAttribute('checked') !== null ||\n element.getAttribute('selected') !== null);\n\n case 'disabled':\n // :disabled\n return element.hasAttribute('disabled');\n\n case 'enabled':\n // :enabled\n return !element.hasAttribute('disabled');\n\n case 'focus':\n // :focus - check if element has focus (autofocus attribute or programmatically focused)\n return element.hasAttribute('autofocus') ||\n element.getAttribute('data-focused') === 'true';\n\n case 'first':\n case 'first-child':\n // :first or :first-child\n return this.isFirstChild(element);\n\n case 'last':\n case 'last-child':\n // :last or :last-child\n return this.isLastChild(element);\n\n case 'even':\n // :even (0-based indexing)\n return this.getChildIndex(element) % 2 === 0;\n\n case 'odd':\n // :odd (0-based indexing)\n return this.getChildIndex(element) % 2 === 1;\n\n case 'nth-child':\n // :nth-child(n)\n if (pseudoParam) {\n const n = parseInt(pseudoParam, 10);\n return this.getChildIndex(element) === n - 1; // Convert to 0-based\n }\n return false;\n\n case 'eq':\n // :eq(n) - jQuery-style\n if (pseudoParam) {\n const n = parseInt(pseudoParam, 10);\n return this.getChildIndex(element) === n;\n }\n return false;\n\n case 'gt':\n // :gt(n) - jQuery-style\n if (pseudoParam) {\n const n = parseInt(pseudoParam, 10);\n return this.getChildIndex(element) > n;\n }\n return false;\n\n case 'lt':\n // :lt(n) - jQuery-style\n if (pseudoParam) {\n const n = parseInt(pseudoParam, 10);\n return this.getChildIndex(element) < n;\n }\n return false;\n\n case 'contains':\n // :contains('text')\n if (pseudoParam) {\n const text = pseudoParam.replace(/^['\"]|['\"]$/g, ''); // Remove quotes\n return (element.textContent || '').includes(text);\n }\n return false;\n\n case 'visible':\n // :visible - simplified check\n return !element.hasAttribute('hidden') &&\n element.getAttribute('style')?.includes('display:none') !== true;\n\n case 'hidden':\n // :hidden\n return element.hasAttribute('hidden') ||\n element.getAttribute('style')?.includes('display:none') === true;\n\n case 'has':\n // :has(selector) - simplified implementation\n if (pseudoParam && 'querySelector' in element) {\n try {\n return (element as any).querySelector(pseudoParam) !== null;\n } catch {\n return false;\n }\n }\n return false;\n\n case 'not':\n // :not(selector) - simplified implementation\n if (pseudoParam) {\n return !CSSSelector.matches(element, pseudoParam);\n }\n return false;\n\n default:\n // Unsupported pseudo-class\n return false;\n }\n }\n\n /**\n * Helper methods for pseudo-class matching\n */\n private static isInputElement(element: Element): boolean {\n const tagName = element.tagName.toLowerCase();\n return tagName === 'input' || tagName === 'select' || tagName === 'textarea';\n }\n\n private static isFirstChild(element: Element): boolean {\n const parent = element.parentNode;\n if (!parent || !('children' in parent)) return false;\n\n const children = (parent as any).children;\n return children.length > 0 && children[0] === element;\n }\n\n private static isLastChild(element: Element): boolean {\n const parent = element.parentNode;\n if (!parent || !('children' in parent)) return false;\n\n const children = (parent as any).children;\n return children.length > 0 && children[children.length - 1] === element;\n }\n\n private static getChildIndex(element: Element): number {\n const parent = element.parentNode;\n if (!parent || !('children' in parent)) return -1;\n\n const children = (parent as any).children;\n for (let i = 0; i < children.length; i++) {\n if (children[i] === element) {\n return i;\n }\n }\n return -1;\n }\n}", "import { ChildNodeBase } from './ChildNodeBase';\nimport { HTMLCollectionImp } from './collection/HTMLCollectionImp';\nimport { NodeListOfImp } from './collection/NodeListOfImp';\nimport { ELEMENT_NODE, TEXT_NODE } from './Node';\nimport { TextBase } from './TextBase';\nimport { CSSSelector } from '../utils/CSSSelector';\n\n/**\n * Base implementation of the ParentNode interface\n */\nexport abstract class ParentNodeBase extends ChildNodeBase implements ParentNode {\n\n // ParentNode interface implementation\n get childElementCount(): number {\n let count = 0;\n for (const child of this._childNodesInternal) {\n if (child && child.nodeType === ELEMENT_NODE) {\n count++;\n }\n }\n return count;\n }\n\n get children(): HTMLCollection {\n const elements: Element[] = [];\n for (const child of this._childNodesInternal) {\n if (child && child.nodeType === ELEMENT_NODE) {\n elements.push(child as unknown as Element);\n }\n }\n return new HTMLCollectionImp(elements) as unknown as HTMLCollection;\n }\n\n get firstElementChild(): Element | null {\n for (const child of this._childNodesInternal) {\n if (child && child.nodeType === ELEMENT_NODE) {\n return child as unknown as Element;\n }\n }\n return null;\n }\n\n get lastElementChild(): Element | null {\n for (let i = this._childNodesInternal.length - 1; i >= 0; i--) {\n const child = this._childNodesInternal[i];\n if (child && child.nodeType === ELEMENT_NODE) {\n return child as unknown as Element;\n }\n }\n return null;\n }\n\n append(...nodes: (Node | string)[]): void {\n for (const node of nodes) {\n if (typeof node === 'string') {\n const textNode = new TextBase(node, this._ownerDocument);\n this.appendChild(textNode as unknown as Node);\n } else {\n this.appendChild(node);\n }\n }\n }\n\n prepend(...nodes: (Node | string)[]): void {\n const firstChild = this.firstChild;\n for (const node of nodes) {\n if (typeof node === 'string') {\n const textNode = new TextBase(node, this._ownerDocument);\n this.insertBefore(textNode as unknown as Node, firstChild);\n } else {\n this.insertBefore(node, firstChild);\n }\n }\n }\n\n replaceChildren(...nodes: (Node | string)[]): void {\n // Remove all existing children\n while (this._childNodesInternal.length > 0) {\n const child = this._childNodesInternal[0];\n if (child) {\n this.removeChild(child as unknown as Node);\n }\n }\n\n // Add new nodes\n this.append(...nodes);\n }\n\n // Query selector implementation\n querySelector<E extends Element>(selectors: string): E | null {\n const elements = this.querySelectorAll(selectors);\n return elements.length > 0 ? elements.item(0) as E: null;\n }\n\n querySelectorAll<E extends Element = Element>(selectors: string): NodeListOf<E> {\n const results: E[] = [];\n \n // Split selectors by comma and process each one\n const selectorList = selectors.split(',').map(s => s.trim());\n \n for (const selector of selectorList) {\n if (selector) {\n this._querySelectorAllRecursive(selector, results);\n }\n }\n \n // Remove duplicates while preserving order\n const uniqueResults: E[] = [];\n const seen = new Set();\n for (const element of results) {\n if (!seen.has(element)) {\n seen.add(element);\n uniqueResults.push(element);\n }\n }\n \n return new NodeListOfImp<E>(uniqueResults) as unknown as NodeListOf<E>;\n }\n\n // Private helper methods for querySelector\n private _querySelectorAllRecursive(selectors: string, results: Element[]): void {\n for (const child of this._childNodesInternal) {\n if (child && child.nodeType === ELEMENT_NODE) {\n const element = child as unknown as Element;\n\n // Check if this element matches the selector\n if (CSSSelector.matches(element, selectors)) {\n results.push(element);\n }\n\n // Recursively search in child elements\n if (child instanceof ParentNodeBase) {\n child._querySelectorAllRecursive(selectors, results);\n }\n }\n }\n }\n\n\n}\n\n// TextNode is now in a separate file", "// import { Element } from '../elements/Element';\nimport { HTMLCollectionImp } from './HTMLCollectionImp';\n\n/**\n * **`HTMLCollectionOf<T>`** is a generic version of HTMLCollection that provides type safety for specific element types.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLCollection)\n */\nexport class HTMLCollectionOfImp<T extends Element> extends HTMLCollectionImp implements HTMLCollectionOfImp<T>{\n\n\n}", "export { HTMLCollectionImp } from './HTMLCollectionImp';\nexport { HTMLCollectionOfImp } from './HTMLCollectionOfImp';\nexport { NodeList } from './NodeList';\nexport { NodeListOfImp } from './NodeListOfImp';", "import { ParentNodeBase } from './ParentNodeBase';\nimport {DOCUMENT_FRAGMENT_NODE, ELEMENT_NODE} from './Node';\nimport { NodeBase } from './NodeBase';\nimport { NodeListOfImp } from './collection/NodeListOfImp';\n\n/**\n * The **`DocumentFragmentBase`** class is the concrete implementation of the DocumentFragment interface.\n * \n * DocumentFragment is a minimal document object that has no parent. It is used as a lightweight version of Document\n * that stores a segment of a document structure comprised of nodes just like a standard document.\n */\nexport class DocumentFragmentBase extends ParentNodeBase implements DocumentFragment {\n constructor(ownerDocument?: Document) {\n super(DOCUMENT_FRAGMENT_NODE, '#document-fragment', ownerDocument); // DOCUMENT_FRAGMENT_NODE = 11\n }\n\n /**\n * Returns the number of child elements of this DocumentFragment.\n */\n get childElementCount(): number {\n let count = 0;\n for (const child of this._childNodesInternal) {\n if (child && child.nodeType === ELEMENT_NODE) { // ELEMENT_NODE\n count++;\n }\n }\n return count;\n }\n\n /**\n * Returns the first Element node within the DocumentFragment that matches the specified selectors.\n */\n querySelector<K extends keyof HTMLElementTagNameMap>(selectors: K): HTMLElementTagNameMap[K] | null;\n querySelector<K extends keyof SVGElementTagNameMap>(selectors: K): SVGElementTagNameMap[K] | null;\n querySelector<K extends keyof MathMLElementTagNameMap>(selectors: K): MathMLElementTagNameMap[K] | null;\n querySelector<E extends Element = Element>(selectors: string): E | null;\n querySelector(selectors: string): Element | null;\n querySelector(selectors: string): Element | null {\n const elements = this.querySelectorAll(selectors);\n return elements.length > 0 ? elements.item(0) : null;\n }\n\n /**\n * Returns all Element nodes within the DocumentFragment that match the specified selectors.\n */\n querySelectorAll<K extends keyof HTMLElementTagNameMap>(selectors: K): NodeListOf<HTMLElementTagNameMap[K]>;\n querySelectorAll<K extends keyof SVGElementTagNameMap>(selectors: K): NodeListOf<SVGElementTagNameMap[K]>;\n querySelectorAll<K extends keyof MathMLElementTagNameMap>(selectors: K): NodeListOf<MathMLElementTagNameMap[K]>;\n querySelectorAll<E extends Element = Element>(selectors: string): NodeListOf<E>;\n querySelectorAll(selectors: string): NodeListOf<Element>;\n querySelectorAll(selectors: string): NodeListOf<Element> {\n // Use the inherited querySelectorAll from ParentNodeBase\n return super.querySelectorAll(selectors);\n }\n\n /**\n * Returns the Element within the DocumentFragment that has the specified ID.\n */\n getElementById(elementId: string): HTMLElement | null {\n const element = this.querySelector(`#${elementId}`);\n return element as HTMLElement | null;\n }\n\n /**\n * Override cloneNode to return DocumentFragment\n */\n cloneNode(deep?: boolean): DocumentFragment {\n const clone = new DocumentFragmentBase(this._ownerDocument as Document) as unknown as DocumentFragment;\n \n if (deep) {\n for (const child of this._childNodesInternal) {\n if (child && 'cloneNode' in child) {\n clone.appendChild((child as any).cloneNode(true));\n }\n }\n }\n \n return clone;\n }\n\n /**\n * Override appendChild to handle DocumentFragment behavior\n * When a DocumentFragment is appended to another node, its children are moved, not the fragment itself\n */\n appendChild<T extends Node>(node: T): T {\n // If the node being appended is a DocumentFragment, move its children instead\n if (node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n const fragment = node as any;\n \n // Move all children from fragment to this node\n while (fragment._childNodesInternal && fragment._childNodesInternal.length > 0) {\n const child = fragment._childNodesInternal[0];\n if (child) {\n fragment.removeChild(child);\n super.appendChild(child);\n }\n }\n \n return node;\n }\n \n return super.appendChild(node);\n }\n}", "import { DocumentFragmentBase } from './DocumentFragmentBase';\n\n/**\n * The **`ShadowRoot`** interface represents the root node of a shadow DOM subtree.\n */\n// @ts-ignore\nexport class ShadowRootBase extends DocumentFragmentBase implements ShadowRoot {\n public readonly delegatesFocus: boolean;\n public readonly mode: ShadowRootMode;\n public readonly slotAssignment: SlotAssignmentMode;\n private _host: Element;\n\n constructor(host: Element, init: { mode: ShadowRootMode; delegatesFocus?: boolean; slotAssignment?: SlotAssignmentMode }, ownerDocument?: Document) {\n super(ownerDocument);\n this._host = host;\n this.mode = init.mode;\n this.delegatesFocus = init.delegatesFocus || false;\n this.slotAssignment = init.slotAssignment || 'manual';\n\n // Set nodeName to '#shadow-root'\n (this as any).nodeName = '#shadow-root';\n }\n\n clonable: boolean;\n onslotchange: (this: ShadowRoot, ev: Event) => any;\n serializable: boolean;\n getHTML(options?: GetHTMLOptions): string {\n throw new Error(\"Method not implemented.\");\n }\n setHTMLUnsafe(html: string): void {\n throw new Error(\"Method not implemented.\");\n }\n activeElement: Element;\n adoptedStyleSheets: CSSStyleSheet[];\n fullscreenElement: Element;\n pictureInPictureElement: Element;\n pointerLockElement: Element;\n styleSheets: StyleSheetList;\n elementFromPoint(x: number, y: number): Element | null {\n throw new Error(\"Method not implemented.\");\n }\n elementsFromPoint(x: number, y: number): Element[] {\n throw new Error(\"Method not implemented.\");\n }\n getAnimations(): Animation[] {\n throw new Error(\"Method not implemented.\");\n }\n\n get host(): Element {\n return this._host;\n }\n\n /**\n * innerHTML for ShadowRoot\n */\n get innerHTML(): string {\n let html = '';\n for (const child of this._childNodesInternal) {\n if ((child as any).nodeType === 3) {\n // TEXT_NODE\n html += (child as any)._nodeValue || '';\n } else if ((child as any).nodeType === 1) {\n // ELEMENT_NODE\n html += (this._host as any).generateChildElementHTML(child as any);\n } else if ((child as any).nodeType === 8) {\n // COMMENT_NODE\n html += `<!--${(child as any).textContent || ''}-->`;\n }\n }\n return html;\n }\n\n set innerHTML(value: string) {\n // Clear existing children\n while (this._childNodesInternal.length > 0) {\n const child = this._childNodesInternal[0];\n if (child) {\n this.removeChild(child as unknown as Node);\n }\n }\n\n // Parse HTML and create child nodes\n if (value.trim()) {\n (this._host as any).parseAndAppendHTML(value, this);\n }\n }\n}\n", "import { ParentNodeBase } from '../ParentNodeBase';\nimport { HTMLCollectionImp, HTMLCollectionOfImp } from '../collection';\nimport { ELEMENT_NODE, TEXT_NODE, ATTRIBUTE_NODE } from '../Node';\nimport { CSSSelector } from '../../utils/CSSSelector';\nimport { NodeBase } from '../NodeBase';\nimport { ShadowRootBase } from '../ShadowRootBase';\n\n// Simple DOMException class for error handling\nclass DOMException extends Error {\n constructor(\n message: string,\n public name: string = 'DOMException'\n ) {\n super(message);\n this.name = name;\n }\n}\n\n/**\n * Base implementation of the Element interface\n */\n// @ts-ignore\nexport abstract class ElementBase extends ParentNodeBase implements Element {\n /**\n * Static dependencies to break circular references without using 'require' or 'global'.\n * These are injected by the main DomParser entry point.\n */\n public static dependencies: {\n ElementFactory?: any;\n TextBase?: any;\n Comment?: any;\n } = {};\n\n private _id: string = '';\n private _className: string = '';\n private _attributes: Map<string, string> = new Map();\n private _shadowRoot: ShadowRoot | null = null;\n\n constructor(\n public _tagName: string = 'DIV',\n ownerDocument?: any\n ) {\n super(ELEMENT_NODE, _tagName.toUpperCase(), ownerDocument);\n }\n\n ariaActiveDescendantElement: Element;\n ariaAtomic: string;\n ariaAutoComplete: string;\n ariaBrailleLabel: string;\n ariaBrailleRoleDescription: string;\n ariaBusy: string;\n ariaChecked: string;\n ariaColCount: string;\n ariaColIndex: string;\n ariaColIndexText: string;\n ariaColSpan: string;\n ariaControlsElements: readonly Element[];\n ariaCurrent: string;\n ariaDescribedByElements: readonly Element[];\n ariaDescription: string;\n ariaDetailsElements: readonly Element[];\n ariaDisabled: string;\n ariaErrorMessageElements: readonly Element[];\n ariaExpanded: string;\n ariaFlowToElements: readonly Element[];\n ariaHasPopup: string;\n ariaHidden: string;\n ariaInvalid: string;\n ariaKeyShortcuts: string;\n ariaLabel: string;\n ariaLabelledByElements: readonly Element[];\n ariaLevel: string;\n ariaLive: string;\n ariaModal: string;\n ariaMultiLine: string;\n ariaMultiSelectable: string;\n ariaOrientation: string;\n ariaOwnsElements: readonly Element[];\n ariaPlaceholder: string;\n ariaPosInSet: string;\n ariaPressed: string;\n ariaReadOnly: string;\n ariaRelevant: string;\n ariaRequired: string;\n ariaRoleDescription: string;\n ariaRowCount: string;\n ariaRowIndex: string;\n ariaRowIndexText: string;\n ariaRowSpan: string;\n ariaSelected: string;\n ariaSetSize: string;\n ariaSort: string;\n ariaValueMax: string;\n ariaValueMin: string;\n ariaValueNow: string;\n ariaValueText: string;\n role: string;\n animate(keyframes: Keyframe[] | PropertyIndexedKeyframes | null, options?: number | KeyframeAnimationOptions): Animation {\n throw new Error('Method not implemented.');\n }\n getAnimations(options?: GetAnimationsOptions): Animation[] {\n throw new Error('Method not implemented.');\n }\n\n get tagName(): string {\n return this._tagName.toUpperCase();\n }\n\n get localName(): string {\n return this._tagName.toLowerCase();\n }\n\n // Element interface implementation\n get id(): string {\n return this._id;\n }\n\n set id(value: string) {\n this._id = value;\n this._attributes.set('id', value);\n }\n\n get className(): string {\n return this._className;\n }\n\n set className(value: string) {\n this._className = value;\n this._attributes.set('class', value);\n }\n\n get classList(): DOMTokenList {\n return new (DOMTokenListImpl as any)(this);\n }\n\n get innerHTML(): string {\n // Generate innerHTML from actual child nodes\n let html = '';\n for (const child of this._childNodesInternal) {\n if (child.nodeType === TEXT_NODE) {\n // For text nodes, use the escaped content stored in _nodeValue\n html += (child as any)._nodeValue || '';\n } else if (child.nodeType === ELEMENT_NODE) {\n // Generate outerHTML directly to avoid circular dependency\n html += this.generateChildElementHTML(child as any);\n } else if (child.nodeType === 8) {\n // COMMENT_NODE\n html += `<!--${(child as any).textContent || ''}-->`;\n }\n }\n return html;\n }\n\n get innerText(): string {\n // innerText should return the decoded text content\n return this.textContent || '';\n }\n\n set innerText(value: string | null) {\n // Clear all children and add escaped text content\n this._childNodesInternal = [];\n if (value !== null && value !== undefined) {\n const stringValue = String(value);\n const escapedValue = this.escapeHTMLEntities(stringValue);\n\n const { TextBase } = ElementBase.dependencies;\n if (TextBase) {\n const textNode = new TextBase(escapedValue, this._ownerDocument);\n this._childNodesInternal.push(textNode);\n (textNode as any)._parentNodeInternal = this;\n }\n }\n }\n\n set innerHTML(value: string) {\n // Clear existing children\n while (this._childNodesInternal.length > 0) {\n const child = this._childNodesInternal[0];\n if (child) {\n this.removeChild(child);\n }\n }\n\n // Parse HTML and create child nodes\n if (value.trim()) {\n this.parseAndAppendHTML(value);\n }\n }\n\n /**\n * Generate HTML for a child element without using outerHTML to avoid circular dependency\n */\n private generateChildElementHTML(element: any): string {\n const tagName = element.tagName.toLowerCase();\n // Get attributes\n const attrs = Array.from(element._attributes?.entries() || [])\n .map(([name, value]: [string, string]) => (value === '' ? ` ${name}` : ` ${name}=\"${String(value).replace(/\"/g, '&quot;')}\"`))\n .join('');\n\n // Check if it's a self-closing tag\n const selfClosingTags = ['img', 'input', 'br', 'hr', 'meta', 'link', 'area', 'base', 'col', 'embed', 'source', 'track', 'wbr'];\n const isSelfClosing = selfClosingTags.includes(tagName);\n\n if (isSelfClosing) {\n return `<${tagName}${attrs} />`;\n } else {\n // Generate innerHTML directly without calling element.innerHTML to avoid recursion\n let childHTML = '';\n\n // Add Declarative Shadow DOM if present\n if (element.shadowRoot) {\n childHTML += `<template shadowrootmode=\"${element.shadowRoot.mode}\">${element.shadowRoot.innerHTML}</template>`;\n }\n\n for (const child of element._childNodesInternal || []) {\n if (child.nodeType === TEXT_NODE) {\n childHTML += (child as any)._nodeValue || '';\n } else if (child.nodeType === ELEMENT_NODE) {\n childHTML += this.generateChildElementHTML(child as any);\n } else if (child.nodeType === 8) {\n // COMMENT_NODE\n childHTML += `<!--${(child as any).textContent || ''}-->`;\n }\n }\n return `<${tagName}${attrs}>${childHTML}</${tagName}>`;\n }\n }\n\n /**\n * Improved HTML parser for innerHTML using a stack-based approach\n */\n private parseAndAppendHTML(html: string, targetNode: any = this): void {\n const { ElementFactory, TextBase, Comment } = ElementBase.dependencies;\n\n if (!ElementFactory) {\n // Fallback for direct library usage without entry point initialization\n console.error('SWC DOM Parser: ElementFactory dependency not injected.');\n return;\n }\n\n let i = 0;\n const length = html.length;\n\n while (i < length) {\n const nextTagStart = html.indexOf('<', i);\n\n // Handle text content before next tag\n if (nextTagStart === -1) {\n let text = html.substring(i).trim();\n if (text) {\n text = this.fixBrokenClosingTags(text);\n if (TextBase) targetNode.appendChild(new TextBase(text, this._ownerDocument));\n }\n break;\n } else if (nextTagStart > i) {\n let text = html.substring(i, nextTagStart).trim();\n if (text) {\n text = this.fixBrokenClosingTags(text);\n if (TextBase) targetNode.appendChild(new TextBase(text, this._ownerDocument));\n }\n }\n\n i = nextTagStart;\n const tagEnd = this.findTagEnd(html, i);\n if (tagEnd === -1) break;\n\n const tagContent = html.substring(i + 1, tagEnd);\n\n // Handle comments\n if (tagContent.startsWith('!--')) {\n const commentEnd = html.indexOf('-->', i);\n if (commentEnd !== -1) {\n const commentContent = html.substring(i + 4, commentEnd);\n if (Comment) targetNode.appendChild(new Comment(commentContent, this._ownerDocument));\n i = commentEnd + 3;\n continue;\n }\n }\n\n // Handle self-closing tags\n if (tagContent.endsWith('/')) {\n const parts = tagContent.slice(0, -1).trim().split(/\\s+/);\n const tagName = parts[0];\n const attributeString = tagContent.slice(tagName.length, -1).trim();\n const element = ElementFactory.createElement(tagName, this._ownerDocument);\n this.parseAttributes(element, attributeString);\n targetNode.appendChild(element);\n i = tagEnd + 1;\n continue;\n }\n\n // Handle closing tags\n if (tagContent.startsWith('/')) {\n const closingTagText = `<${tagContent}>`;\n if (TextBase) targetNode.appendChild(new TextBase(closingTagText, this._ownerDocument));\n i = tagEnd + 1;\n continue;\n }\n\n // Handle opening tags\n const parts = tagContent.split(/\\s+/);\n const tagName = parts[0];\n const attributeString = tagContent.slice(tagName.length).trim();\n\n // Special handling for style and script tags\n if (tagName === 'style' || tagName === 'script') {\n const closingTag = `</${tagName}>`;\n const closingTagIndex = html.indexOf(closingTag, tagEnd + 1);\n\n if (closingTagIndex !== -1) {\n const element = ElementFactory.createElement(tagName, this._ownerDocument);\n this.parseAttributes(element, attributeString);\n const content = html.substring(tagEnd + 1, closingTagIndex);\n if (content && TextBase) {\n element.appendChild(new TextBase(content, this._ownerDocument));\n }\n targetNode.appendChild(element);\n i = closingTagIndex + closingTag.length;\n continue;\n }\n }\n\n // Handle regular opening tags with content\n const closingTagIndex = this.findMatchingClosingTag(html, tagName, tagEnd + 1);\n\n if (closingTagIndex !== -1) {\n const element = ElementFactory.createElement(tagName, this._ownerDocument);\n this.parseAttributes(element, attributeString);\n const content = html.substring(tagEnd + 1, closingTagIndex);\n if (content.trim()) {\n element.innerHTML = content;\n }\n targetNode.appendChild(element);\n i = closingTagIndex + (tagName.length + 3); // </tagName>\n } else {\n const element = ElementFactory.createElement(tagName, this._ownerDocument);\n this.parseAttributes(element, attributeString);\n targetNode.appendChild(element);\n i = tagEnd + 1;\n }\n }\n }\n\n private findTagEnd(html: string, startIndex: number): number {\n let i = startIndex + 1;\n let inQuotes = false;\n let quoteChar = '';\n while (i < html.length) {\n const char = html[i];\n if (!inQuotes) {\n if (char === '\"' || char === \"'\") {\n inQuotes = true;\n quoteChar = char;\n } else if (char === '>') return i;\n } else {\n if (char === quoteChar) {\n inQuotes = false;\n quoteChar = '';\n }\n }\n i++;\n }\n return -1;\n }\n\n private fixBrokenClosingTags(text: string): string {\n return text.replace(/\\/(\\w+)>/g, '</$1>');\n }\n\n private findMatchingClosingTag(html: string, tagName: string, startIndex: number): number {\n const openTag = `<${tagName}`;\n const closeTag = `</${tagName}>`;\n let depth = 1;\n let i = startIndex;\n while (i < html.length && depth > 0) {\n const nextOpen = html.indexOf(openTag, i);\n const nextClose = html.indexOf(closeTag, i);\n if (nextClose === -1) return -1;\n if (nextOpen !== -1 && nextOpen < nextClose) {\n const afterTag = html.charAt(nextOpen + openTag.length);\n if (afterTag === ' ' || afterTag === '>' || afterTag === '/') depth++;\n i = nextOpen + openTag.length;\n } else {\n depth--;\n if (depth === 0) return nextClose;\n i = nextClose + closeTag.length;\n }\n }\n return -1;\n }\n\n private parseAttributes(element: any, attributeString: string): void {\n let position = 0;\n const length = attributeString.length;\n while (position < length) {\n while (position < length && /\\s/.test(attributeString[position])) position++;\n if (position >= length) break;\n const nameStart = position;\n while (position < length && /[\\w:-]/.test(attributeString[position])) position++;\n if (position === nameStart) {\n position++;\n continue;\n }\n const name = attributeString.substring(nameStart, position);\n while (position < length && /\\s/.test(attributeString[position])) position++;\n let value = '';\n if (position < length && attributeString[position] === '=') {\n position++;\n while (position < length && /\\s/.test(attributeString[position])) position++;\n if (position < length) {\n const quote = attributeString[position];\n if (quote === '\"' || quote === \"'\") {\n position++;\n const valueStart = position;\n while (position < length && attributeString[position] !== quote) position++;\n value = attributeString.substring(valueStart, position);\n if (position < length && attributeString[position] === quote) position++;\n } else {\n const valueStart = position;\n while (position < length && !/\\s/.test(attributeString[position])) position++;\n value = attributeString.substring(valueStart, position);\n }\n }\n }\n element.setAttribute(name, this.decodeHTMLEntities(value));\n }\n }\n\n protected escapeHTMLEntities(str: string): string {\n const entityMap: any = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' };\n return str.replace(/[&<>\"']/g, char => entityMap[char] || char);\n }\n\n protected decodeHTMLEntities(str: string): string {\n const entityMap: any = { '&amp;': '&', '&lt;': '<', '&gt;': '>', '&quot;': '\"', '&#39;': \"'\", '&#34;': '\"', '&apos;': \"'\", '&copy;': '\u00A9', '&reg;': '\u00AE', '&trade;': '\u2122', '&nbsp;': ' ', '&hellip;': '\u2026', '&mdash;': '\u2014', '&ndash;': '\u2013', '&lsquo;': '\\u2018', '&rsquo;': '\\u2019', '&ldquo;': '\"', '&rdquo;': '\"' };\n return str.replace(/&[a-zA-Z0-9#]+;/g, entity => {\n if (entityMap[entity]) return entityMap[entity];\n if (entity.startsWith('&#') && entity.endsWith(';')) {\n const num = parseInt(entity.slice(2, -1), 10);\n return isNaN(num) ? entity : String.fromCharCode(num);\n }\n if (entity.startsWith('&#x') && entity.endsWith(';')) {\n const num = parseInt(entity.slice(3, -1), 16);\n return isNaN(num) ? entity : String.fromCharCode(num);\n }\n return entity;\n });\n }\n\n get outerHTML(): string {\n const attrs = Array.from(this._attributes.entries())\n .map(([name, value]) => (value === '' ? ` ${name}` : ` ${name}=\"${value.replace(/\"/g, '&quot;')}\"`))\n .join('');\n const selfClosingTags = ['img', 'input', 'br', 'hr', 'meta', 'link', 'area', 'base', 'col', 'embed', 'source', 'track', 'wbr'];\n const isSelfClosing = selfClosingTags.includes(this.tagName.toLowerCase());\n return isSelfClosing ? `<${this.tagName.toLowerCase()}${attrs} />` : `<${this.tagName.toLowerCase()}${attrs}>${this.innerHTML}</${this.tagName.toLowerCase()}>`;\n }\n\n get namespaceURI(): string | null {\n return 'http://www.w3.org/1999/xhtml';\n }\n get prefix(): string | null {\n return null;\n }\n getAttribute(qualifiedName: string): string | null {\n return this._attributes.get(qualifiedName.toLowerCase()) ?? null;\n }\n setAttribute(qualifiedName: string, value: string): void {\n const name = qualifiedName.toLowerCase();\n this._attributes.set(name, value);\n if (name === 'id') this._id = value;\n else if (name === 'class') this._className = value;\n }\n removeAttribute(qualifiedName: string): void {\n const name = qualifiedName.toLowerCase();\n this._attributes.delete(name);\n if (name === 'id') this._id = '';\n else if (name === 'class') this._className = '';\n }\n hasAttribute(qualifiedName: string): boolean {\n return this._attributes.has(qualifiedName.toLowerCase());\n }\n closest(selectors: string): any {\n let element: Element | null = this as any;\n while (element) {\n if (element.matches && element.matches(selectors)) return element;\n element = element.parentElement;\n }\n return null;\n }\n matches(selectors: string): boolean {\n return CSSSelector.matches(this as any, selectors);\n }\n get attributes(): any {\n return new (NamedNodeMapImpl as any)(this._attributes);\n }\n get clientHeight(): number {\n return 0;\n }\n get clientLeft(): number {\n return 0;\n }\n get clientTop(): number {\n return 0;\n }\n get clientWidth(): number {\n return 0;\n }\n get currentCSSZoom(): number {\n return 1;\n }\n onfullscreenchange: any = null;\n onfullscreenerror: any = null;\n get part(): any {\n return { length: 0, value: '', add: () => {}, remove: () => {}, contains: () => false, toggle: () => false, replace: () => false, item: () => null };\n }\n get scrollHeight(): number {\n return 0;\n }\n get scrollLeft(): number {\n return 0;\n }\n set scrollLeft(_: number) {}\n get scrollTop(): number {\n return 0;\n }\n set scrollTop(_: number) {}\n get scrollWidth(): number {\n return 0;\n }\n get shadowRoot(): ShadowRoot | null {\n return this._shadowRoot;\n }\n get slot(): string {\n return this.getAttribute('slot') || '';\n }\n set slot(value: string) {\n this.setAttribute('slot', value);\n }\n attachShadow(init: ShadowRootInit): ShadowRoot {\n if (this._shadowRoot) throw new DOMException('Shadow root already attached', 'NotSupportedError');\n this._shadowRoot = new ShadowRootBase(this as any, init, this._ownerDocument) as unknown as ShadowRoot;\n return this._shadowRoot;\n }\n checkVisibility(_options?: any): boolean {\n return true;\n }\n computedStyleMap(): any {\n return new Map();\n }\n getAttributeNS(_ns: string | null, localName: string): string | null {\n return this.getAttribute(localName);\n }\n getAttributeNames(): string[] {\n return Array.from(this._attributes.keys());\n }\n getAttributeNode(qualifiedName: string): any {\n const value = this.getAttribute(qualifiedName);\n return value !== null ? new AttrImpl(qualifiedName, value) : null;\n }\n getAttributeNodeNS(_ns: string | null, localName: string): any {\n return this.getAttributeNode(localName);\n }\n getBoundingClientRect(): any {\n return { bottom: 0, height: 0, left: 0, right: 0, top: 0, width: 0, x: 0, y: 0, toJSON: () => ({}) };\n }\n getClientRects(): any {\n return { length: 0, item: () => null, [Symbol.iterator]: function* () {} };\n }\n\n getElementsByClassName(classNames: string): HTMLCollectionOf<Element> {\n const result: Element[] = [];\n const classNameList = classNames.trim().split(/\\s+/);\n const hasAllClasses = (element: Element, classes: string[]): boolean => {\n const elementClasses = element.className.trim().split(/\\s+/);\n return classes.every(cls => elementClasses.includes(cls));\n };\n const traverse = (node: any) => {\n if (node.nodeType === ELEMENT_NODE && hasAllClasses(node as Element, classNameList)) result.push(node as Element);\n for (let i = 0; i < node.childNodes.length; i++) traverse(node.childNodes[i]);\n };\n for (let i = 0; i < this.childNodes.length; i++) traverse(this.childNodes[i]);\n // @ts-ignore\n return new HTMLCollectionOfImp(result);\n }\n\n getElementsByTagName(qualifiedName: string): HTMLCollection {\n const result: Element[] = [];\n const tagName = qualifiedName.toLowerCase();\n const isWildcard = tagName === '*';\n const traverse = (node: any) => {\n if (node.nodeType === ELEMENT_NODE && (isWildcard || node.localName === tagName)) result.push(node as Element);\n for (let i = 0; i < node.childNodes.length; i++) traverse(node.childNodes[i]);\n };\n for (let i = 0; i < this.childNodes.length; i++) traverse(this.childNodes[i]);\n // @ts-ignore\n return new HTMLCollectionImp(result);\n }\n getElementsByTagNameNS(_ns: string | null, localName: string): any {\n return this.getElementsByTagName(localName);\n }\n getHTML(_options?: any): string {\n return this.outerHTML;\n }\n hasAttributeNS(_ns: string | null, localName: string): boolean {\n return this.hasAttribute(localName);\n }\n hasAttributes(): boolean {\n return this._attributes.size > 0;\n }\n hasPointerCapture(_id: number): boolean {\n return false;\n }\n insertAdjacentElement(where: InsertPosition, element: Element): Element | null {\n const position = where.toLowerCase();\n switch (position) {\n case 'beforebegin':\n if (this.parentNode) {\n this.parentNode.insertBefore(element as any, this as any);\n return element;\n }\n return null;\n case 'afterbegin':\n if (this.firstChild) this.insertBefore(element as any, this.firstChild);\n else this.appendChild(element as any);\n return element;\n case 'beforeend':\n this.appendChild(element as any);\n return element;\n case 'afterend':\n if (this.parentNode) {\n if (this.nextSibling) this.parentNode.insertBefore(element as any, this.nextSibling);\n else this.parentNode.appendChild(element as any);\n return element;\n }\n return null;\n default:\n throw new DOMException(`Invalid position: ${where}`, 'SyntaxError');\n }\n }\n insertAdjacentHTML(position: InsertPosition, html: string): void {\n const pos = position.toLowerCase();\n const tempDiv = this._ownerDocument.createElement('div');\n tempDiv.innerHTML = html;\n const fragment = this._ownerDocument.createDocumentFragment();\n while (tempDiv.firstChild) fragment.appendChild(tempDiv.firstChild);\n switch (pos) {\n case 'beforebegin':\n if (this.parentNode) this.parentNode.insertBefore(fragment, this as any);\n break;\n case 'afterbegin':\n if (this.firstChild) this.insertBefore(fragment, this.firstChild);\n else this.appendChild(fragment);\n break;\n case 'beforeend':\n this.appendChild(fragment);\n break;\n case 'afterend':\n if (this.parentNode) {\n if (this.nextSibling) this.parentNode.insertBefore(fragment, this.nextSibling);\n else this.parentNode.appendChild(fragment);\n }\n break;\n default:\n throw new DOMException(`Invalid position: ${position}`, 'SyntaxError');\n }\n }\n insertAdjacentText(where: InsertPosition, data: string): void {\n const position = where.toLowerCase();\n const textNode = this._ownerDocument.createTextNode(data);\n switch (position) {\n case 'beforebegin':\n if (this.parentNode) this.parentNode.insertBefore(textNode, this as any);\n break;\n case 'afterbegin':\n if (this.firstChild) this.insertBefore(textNode, this.firstChild);\n else this.appendChild(textNode);\n break;\n case 'beforeend':\n this.appendChild(textNode);\n break;\n case 'afterend':\n if (this.parentNode) {\n if (this.nextSibling) this.parentNode.insertBefore(textNode, this.nextSibling);\n else this.parentNode.appendChild(textNode);\n }\n break;\n default:\n throw new DOMException(`Invalid position: ${where}`, 'SyntaxError');\n }\n }\n releasePointerCapture(_id: number): void {}\n removeAttributeNS(_ns: string | null, localName: string): void {\n this.removeAttribute(localName);\n }\n removeAttributeNode(attr: any): any {\n const oldValue = this.getAttribute(attr.name);\n if (oldValue !== null) {\n this.removeAttribute(attr.name);\n return new AttrImpl(attr.name, oldValue);\n }\n throw new DOMException('The attribute node is not an attribute of this element', 'NotFoundError');\n }\n requestFullscreen(_opt?: any): Promise<void> {\n return Promise.resolve();\n }\n requestPointerLock(_opt?: any): Promise<void> {\n return Promise.resolve();\n }\n scroll(_x?: any, _y?: any): void {}\n scrollBy(_x?: any, _y?: any): void {}\n scrollIntoView(_arg?: any): void {}\n scrollTo(_x?: any, _y?: any): void {}\n setAttributeNS(_ns: string | null, qualifiedName: string, value: string): void {\n this.setAttribute(qualifiedName, value);\n }\n setAttributeNode(attr: any): any {\n const oldAttr = this.getAttributeNode(attr.name);\n this.setAttribute(attr.name, attr.value);\n return oldAttr;\n }\n setAttributeNodeNS(attr: any): any {\n return this.setAttributeNode(attr);\n }\n setHTMLUnsafe(html: string): void {\n this.innerHTML = html;\n }\n setPointerCapture(_id: number): void {}\n toggleAttribute(qualifiedName: string, force?: boolean): boolean {\n const hasAttr = this.hasAttribute(qualifiedName);\n if (force === true || (force === undefined && !hasAttr)) {\n this.setAttribute(qualifiedName, '');\n return true;\n } else if (force === false || (force === undefined && hasAttr)) {\n this.removeAttribute(qualifiedName);\n return false;\n }\n return hasAttr;\n }\n webkitMatchesSelector(selectors: string): boolean {\n return this.matches(selectors);\n }\n addEventListener(type: string, listener: any, options?: any): void {}\n removeEventListener(type: string, listener: any, options?: any): void {}\n dispatchEvent(_event: any): boolean {\n return true;\n }\n cloneNode(deep?: boolean): any {\n const { ElementFactory } = ElementBase.dependencies;\n const clone = ElementFactory.createElement(this.tagName, this._ownerDocument);\n for (const [name, value] of this._attributes) clone.setAttribute(name, value);\n if (deep) for (const child of this._childNodesInternal) if (child && 'cloneNode' in child) clone.appendChild((child as any).cloneNode(true));\n return clone;\n }\n}\n\n//@ts-ignore\nclass DOMTokenListImpl implements DOMTokenList {\n constructor(private element: ElementBase) {}\n\n get length(): number {\n return this.element.className.split(/\\s+/).filter(c => c.length > 0).length;\n }\n get value(): string {\n return this.element.className;\n }\n set value(value: string) {\n this.element.className = value;\n }\n add(...tokens: string[]): void {\n const classes = new Set(this.element.className.split(/\\s+/).filter(c => c.length > 0));\n tokens.forEach(t => classes.add(t));\n this.element.className = Array.from(classes).join(' ');\n }\n remove(...tokens: string[]): void {\n const classes = new Set(this.element.className.split(/\\s+/).filter(c => c.length > 0));\n tokens.forEach(t => classes.delete(t));\n this.element.className = Array.from(classes).join(' ');\n }\n contains(token: string): boolean {\n return this.element.className.split(/\\s+/).includes(token);\n }\n toggle(token: string, force?: boolean): boolean {\n const hasToken = this.contains(token);\n if (force === true || (force === undefined && !hasToken)) {\n this.add(token);\n return true;\n } else {\n this.remove(token);\n return false;\n }\n }\n replace(oldToken: string, newToken: string): boolean {\n if (this.contains(oldToken)) {\n this.remove(oldToken);\n this.add(newToken);\n return true;\n }\n return false;\n }\n item(index: number): string | null {\n const classes = this.element.className.split(/\\s+/).filter(c => c.length > 0);\n return index >= 0 && index < classes.length ? classes[index] : null;\n }\n [index: number]: string;\n}\n\n//@ts-ignore\nclass AttrImpl extends NodeBase implements Attr {\n public ownerElement: Element | null = null;\n public namespaceURI: string | null = null;\n public prefix: string | null = null;\n public specified: boolean = true;\n constructor(\n public name: string,\n public value: string\n ) {\n super(ATTRIBUTE_NODE, name);\n }\n get localName(): string {\n return this.name;\n }\n}\n\nclass NamedNodeMapImpl implements NamedNodeMap {\n constructor(private attributes: Map<string, string>) {}\n get length(): number {\n return this.attributes.size;\n }\n getNamedItem(qualifiedName: string): any {\n const value = this.attributes.get(qualifiedName.toLowerCase());\n return value !== undefined ? new AttrImpl(qualifiedName, value) : null;\n }\n getNamedItemNS(_ns: string | null, localName: string): any {\n return this.getNamedItem(localName);\n }\n item(index: number): any {\n const keys = Array.from(this.attributes.keys());\n if (index >= 0 && index < keys.length) return new AttrImpl(keys[index], this.attributes.get(keys[index])!);\n return null;\n }\n removeNamedItem(qualifiedName: string): any {\n const value = this.attributes.get(qualifiedName.toLowerCase());\n if (value !== undefined) {\n this.attributes.delete(qualifiedName.toLowerCase());\n return new AttrImpl(qualifiedName, value);\n }\n throw new DOMException('The attribute is not found', 'NotFoundError');\n }\n removeNamedItemNS(_ns: string | null, localName: string): any {\n return this.removeNamedItem(localName);\n }\n setNamedItem(attr: any): any {\n const oldValue = this.attributes.get(attr.name.toLowerCase());\n this.attributes.set(attr.name.toLowerCase(), attr.value);\n return oldValue !== undefined ? new AttrImpl(attr.name, oldValue) : null;\n }\n setNamedItemNS(attr: any): any {\n return this.setNamedItem(attr);\n }\n *[Symbol.iterator](): any {\n for (const [key, value] of this.attributes) yield new AttrImpl(key, value);\n }\n keys(): any {\n return this.attributes.keys();\n }\n values(): any {\n const self = this;\n return (function* () {\n for (const [key, value] of self.attributes) yield new AttrImpl(key, value);\n })();\n }\n entries(): any {\n const self = this;\n return (function* () {\n for (const [key, value] of self.attributes) yield [key, new AttrImpl(key, value)];\n })();\n }\n forEach(callback: any, thisArg?: any): void {\n const keys = Array.from(this.attributes.keys());\n keys.forEach((key, index) => callback.call(thisArg, new AttrImpl(key, this.attributes.get(key)!), index, this));\n }\n [index: number]: any;\n}\n", "\n/**\n * NodeIterator implementation for traversing DOM nodes\n */\nexport class NodeIterator {\n private _root: Node;\n private _whatToShow: number;\n private _filter: NodeFilter | null;\n private _currentNode: Node;\n private _beforeReferenceNode: boolean = true;\n\n constructor(root: Node, whatToShow: number = NodeFilter.SHOW_ALL, filter: NodeFilter | null = null) {\n this._root = root;\n this._whatToShow = whatToShow;\n this._filter = filter;\n this._currentNode = root;\n }\n\n get root(): Node {\n return this._root;\n }\n\n get whatToShow(): number {\n return this._whatToShow;\n }\n\n get filter(): NodeFilter | null {\n return this._filter;\n }\n\n get referenceNode(): Node {\n return this._currentNode;\n }\n\n get pointerBeforeReferenceNode(): boolean {\n return this._beforeReferenceNode;\n }\n\n /**\n * Move to the next node in document order\n */\n nextNode(): Node | null {\n let node = this._currentNode;\n\n if (this._beforeReferenceNode) {\n this._beforeReferenceNode = false;\n if (this._acceptNode(node)) {\n return node;\n }\n }\n\n while (node) {\n const firstChild = (node as any).firstChild;\n if (firstChild) {\n node = firstChild;\n if (this._acceptNode(node)) {\n this._currentNode = node;\n return node;\n }\n continue;\n }\n\n while (node && !(node as any).nextSibling) {\n node = (node as any).parentNode;\n if (!node || node === (this._root as any).parentNode) {\n return null;\n }\n }\n\n if (!node) {\n return null;\n }\n\n node = (node as any).nextSibling;\n if (this._acceptNode(node)) {\n this._currentNode = node;\n return node;\n }\n }\n\n return null;\n }\n\n /**\n * Move to the previous node in document order\n */\n previousNode(): Node | null {\n let node = this._currentNode;\n\n if (!this._beforeReferenceNode) {\n this._beforeReferenceNode = true;\n if (this._acceptNode(node)) {\n return node;\n }\n }\n\n while (node && node !== this._root) {\n const prevSibling = (node as any).previousSibling;\n if (prevSibling) {\n node = prevSibling;\n while ((node as any).lastChild) {\n node = (node as any).lastChild;\n }\n\n if (this._acceptNode(node)) {\n this._currentNode = node;\n return node;\n }\n continue;\n }\n\n node = (node as any).parentNode;\n if (!node || node === (this._root as any).parentNode) {\n return null;\n }\n\n if (this._acceptNode(node)) {\n this._currentNode = node;\n return node;\n }\n }\n\n return null;\n }\n\n detach(): void {}\n\n private _acceptNode(node: Node | null): boolean {\n if (!node) {\n return false;\n }\n\n const nodeTypeMask = 1 << (node.nodeType - 1);\n if (!(this._whatToShow & nodeTypeMask)) {\n return false;\n }\n\n if (this._filter) {\n const result = ('acceptNode' in this._filter) ? this._filter.acceptNode(node) : this._filter(node);\n return result === NodeFilter.FILTER_ACCEPT;\n }\n\n return true;\n }\n}\n", "// import { Node } from './Node';\n\n/**\n * NodeFilter interface for filtering nodes in NodeIterator and TreeWalker\n */\n// export interface NodeFilter {\n// acceptNode(node: Node): number;\n// }\n\n/**\n * NodeFilter constants and static methods\n */\nexport const NodeFilter: {\n readonly FILTER_ACCEPT: number;\n readonly FILTER_REJECT: number;\n readonly FILTER_SKIP: number;\n readonly SHOW_ALL: number;\n readonly SHOW_ELEMENT: number;\n readonly SHOW_ATTRIBUTE: number;\n readonly SHOW_TEXT: number;\n readonly SHOW_CDATA_SECTION: number;\n readonly SHOW_ENTITY_REFERENCE: number;\n readonly SHOW_ENTITY: number;\n readonly SHOW_PROCESSING_INSTRUCTION: number;\n readonly SHOW_COMMENT: number;\n readonly SHOW_DOCUMENT: number;\n readonly SHOW_DOCUMENT_TYPE: number;\n readonly SHOW_DOCUMENT_FRAGMENT: number;\n readonly SHOW_NOTATION: number;\n} = {\n // Constants for acceptNode return values\n FILTER_ACCEPT: 1,\n FILTER_REJECT: 2,\n FILTER_SKIP: 3,\n\n // Constants for whatToShow\n SHOW_ALL: 0xffffffff,\n SHOW_ELEMENT: 0x1,\n SHOW_ATTRIBUTE: 0x2,\n SHOW_TEXT: 0x4,\n SHOW_CDATA_SECTION: 0x8,\n SHOW_ENTITY_REFERENCE: 0x10,\n SHOW_ENTITY: 0x20,\n SHOW_PROCESSING_INSTRUCTION: 0x40,\n SHOW_COMMENT: 0x80,\n SHOW_DOCUMENT: 0x100,\n SHOW_DOCUMENT_TYPE: 0x200,\n SHOW_DOCUMENT_FRAGMENT: 0x400,\n SHOW_NOTATION: 0x800\n};\n", "import {NodeFilter} from \"./NodeFilter\";\n\n/**\n * TreeWalker implementation for traversing DOM nodes\n */\nexport class TreeWalker {\n private _root: Node;\n private _whatToShow: number;\n private _filter: NodeFilter | null;\n private _currentNode: Node;\n\n constructor(root: Node, whatToShow: number = NodeFilter.SHOW_ALL, filter: NodeFilter | null = null) {\n this._root = root;\n this._whatToShow = whatToShow;\n this._filter = filter;\n this._currentNode = root;\n }\n\n get root(): Node {\n return this._root;\n }\n\n get whatToShow(): number {\n return this._whatToShow;\n }\n\n get filter(): NodeFilter | null {\n return this._filter;\n }\n\n get currentNode(): Node {\n return this._currentNode;\n }\n\n set currentNode(node: Node) {\n this._currentNode = node;\n }\n\n /**\n * Move to the parent node\n */\n parentNode(): Node | null {\n let node = this._currentNode;\n while (node && node !== this._root) {\n node = (node as any).parentNode;\n if (node && this._acceptNode(node) === NodeFilter.FILTER_ACCEPT) {\n this._currentNode = node;\n return node;\n }\n }\n return null;\n }\n\n /**\n * Move to the first child node\n */\n firstChild(): Node | null {\n let node = (this._currentNode as any).firstChild;\n while (node) {\n const result = this._acceptNode(node);\n if (result === NodeFilter.FILTER_ACCEPT) {\n this._currentNode = node;\n return node;\n }\n if (result === NodeFilter.FILTER_SKIP) {\n const child = (node as any).firstChild;\n if (child) {\n node = child;\n continue;\n }\n }\n while (node) {\n const next = (node as any).nextSibling;\n if (next) {\n node = next;\n break;\n }\n const parent = (node as any).parentNode;\n if (!parent || parent === this._root || parent === this._currentNode) {\n return null;\n }\n node = parent;\n }\n }\n return null;\n }\n\n /**\n * Move to the last child node\n */\n lastChild(): Node | null {\n let node = (this._currentNode as any).lastChild;\n while (node) {\n const result = this._acceptNode(node);\n if (result === NodeFilter.FILTER_ACCEPT) {\n this._currentNode = node;\n return node;\n }\n if (result === NodeFilter.FILTER_SKIP) {\n const child = (node as any).lastChild;\n if (child) {\n node = child;\n continue;\n }\n }\n while (node) {\n const prev = (node as any).previousSibling;\n if (prev) {\n node = prev;\n break;\n }\n const parent = (node as any).parentNode;\n if (!parent || parent === this._root || parent === this._currentNode) {\n return null;\n }\n node = parent;\n }\n }\n return null;\n }\n\n /**\n * Move to the previous sibling node\n */\n previousSibling(): Node | null {\n let node = this._currentNode;\n if (node === this._root) return null;\n\n while (node) {\n let sibling = (node as any).previousSibling;\n while (sibling) {\n const result = this._acceptNode(sibling);\n if (result === NodeFilter.FILTER_ACCEPT) {\n this._currentNode = sibling;\n return sibling;\n }\n if (result === NodeFilter.FILTER_SKIP) {\n const lastChild = (sibling as any).lastChild;\n if (lastChild) {\n sibling = lastChild;\n continue;\n }\n }\n sibling = (sibling as any).previousSibling;\n }\n node = (node as any).parentNode;\n if (!node || node === this._root || this._acceptNode(node) === NodeFilter.FILTER_ACCEPT) {\n return null;\n }\n }\n return null;\n }\n\n /**\n * Move to the next sibling node\n */\n nextSibling(): Node | null {\n let node = this._currentNode;\n if (node === this._root) return null;\n\n while (node) {\n let sibling = (node as any).nextSibling;\n while (sibling) {\n const result = this._acceptNode(sibling);\n if (result === NodeFilter.FILTER_ACCEPT) {\n this._currentNode = sibling;\n return sibling;\n }\n if (result === NodeFilter.FILTER_SKIP) {\n const firstChild = (sibling as any).firstChild;\n if (firstChild) {\n sibling = firstChild;\n continue;\n }\n }\n sibling = (sibling as any).nextSibling;\n }\n node = (node as any).parentNode;\n if (!node || node === this._root || this._acceptNode(node) === NodeFilter.FILTER_ACCEPT) {\n return null;\n }\n }\n return null;\n }\n\n /**\n * Move to the previous node in document order\n */\n previousNode(): Node | null {\n let node = this._currentNode;\n while (node && node !== this._root) {\n const sibling = (node as any).previousSibling;\n if (sibling) {\n node = sibling;\n while (true) {\n const result = this._acceptNode(node);\n if (result !== NodeFilter.FILTER_REJECT && (node as any).lastChild) {\n node = (node as any).lastChild;\n } else {\n if (result === NodeFilter.FILTER_ACCEPT) {\n this._currentNode = node;\n return node;\n }\n break;\n }\n }\n continue;\n }\n\n node = (node as any).parentNode;\n if (node) {\n if (this._acceptNode(node) === NodeFilter.FILTER_ACCEPT) {\n this._currentNode = node;\n return node;\n }\n }\n }\n return null;\n }\n\n /**\n * Move to the next node in document order\n */\n nextNode(): Node | null {\n let node = this._currentNode;\n let result = NodeFilter.FILTER_ACCEPT;\n\n while (true) {\n if (result !== NodeFilter.FILTER_REJECT) {\n const firstChild = (node as any).firstChild;\n if (firstChild) {\n node = firstChild;\n result = this._acceptNode(node);\n if (result === NodeFilter.FILTER_ACCEPT) {\n this._currentNode = node;\n return node;\n }\n continue;\n }\n }\n\n while (node) {\n if (node === this._root) return null;\n const nextSibling = (node as any).nextSibling;\n if (nextSibling) {\n node = nextSibling;\n break;\n }\n node = (node as any).parentNode;\n }\n\n if (!node) return null;\n\n result = this._acceptNode(node);\n if (result === NodeFilter.FILTER_ACCEPT) {\n this._currentNode = node;\n return node;\n }\n }\n }\n\n /**\n * Check node acceptance\n */\n private _acceptNode(node: Node): number {\n const nodeTypeMask = 1 << (node.nodeType - 1);\n if (!(this._whatToShow & nodeTypeMask)) {\n return NodeFilter.FILTER_SKIP;\n }\n\n if (this._filter) {\n if (typeof this._filter === 'function') {\n return (this._filter as any)(node);\n }\n return this._filter.acceptNode(node);\n }\n\n return NodeFilter.FILTER_ACCEPT;\n }\n}\n", "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", "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", "import { ParentNodeBase } from './ParentNodeBase';\nimport { DOCUMENT_NODE } from './Node';\nimport { HTMLCollectionOfImp } from './collection/HTMLCollectionOfImp';\nimport { NodeListOfImp } from './collection/NodeListOfImp';\nimport { ElementFactory } from '../factory/ElementFactory';\n\nexport class DocumentBase extends ParentNodeBase implements Document {\n [key: string]: any;\n private _readyState: DocumentReadyState = 'loading';\n private _window: any = null;\n public head!: any;\n public body!: any;\n public documentElement!: any;\n public location: any;\n get title(): string {\n const titleEl = this.querySelector('title');\n return titleEl ? titleEl.textContent || '' : this._title || '';\n }\n\n set title(value: string) {\n this._title = value;\n let titleEl = this.querySelector('title');\n if (!titleEl && this.head) {\n titleEl = this.createElement('title');\n this.head.appendChild(titleEl);\n }\n if (titleEl) {\n titleEl.textContent = value;\n }\n }\n\n private _title: string = '';\n public cookie: string = '';\n public designMode: string = 'off';\n public dir: string = 'ltr';\n public domain: string = '';\n public referrer: string = '';\n\n constructor() {\n super(DOCUMENT_NODE, '#document');\n this._ownerDocument = this as any;\n }\n\n get URL(): string {\n return this.location?.href || '';\n }\n get alinkColor(): string {\n return '';\n }\n set alinkColor(_: string) {}\n get all(): any {\n return [];\n }\n get anchors(): any {\n return [];\n }\n get applets(): any {\n return [];\n }\n get bgColor(): string {\n return '';\n }\n set bgColor(_: string) {}\n get characterSet(): string {\n return 'UTF-8';\n }\n get charset(): string {\n return 'UTF-8';\n }\n get compatMode(): string {\n return 'CSS1Compat';\n }\n get contentType(): string {\n return 'text/html';\n }\n get currentScript(): any {\n return null;\n }\n get defaultView(): any {\n return this._window;\n }\n get doctype(): any {\n return null;\n }\n get documentURI(): string {\n return this.URL;\n }\n get embeds(): any {\n return [];\n }\n get fgColor(): string {\n return '';\n }\n set fgColor(_: string) {}\n get forms(): any {\n return [];\n }\n get fragmentDirective(): any {\n return {};\n }\n get fullscreen(): boolean {\n return false;\n }\n get fullscreenEnabled(): boolean {\n return false;\n }\n get hidden(): boolean {\n return false;\n }\n get images(): any {\n return [];\n }\n get implementation(): any {\n return {};\n }\n get inputEncoding(): string {\n return 'UTF-8';\n }\n get lastModified(): string {\n return new Date().toISOString();\n }\n get linkColor(): string {\n return '';\n }\n set linkColor(_: string) {}\n get links(): any {\n return [];\n }\n get ownerDocument(): null {\n return null;\n }\n get pictureInPictureEnabled(): boolean {\n return false;\n }\n get plugins(): any {\n return [];\n }\n get readyState(): DocumentReadyState {\n return this._readyState;\n }\n get rootElement(): any {\n return null;\n }\n get scripts(): any {\n return [];\n }\n get scrollingElement(): any {\n return this.body;\n }\n get timeline(): any {\n return {};\n }\n get visibilityState(): any {\n return 'visible';\n }\n get vlinkColor(): string {\n return '';\n }\n set vlinkColor(_: string) {}\n get textContent(): null {\n return null;\n }\n\n adoptNode<T extends Node>(node: T): T {\n (node as any)._ownerDocument = this;\n return node;\n }\n\n captureEvents(): void {}\n\n caretPositionFromPoint(_x: number, _y: number, _options?: CaretPositionFromPointOptions): any {\n return null;\n }\n\n caretRangeFromPoint(_x: number, _y: number): any {\n return null;\n }\n\n clear(): void {}\n\n close(): void {}\n\n createAttribute(localName: string): any {\n return { name: localName, value: '', nodeType: 2 };\n }\n\n createAttributeNS(_ns: string | null, qualifiedName: string): any {\n return this.createAttribute(qualifiedName);\n }\n\n createCDATASection(data: string): any {\n return { data, nodeType: 4 };\n }\n\n createComment(data: string): any {\n const { Comment } = require('./Comment');\n return new Comment(data, this);\n }\n\n createDocumentFragment(): any {\n const { DocumentFragmentBase } = require('./DocumentFragmentBase');\n return new DocumentFragmentBase(this);\n }\n\n createElement<K extends keyof HTMLElementTagNameMap>(tagName: K, options?: ElementCreationOptions): HTMLElementTagNameMap[K];\n createElement(tagName: string, options?: ElementCreationOptions): HTMLElement;\n createElement(tagName: string, options?: ElementCreationOptions): HTMLElement {\n return ElementFactory.createElement(tagName, this, options) as any;\n }\n\n createElementNS(_ns: string | null, qualifiedName: string, options?: ElementCreationOptions): any {\n return this.createElement(qualifiedName as any, options);\n }\n\n createEvent(_eventInterface: string): any {\n return { type: _eventInterface };\n }\n\n createNodeIterator(root: Node, whatToShow: number = 0xffffffff, filter: any = null): any {\n const { NodeIterator } = require('./NodeIterator');\n return new NodeIterator(root, whatToShow, filter);\n }\n\n createProcessingInstruction(target: string, data: string): any {\n return { target, data, nodeType: 7 };\n }\n\n createRange(): any {\n return {};\n }\n\n createTextNode(data: string): any {\n const { TextBase } = require('./TextBase');\n return new TextBase(data, this);\n }\n\n createTreeWalker(root: Node, whatToShow: number = 0xffffffff, filter: any = null): any {\n const { TreeWalker } = require('./TreeWalker');\n return new TreeWalker(root, whatToShow, filter);\n }\n\n execCommand(_commandId: string, _showUI?: boolean, _value?: string): boolean {\n return false;\n }\n\n exitFullscreen(): Promise<void> {\n return Promise.resolve();\n }\n\n exitPictureInPicture(): Promise<void> {\n return Promise.resolve();\n }\n\n exitPointerLock(): void {}\n\n getElementById(elementId: string): HTMLElement | null {\n const elements = this.querySelectorAll(`#${elementId}`);\n return elements.length > 0 ? (elements[0] as HTMLElement) : null;\n }\n\n getElementsByClassName(classNames: string): HTMLCollectionOf<Element> {\n const elements = this.querySelectorAll(`.${classNames.split(' ').join('.')}`);\n return new HTMLCollectionOfImp(Array.from(elements)) as unknown as HTMLCollectionOf<Element>;\n }\n\n // @ts-ignore\n getElementsByName(elementName: string): NodeListOfImp<HTMLElement> {\n const elements = this.querySelectorAll(`[name=\"${elementName}\"]`);\n return new NodeListOfImp<HTMLElement>(Array.from(elements) as unknown as HTMLElement[]) as unknown as NodeListOfImp<HTMLElement>;\n }\n\n // @ts-ignore\n getElementsByTagName<K extends keyof HTMLElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<HTMLElementTagNameMap[K]>;\n getElementsByTagName(qualifiedName: string): HTMLCollectionOfImp<Element>;\n getElementsByTagName(qualifiedName: string): HTMLCollectionOfImp<Element> {\n const elements = this.querySelectorAll<Element>(qualifiedName);\n return new HTMLCollectionOfImp(Array.from(elements));\n }\n\n // @ts-ignore\n getElementsByTagNameNS(_ns: string | null, localName: string): HTMLCollectionOf<Element> {\n return this.getElementsByTagName(localName) as unknown as HTMLCollectionOf<Element>;\n }\n\n getSelection(): any {\n return null;\n }\n\n hasFocus(): boolean {\n return false;\n }\n\n hasStorageAccess(): Promise<boolean> {\n return Promise.resolve(false);\n }\n\n importNode<T extends Node>(node: T, _options?: boolean | ImportNodeOptions): T {\n const cloned = (node as any).cloneNode(typeof _options === 'boolean' ? _options : (_options as any)?.deep);\n (cloned as any)._ownerDocument = this;\n return cloned;\n }\n\n open(_unused1?: string, _unused2?: string): any {\n return this;\n }\n\n queryCommandEnabled(_commandId: string): boolean {\n return false;\n }\n\n queryCommandSupported(_commandId: string): boolean {\n return false;\n }\n\n releaseEvents(): void {}\n\n requestStorageAccess(): Promise<void> {\n return Promise.resolve();\n }\n\n startViewTransition(_callbackOptions?: ViewTransitionUpdateCallback | StartViewTransitionOptions): any {\n return {};\n }\n\n write(...text: string[]): void {\n console.log('Document.write:', text.join(''));\n }\n\n writeln(...text: string[]): void {\n this.write(...text, '\\n');\n }\n\n addEventListener(type: string, listener: any, options?: any): void {\n this._eventListeners.push({ type, listener, options });\n }\n\n removeEventListener(type: string, listener: any, options?: any): void {\n this._eventListeners = this._eventListeners.filter(l => !(l.type === type && l.listener === listener));\n }\n\n setWindow(window: any): void {\n this._window = window;\n }\n\n setReadyState(state: DocumentReadyState): void {\n if (this._readyState === state) return;\n this._readyState = state;\n this.dispatchEvent({ type: 'readystatechange', target: this });\n if (state === 'interactive') {\n this.dispatchEvent({ type: 'DOMContentLoaded', target: this });\n }\n if (state === 'complete' && this._window) {\n setTimeout(() => {\n if (this._window && this._window.dispatchEvent) {\n this._window.dispatchEvent({ type: 'load', target: this._window });\n }\n }, 0);\n }\n }\n\n simulateLoading(): void {\n // Start with a small delay to allow test listeners to be added\n setTimeout(() => {\n this.setReadyState('interactive');\n setTimeout(() => {\n this.setReadyState('complete');\n }, 10);\n }, 10);\n }\n\n setLocation(location: any): void {\n this.location = location;\n }\n}\n", "import {ElementBase} from './ElementBase';\nimport {StylePropertyMapImpl} from \"../collection/StylePropertyMapImpl\";\n\n// import { HTMLElement, FocusOptions, CSSStyleDeclaration, DOMStringMap, ElementCSSInlineStyle, StylePropertyMap } from './HTMLElement';\n\n/**\n * Base implementation for all HTML elements\n */\n// @ts-ignore\nexport abstract class HTMLElementBase extends ElementBase implements HTMLElement, ElementCSSInlineStyle {\n [key: string]: any;\n private _title: string = '';\n private _lang: string = '';\n private _dir: string = '';\n private _hidden: boolean = false;\n private _tabIndex: number = -1;\n private _accessKey: string = '';\n private _contentEditable: string = 'inherit';\n private _innerText: string = '';\n private _outerText: string = '';\n\n constructor(tagName: string = 'DIV', ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n accessKeyLabel: string;\n autocapitalize: string;\n autocorrect: boolean;\n draggable: boolean;\n inert: boolean;\n offsetHeight: number;\n offsetLeft: number;\n offsetParent: Element;\n offsetTop: number;\n offsetWidth: number;\n popover: string;\n spellcheck: boolean;\n translate: boolean;\n writingSuggestions: string;\n attachInternals(): ElementInternals {\n throw new Error(\"Method not implemented.\");\n }\n hidePopover(): void {\n throw new Error(\"Method not implemented.\");\n }\n showPopover(): void {\n throw new Error(\"Method not implemented.\");\n }\n togglePopover(options?: boolean): boolean {\n throw new Error(\"Method not implemented.\");\n }\n enterKeyHint: string;\n inputMode: string;\n onabort: (this: GlobalEventHandlers, ev: UIEvent) => any;\n onanimationcancel: (this: GlobalEventHandlers, ev: AnimationEvent) => any;\n onanimationend: (this: GlobalEventHandlers, ev: AnimationEvent) => any;\n onanimationiteration: (this: GlobalEventHandlers, ev: AnimationEvent) => any;\n onanimationstart: (this: GlobalEventHandlers, ev: AnimationEvent) => any;\n onauxclick: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onbeforeinput: (this: GlobalEventHandlers, ev: InputEvent) => any;\n onbeforematch: (this: GlobalEventHandlers, ev: Event) => any;\n onbeforetoggle: (this: GlobalEventHandlers, ev: ToggleEvent) => any;\n onblur: (this: GlobalEventHandlers, ev: FocusEvent) => any;\n oncancel: (this: GlobalEventHandlers, ev: Event) => any;\n oncanplay: (this: GlobalEventHandlers, ev: Event) => any;\n oncanplaythrough: (this: GlobalEventHandlers, ev: Event) => any;\n onchange: (this: GlobalEventHandlers, ev: Event) => any;\n onclick: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onclose: (this: GlobalEventHandlers, ev: Event) => any;\n oncontextlost: (this: GlobalEventHandlers, ev: Event) => any;\n oncontextmenu: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n oncontextrestored: (this: GlobalEventHandlers, ev: Event) => any;\n oncopy: (this: GlobalEventHandlers, ev: ClipboardEvent) => any;\n oncuechange: (this: GlobalEventHandlers, ev: Event) => any;\n oncut: (this: GlobalEventHandlers, ev: ClipboardEvent) => any;\n ondblclick: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n ondrag: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondragend: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondragenter: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondragleave: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondragover: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondragstart: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondrop: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondurationchange: (this: GlobalEventHandlers, ev: Event) => any;\n onemptied: (this: GlobalEventHandlers, ev: Event) => any;\n onended: (this: GlobalEventHandlers, ev: Event) => any;\n onerror: OnErrorEventHandlerNonNull;\n onfocus: (this: GlobalEventHandlers, ev: FocusEvent) => any;\n onformdata: (this: GlobalEventHandlers, ev: FormDataEvent) => any;\n ongotpointercapture: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n oninput: (this: GlobalEventHandlers, ev: Event) => any;\n oninvalid: (this: GlobalEventHandlers, ev: Event) => any;\n onkeydown: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;\n onkeypress: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;\n onkeyup: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;\n onload: (this: GlobalEventHandlers, ev: Event) => any;\n onloadeddata: (this: GlobalEventHandlers, ev: Event) => any;\n onloadedmetadata: (this: GlobalEventHandlers, ev: Event) => any;\n onloadstart: (this: GlobalEventHandlers, ev: Event) => any;\n onlostpointercapture: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onmousedown: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmouseenter: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmouseleave: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmousemove: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmouseout: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmouseover: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmouseup: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onpaste: (this: GlobalEventHandlers, ev: ClipboardEvent) => any;\n onpause: (this: GlobalEventHandlers, ev: Event) => any;\n onplay: (this: GlobalEventHandlers, ev: Event) => any;\n onplaying: (this: GlobalEventHandlers, ev: Event) => any;\n onpointercancel: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerdown: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerenter: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerleave: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointermove: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerout: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerover: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerrawupdate: (this: GlobalEventHandlers, ev: Event) => any;\n onpointerup: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onprogress: (this: GlobalEventHandlers, ev: ProgressEvent) => any;\n onratechange: (this: GlobalEventHandlers, ev: Event) => any;\n onreset: (this: GlobalEventHandlers, ev: Event) => any;\n onresize: (this: GlobalEventHandlers, ev: UIEvent) => any;\n onscroll: (this: GlobalEventHandlers, ev: Event) => any;\n onscrollend: (this: GlobalEventHandlers, ev: Event) => any;\n onsecuritypolicyviolation: (this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any;\n onseeked: (this: GlobalEventHandlers, ev: Event) => any;\n onseeking: (this: GlobalEventHandlers, ev: Event) => any;\n onselect: (this: GlobalEventHandlers, ev: Event) => any;\n onselectionchange: (this: GlobalEventHandlers, ev: Event) => any;\n onselectstart: (this: GlobalEventHandlers, ev: Event) => any;\n onslotchange: (this: GlobalEventHandlers, ev: Event) => any;\n onstalled: (this: GlobalEventHandlers, ev: Event) => any;\n onsubmit: (this: GlobalEventHandlers, ev: SubmitEvent) => any;\n onsuspend: (this: GlobalEventHandlers, ev: Event) => any;\n ontimeupdate: (this: GlobalEventHandlers, ev: Event) => any;\n ontoggle: (this: GlobalEventHandlers, ev: ToggleEvent) => any;\n ontouchcancel?: (this: GlobalEventHandlers, ev: TouchEvent) => any;\n ontouchend?: (this: GlobalEventHandlers, ev: TouchEvent) => any;\n ontouchmove?: (this: GlobalEventHandlers, ev: TouchEvent) => any;\n ontouchstart?: (this: GlobalEventHandlers, ev: TouchEvent) => any;\n ontransitioncancel: (this: GlobalEventHandlers, ev: TransitionEvent) => any;\n ontransitionend: (this: GlobalEventHandlers, ev: TransitionEvent) => any;\n ontransitionrun: (this: GlobalEventHandlers, ev: TransitionEvent) => any;\n ontransitionstart: (this: GlobalEventHandlers, ev: TransitionEvent) => any;\n onvolumechange: (this: GlobalEventHandlers, ev: Event) => any;\n onwaiting: (this: GlobalEventHandlers, ev: Event) => any;\n onwebkitanimationend: (this: GlobalEventHandlers, ev: Event) => any;\n onwebkitanimationiteration: (this: GlobalEventHandlers, ev: Event) => any;\n onwebkitanimationstart: (this: GlobalEventHandlers, ev: Event) => any;\n onwebkittransitionend: (this: GlobalEventHandlers, ev: Event) => any;\n onwheel: (this: GlobalEventHandlers, ev: WheelEvent) => any;\n autofocus: boolean;\n\n // HTMLElement interface implementation\n get title(): string {\n return this._title;\n }\n\n set title(value: string) {\n this._title = value;\n this.setAttribute('title', value);\n }\n\n get lang(): string {\n return this._lang;\n }\n\n set lang(value: string) {\n this._lang = value;\n this.setAttribute('lang', value);\n }\n\n get dir(): string {\n return this._dir;\n }\n\n set dir(value: string) {\n this._dir = value;\n this.setAttribute('dir', value);\n }\n\n get hidden(): boolean {\n return this._hidden;\n }\n\n set hidden(value: boolean) {\n this._hidden = value;\n if (value) {\n this.setAttribute('hidden', '');\n } else {\n this.removeAttribute('hidden');\n }\n }\n\n get tabIndex(): number {\n return this._tabIndex;\n }\n\n set tabIndex(value: number) {\n this._tabIndex = value;\n this.setAttribute('tabindex', value.toString());\n }\n\n get accessKey(): string {\n return this._accessKey;\n }\n\n set accessKey(value: string) {\n this._accessKey = value;\n this.setAttribute('accesskey', value);\n }\n\n get contentEditable(): string {\n return this._contentEditable;\n }\n\n set contentEditable(value: string) {\n this._contentEditable = value;\n this.setAttribute('contenteditable', value);\n }\n\n get isContentEditable(): boolean {\n return this._contentEditable === 'true';\n }\n\n get innerText(): string {\n return this._innerText || this.textContent || '';\n }\n\n set innerText(value: string) {\n this._innerText = value;\n this.textContent = value;\n }\n\n get outerText(): string {\n return this._outerText || this.innerText;\n }\n\n set outerText(value: string) {\n this._outerText = value;\n if (this.parentNode) {\n const { TextBase } = require('../TextBase');\n const textNode = new TextBase(value, this._ownerDocument);\n this.parentNode.replaceChild(textNode, this);\n }\n }\n\n // innerHTML functionality is inherited from ElementBase\n\n // HTMLElement methods\n click(): void {\n // Simulate click event - in a real implementation, this would dispatch events\n console.log(`Clicked on ${this.tagName} element`);\n }\n\n focus(options?: FocusOptions): void {}\n\n blur(): void {\n // Remove focus state\n this.removeAttribute('data-focused');\n console.log(`Blurred ${this.tagName} element`);\n }\n\n // Override setAttribute to sync with properties\n setAttribute(qualifiedName: string, value: string): void {\n super.setAttribute(qualifiedName, value);\n\n // Sync with properties\n const name = qualifiedName.toLowerCase();\n switch (name) {\n case 'title':\n this._title = value;\n break;\n case 'lang':\n this._lang = value;\n break;\n case 'dir':\n this._dir = value;\n break;\n case 'hidden':\n this._hidden = true;\n break;\n case 'tabindex':\n this._tabIndex = parseInt(value, 10) || -1;\n break;\n case 'accesskey':\n this._accessKey = value;\n break;\n case 'contenteditable':\n this._contentEditable = 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 'title':\n this._title = '';\n break;\n case 'lang':\n this._lang = '';\n break;\n case 'dir':\n this._dir = '';\n break;\n case 'hidden':\n this._hidden = false;\n break;\n case 'tabindex':\n this._tabIndex = -1;\n break;\n case 'accesskey':\n this._accessKey = '';\n break;\n case 'contenteditable':\n this._contentEditable = 'inherit';\n break;\n }\n }\n\n // New implementations for style, dataset, nonce\n private _style: CSSStyleDeclaration | null = null;\n private _dataset: DOMStringMap | null = null;\n\n get style(): any {\n if (!this._style) {\n this._style = new Proxy(new CSSStyleDeclarationImpl(this), {\n get: (target, prop: string | symbol) => {\n if (typeof prop === 'string' && !(prop in target)) {\n // Convert camelCase to kebab-case for CSS properties\n const cssProp = prop.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`);\n return target.getPropertyValue(cssProp);\n }\n return (target as any)[prop];\n },\n set: (target, prop: string | symbol, value: any) => {\n if (typeof prop === 'string' && !(prop in target)) {\n // Convert camelCase to kebab-case for CSS properties\n const cssProp = prop.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`);\n target.setProperty(cssProp, String(value));\n return true;\n }\n (target as any)[prop] = value;\n return true;\n }\n }) as unknown as CSSStyleDeclaration;\n }\n return this._style;\n }\n\n set style(value: string | CSSStyleDeclaration) {\n if (typeof value === 'string') {\n (this.style as any).cssText = value;\n }\n }\n\n private _attributeStyleMap: StylePropertyMap | null = null;\n\n get attributeStyleMap(): any {\n if (!this._attributeStyleMap) {\n this._attributeStyleMap = new StylePropertyMapImpl(this) as unknown as StylePropertyMap;\n }\n return this._attributeStyleMap;\n }\n\n get dataset(): any {\n if (!this._dataset) {\n this._dataset = new Proxy(\n {},\n {\n get: (target, prop: string | symbol) => {\n if (typeof prop === 'string') {\n // Convert camelCase to kebab-case: fooBar -> data-foo-bar\n const attrName = 'data-' + prop.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`);\n return this.getAttribute(attrName);\n }\n return undefined;\n },\n set: (target, prop: string | symbol, value: any) => {\n if (typeof prop === 'string') {\n // Convert camelCase to kebab-case: fooBar -> data-foo-bar\n const attrName = 'data-' + prop.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`);\n this.setAttribute(attrName, String(value));\n return true;\n }\n return false;\n },\n deleteProperty: (target, prop: string | symbol) => {\n if (typeof prop === 'string') {\n const attrName = 'data-' + prop.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`);\n this.removeAttribute(attrName);\n return true;\n }\n return false;\n }\n }\n );\n }\n return this._dataset;\n }\n\n get nonce(): string {\n return this.getAttribute('nonce') || '';\n }\n\n set nonce(value: string) {\n this.setAttribute('nonce', value);\n }\n}\n\n// CSSStyleDeclaration implementation\nclass CSSStyleDeclarationImpl {\n [key: string]: any;\n\n constructor(private element: HTMLElementBase) {}\n\n parentRule: any = null;\n\n getPropertyPriority(property: string): string {\n return '';\n }\n\n get cssText(): string {\n return this.element.getAttribute('style') || '';\n }\n\n set cssText(value: string) {\n this.element.setAttribute('style', value);\n }\n\n get length(): number {\n return this.parseStyle(this.cssText).size;\n }\n\n getPropertyValue(property: string): string {\n const style = this.parseStyle(this.cssText);\n return style.get(property) || '';\n }\n\n setProperty(property: string, value: string | null, priority: string = ''): void {\n const style = this.parseStyle(this.cssText);\n if (value === null || value === '') {\n style.delete(property);\n } else {\n style.set(property, value); // TODO: handle priority\n }\n this.cssText = this.serializeStyle(style);\n }\n\n removeProperty(property: string): string {\n const style = this.parseStyle(this.cssText);\n const value = style.get(property) || '';\n style.delete(property);\n this.cssText = this.serializeStyle(style);\n return value;\n }\n\n item(index: number): string {\n const style = this.parseStyle(this.cssText);\n return Array.from(style.keys())[index] || '';\n }\n\n private parseStyle(cssText: string): Map<string, string> {\n const style = new Map<string, string>();\n if (!cssText) return style;\n\n cssText.split(';').forEach(declaration => {\n const part = declaration.trim();\n if (!part) return;\n\n const colonIndex = part.indexOf(':');\n if (colonIndex !== -1) {\n const property = part.substring(0, colonIndex).trim();\n const value = part.substring(colonIndex + 1).trim();\n if (property && value) {\n style.set(property, value);\n }\n }\n });\n return style;\n }\n\n private serializeStyle(style: Map<string, string>): string {\n return Array.from(style.entries())\n .map(([property, value]) => `${property}: ${value}`)\n .join('; ');\n }\n}\n\n", "// StylePropertyMap implementation\nimport {HTMLElementBase} from \"../elements\";\n\nexport class StylePropertyMapImpl implements StylePropertyMap {\n [key: string]: any;\n\n constructor(private element: HTMLElementBase) {\n }\n\n size: number;\n\n get(property: string): undefined | CSSStyleValue {\n throw new Error(\"Method not implemented.\");\n }\n\n getAll(property: string): CSSStyleValue[] {\n throw new Error(\"Method not implemented.\");\n }\n\n has(property: string): boolean {\n throw new Error(\"Method not implemented.\");\n }\n\n forEach(callbackfn: (value: CSSStyleValue[], key: string, parent: StylePropertyMapReadOnly) => void, thisArg?: any): void {\n throw new Error(\"Method not implemented.\");\n }\n\n entries(): StylePropertyMapReadOnlyIterator<[string, Iterable<CSSStyleValue>]> {\n throw new Error(\"Method not implemented.\");\n }\n\n keys(): StylePropertyMapReadOnlyIterator<string> {\n throw new Error(\"Method not implemented.\");\n }\n\n values(): StylePropertyMapReadOnlyIterator<Iterable<CSSStyleValue>> {\n throw new Error(\"Method not implemented.\");\n }\n\n [Symbol.iterator](): StylePropertyMapReadOnlyIterator<[string, Iterable<CSSStyleValue>]> {\n throw new Error(\"Method not implemented.\");\n }\n\n set(property: string, ...values: (string | any)[]): void {\n const value = values[0];\n this.element.style.setProperty(property, String(value));\n }\n\n append(property: string, ...values: (string | any)[]): void {\n this.set(property, ...values);\n }\n\n delete(property: string): void {\n this.element.style.removeProperty(property);\n }\n\n clear(): void {\n this.element.style.cssText = '';\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\nexport class HTMLGenericElement extends HTMLElementBase {\n\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n\n get localName(): string {\n return this._tagName.toLowerCase();\n }\n}", "import {HTMLElementBase} from \"./HTMLElementBase\";\n\nexport class HTMLElement extends HTMLElementBase {\n\n}", "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}", "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}", "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", "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}", "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}", "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", "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}", "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}", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLDataElement extends HTMLElementBase {\n constructor(tagName: string = 'DATA', ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}\n", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLDataListElement extends HTMLElementBase { constructor(tagName: string = 'DATALIST', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLDetailsElement extends HTMLElementBase { constructor(tagName: string = 'DETAILS', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLDialogElement extends HTMLElementBase { constructor(tagName: string = 'DIALOG', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLDivElement`** class represents an HTML `<div>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDivElement)\n */\nexport class HTMLDivElement extends HTMLElementBase implements HTMLDivElement {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLDListElement extends HTMLElementBase { constructor(tagName: string = 'DL', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLEmbedElement`** interface provides special properties (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating `<embed>` elements.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLEmbedElement)\n */\nexport class HTMLEmbedElement extends HTMLElementBase {\n /**\n * A string reflecting the `src` HTML attribute, containing the address of the resource.\n */\n src: string = '';\n\n /**\n * A string reflecting the `type` HTML attribute, containing the type of the resource.\n */\n type: string = '';\n\n /**\n * A string reflecting the `width` HTML attribute, containing the displayed width of the resource in CSS pixels.\n */\n width: string = '';\n\n /**\n * A string reflecting the `height` HTML attribute, containing the displayed height of the resource in CSS pixels.\n */\n height: string = '';\n\n constructor(ownerDocument: Document) {\n super('embed', ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLFieldSetElement extends HTMLElementBase { constructor(tagName: string = 'FIELDSET', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLFormElement`** class represents an HTML `<form>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFormElement)\n */\nexport class HTMLFormElement extends HTMLElementBase {\n private _action: string = '';\n private _method: string = 'get';\n private _enctype: string = 'application/x-www-form-urlencoded';\n private _target: string = '';\n private _noValidate: boolean = false;\n \n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get action(): string {\n return this._action;\n }\n\n set action(value: string) {\n this._action = value;\n this.setAttribute('action', value);\n }\n\n get method(): string {\n return this._method;\n }\n\n set method(value: string) {\n this._method = value.toLowerCase();\n this.setAttribute('method', value);\n }\n\n get enctype(): string {\n return this._enctype;\n }\n\n set enctype(value: string) {\n this._enctype = value;\n this.setAttribute('enctype', 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 get noValidate(): boolean {\n return this._noValidate;\n }\n\n set noValidate(value: boolean) {\n this._noValidate = value;\n if (value) {\n this.setAttribute('novalidate', '');\n } else {\n this.removeAttribute('novalidate');\n }\n }\n\n // Form methods\n submit(): void {\n // Form submission logic would go here\n console.log('Form submitted');\n }\n\n reset(): void {\n // Form reset logic would go here\n console.log('Form reset');\n }\n\n checkValidity(): boolean {\n // Form validation logic would go here\n return true;\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 'action':\n this._action = value;\n break;\n case 'method':\n this._method = value.toLowerCase();\n break;\n case 'enctype':\n this._enctype = value;\n break;\n case 'target':\n this._target = value;\n break;\n case 'novalidate':\n this._noValidate = true;\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 'action':\n this._action = '';\n break;\n case 'method':\n this._method = 'get';\n break;\n case 'enctype':\n this._enctype = 'application/x-www-form-urlencoded';\n break;\n case 'target':\n this._target = '';\n break;\n case 'novalidate':\n this._noValidate = false;\n break;\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLH1Element`** class represents an HTML `<h1>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLHeadingElement)\n */\nexport class HTMLH1Element extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLHeadElement`** class represents an HTML `<head>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLHeadElement)\n */\nexport class HTMLHeadElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLHRElement extends HTMLElementBase { constructor(tagName: string = 'HR', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLHtmlElement`** class represents an HTML `<html>` element.\n * This is the root element of an HTML document.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLHtmlElement)\n */\nexport class HTMLHtmlElement extends HTMLElementBase {\n // private _lang: string = '';\n // private _dir: string = '';\n\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n // /**\n // * Gets or sets the language of the document.\n // */\n // get lang(): string {\n // return this._lang;\n // }\n //\n // set lang(value: string) {\n // this._lang = value;\n // this.setAttribute('lang', value);\n // }\n //\n // /**\n // * Gets or sets the text direction of the document.\n // */\n // get dir(): string {\n // return this._dir;\n // }\n //\n // set dir(value: string) {\n // this._dir = value;\n // this.setAttribute('dir', value);\n // }\n\n /**\n * Gets the version attribute (deprecated in HTML5).\n * @deprecated\n */\n get version(): string {\n return this.getAttribute('version') || '';\n }\n\n set version(value: string) {\n this.setAttribute('version', 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 'lang':\n // this.__lang = value;\n // break;\n // case 'dir':\n // this.__dir = 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 'lang':\n // this.__lang = '';\n // break;\n // case 'dir':\n // this.__dir = '';\n // break;\n // }\n // }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLIFrameElement extends HTMLElementBase { constructor(tagName: string = 'IFRAME', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLImgElement`** class represents an HTML `<img>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)\n */\nexport class HTMLImgElement extends HTMLElementBase {\n private _src: string = '';\n private _alt: string = '';\n private _width: number = 0;\n private _height: number = 0;\n\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n\n get src(): string {\n return this._src;\n }\n\n set src(value: string) {\n this._src = value;\n this.setAttribute('src', value);\n }\n\n get alt(): string {\n return this._alt;\n }\n\n set alt(value: string) {\n this._alt = value;\n this.setAttribute('alt', value);\n }\n\n get width(): number {\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 return this._height;\n }\n\n set height(value: number) {\n this._height = value;\n this.setAttribute('height', value.toString());\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 'src':\n this._src = value;\n break;\n case 'alt':\n this._alt = value;\n break;\n case 'width':\n this._width = parseInt(value, 10) || 0;\n break;\n case 'height':\n this._height = parseInt(value, 10) || 0;\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 'src':\n this._src = '';\n break;\n case 'alt':\n this._alt = '';\n break;\n case 'width':\n this._width = 0;\n break;\n case 'height':\n this._height = 0;\n break;\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLInputElement`** class represents an HTML `<input>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement)\n */\nexport class HTMLInputElement extends HTMLElementBase {\n private _type: string = 'text';\n private _value: string = '';\n private _placeholder: string = '';\n private _disabled: boolean = false;\n private _readonly: boolean = false;\n private _required: boolean = false;\n private _checked: boolean = false;\n\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\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 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 get placeholder(): string {\n return this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n this.setAttribute('placeholder', 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 readOnly(): boolean {\n return this._readonly;\n }\n\n set readOnly(value: boolean) {\n this._readonly = value;\n if (value) {\n this.setAttribute('readonly', '');\n } else {\n this.removeAttribute('readonly');\n }\n }\n\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = value;\n if (value) {\n this.setAttribute('required', '');\n } else {\n this.removeAttribute('required');\n }\n }\n\n get checked(): boolean {\n return this._checked;\n }\n\n set checked(value: boolean) {\n this._checked = value;\n if (value) {\n this.setAttribute('checked', '');\n } else {\n this.removeAttribute('checked');\n }\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 'value':\n this._value = value;\n break;\n case 'placeholder':\n this._placeholder = value;\n break;\n case 'disabled':\n this._disabled = true;\n break;\n case 'readonly':\n this._readonly = true;\n break;\n case 'required':\n this._required = true;\n break;\n case 'checked':\n this._checked = true;\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 = 'text';\n break;\n case 'value':\n this._value = '';\n break;\n case 'placeholder':\n this._placeholder = '';\n break;\n case 'disabled':\n this._disabled = false;\n break;\n case 'readonly':\n this._readonly = false;\n break;\n case 'required':\n this._required = false;\n break;\n case 'checked':\n this._checked = false;\n break;\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLLabelElement extends HTMLElementBase { constructor(tagName: string = 'LABEL', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLLegendElement extends HTMLElementBase { constructor(tagName: string = 'LEGEND', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLLIElement`** class represents an HTML `<li>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLLIElement)\n */\nexport class HTMLLIElement extends HTMLElementBase {\n private _value: number = 0;\n \n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get value(): number {\n return this._value;\n }\n\n set value(value: number) {\n this._value = value;\n this.setAttribute('value', value.toString());\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 'value':\n this._value = parseInt(value, 10) || 0;\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 'value':\n this._value = 0;\n break;\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLLinkElement`** class represents an HTML `<link>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLLinkElement)\n */\nexport class HTMLLinkElement extends HTMLElementBase {\n private _href: string = '';\n private _rel: string = '';\n private _type: string = '';\n private _media: 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 rel(): string {\n return this._rel;\n }\n\n set rel(value: string) {\n this._rel = value;\n this.setAttribute('rel', value);\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 media(): string {\n return this._media;\n }\n\n set media(value: string) {\n this._media = value;\n this.setAttribute('media', 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 'rel':\n this._rel = value;\n break;\n case 'type':\n this._type = value;\n break;\n case 'media':\n this._media = 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 'rel':\n this._rel = '';\n break;\n case 'type':\n this._type = '';\n break;\n case 'media':\n this._media = '';\n break;\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLMapElement extends HTMLElementBase { constructor(tagName: string = 'MAP', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { ElementBase } from './ElementBase';\n\n/**\n * The **`HTMLMetaElement`** class represents an HTML `<meta>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMetaElement)\n */\nexport class HTMLMetaElement extends ElementBase {\n constructor(tagName: string, ownerDocument?: any){\n super(tagName, ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLMeterElement extends HTMLElementBase { constructor(tagName: string = 'METER', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLModElement extends HTMLElementBase { constructor(tagName: string = 'DEL', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLObjectElement extends HTMLElementBase { constructor(tagName: string = 'OBJECT', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLOListElement`** class represents an HTML `<ol>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLOListElement)\n */\nexport class HTMLOListElement extends HTMLElementBase {\n private _start: number = 1;\n private _type: string = '';\n private _reversed: boolean = false;\n \n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get start(): number {\n return this._start;\n }\n\n set start(value: number) {\n this._start = value;\n this.setAttribute('start', value.toString());\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 reversed(): boolean {\n return this._reversed;\n }\n\n set reversed(value: boolean) {\n this._reversed = value;\n if (value) {\n this.setAttribute('reversed', '');\n } else {\n this.removeAttribute('reversed');\n }\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 'start':\n this._start = parseInt(value, 10) || 1;\n break;\n case 'type':\n this._type = value;\n break;\n case 'reversed':\n this._reversed = true;\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 'start':\n this._start = 1;\n break;\n case 'type':\n this._type = '';\n break;\n case 'reversed':\n this._reversed = false;\n break;\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLOptGroupElement extends HTMLElementBase { constructor(tagName: string = 'OPTGROUP', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLOptionElement extends HTMLElementBase { constructor(tagName: string = 'OPTION', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLOutputElement extends HTMLElementBase { constructor(tagName: string = 'OUTPUT', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLPElement`** class represents an HTML `<p>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLParagraphElement)\n */\nexport class HTMLPElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLParamElement extends HTMLElementBase { constructor(tagName: string = 'PARAM', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLPictureElement extends HTMLElementBase { constructor(tagName: string = 'PICTURE', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLPreElement extends HTMLElementBase { constructor(tagName: string = 'PRE', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLProgressElement extends HTMLElementBase { constructor(tagName: string = 'PROGRESS', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLQuoteElement extends HTMLElementBase { constructor(tagName: string = 'BLOCKQUOTE', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLScriptElement`** class represents an HTML `<script>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLScriptElement)\n */\nexport class HTMLScriptElement extends HTMLElementBase {\n private _src: string = '';\n private _type: string = 'text/javascript';\n private _async: boolean = false;\n private _defer: boolean = false;\n private _crossOrigin: string = '';\n \n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get src(): string {\n return this._src;\n }\n\n set src(value: string) {\n this._src = value;\n this.setAttribute('src', value);\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 async(): boolean {\n return this._async;\n }\n\n set async(value: boolean) {\n this._async = value;\n if (value) {\n this.setAttribute('async', '');\n } else {\n this.removeAttribute('async');\n }\n }\n\n get defer(): boolean {\n return this._defer;\n }\n\n set defer(value: boolean) {\n this._defer = value;\n if (value) {\n this.setAttribute('defer', '');\n } else {\n this.removeAttribute('defer');\n }\n }\n\n get crossOrigin(): string {\n return this._crossOrigin;\n }\n\n set crossOrigin(value: string) {\n this._crossOrigin = value;\n this.setAttribute('crossorigin', value);\n }\n\n get text(): string {\n return this.textContent || '';\n }\n\n set text(value: string) {\n this.textContent = 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 'src':\n this._src = value;\n break;\n case 'type':\n this._type = value;\n break;\n case 'async':\n this._async = true;\n break;\n case 'defer':\n this._defer = true;\n break;\n case 'crossorigin':\n this._crossOrigin = 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 'src':\n this._src = '';\n break;\n case 'type':\n this._type = 'text/javascript';\n break;\n case 'async':\n this._async = false;\n break;\n case 'defer':\n this._defer = false;\n break;\n case 'crossorigin':\n this._crossOrigin = '';\n break;\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLSelectElement extends HTMLElementBase { constructor(tagName: string = 'SELECT', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLSlotElement extends HTMLElementBase { constructor(tagName: string = 'SLOT', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLSourceElement extends HTMLElementBase { constructor(tagName: string = 'SOURCE', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLSpanElement`** class represents an HTML `<span>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSpanElement)\n */\nexport class HTMLSpanElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLStyleElement`** class represents an HTML `<style>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLStyleElement)\n */\nexport class HTMLStyleElement extends HTMLElementBase {\n private _type: string = 'text/css';\n private _media: string = '';\n \n constructor(tagName: string, 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 media(): string {\n return this._media;\n }\n\n set media(value: string) {\n this._media = value;\n this.setAttribute('media', 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 'media':\n this._media = 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 = 'text/css';\n break;\n case 'media':\n this._media = '';\n break;\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nimport { HTMLCollectionImp } from '../collection/HTMLCollectionImp'\n\n/**\n * The **`HTMLTableElement`** class represents an HTML `<table>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableElement)\n */\nexport class HTMLTableElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get caption(): HTMLElement | null {\n return this.querySelector('caption');\n }\n\n get tHead(): HTMLElement | null {\n return this.querySelector('thead');\n }\n\n get tFoot(): HTMLElement | null {\n return this.querySelector('tfoot');\n }\n\n get tBodies(): HTMLCollectionImp {\n return this.querySelectorAll('tbody') as any;\n }\n\n get rows(): HTMLCollectionImp {\n return this.querySelectorAll('tr') as any;\n }\n\n createCaption(): HTMLElement {\n let caption = this.caption;\n if (!caption) {\n caption = this.ownerDocument.createElement('caption');\n this.insertBefore(caption, this.firstChild);\n }\n return caption;\n }\n\n deleteCaption(): void {\n const caption = this.caption;\n if (caption) {\n this.removeChild(caption);\n }\n }\n\n createTHead(): HTMLElement {\n let thead = this.tHead;\n if (!thead) {\n thead = this.ownerDocument.createElement('thead');\n const firstTBody = this.querySelector('tbody');\n this.insertBefore(thead, firstTBody);\n }\n return thead;\n }\n\n deleteTHead(): void {\n const thead = this.tHead;\n if (thead) {\n this.removeChild(thead);\n }\n }\n\n createTFoot(): HTMLElement {\n let tfoot = this.tFoot;\n if (!tfoot) {\n tfoot = this.ownerDocument.createElement('tfoot');\n this.appendChild(tfoot);\n }\n return tfoot;\n }\n\n deleteTFoot(): void {\n const tfoot = this.tFoot;\n if (tfoot) {\n this.removeChild(tfoot);\n }\n }\n\n insertRow(index?: number): HTMLElement {\n const row = this.ownerDocument.createElement('tr');\n const rows = this.rows;\n \n if (index === undefined || index === -1) {\n // Append to the end\n const lastTBody = this.querySelector('tbody:last-child');\n if (lastTBody) {\n lastTBody.appendChild(row);\n } else {\n this.appendChild(row);\n }\n } else {\n // Insert at specific index\n if (index >= 0 && index < rows.length) {\n const referenceRow = rows[index];\n referenceRow.parentNode?.insertBefore(row, referenceRow);\n }\n }\n \n return row;\n }\n\n deleteRow(index: number): void {\n const rows = this.rows;\n if (index >= 0 && index < rows.length) {\n const row = rows[index];\n row.parentNode?.removeChild(row);\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nimport { HTMLCollectionImp } from '../collection';\n\n/**\n * The **`HTMLTbodyElement`** class represents an HTML `<tbody>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableSectionElement)\n */\nexport class HTMLTbodyElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get rows(): HTMLCollectionImp {\n return this.querySelectorAll('tr') as any;\n }\n\n insertRow(index?: number): HTMLElement {\n const row = this.ownerDocument.createElement('tr');\n const rows = this.rows;\n \n if (index === undefined || index === -1) {\n // Append to the end\n this.appendChild(row);\n } else {\n // Insert at specific index\n if (index >= 0 && index < rows.length) {\n const referenceRow = rows[index];\n this.insertBefore(row, referenceRow);\n } else if (index >= rows.length) {\n this.appendChild(row);\n }\n }\n\n return row;\n }\n\n deleteRow(index: number): void {\n const rows = this.rows;\n if (index >= 0 && index < rows.length) {\n const row = rows[index];\n this.removeChild(row);\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLTdElement`** class represents an HTML `<td>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableCellElement)\n */\nexport class HTMLTdElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get cellIndex(): number {\n const row = this.parentElement;\n if (!row) return -1;\n \n const cells = row.querySelectorAll('td, th');\n for (let i = 0; i < cells.length; i++) {\n if (cells[i] === this as unknown as HTMLElement) {\n return i;\n }\n }\n return -1;\n }\n\n get colSpan(): number {\n const value = this.getAttribute('colspan');\n return value ? parseInt(value, 10) : 1;\n }\n\n set colSpan(value: number) {\n this.setAttribute('colspan', value.toString());\n }\n\n get rowSpan(): number {\n const value = this.getAttribute('rowspan');\n return value ? parseInt(value, 10) : 1;\n }\n\n set rowSpan(value: number) {\n this.setAttribute('rowspan', value.toString());\n }\n\n get headers(): string {\n return this.getAttribute('headers') || '';\n }\n\n set headers(value: string) {\n this.setAttribute('headers', value);\n }\n\n get scope(): string {\n return this.getAttribute('scope') || '';\n }\n\n set scope(value: string) {\n this.setAttribute('scope', value);\n }\n\n get abbr(): string {\n return this.getAttribute('abbr') || '';\n }\n\n set abbr(value: string) {\n this.setAttribute('abbr', value);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nimport { DocumentFragmentBase } from '../DocumentFragmentBase';\nimport { TEXT_NODE } from \"../Node\";\n\n/**\n * The **`HTMLTemplateElement`** class represents an HTML `<template>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTemplateElement)\n */\nexport class HTMLTemplateElement extends HTMLElementBase {\n private _content: DocumentFragmentBase;\n \n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n \n // Create the content DocumentFragment\n this._content = new DocumentFragmentBase(ownerDocument);\n \n // Parse innerHTML into the content fragment instead of the template itself\n this._parseContentFromInnerHTML();\n }\n\n /**\n * Gets the content DocumentFragment of the template.\n */\n get content(): DocumentFragmentBase {\n return this._content;\n }\n\n /**\n * Override innerHTML setter to populate the content fragment\n */\n set innerHTML(value: string) {\n // Clear existing content\n while (this._content.childNodes.length > 0) {\n const child = this._content.childNodes[0];\n if (child) {\n this._content.removeChild(child);\n }\n }\n\n // Parse HTML into content fragment\n if (value.trim()) {\n this._parseHTMLIntoContent(value);\n }\n }\n\n /**\n * Override innerHTML getter to return content fragment's innerHTML\n */\n get innerHTML(): string {\n // Generate HTML from content fragment's children\n let html = '';\n for (let i = 0; i < this._content.childNodes.length; i++) {\n const child = this._content.childNodes[i];\n if (child && 'outerHTML' in child) {\n html += (child as any).outerHTML;\n } else if (child && child.nodeType === TEXT_NODE) {\n html += (child as any).textContent || '';\n } else if (child && child.nodeType === 8) { // COMMENT_NODE\n html += `<!--${(child as any).textContent || ''}-->`;\n }\n }\n return html;\n }\n\n /**\n * Override appendChild to add children to both template and content\n * Template elements can have direct children, and they're also copied to content\n */\n appendChild<T extends Node>(node: T): T {\n // Add to template itself (like normal element)\n const result = super.appendChild(node);\n \n // Also add a clone to the content fragment\n if ('cloneNode' in node) {\n this._content.appendChild((node as any).cloneNode(true));\n }\n \n return result;\n }\n\n private _parseContentFromInnerHTML(): void {\n // If template already has children from parsing, move them to content\n const children = [...this._childNodesInternal];\n for (const child of children) {\n if (child) {\n this.removeChild(child as unknown as Node);\n this._content.appendChild(child as unknown as Node);\n }\n }\n }\n\n private _parseHTMLIntoContent(html: string): void {\n // Better approach: Create a temporary container and leverage ElementBase's innerHTML\n // This avoids code duplication and ensures consistency\n const tempContainer = new (require('./ElementBase').ElementBase)('div', this._ownerDocument);\n \n // Use ElementBase's proven innerHTML parsing\n tempContainer.innerHTML = html;\n \n // Move all parsed children to the content fragment\n while (tempContainer.firstChild) {\n this._content.appendChild(tempContainer.firstChild);\n }\n }\n\n\n}", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLTextAreaElement extends HTMLElementBase { constructor(tagName: string = 'TEXTAREA', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\nimport { HTMLCollectionImp } from '../collection';\n/**\n * The **`HTMLTfootElement`** class represents an HTML `<tfoot>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableSectionElement)\n */\nexport class HTMLTfootElement extends HTMLElementBase {\n static readonly TAG_NAME = 'TFOOT';\n \n constructor(ownerDocument?: any) {\n super(HTMLTfootElement.TAG_NAME, ownerDocument);\n }\n\n get rows(): HTMLCollectionImp {\n return this.querySelectorAll('tr') as any;\n }\n\n insertRow(index?: number): HTMLElement {\n const row = this.ownerDocument.createElement('tr');\n const rows = this.rows;\n \n if (index === undefined || index === -1) {\n // Append to the end\n this.appendChild(row);\n } else {\n // Insert at specific index\n if (index >= 0 && index < rows.length) {\n const referenceRow = rows[index];\n this.insertBefore(row, referenceRow);\n } else if (index >= rows.length) {\n this.appendChild(row);\n }\n }\n \n return row;\n }\n\n deleteRow(index: number): void {\n const rows = this.rows;\n if (index >= 0 && index < rows.length) {\n const row = rows[index];\n this.removeChild(row);\n }\n }\n}", "import {HTMLElementBase} from './HTMLElementBase';\nimport {HTMLCollectionImp} from '../collection';\n\n/**\n * The **`HTMLTheadElement`** class represents an HTML `<thead>` element.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableSectionElement)\n */\nexport class HTMLTheadElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get rows(): HTMLCollectionImp {\n return this.querySelectorAll('tr') as any;\n }\n\n insertRow(index?: number): HTMLElement {\n const row = this.ownerDocument.createElement('tr');\n const rows = this.rows;\n\n if (index === undefined || index === -1) {\n // Append to the end\n this.appendChild(row);\n } else {\n // Insert at specific index\n if (index >= 0 && index < rows.length) {\n const referenceRow = rows[index];\n this.insertBefore(row, referenceRow);\n } else if (index >= rows.length) {\n this.appendChild(row);\n }\n }\n\n return row;\n }\n\n deleteRow(index: number): void {\n const rows = this.rows;\n if (index >= 0 && index < rows.length) {\n const row = rows[index];\n this.removeChild(row);\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLThElement`** class represents an HTML `<th>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableCellElement)\n */\nexport class HTMLThElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get cellIndex(): number {\n const row = this.parentElement;\n if (!row) return -1;\n \n const cells = row.querySelectorAll('td, th');\n for (let i = 0; i < cells.length; i++) {\n if (cells[i] === this) {\n return i;\n }\n }\n return -1;\n }\n\n get colSpan(): number {\n const value = this.getAttribute('colspan');\n return value ? parseInt(value, 10) : 1;\n }\n\n set colSpan(value: number) {\n this.setAttribute('colspan', value.toString());\n }\n\n get rowSpan(): number {\n const value = this.getAttribute('rowspan');\n return value ? parseInt(value, 10) : 1;\n }\n\n set rowSpan(value: number) {\n this.setAttribute('rowspan', value.toString());\n }\n\n get headers(): string {\n return this.getAttribute('headers') || '';\n }\n\n set headers(value: string) {\n this.setAttribute('headers', value);\n }\n\n get scope(): string {\n return this.getAttribute('scope') || '';\n }\n\n set scope(value: string) {\n this.setAttribute('scope', value);\n }\n\n get abbr(): string {\n return this.getAttribute('abbr') || '';\n }\n\n set abbr(value: string) {\n this.setAttribute('abbr', value);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLTimeElement extends HTMLElementBase { constructor(tagName: string = 'TIME', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLTitleElement`** class represents an HTML `<title>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTitleElement)\n */\nexport class HTMLTitleElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n /**\n * Gets or sets the text content of the title element.\n */\n get text(): string {\n return this.textContent || '';\n }\n\n set text(value: string) {\n this.textContent = value;\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\nexport class HTMLTrackElement extends HTMLElementBase { constructor(tagName: string = 'TRACK', ownerDocument?: any) { super(tagName, ownerDocument); } }\n", "import { HTMLElementBase } from './HTMLElementBase';\nimport { HTMLCollectionImp, NodeListOfImp, NodeList, HTMLCollectionOfImp } from '../collection';\n/**\n * The **`HTMLTrElement`** class represents an HTML `<tr>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableRowElement)\n */\nexport class HTMLTrElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get cells(): HTMLCollectionImp {\n return this.querySelectorAll('td, th') as any;\n }\n\n get rowIndex(): number {\n const table = this.closest('table');\n if (!table) return -1;\n \n const allRows = table.querySelectorAll('tr');\n for (let i = 0; i < allRows.length; i++) {\n const a = allRows[i];\n if (allRows[i] === this) {\n return i;\n }\n }\n return -1;\n }\n\n get sectionRowIndex(): number {\n const section = this.parentElement;\n if (!section) return -1;\n \n const sectionRows = section.querySelectorAll('tr');\n for (let i = 0; i < sectionRows.length; i++) {\n if (sectionRows[i] === this as unknown as HTMLElement) {\n return i;\n }\n }\n return -1;\n }\n\n insertCell(index?: number): HTMLElement {\n const cell = this.ownerDocument.createElement('td');\n const cells = this.cells;\n \n if (index === undefined || index === -1) {\n // Append to the end\n this.appendChild(cell);\n } else {\n // Insert at specific index\n if (index >= 0 && index < cells.length) {\n const referenceCell = cells[index];\n this.insertBefore(cell, referenceCell);\n } else if (index >= cells.length) {\n this.appendChild(cell);\n }\n }\n \n return cell;\n }\n\n deleteCell(index: number): void {\n const cells = this.cells;\n if (index >= 0 && index < cells.length) {\n const cell = cells[index];\n this.removeChild(cell);\n }\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLUListElement`** class represents an HTML `<ul>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLUListElement)\n */\nexport class HTMLUListElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}", "import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLVideoElement`** interface provides special properties and methods for manipulating video objects.\n */\nexport class HTMLVideoElement extends HTMLElementBase {\n constructor(tagName: string = 'VIDEO', ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}\n", "import { ElementBase } from './ElementBase';\n\n/**\n * The **`MathMLElement`** class represents the base class for all MathML elements.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MathMLElement)\n */\nexport class MathMLElement extends ElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName.toUpperCase(), ownerDocument);\n }\n\n get namespaceURI(): string | null {\n return 'http://www.w3.org/1998/Math/MathML';\n }\n}", "import { ElementBase } from './ElementBase';\n\n/**\n * The **`SVGElement`** class represents the base class for all SVG elements.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGElement)\n */\nexport class SVGElement extends ElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get namespaceURI(): string | null {\n return 'http://www.w3.org/2000/svg';\n }\n}", "import { SVGElement } from './SVGElement';\n\n/**\n * The **`SVGCircleElement`** class represents an SVG `<circle>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGCircleElement)\n */\nexport class SVGCircleElement extends SVGElement {\n private _cx: number = 0;\n private _cy: number = 0;\n private _r: number = 0;\n\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get cx(): number {\n return this._cx;\n }\n\n set cx(value: number) {\n this._cx = value;\n this.setAttribute('cx', value.toString());\n }\n\n get cy(): number {\n return this._cy;\n }\n\n set cy(value: number) {\n this._cy = value;\n this.setAttribute('cy', value.toString());\n }\n\n get r(): number {\n return this._r;\n }\n\n set r(value: number) {\n this._r = value;\n this.setAttribute('r', value.toString());\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 'cx':\n this._cx = parseFloat(value) || 0;\n break;\n case 'cy':\n this._cy = parseFloat(value) || 0;\n break;\n case 'r':\n this._r = parseFloat(value) || 0;\n break;\n }\n }\n}", "import { SVGElement } from './SVGElement';\n\n/**\n * The **`SVGRectElement`** class represents an SVG `<rect>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGRectElement)\n */\nexport class SVGRectElement extends SVGElement {\n private _x: number = 0;\n private _y: number = 0;\n private _width: number = 0;\n private _height: number = 0;\n\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get x(): number {\n return this._x;\n }\n\n set x(value: number) {\n this._x = value;\n this.setAttribute('x', value.toString());\n }\n\n get y(): number {\n return this._y;\n }\n\n set y(value: number) {\n this._y = value;\n this.setAttribute('y', value.toString());\n }\n\n get width(): number {\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 return this._height;\n }\n\n set height(value: number) {\n this._height = value;\n this.setAttribute('height', value.toString());\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 'x':\n this._x = parseFloat(value) || 0;\n break;\n case 'y':\n this._y = parseFloat(value) || 0;\n break;\n case 'width':\n this._width = parseFloat(value) || 0;\n break;\n case 'height':\n this._height = parseFloat(value) || 0;\n break;\n }\n }\n}", "// Base Element interfaces and types\n// export type { Element, DOMTokenList } from './Element';\nexport { HTMLCollectionImp, HTMLCollectionOfImp } from '../collection';\n\n// Base Element implementations\nexport { ElementBase } from './ElementBase';\nexport { HTMLElementBase } from './HTMLElementBase';\nexport { HTMLGenericElement } from './HTMLGenericElement';\n\n// Import all element classes\nimport { HTMLElement } from './HTMLElement';\nimport { HTMLAnchorElement } from './HTMLAnchorElement';\nimport { HTMLAreaElement } from './HTMLAreaElement';\nimport { HTMLAudioElement } from './HTMLAudioElement';\nimport { HTMLBaseElement } from './HTMLBaseElement';\nimport { HTMLBodyElement } from './HTMLBodyElement';\nimport { HTMLButtonElement } from './HTMLButtonElement';\nimport { HTMLCanvasElement } from './HTMLCanvasElement';\nimport { HTMLCaptionElement } from './HTMLCaptionElement';\nimport { HTMLDataElement } from './HTMLDataElement';\nimport { HTMLDataListElement } from './HTMLDataListElement';\nimport { HTMLDetailsElement } from './HTMLDetailsElement';\nimport { HTMLDialogElement } from './HTMLDialogElement';\nimport { HTMLDivElement } from './HTMLDivElement';\nimport { HTMLDListElement } from './HTMLDListElement';\nimport { HTMLEmbedElement } from './HTMLEmbedElement';\nimport { HTMLFieldSetElement } from './HTMLFieldSetElement';\nimport { HTMLFormElement } from './HTMLFormElement';\nimport { HTMLH1Element } from './HTMLH1Element';\nimport { HTMLHeadElement } from './HTMLHeadElement';\nimport { HTMLHRElement } from './HTMLHRElement';\nimport { HTMLHtmlElement } from './HTMLHtmlElement';\nimport { HTMLIFrameElement } from './HTMLIFrameElement';\nimport { HTMLImgElement } from './HTMLImgElement';\nimport { HTMLInputElement } from './HTMLInputElement';\nimport { HTMLLabelElement } from './HTMLLabelElement';\nimport { HTMLLegendElement } from './HTMLLegendElement';\nimport { HTMLLIElement } from './HTMLLIElement';\nimport { HTMLLinkElement } from './HTMLLinkElement';\nimport { HTMLMapElement } from './HTMLMapElement';\nimport { HTMLMetaElement } from './HTMLMetaElement';\nimport { HTMLMeterElement } from './HTMLMeterElement';\nimport { HTMLModElement } from './HTMLModElement';\nimport { HTMLObjectElement } from './HTMLObjectElement';\nimport { HTMLOListElement } from './HTMLOListElement';\nimport { HTMLOptGroupElement } from './HTMLOptGroupElement';\nimport { HTMLOptionElement } from './HTMLOptionElement';\nimport { HTMLOutputElement } from './HTMLOutputElement';\nimport { HTMLPElement } from './HTMLPElement';\nimport { HTMLParamElement } from './HTMLParamElement';\nimport { HTMLPictureElement } from './HTMLPictureElement';\nimport { HTMLPreElement } from './HTMLPreElement';\nimport { HTMLProgressElement } from './HTMLProgressElement';\nimport { HTMLQuoteElement } from './HTMLQuoteElement';\nimport { HTMLScriptElement } from './HTMLScriptElement';\nimport { HTMLSelectElement } from './HTMLSelectElement';\nimport { HTMLSlotElement } from './HTMLSlotElement';\nimport { HTMLSourceElement } from './HTMLSourceElement';\nimport { HTMLSpanElement } from './HTMLSpanElement';\nimport { HTMLStyleElement } from './HTMLStyleElement';\nimport { HTMLTableElement } from './HTMLTableElement';\nimport { HTMLTbodyElement } from './HTMLTbodyElement';\nimport { HTMLTdElement } from './HTMLTdElement';\nimport { HTMLTemplateElement } from './HTMLTemplateElement';\nimport { HTMLTextAreaElement } from './HTMLTextAreaElement';\nimport { HTMLTfootElement } from './HTMLTfootElement';\nimport { HTMLTheadElement } from './HTMLTheadElement';\nimport { HTMLThElement } from './HTMLThElement';\nimport { HTMLTimeElement } from './HTMLTimeElement';\nimport { HTMLTitleElement } from './HTMLTitleElement';\nimport { HTMLTrackElement } from './HTMLTrackElement';\nimport { HTMLTrElement } from './HTMLTrElement';\nimport { HTMLUListElement } from './HTMLUListElement';\nimport { HTMLVideoElement } from './HTMLVideoElement';\nimport { MathMLElement } from './MathMLElement';\nimport { SVGElement } from './SVGElement';\nimport { SVGCircleElement } from './SVGCircleElement';\nimport { SVGRectElement } from './SVGRectElement';\n\n// Export all element classes\nexport {\n HTMLElement,\n HTMLAnchorElement,\n HTMLAreaElement,\n HTMLAudioElement,\n HTMLBaseElement,\n HTMLBodyElement,\n HTMLButtonElement,\n HTMLCanvasElement,\n HTMLCaptionElement,\n HTMLDataElement,\n HTMLDataListElement,\n HTMLDetailsElement,\n HTMLDialogElement,\n HTMLDivElement,\n HTMLDListElement,\n HTMLEmbedElement,\n HTMLFieldSetElement,\n HTMLFormElement,\n HTMLH1Element,\n HTMLHeadElement,\n HTMLHRElement,\n HTMLHtmlElement,\n HTMLIFrameElement,\n HTMLImgElement,\n HTMLInputElement,\n HTMLLabelElement,\n HTMLLegendElement,\n HTMLLIElement,\n HTMLLinkElement,\n HTMLMapElement,\n HTMLMetaElement,\n HTMLMeterElement,\n HTMLModElement,\n HTMLObjectElement,\n HTMLOListElement,\n HTMLOptGroupElement,\n HTMLOptionElement,\n HTMLOutputElement,\n HTMLPElement,\n HTMLParamElement,\n HTMLPictureElement,\n HTMLPreElement,\n HTMLProgressElement,\n HTMLQuoteElement,\n HTMLScriptElement,\n HTMLSelectElement,\n HTMLSlotElement,\n HTMLSourceElement,\n HTMLSpanElement,\n HTMLStyleElement,\n HTMLTableElement,\n HTMLTbodyElement,\n HTMLTdElement,\n HTMLTemplateElement,\n HTMLTextAreaElement,\n HTMLTfootElement,\n HTMLTheadElement,\n HTMLThElement,\n HTMLTimeElement,\n HTMLTitleElement,\n HTMLTrackElement,\n HTMLTrElement,\n HTMLUListElement,\n HTMLVideoElement,\n MathMLElement,\n SVGElement,\n SVGCircleElement,\n SVGRectElement\n};\n\n// HTML Elements mapping\nexport const htmlElements = {\n a: HTMLAnchorElement,\n area: HTMLAreaElement,\n audio: HTMLAudioElement,\n base: HTMLBaseElement,\n body: HTMLBodyElement,\n button: HTMLButtonElement,\n canvas: HTMLCanvasElement,\n caption: HTMLCaptionElement,\n data: HTMLDataElement,\n datalist: HTMLDataListElement,\n details: HTMLDetailsElement,\n dialog: HTMLDialogElement,\n div: HTMLDivElement,\n dl: HTMLDListElement,\n embed: HTMLEmbedElement,\n fieldset: HTMLFieldSetElement,\n form: HTMLFormElement,\n h1: HTMLH1Element,\n head: HTMLHeadElement,\n hr: HTMLHRElement,\n html: HTMLHtmlElement,\n iframe: HTMLIFrameElement,\n img: HTMLImgElement,\n input: HTMLInputElement,\n label: HTMLLabelElement,\n legend: HTMLLegendElement,\n li: HTMLLIElement,\n link: HTMLLinkElement,\n map: HTMLMapElement,\n meta: HTMLMetaElement,\n meter: HTMLMeterElement,\n del: HTMLModElement,\n object: HTMLObjectElement,\n ol: HTMLOListElement,\n optgroup: HTMLOptGroupElement,\n option: HTMLOptionElement,\n output: HTMLOutputElement,\n p: HTMLPElement,\n param: HTMLParamElement,\n picture: HTMLPictureElement,\n pre: HTMLPreElement,\n progress: HTMLProgressElement,\n blockquote: HTMLQuoteElement,\n script: HTMLScriptElement,\n select: HTMLSelectElement,\n slot: HTMLSlotElement,\n source: HTMLSourceElement,\n span: HTMLSpanElement,\n style: HTMLStyleElement,\n table: HTMLTableElement,\n tbody: HTMLTbodyElement,\n td: HTMLTdElement,\n template: HTMLTemplateElement,\n textarea: HTMLTextAreaElement,\n tfoot: HTMLTfootElement,\n thead: HTMLTheadElement,\n th: HTMLThElement,\n time: HTMLTimeElement,\n title: HTMLTitleElement,\n track: HTMLTrackElement,\n tr: HTMLTrElement,\n ul: HTMLUListElement,\n video: HTMLVideoElement\n} as const;\n\nexport const svgElements = {\n svg: SVGElement,\n circle: SVGCircleElement,\n rect: SVGRectElement\n} as const;\n\nexport const mathmlElements = {\n annotation: MathMLElement,\n 'annotation-xml': MathMLElement,\n maction: MathMLElement,\n math: MathMLElement,\n merror: MathMLElement,\n mfrac: MathMLElement,\n mi: MathMLElement,\n mmultiscripts: MathMLElement,\n mn: MathMLElement,\n mo: MathMLElement,\n mover: MathMLElement,\n mpadded: MathMLElement,\n mphantom: MathMLElement,\n mprescripts: MathMLElement,\n mroot: MathMLElement,\n mrow: MathMLElement,\n ms: MathMLElement,\n mspace: MathMLElement,\n msqrt: MathMLElement,\n mstyle: MathMLElement,\n msub: MathMLElement,\n msubsup: MathMLElement,\n msup: MathMLElement,\n mtable: MathMLElement,\n mtd: MathMLElement,\n mtext: MathMLElement,\n mtr: MathMLElement,\n munder: MathMLElement,\n munderover: MathMLElement,\n semantics: MathMLElement\n} as const;\n\nexport type HTMLImageElement = HTMLImgElement;\nexport type HTMLParagraphElement = HTMLPElement;\nexport type HTMLHeadingElement = HTMLH1Element;\nexport type HTMLTableSectionElement = HTMLTbodyElement;\nexport type HTMLTableCellElement = HTMLTdElement;\nexport type HTMLTableRowElement = HTMLTrElement;\n", "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", "// import { Window, Location, History, Navigator } from './Window';\n// import { CustomElementRegistry } from './CustomElementRegistry';\n// import { Document } from '../node/Document';\nimport { DocumentBase } from '../node/DocumentBase';\nimport { NodeBase } from '../node/NodeBase';\nimport { ElementBase } from '../node/elements/ElementBase';\n\n// Import all element classes\nimport {\n HTMLElement,\n HTMLElementBase,\n HTMLAnchorElement,\n HTMLAreaElement,\n HTMLAudioElement,\n HTMLBaseElement,\n HTMLBodyElement,\n HTMLButtonElement,\n HTMLCanvasElement,\n HTMLCaptionElement,\n HTMLDataElement,\n HTMLDataListElement,\n HTMLDetailsElement,\n HTMLDialogElement,\n HTMLDivElement,\n HTMLDListElement,\n HTMLEmbedElement,\n HTMLFieldSetElement,\n HTMLFormElement,\n HTMLH1Element,\n HTMLHeadElement,\n HTMLHRElement,\n HTMLHtmlElement,\n HTMLIFrameElement,\n HTMLImgElement,\n HTMLInputElement,\n HTMLLabelElement,\n HTMLLegendElement,\n HTMLLIElement,\n HTMLLinkElement,\n HTMLMapElement,\n HTMLMetaElement,\n HTMLMeterElement,\n HTMLModElement,\n HTMLObjectElement,\n HTMLOListElement,\n HTMLOptGroupElement,\n HTMLOptionElement,\n HTMLOutputElement,\n HTMLPElement,\n HTMLParamElement,\n HTMLPictureElement,\n HTMLPreElement,\n HTMLProgressElement,\n HTMLQuoteElement,\n HTMLScriptElement,\n HTMLSelectElement,\n HTMLSlotElement,\n HTMLSourceElement,\n HTMLSpanElement,\n HTMLStyleElement,\n HTMLTableElement,\n HTMLTbodyElement,\n HTMLTdElement,\n HTMLTemplateElement,\n HTMLTextAreaElement,\n HTMLTfootElement,\n HTMLTheadElement,\n HTMLThElement,\n HTMLTimeElement,\n HTMLTitleElement,\n HTMLTrackElement,\n HTMLTrElement,\n HTMLUListElement,\n HTMLVideoElement\n} from '../node/elements';\nimport { CustomElementRegistryImp } from './CustomElementRegistryImp';\n\nclass LocationBase implements Location {\n private _href: string = 'about:blank';\n private _protocol: string = 'about:';\n private _host: string = '';\n private _hostname: string = '';\n private _port: string = '';\n private _pathname: string = 'blank';\n private _search: string = '';\n private _hash: string = '';\n private _origin: string = 'null';\n private urlChangeCallback?: (url: string) => void;\n\n constructor(initialUrl: string = 'about:blank', urlChangeCallback?: (url: string) => void) {\n this.urlChangeCallback = urlChangeCallback;\n this.parseUrl(initialUrl);\n }\n\n ancestorOrigins: DOMStringList;\n\n get href(): string {\n return this._href;\n }\n\n set href(url: string) {\n const oldHref = this._href;\n this.parseUrl(url);\n\n if (this._href !== oldHref && this.urlChangeCallback) {\n this.urlChangeCallback(this._href);\n }\n }\n\n get protocol(): string {\n return this._protocol;\n }\n set protocol(value: string) {\n if (!value.endsWith(':')) value += ':';\n this._protocol = value;\n this.reconstructUrl();\n }\n\n get host(): string {\n return this._host;\n }\n set host(value: string) {\n this._host = value;\n const colonIndex = value.lastIndexOf(':');\n if (colonIndex !== -1 && colonIndex > value.lastIndexOf(']')) {\n this._hostname = value.substring(0, colonIndex);\n this._port = value.substring(colonIndex + 1);\n } else {\n this._hostname = value;\n this._port = '';\n }\n this.reconstructUrl();\n }\n\n get hostname(): string {\n return this._hostname;\n }\n set hostname(value: string) {\n this._hostname = value;\n this._host = this._port ? `${value}:${this._port}` : value;\n this.reconstructUrl();\n }\n\n get port(): string {\n return this._port;\n }\n set port(value: string) {\n this._port = value;\n this._host = value ? `${this._hostname}:${value}` : this._hostname;\n this.reconstructUrl();\n }\n\n get pathname(): string {\n return this._pathname;\n }\n set pathname(value: string) {\n if (!value.startsWith('/')) value = '/' + value;\n this._pathname = value;\n this.reconstructUrl();\n }\n\n get search(): string {\n return this._search;\n }\n set search(value: string) {\n if (value && !value.startsWith('?')) value = '?' + value;\n this._search = value;\n this.reconstructUrl();\n }\n\n get hash(): string {\n return this._hash;\n }\n set hash(value: string) {\n if (value && !value.startsWith('#')) value = '#' + value;\n this._hash = value;\n this.reconstructUrl();\n }\n\n get origin(): string {\n return this._origin;\n }\n\n assign(url: string): void {\n const oldHref = this._href;\n this.parseUrl(url);\n if (this._href !== oldHref && this.urlChangeCallback) {\n this.urlChangeCallback(this._href);\n }\n }\n\n replace(url: string): void {\n this.assign(url);\n }\n\n reload(_forcedReload?: boolean): void {}\n\n toString(): string {\n return this._href;\n }\n\n private parseUrl(url: string): void {\n try {\n let parsedUrl: URL;\n if (url.startsWith('//')) {\n parsedUrl = new URL(this._protocol + url);\n } else if (url.startsWith('/')) {\n parsedUrl = new URL(url, `${this._protocol}//${this._host}`);\n } else if (url.includes('://')) {\n parsedUrl = new URL(url);\n } else {\n const base = `${this._protocol}//${this._host}${this._pathname}`;\n parsedUrl = new URL(url, base);\n }\n this._href = parsedUrl.href;\n this._protocol = parsedUrl.protocol;\n this._host = parsedUrl.host;\n this._hostname = parsedUrl.hostname;\n this._port = parsedUrl.port;\n this._pathname = parsedUrl.pathname;\n this._search = parsedUrl.search;\n this._hash = parsedUrl.hash;\n this._origin = parsedUrl.origin;\n } catch (e) {\n if (url === 'about:blank') {\n this._href = 'about:blank';\n this._protocol = 'about:';\n this._host = '';\n this._hostname = '';\n this._port = '';\n this._pathname = 'blank';\n this._search = '';\n this._hash = '';\n this._origin = 'null';\n }\n }\n }\n\n private reconstructUrl(): void {\n try {\n let url = this._protocol;\n if (this._protocol !== 'about:' && this._protocol !== 'data:') {\n url += '//';\n if (this._host) url += this._host;\n }\n url += this._pathname;\n url += this._search;\n url += this._hash;\n const testUrl = new URL(url);\n this._href = testUrl.href;\n this._origin = testUrl.origin;\n } catch (e) {}\n }\n}\n\nclass HistoryBase implements History {\n length: number = 1;\n state: any = null;\n private window: WindowBase;\n private historyStack: Array<{ state: any; title: string; url?: string }> = [];\n private currentIndex: number = -1;\n\n constructor(window: WindowBase) {\n this.window = window;\n }\n\n scrollRestoration: ScrollRestoration;\n\n back(): void {\n this.go(-1);\n }\n forward(): void {\n this.go(1);\n }\n go(delta?: number): void {\n if (!delta || this.historyStack.length === 0) return;\n const newIndex = this.currentIndex + delta;\n if (newIndex >= 0 && newIndex < this.historyStack.length) {\n this.currentIndex = newIndex;\n const entry = this.historyStack[this.currentIndex];\n this.state = entry.state;\n if (entry.url && this.window.location) {\n (this.window.location as any)._href = entry.url;\n (this.window.location as any).parseUrl(entry.url);\n }\n (this.window as any).dispatchPopStateEvent(entry.state, entry.url);\n }\n }\n\n pushState(data: any, title: string, url?: string): void {\n this.historyStack = this.historyStack.slice(0, this.currentIndex + 1);\n this.historyStack.push({ state: data, title, url });\n this.currentIndex = this.historyStack.length - 1;\n this.state = data;\n this.length = this.historyStack.length;\n if (url && this.window.location) {\n const oldHref = (this.window.location as any)._href;\n (this.window.location as any)._href = url;\n (this.window.location as any).parseUrl(url);\n if (url !== oldHref && (this.window.location as any).urlChangeCallback) {\n (this.window.location as any).urlChangeCallback(url);\n }\n }\n }\n\n replaceState(data: any, title: string, url?: string): void {\n if (this.currentIndex >= 0 && this.currentIndex < this.historyStack.length) {\n this.historyStack[this.currentIndex] = { state: data, title, url };\n } else {\n this.historyStack = [{ state: data, title, url }];\n this.currentIndex = 0;\n this.length = 1;\n }\n this.state = data;\n if (url && this.window.location) {\n const oldHref = (this.window.location as any)._href;\n (this.window.location as any)._href = url;\n (this.window.location as any).parseUrl(url);\n if (url !== oldHref && (this.window.location as any).urlChangeCallback) {\n (this.window.location as any).urlChangeCallback(url);\n }\n }\n }\n}\n\nclass NavigatorBase implements Navigator {\n clipboard: Clipboard;\n credentials: CredentialsContainer;\n doNotTrack: string;\n geolocation: Geolocation;\n login: NavigatorLogin;\n maxTouchPoints: number;\n mediaCapabilities: MediaCapabilities;\n mediaDevices: MediaDevices;\n mediaSession: MediaSession;\n permissions: Permissions;\n serviceWorker: ServiceWorkerContainer;\n userActivation: UserActivation;\n wakeLock: WakeLock;\n canShare(data?: ShareData): boolean {\n throw new Error('Method not implemented.');\n }\n getGamepads(): (Gamepad | null)[] {\n throw new Error('Method not implemented.');\n }\n requestMIDIAccess(options?: MIDIOptions): Promise<MIDIAccess> {\n throw new Error('Method not implemented.');\n }\n requestMediaKeySystemAccess(keySystem: unknown, supportedConfigurations: unknown): Promise<MediaKeySystemAccess> {\n throw new Error('Method not implemented.');\n }\n sendBeacon(url: string | URL, data?: BodyInit | null): boolean {\n throw new Error('Method not implemented.');\n }\n share(data?: ShareData): Promise<void> {\n throw new Error('Method not implemented.');\n }\n vibrate(pattern: unknown): boolean {\n throw new Error('Method not implemented.');\n }\n webdriver: boolean;\n clearAppBadge(): Promise<void> {\n throw new Error('Method not implemented.');\n }\n setAppBadge(contents?: number): Promise<void> {\n throw new Error('Method not implemented.');\n }\n hardwareConcurrency: number;\n registerProtocolHandler(scheme: string, url: string | URL): void {\n throw new Error('Method not implemented.');\n }\n appCodeName: string;\n appName: string;\n appVersion: string;\n product: string;\n productSub: string;\n vendor: string;\n vendorSub: string;\n locks: LockManager;\n mimeTypes: MimeTypeArray;\n pdfViewerEnabled: boolean;\n plugins: PluginArray;\n javaEnabled(): boolean {\n throw new Error('Method not implemented.');\n }\n storage: StorageManager;\n userAgent: string = 'Mozilla/5.0 (Server-Side Rendering)';\n language: string = 'en-US';\n languages: readonly string[] = ['en-US', 'en'];\n platform: string = 'Server';\n cookieEnabled: boolean = false;\n onLine: boolean = true;\n}\n\ninterface WindowEventListener {\n type: string;\n listener: (event: any) => void;\n options?: any;\n}\n\nexport class WindowBase implements Window {\n [key: string]: any;\n private _eventListeners: WindowEventListener[] = [];\n private _timers: Set<number> = new Set();\n private _intervals: Set<number> = new Set();\n private _animationFrames: Set<number> = new Set();\n readonly clientInformation: Navigator;\n private _closed: boolean = false;\n\n get closed(): boolean {\n return this._closed;\n }\n\n readonly cookieStore: any = {};\n readonly customElements: CustomElementRegistry;\n readonly devicePixelRatio: number = 1;\n readonly document: Document;\n readonly history: History;\n readonly navigator: Navigator;\n readonly self: any = this;\n readonly window: any = this;\n\n private _location: Location;\n get location(): Location {\n return this._location;\n }\n set location(href: string | Location) {\n if (typeof href === 'string') this._location.href = href;\n else this._location.href = href.href;\n }\n\n // Global constructors\n Event = class Event {\n constructor(public type: string) {}\n };\n CustomEvent = class CustomEvent extends this.Event {\n constructor(\n type: string,\n public detail: any\n ) {\n super(type);\n }\n };\n\n // All HTML element constructors\n Node = NodeBase;\n Element = ElementBase;\n HTMLElement = HTMLElement;\n HTMLAnchorElement = HTMLAnchorElement;\n HTMLAreaElement = HTMLAreaElement;\n HTMLAudioElement = HTMLAudioElement;\n HTMLBaseElement = HTMLBaseElement;\n HTMLBodyElement = HTMLBodyElement;\n HTMLButtonElement = HTMLButtonElement;\n HTMLCanvasElement = HTMLCanvasElement;\n HTMLCaptionElement = HTMLCaptionElement;\n HTMLDataElement = HTMLDataElement;\n HTMLDataListElement = HTMLDataListElement;\n HTMLDetailsElement = HTMLDetailsElement;\n HTMLDialogElement = HTMLDialogElement;\n HTMLDivElement = HTMLDivElement;\n HTMLDListElement = HTMLDListElement;\n HTMLEmbedElement = HTMLEmbedElement;\n HTMLFieldSetElement = HTMLFieldSetElement;\n HTMLFormElement = HTMLFormElement;\n HTMLH1Element = HTMLH1Element;\n HTMLHeadElement = HTMLHeadElement;\n HTMLHRElement = HTMLHRElement;\n HTMLHtmlElement = HTMLHtmlElement;\n HTMLIFrameElement = HTMLIFrameElement;\n HTMLImgElement = HTMLImgElement;\n HTMLInputElement = HTMLInputElement;\n HTMLLabelElement = HTMLLabelElement;\n HTMLLegendElement = HTMLLegendElement;\n HTMLLIElement = HTMLLIElement;\n HTMLLinkElement = HTMLLinkElement;\n HTMLMapElement = HTMLMapElement;\n HTMLMetaElement = HTMLMetaElement;\n HTMLMeterElement = HTMLMeterElement;\n HTMLModElement = HTMLModElement;\n HTMLObjectElement = HTMLObjectElement;\n HTMLOListElement = HTMLOListElement;\n HTMLOptGroupElement = HTMLOptGroupElement;\n HTMLOptionElement = HTMLOptionElement;\n HTMLOutputElement = HTMLOutputElement;\n HTMLPElement = HTMLPElement;\n HTMLParamElement = HTMLParamElement;\n HTMLPictureElement = HTMLPictureElement;\n HTMLPreElement = HTMLPreElement;\n HTMLProgressElement = HTMLProgressElement;\n HTMLQuoteElement = HTMLQuoteElement;\n HTMLScriptElement = HTMLScriptElement;\n HTMLSelectElement = HTMLSelectElement;\n HTMLSlotElement = HTMLSlotElement;\n HTMLSourceElement = HTMLSourceElement;\n HTMLSpanElement = HTMLSpanElement;\n HTMLStyleElement = HTMLStyleElement;\n HTMLTableElement = HTMLTableElement;\n HTMLTbodyElement = HTMLTbodyElement;\n HTMLTdElement = HTMLTdElement;\n HTMLTemplateElement = HTMLTemplateElement;\n HTMLTextAreaElement = HTMLTextAreaElement;\n HTMLTfootElement = HTMLTfootElement;\n HTMLTheadElement = HTMLTheadElement;\n HTMLThElement = HTMLThElement;\n HTMLTimeElement = HTMLTimeElement;\n HTMLTitleElement = HTMLTitleElement;\n HTMLTrackElement = HTMLTrackElement;\n HTMLTrElement = HTMLTrElement;\n HTMLUListElement = HTMLUListElement;\n HTMLVideoElement = HTMLVideoElement;\n\n // Type Aliases\n HTMLImageElement = HTMLImgElement;\n HTMLParagraphElement = HTMLPElement;\n HTMLHeadingElement = HTMLH1Element;\n HTMLTableSectionElement = HTMLTbodyElement;\n HTMLTableCellElement = HTMLTdElement;\n HTMLTableRowElement = HTMLTrElement;\n\n constructor(config?: { initialUrl?: string }) {\n const documentBase = new DocumentBase();\n if (documentBase && (documentBase as any).setWindow) {\n (documentBase as any).setWindow(this);\n }\n this._location = new LocationBase(config?.initialUrl);\n documentBase.setLocation(this._location);\n this.document = documentBase as unknown as Document;\n const customElementRegistryImp = new CustomElementRegistryImp();\n customElementRegistryImp.setWindow(this);\n this.customElements = customElementRegistryImp as unknown as CustomElementRegistry;\n this.history = new HistoryBase(this);\n this.navigator = new NavigatorBase();\n this.clientInformation = this.navigator;\n }\n\n [index: number]: Window;\n event: Event;\n external: External;\n frameElement: Element;\n frames: Window;\n innerHeight: number;\n innerWidth: number;\n length: number;\n locationbar: BarProp;\n menubar: BarProp;\n name: string;\n ondevicemotion: (this: Window, ev: DeviceMotionEvent) => any;\n ondeviceorientation: (this: Window, ev: DeviceOrientationEvent) => any;\n ondeviceorientationabsolute: (this: Window, ev: DeviceOrientationEvent) => any;\n onorientationchange: (this: Window, ev: Event) => any;\n opener: any;\n orientation: number;\n originAgentCluster: boolean;\n outerHeight: number;\n outerWidth: number;\n pageXOffset: number;\n pageYOffset: number;\n parent: Window;\n personalbar: BarProp;\n screen: Screen;\n screenLeft: number;\n screenTop: number;\n screenX: number;\n screenY: number;\n scrollX: number;\n scrollY: number;\n scrollbars: BarProp;\n speechSynthesis: SpeechSynthesis;\n status: string;\n statusbar: BarProp;\n toolbar: BarProp;\n top: Window;\n visualViewport: VisualViewport;\n blur(): void {\n throw new Error('Method not implemented.');\n }\n cancelIdleCallback(handle: number): void {\n throw new Error('Method not implemented.');\n }\n captureEvents(): void {\n throw new Error('Method not implemented.');\n }\n confirm(message?: string): boolean {\n throw new Error('Method not implemented.');\n }\n focus(): void {\n throw new Error('Method not implemented.');\n }\n getComputedStyle(elt: Element, pseudoElt?: string | null): CSSStyleDeclaration {\n throw new Error('Method not implemented.');\n }\n getSelection(): Selection | null {\n throw new Error('Method not implemented.');\n }\n matchMedia(query: string): MediaQueryList {\n throw new Error('Method not implemented.');\n }\n moveBy(x: number, y: number): void {\n throw new Error('Method not implemented.');\n }\n moveTo(x: number, y: number): void {\n throw new Error('Method not implemented.');\n }\n open(url?: string | URL, target?: string, features?: string): WindowProxy | null {\n throw new Error('Method not implemented.');\n }\n postMessage(message: unknown, targetOrigin?: unknown, transfer?: unknown): void {\n throw new Error('Method not implemented.');\n }\n print(): void {\n throw new Error('Method not implemented.');\n }\n prompt(message?: string, _default?: string): string | null {\n throw new Error('Method not implemented.');\n }\n releaseEvents(): void {\n throw new Error('Method not implemented.');\n }\n requestIdleCallback(callback: IdleRequestCallback, options?: IdleRequestOptions): number {\n throw new Error('Method not implemented.');\n }\n resizeBy(x: number, y: number): void {\n throw new Error('Method not implemented.');\n }\n resizeTo(width: number, height: number): void {\n throw new Error('Method not implemented.');\n }\n scroll(x?: unknown, y?: unknown): void {\n throw new Error('Method not implemented.');\n }\n scrollBy(x?: unknown, y?: unknown): void {\n throw new Error('Method not implemented.');\n }\n scrollTo(x?: unknown, y?: unknown): void {\n throw new Error('Method not implemented.');\n }\n stop(): void {\n throw new Error('Method not implemented.');\n }\n cancelAnimationFrame(handle: number): void {\n throw new Error('Method not implemented.');\n }\n requestAnimationFrame(callback: FrameRequestCallback): number {\n throw new Error('Method not implemented.');\n }\n onabort: (this: GlobalEventHandlers, ev: UIEvent) => any;\n onanimationcancel: (this: GlobalEventHandlers, ev: AnimationEvent) => any;\n onanimationend: (this: GlobalEventHandlers, ev: AnimationEvent) => any;\n onanimationiteration: (this: GlobalEventHandlers, ev: AnimationEvent) => any;\n onanimationstart: (this: GlobalEventHandlers, ev: AnimationEvent) => any;\n onauxclick: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onbeforeinput: (this: GlobalEventHandlers, ev: InputEvent) => any;\n onbeforematch: (this: GlobalEventHandlers, ev: Event) => any;\n onbeforetoggle: (this: GlobalEventHandlers, ev: ToggleEvent) => any;\n onblur: (this: GlobalEventHandlers, ev: FocusEvent) => any;\n oncancel: (this: GlobalEventHandlers, ev: Event) => any;\n oncanplay: (this: GlobalEventHandlers, ev: Event) => any;\n oncanplaythrough: (this: GlobalEventHandlers, ev: Event) => any;\n onchange: (this: GlobalEventHandlers, ev: Event) => any;\n onclick: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onclose: (this: GlobalEventHandlers, ev: Event) => any;\n oncontextlost: (this: GlobalEventHandlers, ev: Event) => any;\n oncontextmenu: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n oncontextrestored: (this: GlobalEventHandlers, ev: Event) => any;\n oncopy: (this: GlobalEventHandlers, ev: ClipboardEvent) => any;\n oncuechange: (this: GlobalEventHandlers, ev: Event) => any;\n oncut: (this: GlobalEventHandlers, ev: ClipboardEvent) => any;\n ondblclick: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n ondrag: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondragend: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondragenter: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondragleave: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondragover: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondragstart: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondrop: (this: GlobalEventHandlers, ev: DragEvent) => any;\n ondurationchange: (this: GlobalEventHandlers, ev: Event) => any;\n onemptied: (this: GlobalEventHandlers, ev: Event) => any;\n onended: (this: GlobalEventHandlers, ev: Event) => any;\n onerror: OnErrorEventHandlerNonNull;\n onfocus: (this: GlobalEventHandlers, ev: FocusEvent) => any;\n onformdata: (this: GlobalEventHandlers, ev: FormDataEvent) => any;\n ongotpointercapture: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n oninput: (this: GlobalEventHandlers, ev: Event) => any;\n oninvalid: (this: GlobalEventHandlers, ev: Event) => any;\n onkeydown: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;\n onkeypress: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;\n onkeyup: (this: GlobalEventHandlers, ev: KeyboardEvent) => any;\n onload: (this: GlobalEventHandlers, ev: Event) => any;\n onloadeddata: (this: GlobalEventHandlers, ev: Event) => any;\n onloadedmetadata: (this: GlobalEventHandlers, ev: Event) => any;\n onloadstart: (this: GlobalEventHandlers, ev: Event) => any;\n onlostpointercapture: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onmousedown: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmouseenter: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmouseleave: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmousemove: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmouseout: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmouseover: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onmouseup: (this: GlobalEventHandlers, ev: MouseEvent) => any;\n onpaste: (this: GlobalEventHandlers, ev: ClipboardEvent) => any;\n onpause: (this: GlobalEventHandlers, ev: Event) => any;\n onplay: (this: GlobalEventHandlers, ev: Event) => any;\n onplaying: (this: GlobalEventHandlers, ev: Event) => any;\n onpointercancel: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerdown: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerenter: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerleave: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointermove: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerout: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerover: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onpointerrawupdate: (this: GlobalEventHandlers, ev: Event) => any;\n onpointerup: (this: GlobalEventHandlers, ev: PointerEvent) => any;\n onprogress: (this: GlobalEventHandlers, ev: ProgressEvent) => any;\n onratechange: (this: GlobalEventHandlers, ev: Event) => any;\n onreset: (this: GlobalEventHandlers, ev: Event) => any;\n onresize: (this: GlobalEventHandlers, ev: UIEvent) => any;\n onscroll: (this: GlobalEventHandlers, ev: Event) => any;\n onscrollend: (this: GlobalEventHandlers, ev: Event) => any;\n onsecuritypolicyviolation: (this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any;\n onseeked: (this: GlobalEventHandlers, ev: Event) => any;\n onseeking: (this: GlobalEventHandlers, ev: Event) => any;\n onselect: (this: GlobalEventHandlers, ev: Event) => any;\n onselectionchange: (this: GlobalEventHandlers, ev: Event) => any;\n onselectstart: (this: GlobalEventHandlers, ev: Event) => any;\n onslotchange: (this: GlobalEventHandlers, ev: Event) => any;\n onstalled: (this: GlobalEventHandlers, ev: Event) => any;\n onsubmit: (this: GlobalEventHandlers, ev: SubmitEvent) => any;\n onsuspend: (this: GlobalEventHandlers, ev: Event) => any;\n ontimeupdate: (this: GlobalEventHandlers, ev: Event) => any;\n ontoggle: (this: GlobalEventHandlers, ev: ToggleEvent) => any;\n ontouchcancel?: (this: GlobalEventHandlers, ev: TouchEvent) => any;\n ontouchend?: (this: GlobalEventHandlers, ev: TouchEvent) => any;\n ontouchmove?: (this: GlobalEventHandlers, ev: TouchEvent) => any;\n ontouchstart?: (this: GlobalEventHandlers, ev: TouchEvent) => any;\n ontransitioncancel: (this: GlobalEventHandlers, ev: TransitionEvent) => any;\n ontransitionend: (this: GlobalEventHandlers, ev: TransitionEvent) => any;\n ontransitionrun: (this: GlobalEventHandlers, ev: TransitionEvent) => any;\n ontransitionstart: (this: GlobalEventHandlers, ev: TransitionEvent) => any;\n onvolumechange: (this: GlobalEventHandlers, ev: Event) => any;\n onwaiting: (this: GlobalEventHandlers, ev: Event) => any;\n onwebkitanimationend: (this: GlobalEventHandlers, ev: Event) => any;\n onwebkitanimationiteration: (this: GlobalEventHandlers, ev: Event) => any;\n onwebkitanimationstart: (this: GlobalEventHandlers, ev: Event) => any;\n onwebkittransitionend: (this: GlobalEventHandlers, ev: Event) => any;\n onwheel: (this: GlobalEventHandlers, ev: WheelEvent) => any;\n onafterprint: (this: WindowEventHandlers, ev: Event) => any;\n onbeforeprint: (this: WindowEventHandlers, ev: Event) => any;\n onbeforeunload: (this: WindowEventHandlers, ev: BeforeUnloadEvent) => any;\n ongamepadconnected: (this: WindowEventHandlers, ev: GamepadEvent) => any;\n ongamepaddisconnected: (this: WindowEventHandlers, ev: GamepadEvent) => any;\n onhashchange: (this: WindowEventHandlers, ev: HashChangeEvent) => any;\n onlanguagechange: (this: WindowEventHandlers, ev: Event) => any;\n onmessage: (this: WindowEventHandlers, ev: MessageEvent) => any;\n onmessageerror: (this: WindowEventHandlers, ev: MessageEvent) => any;\n onoffline: (this: WindowEventHandlers, ev: Event) => any;\n ononline: (this: WindowEventHandlers, ev: Event) => any;\n onpagehide: (this: WindowEventHandlers, ev: PageTransitionEvent) => any;\n onpagereveal: (this: WindowEventHandlers, ev: PageRevealEvent) => any;\n onpageshow: (this: WindowEventHandlers, ev: PageTransitionEvent) => any;\n onpageswap: (this: WindowEventHandlers, ev: PageSwapEvent) => any;\n onpopstate: (this: WindowEventHandlers, ev: PopStateEvent) => any;\n onrejectionhandled: (this: WindowEventHandlers, ev: PromiseRejectionEvent) => any;\n onstorage: (this: WindowEventHandlers, ev: StorageEvent) => any;\n onunhandledrejection: (this: WindowEventHandlers, ev: PromiseRejectionEvent) => any;\n onunload: (this: WindowEventHandlers, ev: Event) => any;\n localStorage: Storage;\n caches: CacheStorage;\n crossOriginIsolated: boolean;\n crypto: Crypto;\n indexedDB: IDBFactory;\n isSecureContext: boolean;\n origin: string;\n performance: Performance;\n atob(data: string): string {\n throw new Error('Method not implemented.');\n }\n btoa(data: string): string {\n throw new Error('Method not implemented.');\n }\n createImageBitmap(image: unknown, sx?: unknown, sy?: unknown, sw?: unknown, sh?: unknown, options?: unknown): Promise<ImageBitmap> {\n throw new Error('Method not implemented.');\n }\n fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n throw new Error('Method not implemented.');\n }\n queueMicrotask(callback: VoidFunction): void {\n throw new Error('Method not implemented.');\n }\n reportError(e: any): void {\n throw new Error('Method not implemented.');\n }\n structuredClone<T = any>(value: T, options?: StructuredSerializeOptions): T {\n throw new Error('Method not implemented.');\n }\n sessionStorage: Storage;\n\n alert(_message?: any): void {}\n close(): void {\n if (this._closed) return;\n this._closed = true;\n this._timers.forEach(id => clearTimeout(id));\n this._intervals.forEach(id => clearInterval(id));\n this._eventListeners.length = 0;\n }\n\n setTimeout(callback: Function, delay?: number, ...args: any[]): number {\n const id = setTimeout(() => {\n this._timers.delete(id as any);\n callback(...args);\n }, delay) as any;\n this._timers.add(id);\n return id;\n }\n clearTimeout(id: number): void {\n clearTimeout(id);\n this._timers.delete(id);\n }\n setInterval(callback: Function, delay?: number, ...args: any[]): number {\n const id = setInterval(callback, delay, ...args) as any;\n this._intervals.add(id);\n return id;\n }\n clearInterval(id: number): void {\n clearInterval(id);\n this._intervals.delete(id);\n }\n\n addEventListener(type: string, listener: any, options?: any): void {\n // Basic support for major window events\n this._eventListeners.push({\n type,\n listener: typeof listener === 'function' ? listener : listener?.handleEvent,\n options\n });\n }\n\n removeEventListener(type: string, listener: any): void {\n const targetListener = typeof listener === 'function' ? listener : listener?.handleEvent;\n this._eventListeners = this._eventListeners.filter(l => !(l.type === type && l.listener === targetListener));\n }\n dispatchEvent(event: any): boolean {\n const type = typeof event === 'string' ? event : event.type;\n const listeners = [...this._eventListeners.filter(l => l.type === type)];\n\n for (const l of listeners) {\n try {\n l.listener.call(this, event);\n if (l.options?.once) {\n this.removeEventListener(type, l.listener);\n }\n } catch (e) {\n console.error(`Error in Window event listener for ${type}:`, e);\n }\n }\n return true;\n }\n\n private dispatchPopStateEvent(state: any, url?: string): void {\n this.dispatchEvent({ type: 'popstate', state, url });\n }\n}\n", "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,MAQa,cACA,gBACA,WACA,oBACA,uBACA,aACA,6BACA,cACA,eACA,oBACA,wBACA,eACA,gCACA,6BACA,6BACA,4BACA,gCACA;AAzBb;AAAA;AAQO,MAAM,eAAe;AACrB,MAAM,iBAAiB;AACvB,MAAM,YAAY;AAClB,MAAM,qBAAqB;AAC3B,MAAM,wBAAwB;AAC9B,MAAM,cAAc;AACpB,MAAM,8BAA8B;AACpC,MAAM,eAAe;AACrB,MAAM,gBAAgB;AACtB,MAAM,qBAAqB;AAC3B,MAAM,yBAAyB;AAC/B,MAAM,gBAAgB;AACtB,MAAM,iCAAiC;AACvC,MAAM,8BAA8B;AACpC,MAAM,8BAA8B;AACpC,MAAM,6BAA6B;AACnC,MAAM,iCAAiC;AACvC,MAAM,4CAA4C;AAAA;AAAA;;;ACzBzD,MAOa;AAPb;AAAA;AAOO,MAAM,WAAN,MAAsC;AAAA,QAMzC,YAAY,QAAa,CAAC,GAAG;AAF7B,eAAQ,SAAc,CAAC;AAGnB,eAAK,SAAS,CAAC,GAAG,KAAK;AAGvB,iBAAO,IAAI,MAAM,MAAM;AAAA,YACnB,IAAI,QAAQ,MAAM;AAEd,kBAAI,OAAO,SAAS,YAAY,QAAQ,KAAK,IAAI,GAAG;AAChD,sBAAM,QAAQ,SAAS,MAAM,EAAE;AAC/B,uBAAO,OAAO,OAAO,KAAK,KAAK;AAAA,cACnC;AAEA,qBAAQ,OAAe,IAAI;AAAA,YAC/B;AAAA,YAEA,IAAI,QAAQ,MAAM,OAAO;AAErB,kBAAI,OAAO,SAAS,YAAY,QAAQ,KAAK,IAAI,GAAG;AAChD,uBAAO;AAAA,cACX;AACA,cAAC,OAAe,IAAI,IAAI;AACxB,qBAAO;AAAA,YACX;AAAA,YAEA,IAAI,QAAQ,MAAM;AACd,kBAAI,OAAO,SAAS,YAAY,QAAQ,KAAK,IAAI,GAAG;AAChD,sBAAM,QAAQ,SAAS,MAAM,EAAE;AAC/B,uBAAO,SAAS,KAAK,QAAQ,OAAO,OAAO;AAAA,cAC/C;AACA,qBAAO,QAAQ;AAAA,YACnB;AAAA,UACJ,CAAC;AAAA,QACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,IAAI,SAAiB;AACjB,iBAAO,KAAK,OAAO;AAAA,QACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,KAAK,OAAyB;AAC1B,cAAI,QAAQ,KAAK,SAAS,KAAK,OAAO,QAAQ;AAC1C,mBAAO;AAAA,UACX;AACA,iBAAO,KAAK,OAAO,KAAK;AAAA,QAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,QAAQ,YAA+D,SAAqB;AACxF,eAAK,OAAO,QAAQ,CAAC,MAAM,UAAU;AACjC,uBAAW,KAAK,SAAS,MAAM,OAAO,IAAI;AAAA,UAC9C,CAAC;AAAA,QACL;AAAA;AAAA,QAGA,SAAS,MAAe;AACpB,eAAK,OAAO,KAAK,IAAI;AAAA,QACzB;AAAA,QAEA,YAAY,MAAkB;AAC1B,gBAAM,QAAQ,KAAK,OAAO,QAAQ,IAAI;AACtC,cAAI,UAAU,IAAI;AACd,iBAAK,OAAO,OAAO,OAAO,CAAC;AAC3B,mBAAO;AAAA,UACX;AACA,iBAAO;AAAA,QACX;AAAA,QAEA,YAAY,OAAe,MAAe;AACtC,eAAK,OAAO,OAAO,OAAO,GAAG,IAAI;AAAA,QACrC;AAAA;AAAA,QAGA,EAAE,OAAO,QAAQ,IAAiB;AAC9B,qBAAW,QAAQ,KAAK,QAAQ;AAC5B,kBAAM;AAAA,UACV;AAAA,QACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQA,CAAC,OAAiC;AAC9B,mBAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AACzC,kBAAM;AAAA,UACV;AAAA,QACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQA,CAAC,SAA8B;AAC3B,qBAAW,QAAQ,KAAK,QAAQ;AAC5B,kBAAM;AAAA,UACV;AAAA,QACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQA,CAAC,UAAyC;AACtC,mBAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AACzC,kBAAM,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC;AAAA,UAC5B;AAAA,QACJ;AAAA,MACJ;AAAA;AAAA;;;AC3IA,MAQa;AARb;AAAA;AACA;AAOO,MAAM,gBAAN,cAAgD,SAAgB;AAAA,QAInE,YAAY,QAAiB,CAAC,GAAG;AAE7B,gBAAM,KAAgB;AAAA,QAC1B;AAAA;AAAA,QAGA,KAAK,OAA6B;AAC9B,iBAAO,MAAM,KAAK,KAAK;AAAA,QAC3B;AAAA,QAEA,QAAQ,YAA+E,SAAqB;AACxG,gBAAM,QAAQ,CAAC,MAAM,UAAU;AAC3B,uBAAW,KAAK,SAAS,MAAe,OAAO,IAAI;AAAA,UACvD,GAAG,OAAO;AAAA,QACd;AAAA,MACJ;AAAA;AAAA;;;AC3BA,MAOsB;AAPtB;AAAA;AAAA;AACA;AAMO,MAAe,WAAf,MAAwC;AAAA,QA+C7C,YACS,UACA,UACP,eACA;AAHO;AACA;AATT;AAAA,eAAU,sBAAkC,CAAC;AAC7C,eAAO,sBAAuC;AAC9C;AAAA,eAAO,iBAAkC;AACzC;AAAA,eAAU,aAA4B;AACtC,eAAU,eAA8B;AACxC,eAAU,kBAAyE,CAAC;AAOlF,eAAK,iBAAiB,iBAAiB;AAAA,QACzC;AAAA,QAEA,iBAAiB,MAAc,UAAe,SAAqB;AACjE,eAAK,gBAAgB,KAAK;AAAA,YACxB;AAAA,YACA,UAAU,OAAO,aAAa,aAAa,WAAW,UAAU;AAAA,YAChE;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QAEA,oBAAoB,MAAc,UAAe,UAAsB;AACrE,gBAAM,iBAAiB,OAAO,aAAa,aAAa,WAAW,UAAU;AAC7E,eAAK,kBAAkB,KAAK,gBAAgB,OAAO,OAAK,EAAE,EAAE,SAAS,QAAQ,EAAE,aAAa,eAAe;AAAA,QAC7G;AAAA,QAEA,cAAc,OAAqB;AAEjC,gBAAM,OAAO,OAAO,UAAU,WAAW,QAAQ,MAAM;AACvD,gBAAM,YAAY,KAAK,gBAAgB,OAAO,OAAK,EAAE,SAAS,IAAI;AAClE,qBAAW,KAAK,WAAW;AACzB,gBAAI;AACF,kBAAI,OAAO,EAAE,aAAa,YAAY;AACpC,kBAAE,SAAS,KAAK,MAAM,KAAK;AAAA,cAC7B,WAAW,EAAE,YAAY,OAAO,EAAE,SAAS,gBAAgB,YAAY;AACrE,kBAAE,SAAS,YAAY,KAAK;AAAA,cAC9B;AAEA,kBAAI,EAAE,SAAS,MAAM;AACnB,qBAAK,oBAAoB,MAAM,EAAE,UAAU,EAAE,OAAO;AAAA,cACtD;AAAA,YACF,SAAS,GAAG;AACV,sBAAQ,MAAM,+BAA+B,IAAI,KAAK,CAAC;AAAA,YACzD;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA;AAAA,QAGA,IAAI,UAAkB;AACpB,iBAAO,KAAK,gBAAgB,OAAO;AAAA,QACrC;AAAA;AAAA,QAGA,IAAI,aAAoC;AACtC,iBAAO,IAAI,cAAyB,KAAK,mBAA6C;AAAA,QACxF;AAAA,QAEA,IAAI,aAA+B;AACjC,iBAAO,KAAK,oBAAoB,SAAS,IAAK,KAAK,oBAAoB,CAAC,IAA6B;AAAA,QACvG;AAAA,QAEA,IAAI,YAA8B;AAChC,gBAAM,SAAS,KAAK,oBAAoB;AACxC,iBAAO,SAAS,IAAK,KAAK,oBAAoB,SAAS,CAAC,IAA6B;AAAA,QACvF;AAAA,QAEA,IAAI,cAAgC;AAClC,cAAI,CAAC,KAAK,oBAAqB,QAAO;AACtC,gBAAM,WAAW,KAAK,oBAAoB;AAC1C,gBAAM,QAAQ,KAAK,mBAAmB;AACtC,iBAAO,UAAU,MAAM,QAAQ,SAAS,SAAS,IAAK,SAAS,QAAQ,CAAC,IAA6B;AAAA,QACvG;AAAA,QAEA,IAAI,kBAAoC;AACtC,cAAI,CAAC,KAAK,oBAAqB,QAAO;AACtC,gBAAM,WAAW,KAAK,oBAAoB;AAC1C,gBAAM,QAAQ,KAAK,mBAAmB;AACtC,iBAAO,QAAQ,IAAK,SAAS,QAAQ,CAAC,IAA6B;AAAA,QACrE;AAAA,QAEA,IAAI,aAAgC;AAClC,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,gBAAoC;AACtC,iBAAO,KAAK,uBAAuB,KAAK,oBAAoB,aAAa,eAAgB,KAAK,sBAAiD;AAAA,QACjJ;AAAA,QAEA,IAAI,gBAAiC;AACnC,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,cAAuB;AACzB,cAAI,OAAoB;AACxB,iBAAO,MAAM;AACX,gBAAI,KAAK,aAAa,cAAe,QAAO;AAC5C,mBAAO,KAAK;AAAA,UACd;AACA,iBAAO;AAAA,QACT;AAAA,QAEA,IAAI,YAA2B;AAC7B,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,UAAU,OAAsB;AAClC,eAAK,aAAa;AAAA,QACpB;AAAA,QAEA,IAAI,cAA6B;AAC/B,cAAI,KAAK,aAAa,aAAa,KAAK,aAAa,cAAc;AAEjE,mBAAO,KAAK,aAAa,KAAK,mBAAmB,KAAK,UAAU,IAAI,KAAK;AAAA,UAC3E;AAGA,cAAI,KAAK,iBAAiB,UAAa,KAAK,iBAAiB,MAAM;AACjE,mBAAO,KAAK;AAAA,UACd;AAGA,cAAI,OAAO;AACX,qBAAW,SAAS,KAAK,qBAAqB;AAC5C,kBAAM,YAAY,MAAM;AACxB,gBAAI,cAAc,QAAQ,cAAc,QAAW;AACjD,sBAAQ;AAAA,YACV;AAAA,UACF;AACA,iBAAO,KAAK,SAAS,IAAI,OAAO;AAAA,QAClC;AAAA,QAEA,IAAI,YAAY,OAAsB;AAEpC,gBAAM,cAAc,OAAO,KAAK;AAEhC,eAAK,eAAe;AAEpB,eAAK,sBAAsB,CAAC;AAC5B,cAAI,aAAa;AAEf,kBAAM,eAAe,KAAK,mBAAmB,WAAW;AACxD,kBAAM,EAAE,UAAAA,UAAS,IAAI;AACrB,kBAAM,WAAW,IAAIA,UAAS,cAAc,KAAK,cAAc;AAC/D,iBAAK,oBAAoB,KAAK,QAAQ;AACtC,qBAAS,sBAAsB;AAAA,UACjC;AAAA,QACF;AAAA;AAAA;AAAA;AAAA,QAKU,mBAAmB,KAAqB;AAChD,gBAAM,YAAuC;AAAA,YAC3C,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAEA,iBAAO,IAAI,QAAQ,YAAY,UAAQ;AACrC,mBAAO,UAAU,IAAI,KAAK;AAAA,UAC5B,CAAC;AAAA,QACH;AAAA;AAAA;AAAA;AAAA,QAKU,mBAAmB,KAAqB;AAChD,gBAAM,YAAuC;AAAA,YAC3C,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,UAAU;AAAA,YACV,SAAS;AAAA,YACT,SAAS;AAAA,YACT,UAAU;AAAA,YACV,UAAU;AAAA,YACV,SAAS;AAAA,YACT,WAAW;AAAA,YACX,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,UACb;AAEA,iBAAO,IAAI,QAAQ,oBAAoB,YAAU;AAE/C,gBAAI,UAAU,MAAM,GAAG;AACrB,qBAAO,UAAU,MAAM;AAAA,YACzB;AAGA,gBAAI,OAAO,WAAW,IAAI,KAAK,OAAO,SAAS,GAAG,GAAG;AACnD,oBAAM,SAAS,OAAO,MAAM,GAAG,EAAE;AACjC,oBAAM,MAAM,SAAS,QAAQ,EAAE;AAC/B,kBAAI,CAAC,MAAM,GAAG,GAAG;AACf,uBAAO,OAAO,aAAa,GAAG;AAAA,cAChC;AAAA,YACF;AAGA,gBAAI,OAAO,WAAW,KAAK,KAAK,OAAO,SAAS,GAAG,GAAG;AACpD,oBAAM,SAAS,OAAO,MAAM,GAAG,EAAE;AACjC,oBAAM,MAAM,SAAS,QAAQ,EAAE;AAC/B,kBAAI,CAAC,MAAM,GAAG,GAAG;AACf,uBAAO,OAAO,aAAa,GAAG;AAAA,cAChC;AAAA,YACF;AAGA,mBAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA;AAAA,QAGA,YAA4B,MAAY;AACtC,gBAAM,WAAW;AAGjB,cAAI,SAAS,aAAa,wBAAwB;AAEhD,kBAAM,WAAW;AAGjB,mBAAO,SAAS,oBAAoB,SAAS,GAAG;AAC9C,oBAAM,QAAQ,SAAS,oBAAoB,CAAC;AAC5C,kBAAI,OAAO;AACT,yBAAS,YAAY,KAAK;AAC1B,qBAAK,YAAY,KAAK;AAAA,cACxB;AAAA,YACF;AAEA,mBAAO;AAAA,UACT;AAEA,cAAI,SAAS,qBAAqB;AAChC,qBAAS,oBAAoB,YAAY,QAAQ;AAAA,UACnD;AAEA,eAAK,oBAAoB,KAAK,QAAQ;AACtC,mBAAS,sBAAsB;AAC/B,mBAAS,iBAAiB,KAAK;AAG/B,cAAI,KAAK,eAAgB,SAAiB,mBAAmB;AAC3D,oBAAQ,IAAI,6CAA6C,SAAS,QAAQ,GAAG;AAC7E,YAAC,SAAiB,kBAAkB;AAAA,UACtC;AAEA,iBAAO;AAAA,QACT;AAAA,QAEA,YAA4B,OAAa;AACvC,gBAAM,YAAY;AAClB,gBAAM,QAAQ,KAAK,gBAAgB,SAAS;AAC5C,cAAI,UAAU,IAAI;AAChB,kBAAM,IAAI,MAAM,gBAAgB;AAAA,UAClC;AAEA,gBAAM,eAAe,UAAU;AAE/B,eAAK,oBAAoB,OAAO,OAAO,CAAC;AACxC,oBAAU,sBAAsB;AAGhC,cAAI,gBAAiB,UAAkB,sBAAsB;AAC3D,YAAC,UAAkB,qBAAqB;AAAA,UAC1C;AAEA,iBAAO;AAAA,QACT;AAAA,QAEA,aAA6B,MAAS,OAAuB;AAC3D,cAAI,UAAU,MAAM;AAClB,mBAAO,KAAK,YAAY,IAAI;AAAA,UAC9B;AAEA,gBAAM,WAAW;AACjB,gBAAM,YAAY;AAClB,gBAAM,QAAQ,KAAK,gBAAgB,SAAS;AAC5C,cAAI,UAAU,IAAI;AAChB,kBAAM,IAAI,MAAM,0BAA0B;AAAA,UAC5C;AAGA,cAAI,SAAS,aAAa,wBAAwB;AAChD,kBAAM,WAAW;AACjB,kBAAM,WAAW,CAAC,GAAG,SAAS,mBAAmB;AAEjD,gBAAI,cAAc;AAClB,uBAAW,iBAAiB,UAAU;AAEpC,uBAAS,YAAY,aAAa;AAElC,mBAAK,oBAAoB,OAAO,aAAa,GAAG,aAAa;AAC7D,4BAAc,sBAAsB;AACpC,4BAAc,iBAAiB,KAAK;AAEpC;AAAA,YACF;AAEA,mBAAO;AAAA,UACT;AAEA,cAAI,SAAS,qBAAqB;AAChC,qBAAS,oBAAoB,YAAY,QAAQ;AAAA,UACnD;AAEA,eAAK,oBAAoB,OAAO,OAAO,GAAG,QAAQ;AAClD,mBAAS,sBAAsB;AAC/B,mBAAS,iBAAiB,KAAK;AAG/B,cAAI,KAAK,eAAgB,SAAiB,mBAAmB;AAC3D,YAAC,SAAiB,kBAAkB;AAAA,UACtC;AAEA,iBAAO;AAAA,QACT;AAAA,QAEA,aAA6B,MAAY,OAAa;AACpD,eAAK,aAAa,MAAM,KAAK;AAC7B,eAAK,YAAY,KAAK;AACtB,iBAAO;AAAA,QACT;AAAA,QAEA,UAAU,MAAsB;AAE9B,gBAAM,IAAI,MAAM,6CAA6C;AAAA,QAC/D;AAAA,QAEA,gBAAyB;AACvB,iBAAO,KAAK,oBAAoB,SAAS;AAAA,QAC3C;AAAA,QAEA,SAAS,OAA6B;AACpC,cAAI,CAAC,SAAS,UAAU,KAAM,QAAO,UAAU;AAE/C,cAAI,OAAoB;AACxB,iBAAO,MAAM;AACX,gBAAI,KAAK,eAAgB,KAAgC,QAAO;AAChE,mBAAO,KAAK;AAAA,UACd;AACA,iBAAO;AAAA,QACT;AAAA,QAEA,wBAAwB,OAAqB;AAC3C,cAAI,SAAS,MAAO,QAAO;AAE3B,gBAAM,YAAY;AAGlB,gBAAM,WAAW,KAAK,YAAY;AAClC,gBAAM,YAAY,UAAU,YAAY;AACxC,cAAI,aAAa,WAAW;AAC1B,mBAAO;AAAA,UACT;AAGA,cAAI,KAAK,SAAS,KAAK,EAAG,QAAO;AACjC,cAAI,MAAM,SAAS,IAAI,EAAG,QAAO;AAGjC,gBAAM,gBAAgB,KAAK,cAAc;AACzC,gBAAM,iBAAiB,UAAU,cAAc;AAG/C,cAAI,iBAAkC;AACtC,mBAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,gBAAI,eAAe,SAAS,cAAc,CAAC,CAAC,GAAG;AAC7C,+BAAiB,cAAc,CAAC;AAChC;AAAA,YACF;AAAA,UACF;AAEA,cAAI,CAAC,gBAAgB;AACnB,mBAAO;AAAA,UACT;AAGA,gBAAM,YAAY,KAAK,oBAAoB,cAAc;AACzD,gBAAM,aAAa,UAAU,oBAAoB,cAAc;AAE/D,cAAI,aAAa,cAAc,eAAe,qBAAqB;AACjE,kBAAM,YAAY,eAAe,oBAAoB,QAAQ,SAAS;AACtE,kBAAM,aAAa,eAAe,oBAAoB,QAAQ,UAAU;AAExE,gBAAI,YAAY,YAAY;AAC1B,qBAAO;AAAA,YACT,WAAW,YAAY,YAAY;AACjC,qBAAO;AAAA,YACT;AAAA,UACF;AAEA,iBAAO;AAAA,QACT;AAAA,QAEA,YAAY,SAAoC;AAC9C,cAAI,OAAa;AACjB,iBAAO,KAAK,YAAY;AACtB,mBAAO,KAAK;AAAA,UACd;AACA,iBAAO;AAAA,QACT;AAAA,QAEA,YAAY,WAAiC;AAC3C,cAAI,CAAC,UAAW,QAAO;AACvB,cAAI,SAAS,UAAW,QAAO;AAC/B,cAAI,KAAK,aAAa,UAAU,SAAU,QAAO;AACjD,cAAI,KAAK,aAAa,UAAU,SAAU,QAAO;AACjD,iBAAO;AAAA,QACT;AAAA,QAEA,WAAW,WAAiC;AAC1C,iBAAO,SAAS;AAAA,QAClB;AAAA,QAEA,mBAAmB,WAAmC;AAEpD,iBAAO,cAAc,QAAQ,cAAc;AAAA,QAC7C;AAAA,QAEA,mBAAmB,QAAsC;AAEvD,cAAI,WAAW,QAAQ,WAAW,IAAI;AACpC,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT;AAAA,QAEA,aAAa,WAAyC;AAEpD,iBAAO;AAAA,QACT;AAAA,QAEA,YAAkB;AAEhB,mBAAS,IAAI,KAAK,oBAAoB,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7D,kBAAM,QAAQ,KAAK,oBAAoB,CAAC;AACxC,gBAAI,SAAS,MAAM,aAAa,WAAW;AACzC,oBAAM,cAAc,MAAM;AAC1B,kBAAI,eAAe,YAAY,aAAa,WAAW;AACrD,sBAAM,aAAa,MAAM,aAAa,OAAO,YAAY,aAAa;AACtE,qBAAK,YAAY,WAAW;AAAA,cAC9B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA;AAAA,QAGQ,qBAA6B;AACnC,cAAI,CAAC,KAAK,oBAAqB,QAAO;AACtC,iBAAO,KAAK,oBAAoB,oBAAoB,QAAQ,IAAI;AAAA,QAClE;AAAA,QAEQ,gBAAgB,OAAyB;AAC/C,iBAAO,KAAK,oBAAoB,QAAQ,KAAK;AAAA,QAC/C;AAAA,QAEQ,gBAA4B;AAClC,gBAAM,YAAwB,CAAC;AAC/B,cAAI,UAA2B,KAAK;AACpC,iBAAO,SAAS;AACd,sBAAU,KAAK,OAAO;AACtB,sBAAU,QAAQ;AAAA,UACpB;AACA,iBAAO;AAAA,QACT;AAAA,QAEQ,oBAAoB,UAAqC;AAC/D,cAAI,UAAoB;AACxB,iBAAO,QAAQ,uBAAuB,QAAQ,wBAAwB,UAAU;AAC9E,sBAAU,QAAQ;AAAA,UACpB;AACA,iBAAO,QAAQ,wBAAwB,WAAW,UAAU;AAAA,QAC9D;AAAA,MACF;AA1gBE;AAAA,MAFoB,SAEJ,eAAe;AAC/B,MAHoB,SAGJ,iBAAiB;AACjC,MAJoB,SAIJ,YAAY;AAC5B,MALoB,SAKJ,qBAAqB;AACrC,MANoB,SAMJ,wBAAwB;AACxC,MAPoB,SAOJ,cAAc;AAC9B,MARoB,SAQJ,8BAA8B;AAC9C,MAToB,SASJ,eAAe;AAC/B,MAVoB,SAUJ,gBAAgB;AAChC,MAXoB,SAWJ,qBAAqB;AACrC,MAZoB,SAYJ,yBAAyB;AACzC,MAboB,SAaJ,gBAAgB;AAChC,MAdoB,SAcJ,iCAAiC;AACjD,MAfoB,SAeJ,8BAA8B;AAC9C,MAhBoB,SAgBJ,8BAA8B;AAC9C,MAjBoB,SAiBJ,6BAA6B;AAC7C,MAlBoB,SAkBJ,iCAAiC;AACjD,MAnBoB,SAmBJ,4CAA4C;AAAA;AAAA;;;AC1B9D,MAOsB;AAPtB;AAAA;AAAA;AACA;AAMO,MAAe,gBAAf,cAAqC,SAA8B;AAAA,QACxE,IAAI,qBAAqC;AACvC,cAAI,OAAO,KAAK;AAChB,iBAAO,MAAM;AACX,gBAAI,KAAK,aAAa,aAAc,QAAO;AAC3C,mBAAO,KAAK;AAAA,UACd;AACA,iBAAO;AAAA,QACT;AAAA,QAEA,IAAI,yBAAyC;AAC3C,cAAI,OAAO,KAAK;AAChB,iBAAO,MAAM;AACX,gBAAI,KAAK,aAAa,aAAc,QAAO;AAC3C,mBAAO,KAAK;AAAA,UACd;AACA,iBAAO;AAAA,QACT;AAAA,QAEA,IAAI,eAA2B;AAC7B,iBAAO;AAAA,QACT;AAAA;AAAA,QAGA,SAAS,OAAgC;AACvC,cAAI,CAAC,KAAK,WAAY;AAEtB,gBAAM,cAAc,KAAK;AACzB,qBAAW,QAAQ,OAAO;AACxB,gBAAI,OAAO,SAAS,UAAU;AAC5B,oBAAM,EAAE,UAAAC,UAAS,IAAI;AACrB,oBAAM,WAAW,IAAIA,UAAS,MAAM,KAAK,cAAc;AACvD,mBAAK,WAAW,aAAa,UAAU,WAAW;AAAA,YACpD,OAAO;AACL,mBAAK,WAAW,aAAa,MAAM,WAAW;AAAA,YAChD;AAAA,UACF;AAAA,QACF;AAAA,QAEA,UAAU,OAAgC;AACxC,cAAI,CAAC,KAAK,WAAY;AAEtB,qBAAW,QAAQ,OAAO;AACxB,gBAAI,OAAO,SAAS,UAAU;AAC5B,oBAAM,EAAE,UAAAA,UAAS,IAAI;AACrB,oBAAM,WAAW,IAAIA,UAAS,MAAM,KAAK,cAAc;AACvD,mBAAK,WAAW,aAAa,UAAU,IAAuB;AAAA,YAChE,OAAO;AACL,mBAAK,WAAW,aAAa,MAAM,IAAuB;AAAA,YAC5D;AAAA,UACF;AAAA,QACF;AAAA,QAEA,SAAe;AACb,cAAI,KAAK,YAAY;AACnB,iBAAK,WAAW,YAAY,IAAuB;AAAA,UACrD;AAAA,QACF;AAAA,QAEA,eAAe,OAAgC;AAC7C,cAAI,CAAC,KAAK,WAAY;AAEtB,eAAK,OAAO,GAAG,KAAK;AACpB,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA;AAAA;;;ACxEA;AAAA;AAAA;AAAA;AAAA,MAMa;AANb;AAAA;AAAA;AACA;AAKO,MAAM,WAAN,MAAM,kBAAiB,cAA8B;AAAA,QAM1D,YAAY,MAAc,eAAqB;AAC7C,gBAAM,WAAW,SAAS,aAAa;AACvC,eAAK,QAAQ;AACb,eAAK,aAAa;AAAA,QACpB;AAAA,QAEA,IAAI,OAAe;AACjB,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,KAAK,OAAe;AACtB,eAAK,QAAQ;AACb,eAAK,aAAa;AAAA,QACpB;AAAA,QAEA,IAAI,SAAiB;AACnB,iBAAO,KAAK,MAAM;AAAA,QACpB;AAAA,QAEA,IAAI,cAA6B;AAE/B,iBAAO,KAAK,QAAQ,KAAK,mBAAmB,KAAK,KAAK,IAAI,KAAK;AAAA,QACjE;AAAA,QAEA,IAAI,YAAY,OAAsB;AACpC,eAAK,QAAQ,SAAS;AACtB,eAAK,aAAa,KAAK;AAAA,QACzB;AAAA,QAEA,IAAI,YAAoB;AAGtB,iBAAO,KAAK;AAAA,QACd;AAAA;AAAA,QAGA,WAAW,MAAoB;AAC7B,eAAK,SAAS;AACd,eAAK,aAAa,KAAK;AAAA,QACzB;AAAA,QAEA,WAAW,QAAgB,OAAqB;AAC9C,cAAI,SAAS,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC5C,kBAAM,IAAI,MAAM,qBAAqB;AAAA,UACvC;AACA,gBAAM,YAAY,KAAK,IAAI,SAAS,OAAO,KAAK,MAAM,MAAM;AAC5D,eAAK,QAAQ,KAAK,MAAM,MAAM,GAAG,MAAM,IAAI,KAAK,MAAM,MAAM,SAAS;AACrE,eAAK,aAAa,KAAK;AAAA,QACzB;AAAA,QAEA,WAAW,QAAgB,MAAoB;AAC7C,cAAI,SAAS,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC5C,kBAAM,IAAI,MAAM,qBAAqB;AAAA,UACvC;AACA,eAAK,QAAQ,KAAK,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,KAAK,MAAM,MAAM,MAAM;AACzE,eAAK,aAAa,KAAK;AAAA,QACzB;AAAA,QAEA,YAAY,QAAgB,OAAe,MAAoB;AAC7D,eAAK,WAAW,QAAQ,KAAK;AAC7B,eAAK,WAAW,QAAQ,IAAI;AAAA,QAC9B;AAAA,QAEA,cAAc,QAAgB,OAAuB;AACnD,cAAI,SAAS,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC5C,kBAAM,IAAI,MAAM,qBAAqB;AAAA,UACvC;AACA,gBAAM,YAAY,KAAK,IAAI,SAAS,OAAO,KAAK,MAAM,MAAM;AAC5D,iBAAO,KAAK,MAAM,MAAM,QAAQ,SAAS;AAAA,QAC3C;AAAA,QAEA,UAAU,QAAsB;AAC9B,cAAI,SAAS,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC5C,kBAAM,IAAI,MAAM,qBAAqB;AAAA,UACvC;AAEA,gBAAM,UAAU,KAAK,MAAM,MAAM,MAAM;AACvC,eAAK,QAAQ,KAAK,MAAM,MAAM,GAAG,MAAM;AACvC,eAAK,aAAa,KAAK;AAEvB,gBAAM,cAAc,IAAI,UAAS,SAAS,KAAK,cAAc;AAG7D,cAAI,KAAK,qBAAqB;AAC5B,kBAAM,cAAc,KAAK;AACzB,iBAAK,oBAAoB,aAAa,aAAa,WAAW;AAAA,UAChE;AAEA,iBAAO;AAAA,QACT;AAAA,QAEA,UAAU,MAAsB;AAC9B,iBAAO,IAAI,UAAS,KAAK,OAAO,KAAK,cAAc;AAAA,QACrD;AAAA,QAEA,WAAmB;AACjB,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAAA;AAAA;;;AC9GA;AAAA;AAAA;AAAA;AAAA,MAuBa;AAvBb;AAAA;AAAA;AACA;AAsBO,MAAM,UAAN,MAAM,iBAAgB,cAAc;AAAA,QAGzC,YAAY,MAAc,eAAqB;AAC7C,gBAAM,cAAc,YAAY,aAAa;AAC7C,eAAK,QAAQ;AACb,eAAK,aAAa;AAAA,QACpB;AAAA,QAEA,IAAI,OAAe;AACjB,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,KAAK,OAAe;AACtB,eAAK,QAAQ;AACb,eAAK,aAAa;AAAA,QACpB;AAAA,QAEA,IAAI,SAAiB;AACnB,iBAAO,KAAK,MAAM;AAAA,QACpB;AAAA,QAEA,IAAI,cAA6B;AAC/B,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,YAAY,OAAsB;AACpC,eAAK,QAAQ,SAAS;AACtB,eAAK,aAAa,KAAK;AAAA,QACzB;AAAA;AAAA,QAGA,WAAW,MAAoB;AAC7B,eAAK,SAAS;AACd,eAAK,aAAa,KAAK;AAAA,QACzB;AAAA,QAEA,WAAW,QAAgB,OAAqB;AAC9C,cAAI,SAAS,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC5C,kBAAM,IAAI,MAAM,qBAAqB;AAAA,UACvC;AACA,gBAAM,YAAY,KAAK,IAAI,SAAS,OAAO,KAAK,MAAM,MAAM;AAC5D,eAAK,QAAQ,KAAK,MAAM,MAAM,GAAG,MAAM,IAAI,KAAK,MAAM,MAAM,SAAS;AACrE,eAAK,aAAa,KAAK;AAAA,QACzB;AAAA,QAEA,WAAW,QAAgB,MAAoB;AAC7C,cAAI,SAAS,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC5C,kBAAM,IAAI,MAAM,qBAAqB;AAAA,UACvC;AACA,eAAK,QAAQ,KAAK,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,KAAK,MAAM,MAAM,MAAM;AACzE,eAAK,aAAa,KAAK;AAAA,QACzB;AAAA,QAEA,YAAY,QAAgB,OAAe,MAAoB;AAC7D,eAAK,WAAW,QAAQ,KAAK;AAC7B,eAAK,WAAW,QAAQ,IAAI;AAAA,QAC9B;AAAA,QAEA,cAAc,QAAgB,OAAuB;AACnD,cAAI,SAAS,KAAK,SAAS,KAAK,MAAM,QAAQ;AAC5C,kBAAM,IAAI,MAAM,qBAAqB;AAAA,UACvC;AACA,gBAAM,YAAY,KAAK,IAAI,SAAS,OAAO,KAAK,MAAM,MAAM;AAC5D,iBAAO,KAAK,MAAM,MAAM,QAAQ,SAAS;AAAA,QAC3C;AAAA,QAEA,UAAU,MAAsB;AAC9B,iBAAO,IAAI,SAAQ,KAAK,OAAO,KAAK,cAAc;AAAA,QACpD;AAAA,QAEA,WAAmB;AACjB,iBAAO,OAAO,KAAK,KAAK;AAAA,QAC1B;AAAA,MACF;AAAA;AAAA;;;ACjGA,MAOa;AAPb;AAAA;AAOO,MAAM,oBAAN,MAAkD;AAAA,QAMrD,YAAY,WAAsB,CAAC,GAAG;AAFtC,eAAQ,YAAuB,CAAC;AAG5B,eAAK,YAAY,CAAC,GAAG,QAAQ;AAG7B,iBAAO,IAAI,MAAM,MAAM;AAAA,YACnB,IAAI,QAAQ,MAAM;AAEd,kBAAI,OAAO,SAAS,YAAY,QAAQ,KAAK,IAAI,GAAG;AAChD,sBAAM,QAAQ,SAAS,MAAM,EAAE;AAC/B,uBAAO,OAAO,UAAU,KAAK,KAAK;AAAA,cACtC;AAEA,qBAAQ,OAAe,IAAI;AAAA,YAC/B;AAAA,YAEA,IAAI,QAAQ,MAAM,OAAO;AAErB,kBAAI,OAAO,SAAS,YAAY,QAAQ,KAAK,IAAI,GAAG;AAChD,uBAAO;AAAA,cACX;AACA,cAAC,OAAe,IAAI,IAAI;AACxB,qBAAO;AAAA,YACX;AAAA,YAEA,IAAI,QAAQ,MAAM;AACd,kBAAI,OAAO,SAAS,YAAY,QAAQ,KAAK,IAAI,GAAG;AAChD,sBAAM,QAAQ,SAAS,MAAM,EAAE;AAC/B,uBAAO,SAAS,KAAK,QAAQ,OAAO,UAAU;AAAA,cAClD;AACA,qBAAO,QAAQ;AAAA,YACnB;AAAA,UACJ,CAAC;AAAA,QACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,IAAI,SAAiB;AACjB,iBAAO,KAAK,UAAU;AAAA,QAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,KAAK,OAA+B;AAChC,cAAI,QAAQ,KAAK,SAAS,KAAK,UAAU,QAAQ;AAC7C,mBAAO;AAAA,UACX;AACA,iBAAO,KAAK,UAAU,KAAK;AAAA,QAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,UAAU,MAA8B;AACpC,qBAAW,WAAW,KAAK,WAAW;AAClC,gBAAI,QAAQ,OAAO,QAAQ,QAAQ,aAAa,MAAM,MAAM,MAAM;AAC9D,qBAAO;AAAA,YACX;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,CAAC,OAAO,QAAQ,IAA+B;AAC3C,iBAAO,KAAK,UAAU,OAAO,QAAQ,EAAE;AAAA,QAC3C;AAAA;AAAA,QAGA,YAAY,SAAwB;AAChC,eAAK,UAAU,KAAK,OAAO;AAAA,QAC/B;AAAA,QAEA,eAAe,SAA2B;AACtC,gBAAM,QAAQ,KAAK,UAAU,QAAQ,OAAO;AAC5C,cAAI,UAAU,IAAI;AACd,iBAAK,UAAU,OAAO,OAAO,CAAC;AAC9B,mBAAO;AAAA,UACX;AACA,iBAAO;AAAA,QACX;AAAA,QAEA,eAAe,OAAe,SAAwB;AAClD,eAAK,UAAU,OAAO,OAAO,GAAG,OAAO;AAAA,QAC3C;AAAA,MACJ;AAAA;AAAA;;;AC3GA,MAKa;AALb;AAAA;AAKO,MAAM,cAAN,MAAM,aAAY;AAAA;AAAA;AAAA;AAAA,QAIrB,OAAO,QAAQ,SAAkB,UAA2B;AACxD,qBAAW,SAAS,KAAK;AAGzB,gBAAM,aAAa,KAAK,cAAc,QAAQ;AAG9C,qBAAW,aAAa,YAAY;AAChC,gBAAI,CAAC,KAAK,sBAAsB,SAAS,SAAS,GAAG;AACjD,qBAAO;AAAA,YACX;AAAA,UACJ;AAEA,iBAAO;AAAA,QACX;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,OAAe,cAAc,UAA4B;AACrD,gBAAM,aAAuB,CAAC;AAC9B,cAAI,UAAU;AACd,cAAI,aAAa;AACjB,cAAI,WAAW;AACf,cAAI,YAAY;AAEhB,mBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACtC,kBAAM,OAAO,SAAS,CAAC;AACvB,kBAAM,WAAW,IAAI,IAAI,SAAS,IAAI,CAAC,IAAI;AAE3C,gBAAI,UAAU;AACV,yBAAW;AACX,kBAAI,SAAS,aAAa,aAAa,MAAM;AACzC,2BAAW;AACX,4BAAY;AAAA,cAChB;AACA;AAAA,YACJ;AAEA,gBAAI,SAAS,OAAO,SAAS,KAAK;AAC9B,yBAAW;AACX,0BAAY;AACZ,yBAAW;AACX;AAAA,YACJ;AAEA,gBAAI,SAAS,KAAK;AACd,2BAAa;AACb,kBAAI,SAAS;AACT,2BAAW,KAAK,OAAO;AACvB,0BAAU;AAAA,cACd;AACA,yBAAW;AAAA,YACf,WAAW,SAAS,KAAK;AACrB,2BAAa;AACb,yBAAW;AACX,yBAAW,KAAK,OAAO;AACvB,wBAAU;AAAA,YACd,WAAW,CAAC,eAAe,SAAS,OAAO,SAAS,MAAM;AACtD,kBAAI,SAAS;AACT,2BAAW,KAAK,OAAO;AACvB,0BAAU;AAAA,cACd;AACA,yBAAW;AAAA,YACf,WAAW,CAAC,cAAc,SAAS,OAAO,aAAa,MAAM;AAEzD,kBAAI,SAAS;AACT,2BAAW,KAAK,OAAO;AACvB,0BAAU;AAAA,cACd;AACA,yBAAW;AAAA,YACf,OAAO;AACH,yBAAW;AAAA,YACf;AAAA,UACJ;AAEA,cAAI,SAAS;AACT,uBAAW,KAAK,OAAO;AAAA,UAC3B;AAEA,iBAAO;AAAA,QACX;AAAA;AAAA;AAAA;AAAA,QAKA,OAAe,sBAAsB,SAAkB,UAA2B;AAC9E,qBAAW,SAAS,KAAK;AAIzB,gBAAM,oBAAoB,SAAS,QAAQ,QAAQ,GAAG;AACtD,cAAI,kBAAkB,MAAM,0BAA0B,GAAG;AACrD,mBAAO,QAAQ,QAAQ,YAAY,MAAM,kBAAkB,YAAY;AAAA,UAC3E;AAGA,cAAI,SAAS,WAAW,GAAG,GAAG;AAC1B,kBAAM,KAAK,SAAS,UAAU,CAAC;AAC/B,mBAAO,QAAQ,OAAO;AAAA,UAC1B;AAGA,cAAI,SAAS,WAAW,GAAG,GAAG;AAC1B,kBAAM,YAAY,SAAS,UAAU,CAAC;AACtC,mBAAO,QAAQ,UAAU,MAAM,KAAK,EAAE,SAAS,SAAS;AAAA,UAC5D;AAGA,cAAI,SAAS,WAAW,GAAG,GAAG;AAC1B,mBAAO,KAAK,mBAAmB,SAAS,QAAQ;AAAA,UACpD;AAGA,cAAI,SAAS,WAAW,GAAG,KAAK,SAAS,SAAS,GAAG,GAAG;AACpD,mBAAO,KAAK,yBAAyB,SAAS,QAAQ;AAAA,UAC1D;AAGA,cAAI,aAAa,KAAK;AAClB,mBAAO;AAAA,UACX;AAGA,iBAAO;AAAA,QACX;AAAA;AAAA;AAAA;AAAA,QAKA,OAAe,yBAAyB,SAAkB,UAA2B;AACjF,gBAAM,cAAc,SAAS,MAAM,GAAG,EAAE;AAGxC,gBAAM,QAAQ,YAAY,MAAM,wDAAwD;AAExF,cAAI,CAAC,MAAO,QAAO;AAEnB,cAAI,WAAW,MAAM,CAAC,EAAE,KAAK;AAC7B,gBAAM,WAAW,MAAM,CAAC,KAAK;AAC7B,gBAAM,YAAY,MAAM,CAAC,KAAK;AAG9B,qBAAW,SAAS,QAAQ,QAAQ,GAAG;AAEvC,cAAI,CAAC,UAAU;AAEX,mBAAO,QAAQ,aAAa,QAAQ;AAAA,UACxC;AAEA,gBAAM,eAAe,QAAQ,aAAa,QAAQ;AAClD,cAAI,iBAAiB,KAAM,QAAO;AAElC,kBAAQ,UAAU;AAAA,YACd,KAAK;AAED,qBAAO,iBAAiB;AAAA,YAE5B,KAAK;AAED,qBAAO,iBAAiB;AAAA,YAE5B,KAAK;AAED,qBAAO,aAAa,SAAS,SAAS;AAAA,YAE1C,KAAK;AAED,qBAAO,aAAa,WAAW,SAAS;AAAA,YAE5C,KAAK;AAED,qBAAO,aAAa,SAAS,SAAS;AAAA,YAE1C,KAAK;AAED,qBAAO,aAAa,MAAM,KAAK,EAAE,SAAS,SAAS;AAAA,YAEvD,KAAK;AAED,qBAAO,iBAAiB,aAAa,aAAa,WAAW,YAAY,GAAG;AAAA,YAEhF;AACI,qBAAO;AAAA,UACf;AAAA,QACJ;AAAA;AAAA;AAAA;AAAA,QAKA,OAAe,mBAAmB,SAAkB,UAA2B;AAC3E,gBAAM,cAAc,SAAS,UAAU,CAAC;AAGxC,gBAAM,QAAQ,YAAY,MAAM,2BAA2B;AAC3D,cAAI,CAAC,MAAO,QAAO;AAEnB,gBAAM,aAAa,MAAM,CAAC;AAC1B,gBAAM,cAAc,MAAM,CAAC;AAE3B,kBAAQ,YAAY;AAAA,YAChB,KAAK;AAED,qBAAO,KAAK,eAAe,OAAO,MAC7B,QAAQ,aAAa,SAAS,MAAM,QACjC,QAAQ,aAAa,UAAU,MAAM;AAAA,YAEjD,KAAK;AAED,qBAAO,QAAQ,aAAa,UAAU;AAAA,YAE1C,KAAK;AAED,qBAAO,CAAC,QAAQ,aAAa,UAAU;AAAA,YAE3C,KAAK;AAED,qBAAO,QAAQ,aAAa,WAAW,KACnC,QAAQ,aAAa,cAAc,MAAM;AAAA,YAEjD,KAAK;AAAA,YACL,KAAK;AAED,qBAAO,KAAK,aAAa,OAAO;AAAA,YAEpC,KAAK;AAAA,YACL,KAAK;AAED,qBAAO,KAAK,YAAY,OAAO;AAAA,YAEnC,KAAK;AAED,qBAAO,KAAK,cAAc,OAAO,IAAI,MAAM;AAAA,YAE/C,KAAK;AAED,qBAAO,KAAK,cAAc,OAAO,IAAI,MAAM;AAAA,YAE/C,KAAK;AAED,kBAAI,aAAa;AACb,sBAAM,IAAI,SAAS,aAAa,EAAE;AAClC,uBAAO,KAAK,cAAc,OAAO,MAAM,IAAI;AAAA,cAC/C;AACA,qBAAO;AAAA,YAEX,KAAK;AAED,kBAAI,aAAa;AACb,sBAAM,IAAI,SAAS,aAAa,EAAE;AAClC,uBAAO,KAAK,cAAc,OAAO,MAAM;AAAA,cAC3C;AACA,qBAAO;AAAA,YAEX,KAAK;AAED,kBAAI,aAAa;AACb,sBAAM,IAAI,SAAS,aAAa,EAAE;AAClC,uBAAO,KAAK,cAAc,OAAO,IAAI;AAAA,cACzC;AACA,qBAAO;AAAA,YAEX,KAAK;AAED,kBAAI,aAAa;AACb,sBAAM,IAAI,SAAS,aAAa,EAAE;AAClC,uBAAO,KAAK,cAAc,OAAO,IAAI;AAAA,cACzC;AACA,qBAAO;AAAA,YAEX,KAAK;AAED,kBAAI,aAAa;AACb,sBAAM,OAAO,YAAY,QAAQ,gBAAgB,EAAE;AACnD,wBAAQ,QAAQ,eAAe,IAAI,SAAS,IAAI;AAAA,cACpD;AACA,qBAAO;AAAA,YAEX,KAAK;AAED,qBAAO,CAAC,QAAQ,aAAa,QAAQ,KACjC,QAAQ,aAAa,OAAO,GAAG,SAAS,cAAc,MAAM;AAAA,YAEpE,KAAK;AAED,qBAAO,QAAQ,aAAa,QAAQ,KAChC,QAAQ,aAAa,OAAO,GAAG,SAAS,cAAc,MAAM;AAAA,YAEpE,KAAK;AAED,kBAAI,eAAe,mBAAmB,SAAS;AAC3C,oBAAI;AACA,yBAAQ,QAAgB,cAAc,WAAW,MAAM;AAAA,gBAC3D,QAAQ;AACJ,yBAAO;AAAA,gBACX;AAAA,cACJ;AACA,qBAAO;AAAA,YAEX,KAAK;AAED,kBAAI,aAAa;AACb,uBAAO,CAAC,aAAY,QAAQ,SAAS,WAAW;AAAA,cACpD;AACA,qBAAO;AAAA,YAEX;AAEI,qBAAO;AAAA,UACf;AAAA,QACJ;AAAA;AAAA;AAAA;AAAA,QAKA,OAAe,eAAe,SAA2B;AACrD,gBAAM,UAAU,QAAQ,QAAQ,YAAY;AAC5C,iBAAO,YAAY,WAAW,YAAY,YAAY,YAAY;AAAA,QACtE;AAAA,QAEA,OAAe,aAAa,SAA2B;AACnD,gBAAM,SAAS,QAAQ;AACvB,cAAI,CAAC,UAAU,EAAE,cAAc,QAAS,QAAO;AAE/C,gBAAM,WAAY,OAAe;AACjC,iBAAO,SAAS,SAAS,KAAK,SAAS,CAAC,MAAM;AAAA,QAClD;AAAA,QAEA,OAAe,YAAY,SAA2B;AAClD,gBAAM,SAAS,QAAQ;AACvB,cAAI,CAAC,UAAU,EAAE,cAAc,QAAS,QAAO;AAE/C,gBAAM,WAAY,OAAe;AACjC,iBAAO,SAAS,SAAS,KAAK,SAAS,SAAS,SAAS,CAAC,MAAM;AAAA,QACpE;AAAA,QAEA,OAAe,cAAc,SAA0B;AACnD,gBAAM,SAAS,QAAQ;AACvB,cAAI,CAAC,UAAU,EAAE,cAAc,QAAS,QAAO;AAE/C,gBAAM,WAAY,OAAe;AACjC,mBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACtC,gBAAI,SAAS,CAAC,MAAM,SAAS;AACzB,qBAAO;AAAA,YACX;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA;AAAA;;;ACtWA,MAUsB;AAVtB;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAKO,MAAe,iBAAf,MAAe,wBAAuB,cAAoC;AAAA;AAAA,QAG7E,IAAI,oBAA4B;AAC5B,cAAI,QAAQ;AACZ,qBAAW,SAAS,KAAK,qBAAqB;AAC1C,gBAAI,SAAS,MAAM,aAAa,cAAc;AAC1C;AAAA,YACJ;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAAA,QAEA,IAAI,WAA2B;AAC3B,gBAAM,WAAsB,CAAC;AAC7B,qBAAW,SAAS,KAAK,qBAAqB;AAC1C,gBAAI,SAAS,MAAM,aAAa,cAAc;AAC1C,uBAAS,KAAK,KAA2B;AAAA,YAC7C;AAAA,UACJ;AACA,iBAAO,IAAI,kBAAkB,QAAQ;AAAA,QACzC;AAAA,QAEA,IAAI,oBAAoC;AACpC,qBAAW,SAAS,KAAK,qBAAqB;AAC1C,gBAAI,SAAS,MAAM,aAAa,cAAc;AAC1C,qBAAO;AAAA,YACX;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAAA,QAEA,IAAI,mBAAmC;AACnC,mBAAS,IAAI,KAAK,oBAAoB,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3D,kBAAM,QAAQ,KAAK,oBAAoB,CAAC;AACxC,gBAAI,SAAS,MAAM,aAAa,cAAc;AAC1C,qBAAO;AAAA,YACX;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAAA,QAEA,UAAU,OAAgC;AACtC,qBAAW,QAAQ,OAAO;AACtB,gBAAI,OAAO,SAAS,UAAU;AAC1B,oBAAM,WAAW,IAAI,SAAS,MAAM,KAAK,cAAc;AACvD,mBAAK,YAAY,QAA2B;AAAA,YAChD,OAAO;AACH,mBAAK,YAAY,IAAI;AAAA,YACzB;AAAA,UACJ;AAAA,QACJ;AAAA,QAEA,WAAW,OAAgC;AACvC,gBAAM,aAAa,KAAK;AACxB,qBAAW,QAAQ,OAAO;AACtB,gBAAI,OAAO,SAAS,UAAU;AAC1B,oBAAM,WAAW,IAAI,SAAS,MAAM,KAAK,cAAc;AACvD,mBAAK,aAAa,UAA6B,UAAU;AAAA,YAC7D,OAAO;AACH,mBAAK,aAAa,MAAM,UAAU;AAAA,YACtC;AAAA,UACJ;AAAA,QACJ;AAAA,QAEA,mBAAmB,OAAgC;AAE/C,iBAAO,KAAK,oBAAoB,SAAS,GAAG;AACxC,kBAAM,QAAQ,KAAK,oBAAoB,CAAC;AACxC,gBAAI,OAAO;AACP,mBAAK,YAAY,KAAwB;AAAA,YAC7C;AAAA,UACJ;AAGA,eAAK,OAAO,GAAG,KAAK;AAAA,QACxB;AAAA;AAAA,QAGA,cAAiC,WAA6B;AAC1D,gBAAM,WAAW,KAAK,iBAAiB,SAAS;AAChD,iBAAO,SAAS,SAAS,IAAI,SAAS,KAAK,CAAC,IAAQ;AAAA,QACxD;AAAA,QAEA,iBAA8C,WAAkC;AAC5E,gBAAM,UAAe,CAAC;AAGtB,gBAAM,eAAe,UAAU,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAE3D,qBAAW,YAAY,cAAc;AACjC,gBAAI,UAAU;AACV,mBAAK,2BAA2B,UAAU,OAAO;AAAA,YACrD;AAAA,UACJ;AAGA,gBAAM,gBAAqB,CAAC;AAC5B,gBAAM,OAAO,oBAAI,IAAI;AACrB,qBAAW,WAAW,SAAS;AAC3B,gBAAI,CAAC,KAAK,IAAI,OAAO,GAAG;AACpB,mBAAK,IAAI,OAAO;AAChB,4BAAc,KAAK,OAAO;AAAA,YAC9B;AAAA,UACJ;AAEA,iBAAO,IAAI,cAAiB,aAAa;AAAA,QAC7C;AAAA;AAAA,QAGQ,2BAA2B,WAAmB,SAA0B;AAC5E,qBAAW,SAAS,KAAK,qBAAqB;AAC1C,gBAAI,SAAS,MAAM,aAAa,cAAc;AAC1C,oBAAM,UAAU;AAGhB,kBAAI,YAAY,QAAQ,SAAS,SAAS,GAAG;AACzC,wBAAQ,KAAK,OAAO;AAAA,cACxB;AAGA,kBAAI,iBAAiB,iBAAgB;AACjC,sBAAM,2BAA2B,WAAW,OAAO;AAAA,cACvD;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MAGJ;AAAA;AAAA;;;AC3IA,MAQa;AARb;AAAA;AACA;AAOO,MAAM,sBAAN,cAAqD,kBAAmD;AAAA,MAG/G;AAAA;AAAA;;;ACXA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA;AAAA;AAAA;AAAA;AAAA,MAWa;AAXb;AAAA;AAAA;AACA;AAUO,MAAM,uBAAN,MAAM,8BAA6B,eAA2C;AAAA,QACjF,YAAY,eAA0B;AAClC,gBAAM,wBAAwB,sBAAsB,aAAa;AAAA,QACrE;AAAA;AAAA;AAAA;AAAA,QAKA,IAAI,oBAA4B;AAC5B,cAAI,QAAQ;AACZ,qBAAW,SAAS,KAAK,qBAAqB;AAC1C,gBAAI,SAAS,MAAM,aAAa,cAAc;AAC1C;AAAA,YACJ;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAAA,QAUA,cAAc,WAAmC;AAC7C,gBAAM,WAAW,KAAK,iBAAiB,SAAS;AAChD,iBAAO,SAAS,SAAS,IAAI,SAAS,KAAK,CAAC,IAAI;AAAA,QACpD;AAAA,QAUA,iBAAiB,WAAwC;AAErD,iBAAO,MAAM,iBAAiB,SAAS;AAAA,QAC3C;AAAA;AAAA;AAAA;AAAA,QAKA,eAAe,WAAuC;AAClD,gBAAM,UAAU,KAAK,cAAc,IAAI,SAAS,EAAE;AAClD,iBAAO;AAAA,QACX;AAAA;AAAA;AAAA;AAAA,QAKA,UAAU,MAAkC;AACxC,gBAAM,QAAQ,IAAI,sBAAqB,KAAK,cAA0B;AAEtE,cAAI,MAAM;AACN,uBAAW,SAAS,KAAK,qBAAqB;AAC1C,kBAAI,SAAS,eAAe,OAAO;AAC/B,sBAAM,YAAa,MAAc,UAAU,IAAI,CAAC;AAAA,cACpD;AAAA,YACJ;AAAA,UACJ;AAEA,iBAAO;AAAA,QACX;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,YAA4B,MAAY;AAEpC,cAAI,KAAK,aAAa,wBAAwB;AAC1C,kBAAM,WAAW;AAGjB,mBAAO,SAAS,uBAAuB,SAAS,oBAAoB,SAAS,GAAG;AAC5E,oBAAM,QAAQ,SAAS,oBAAoB,CAAC;AAC5C,kBAAI,OAAO;AACP,yBAAS,YAAY,KAAK;AAC1B,sBAAM,YAAY,KAAK;AAAA,cAC3B;AAAA,YACJ;AAEA,mBAAO;AAAA,UACX;AAEA,iBAAO,MAAM,YAAY,IAAI;AAAA,QACjC;AAAA,MACJ;AAAA;AAAA;;;ACvGA,MAMa;AANb;AAAA;AAAA;AAMO,MAAM,iBAAN,cAA6B,qBAA2C;AAAA,QAM7E,YAAY,MAAe,MAA+F,eAA0B;AAClJ,gBAAM,aAAa;AACnB,eAAK,QAAQ;AACb,eAAK,OAAO,KAAK;AACjB,eAAK,iBAAiB,KAAK,kBAAkB;AAC7C,eAAK,iBAAiB,KAAK,kBAAkB;AAG7C,UAAC,KAAa,WAAW;AAAA,QAC3B;AAAA,QAKE,QAAQ,SAAkC;AACtC,gBAAM,IAAI,MAAM,yBAAyB;AAAA,QAC7C;AAAA,QACA,cAAc,MAAoB;AAC9B,gBAAM,IAAI,MAAM,yBAAyB;AAAA,QAC7C;AAAA,QAOA,iBAAiB,GAAW,GAA2B;AACnD,gBAAM,IAAI,MAAM,yBAAyB;AAAA,QAC7C;AAAA,QACA,kBAAkB,GAAW,GAAsB;AAC/C,gBAAM,IAAI,MAAM,yBAAyB;AAAA,QAC7C;AAAA,QACA,gBAA6B;AACzB,gBAAM,IAAI,MAAM,yBAAyB;AAAA,QAC7C;AAAA,QAEF,IAAI,OAAgB;AAClB,iBAAO,KAAK;AAAA,QACd;AAAA;AAAA;AAAA;AAAA,QAKA,IAAI,YAAoB;AACtB,cAAI,OAAO;AACX,qBAAW,SAAS,KAAK,qBAAqB;AAC5C,gBAAK,MAAc,aAAa,GAAG;AAEjC,sBAAS,MAAc,cAAc;AAAA,YACvC,WAAY,MAAc,aAAa,GAAG;AAExC,sBAAS,KAAK,MAAc,yBAAyB,KAAY;AAAA,YACnE,WAAY,MAAc,aAAa,GAAG;AAExC,sBAAQ,OAAQ,MAAc,eAAe,EAAE;AAAA,YACjD;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA,QAEA,IAAI,UAAU,OAAe;AAE3B,iBAAO,KAAK,oBAAoB,SAAS,GAAG;AAC1C,kBAAM,QAAQ,KAAK,oBAAoB,CAAC;AACxC,gBAAI,OAAO;AACT,mBAAK,YAAY,KAAwB;AAAA,YAC3C;AAAA,UACF;AAGA,cAAI,MAAM,KAAK,GAAG;AAChB,YAAC,KAAK,MAAc,mBAAmB,OAAO,IAAI;AAAA,UACpD;AAAA,QACF;AAAA,MACF;AAAA;AAAA;;;ACtFA;AAAA;AAAA;AAAA;AAAA,MAQM,cAcgB,2BA+tBhB,kBAmDA,UAgBA;AAxzBN;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA,MAAM,eAAN,cAA2B,MAAM;AAAA,QAC/B,YACE,SACO,OAAe,gBACtB;AACA,gBAAM,OAAO;AAFN;AAGP,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAMO,MAAe,eAAf,MAAe,qBAAoB,eAAkC;AAAA,QAgB1E,YACS,WAAmB,OAC1B,eACA;AACA,gBAAM,cAAc,SAAS,YAAY,GAAG,aAAa;AAHlD;AANT,eAAQ,MAAc;AACtB,eAAQ,aAAqB;AAC7B,eAAQ,cAAmC,oBAAI,IAAI;AACnD,eAAQ,cAAiC;AA2dzC,oCAA0B;AAC1B,mCAAyB;AAAA,QArdzB;AAAA,QAsDA,QAAQ,WAAyD,SAAwD;AACvH,gBAAM,IAAI,MAAM,yBAAyB;AAAA,QAC3C;AAAA,QACA,cAAc,SAA6C;AACzD,gBAAM,IAAI,MAAM,yBAAyB;AAAA,QAC3C;AAAA,QAEA,IAAI,UAAkB;AACpB,iBAAO,KAAK,SAAS,YAAY;AAAA,QACnC;AAAA,QAEA,IAAI,YAAoB;AACtB,iBAAO,KAAK,SAAS,YAAY;AAAA,QACnC;AAAA;AAAA,QAGA,IAAI,KAAa;AACf,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,GAAG,OAAe;AACpB,eAAK,MAAM;AACX,eAAK,YAAY,IAAI,MAAM,KAAK;AAAA,QAClC;AAAA,QAEA,IAAI,YAAoB;AACtB,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,UAAU,OAAe;AAC3B,eAAK,aAAa;AAClB,eAAK,YAAY,IAAI,SAAS,KAAK;AAAA,QACrC;AAAA,QAEA,IAAI,YAA0B;AAC5B,iBAAO,IAAK,iBAAyB,IAAI;AAAA,QAC3C;AAAA,QAEA,IAAI,YAAoB;AAEtB,cAAI,OAAO;AACX,qBAAW,SAAS,KAAK,qBAAqB;AAC5C,gBAAI,MAAM,aAAa,WAAW;AAEhC,sBAAS,MAAc,cAAc;AAAA,YACvC,WAAW,MAAM,aAAa,cAAc;AAE1C,sBAAQ,KAAK,yBAAyB,KAAY;AAAA,YACpD,WAAW,MAAM,aAAa,GAAG;AAE/B,sBAAQ,OAAQ,MAAc,eAAe,EAAE;AAAA,YACjD;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA,QAEA,IAAI,YAAoB;AAEtB,iBAAO,KAAK,eAAe;AAAA,QAC7B;AAAA,QAEA,IAAI,UAAU,OAAsB;AAElC,eAAK,sBAAsB,CAAC;AAC5B,cAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,kBAAM,cAAc,OAAO,KAAK;AAChC,kBAAM,eAAe,KAAK,mBAAmB,WAAW;AAExD,kBAAM,EAAE,UAAAC,UAAS,IAAI,aAAY;AACjC,gBAAIA,WAAU;AACZ,oBAAM,WAAW,IAAIA,UAAS,cAAc,KAAK,cAAc;AAC/D,mBAAK,oBAAoB,KAAK,QAAQ;AACtC,cAAC,SAAiB,sBAAsB;AAAA,YAC1C;AAAA,UACF;AAAA,QACF;AAAA,QAEA,IAAI,UAAU,OAAe;AAE3B,iBAAO,KAAK,oBAAoB,SAAS,GAAG;AAC1C,kBAAM,QAAQ,KAAK,oBAAoB,CAAC;AACxC,gBAAI,OAAO;AACT,mBAAK,YAAY,KAAK;AAAA,YACxB;AAAA,UACF;AAGA,cAAI,MAAM,KAAK,GAAG;AAChB,iBAAK,mBAAmB,KAAK;AAAA,UAC/B;AAAA,QACF;AAAA;AAAA;AAAA;AAAA,QAKQ,yBAAyB,SAAsB;AACrD,gBAAM,UAAU,QAAQ,QAAQ,YAAY;AAE5C,gBAAM,QAAQ,MAAM,KAAK,QAAQ,aAAa,QAAQ,KAAK,CAAC,CAAC,EAC1D,IAAI,CAAC,CAAC,MAAM,KAAK,MAAyB,UAAU,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,OAAO,KAAK,EAAE,QAAQ,MAAM,QAAQ,CAAC,GAAI,EAC5H,KAAK,EAAE;AAGV,gBAAM,kBAAkB,CAAC,OAAO,SAAS,MAAM,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,SAAS,UAAU,SAAS,KAAK;AAC7H,gBAAM,gBAAgB,gBAAgB,SAAS,OAAO;AAEtD,cAAI,eAAe;AACjB,mBAAO,IAAI,OAAO,GAAG,KAAK;AAAA,UAC5B,OAAO;AAEL,gBAAI,YAAY;AAGhB,gBAAI,QAAQ,YAAY;AACtB,2BAAa,6BAA6B,QAAQ,WAAW,IAAI,KAAK,QAAQ,WAAW,SAAS;AAAA,YACpG;AAEA,uBAAW,SAAS,QAAQ,uBAAuB,CAAC,GAAG;AACrD,kBAAI,MAAM,aAAa,WAAW;AAChC,6BAAc,MAAc,cAAc;AAAA,cAC5C,WAAW,MAAM,aAAa,cAAc;AAC1C,6BAAa,KAAK,yBAAyB,KAAY;AAAA,cACzD,WAAW,MAAM,aAAa,GAAG;AAE/B,6BAAa,OAAQ,MAAc,eAAe,EAAE;AAAA,cACtD;AAAA,YACF;AACA,mBAAO,IAAI,OAAO,GAAG,KAAK,IAAI,SAAS,KAAK,OAAO;AAAA,UACrD;AAAA,QACF;AAAA;AAAA;AAAA;AAAA,QAKQ,mBAAmB,MAAc,aAAkB,MAAY;AACrE,gBAAM,EAAE,gBAAAC,iBAAgB,UAAAD,WAAU,SAAAE,SAAQ,IAAI,aAAY;AAE1D,cAAI,CAACD,iBAAgB;AAEnB,oBAAQ,MAAM,yDAAyD;AACvE;AAAA,UACF;AAEA,cAAI,IAAI;AACR,gBAAM,SAAS,KAAK;AAEpB,iBAAO,IAAI,QAAQ;AACjB,kBAAM,eAAe,KAAK,QAAQ,KAAK,CAAC;AAGxC,gBAAI,iBAAiB,IAAI;AACvB,kBAAI,OAAO,KAAK,UAAU,CAAC,EAAE,KAAK;AAClC,kBAAI,MAAM;AACR,uBAAO,KAAK,qBAAqB,IAAI;AACrC,oBAAID,UAAU,YAAW,YAAY,IAAIA,UAAS,MAAM,KAAK,cAAc,CAAC;AAAA,cAC9E;AACA;AAAA,YACF,WAAW,eAAe,GAAG;AAC3B,kBAAI,OAAO,KAAK,UAAU,GAAG,YAAY,EAAE,KAAK;AAChD,kBAAI,MAAM;AACR,uBAAO,KAAK,qBAAqB,IAAI;AACrC,oBAAIA,UAAU,YAAW,YAAY,IAAIA,UAAS,MAAM,KAAK,cAAc,CAAC;AAAA,cAC9E;AAAA,YACF;AAEA,gBAAI;AACJ,kBAAM,SAAS,KAAK,WAAW,MAAM,CAAC;AACtC,gBAAI,WAAW,GAAI;AAEnB,kBAAM,aAAa,KAAK,UAAU,IAAI,GAAG,MAAM;AAG/C,gBAAI,WAAW,WAAW,KAAK,GAAG;AAChC,oBAAM,aAAa,KAAK,QAAQ,OAAO,CAAC;AACxC,kBAAI,eAAe,IAAI;AACrB,sBAAM,iBAAiB,KAAK,UAAU,IAAI,GAAG,UAAU;AACvD,oBAAIE,SAAS,YAAW,YAAY,IAAIA,SAAQ,gBAAgB,KAAK,cAAc,CAAC;AACpF,oBAAI,aAAa;AACjB;AAAA,cACF;AAAA,YACF;AAGA,gBAAI,WAAW,SAAS,GAAG,GAAG;AAC5B,oBAAMC,SAAQ,WAAW,MAAM,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK;AACxD,oBAAMC,WAAUD,OAAM,CAAC;AACvB,oBAAME,mBAAkB,WAAW,MAAMD,SAAQ,QAAQ,EAAE,EAAE,KAAK;AAClE,oBAAM,UAAUH,gBAAe,cAAcG,UAAS,KAAK,cAAc;AACzE,mBAAK,gBAAgB,SAASC,gBAAe;AAC7C,yBAAW,YAAY,OAAO;AAC9B,kBAAI,SAAS;AACb;AAAA,YACF;AAGA,gBAAI,WAAW,WAAW,GAAG,GAAG;AAC9B,oBAAM,iBAAiB,IAAI,UAAU;AACrC,kBAAIL,UAAU,YAAW,YAAY,IAAIA,UAAS,gBAAgB,KAAK,cAAc,CAAC;AACtF,kBAAI,SAAS;AACb;AAAA,YACF;AAGA,kBAAM,QAAQ,WAAW,MAAM,KAAK;AACpC,kBAAM,UAAU,MAAM,CAAC;AACvB,kBAAM,kBAAkB,WAAW,MAAM,QAAQ,MAAM,EAAE,KAAK;AAG9D,gBAAI,YAAY,WAAW,YAAY,UAAU;AAC/C,oBAAM,aAAa,KAAK,OAAO;AAC/B,oBAAMM,mBAAkB,KAAK,QAAQ,YAAY,SAAS,CAAC;AAE3D,kBAAIA,qBAAoB,IAAI;AAC1B,sBAAM,UAAUL,gBAAe,cAAc,SAAS,KAAK,cAAc;AACzE,qBAAK,gBAAgB,SAAS,eAAe;AAC7C,sBAAM,UAAU,KAAK,UAAU,SAAS,GAAGK,gBAAe;AAC1D,oBAAI,WAAWN,WAAU;AACvB,0BAAQ,YAAY,IAAIA,UAAS,SAAS,KAAK,cAAc,CAAC;AAAA,gBAChE;AACA,2BAAW,YAAY,OAAO;AAC9B,oBAAIM,mBAAkB,WAAW;AACjC;AAAA,cACF;AAAA,YACF;AAGA,kBAAM,kBAAkB,KAAK,uBAAuB,MAAM,SAAS,SAAS,CAAC;AAE7E,gBAAI,oBAAoB,IAAI;AAC1B,oBAAM,UAAUL,gBAAe,cAAc,SAAS,KAAK,cAAc;AACzE,mBAAK,gBAAgB,SAAS,eAAe;AAC7C,oBAAM,UAAU,KAAK,UAAU,SAAS,GAAG,eAAe;AAC1D,kBAAI,QAAQ,KAAK,GAAG;AAClB,wBAAQ,YAAY;AAAA,cACtB;AACA,yBAAW,YAAY,OAAO;AAC9B,kBAAI,mBAAmB,QAAQ,SAAS;AAAA,YAC1C,OAAO;AACL,oBAAM,UAAUA,gBAAe,cAAc,SAAS,KAAK,cAAc;AACzE,mBAAK,gBAAgB,SAAS,eAAe;AAC7C,yBAAW,YAAY,OAAO;AAC9B,kBAAI,SAAS;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAAA,QAEQ,WAAW,MAAc,YAA4B;AAC3D,cAAI,IAAI,aAAa;AACrB,cAAI,WAAW;AACf,cAAI,YAAY;AAChB,iBAAO,IAAI,KAAK,QAAQ;AACtB,kBAAM,OAAO,KAAK,CAAC;AACnB,gBAAI,CAAC,UAAU;AACb,kBAAI,SAAS,OAAO,SAAS,KAAK;AAChC,2BAAW;AACX,4BAAY;AAAA,cACd,WAAW,SAAS,IAAK,QAAO;AAAA,YAClC,OAAO;AACL,kBAAI,SAAS,WAAW;AACtB,2BAAW;AACX,4BAAY;AAAA,cACd;AAAA,YACF;AACA;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA,QAEQ,qBAAqB,MAAsB;AACjD,iBAAO,KAAK,QAAQ,aAAa,OAAO;AAAA,QAC1C;AAAA,QAEQ,uBAAuB,MAAc,SAAiB,YAA4B;AACxF,gBAAM,UAAU,IAAI,OAAO;AAC3B,gBAAM,WAAW,KAAK,OAAO;AAC7B,cAAI,QAAQ;AACZ,cAAI,IAAI;AACR,iBAAO,IAAI,KAAK,UAAU,QAAQ,GAAG;AACnC,kBAAM,WAAW,KAAK,QAAQ,SAAS,CAAC;AACxC,kBAAM,YAAY,KAAK,QAAQ,UAAU,CAAC;AAC1C,gBAAI,cAAc,GAAI,QAAO;AAC7B,gBAAI,aAAa,MAAM,WAAW,WAAW;AAC3C,oBAAM,WAAW,KAAK,OAAO,WAAW,QAAQ,MAAM;AACtD,kBAAI,aAAa,OAAO,aAAa,OAAO,aAAa,IAAK;AAC9D,kBAAI,WAAW,QAAQ;AAAA,YACzB,OAAO;AACL;AACA,kBAAI,UAAU,EAAG,QAAO;AACxB,kBAAI,YAAY,SAAS;AAAA,YAC3B;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA,QAEQ,gBAAgB,SAAc,iBAA+B;AACnE,cAAI,WAAW;AACf,gBAAM,SAAS,gBAAgB;AAC/B,iBAAO,WAAW,QAAQ;AACxB,mBAAO,WAAW,UAAU,KAAK,KAAK,gBAAgB,QAAQ,CAAC,EAAG;AAClE,gBAAI,YAAY,OAAQ;AACxB,kBAAM,YAAY;AAClB,mBAAO,WAAW,UAAU,SAAS,KAAK,gBAAgB,QAAQ,CAAC,EAAG;AACtE,gBAAI,aAAa,WAAW;AAC1B;AACA;AAAA,YACF;AACA,kBAAM,OAAO,gBAAgB,UAAU,WAAW,QAAQ;AAC1D,mBAAO,WAAW,UAAU,KAAK,KAAK,gBAAgB,QAAQ,CAAC,EAAG;AAClE,gBAAI,QAAQ;AACZ,gBAAI,WAAW,UAAU,gBAAgB,QAAQ,MAAM,KAAK;AAC1D;AACA,qBAAO,WAAW,UAAU,KAAK,KAAK,gBAAgB,QAAQ,CAAC,EAAG;AAClE,kBAAI,WAAW,QAAQ;AACrB,sBAAM,QAAQ,gBAAgB,QAAQ;AACtC,oBAAI,UAAU,OAAO,UAAU,KAAK;AAClC;AACA,wBAAM,aAAa;AACnB,yBAAO,WAAW,UAAU,gBAAgB,QAAQ,MAAM,MAAO;AACjE,0BAAQ,gBAAgB,UAAU,YAAY,QAAQ;AACtD,sBAAI,WAAW,UAAU,gBAAgB,QAAQ,MAAM,MAAO;AAAA,gBAChE,OAAO;AACL,wBAAM,aAAa;AACnB,yBAAO,WAAW,UAAU,CAAC,KAAK,KAAK,gBAAgB,QAAQ,CAAC,EAAG;AACnE,0BAAQ,gBAAgB,UAAU,YAAY,QAAQ;AAAA,gBACxD;AAAA,cACF;AAAA,YACF;AACA,oBAAQ,aAAa,MAAM,KAAK,mBAAmB,KAAK,CAAC;AAAA,UAC3D;AAAA,QACF;AAAA,QAEU,mBAAmB,KAAqB;AAChD,gBAAM,YAAiB,EAAE,KAAK,SAAS,KAAK,QAAQ,KAAK,QAAQ,KAAK,UAAU,KAAK,QAAQ;AAC7F,iBAAO,IAAI,QAAQ,YAAY,UAAQ,UAAU,IAAI,KAAK,IAAI;AAAA,QAChE;AAAA,QAEU,mBAAmB,KAAqB;AAChD,gBAAM,YAAiB,EAAE,SAAS,KAAK,QAAQ,KAAK,QAAQ,KAAK,UAAU,KAAK,SAAS,KAAK,SAAS,KAAK,UAAU,KAAK,UAAU,QAAK,SAAS,QAAK,WAAW,UAAK,UAAU,KAAK,YAAY,UAAK,WAAW,UAAK,WAAW,UAAK,WAAW,UAAU,WAAW,UAAU,WAAW,KAAK,WAAW,IAAI;AACjT,iBAAO,IAAI,QAAQ,oBAAoB,YAAU;AAC/C,gBAAI,UAAU,MAAM,EAAG,QAAO,UAAU,MAAM;AAC9C,gBAAI,OAAO,WAAW,IAAI,KAAK,OAAO,SAAS,GAAG,GAAG;AACnD,oBAAM,MAAM,SAAS,OAAO,MAAM,GAAG,EAAE,GAAG,EAAE;AAC5C,qBAAO,MAAM,GAAG,IAAI,SAAS,OAAO,aAAa,GAAG;AAAA,YACtD;AACA,gBAAI,OAAO,WAAW,KAAK,KAAK,OAAO,SAAS,GAAG,GAAG;AACpD,oBAAM,MAAM,SAAS,OAAO,MAAM,GAAG,EAAE,GAAG,EAAE;AAC5C,qBAAO,MAAM,GAAG,IAAI,SAAS,OAAO,aAAa,GAAG;AAAA,YACtD;AACA,mBAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,QAEA,IAAI,YAAoB;AACtB,gBAAM,QAAQ,MAAM,KAAK,KAAK,YAAY,QAAQ,CAAC,EAChD,IAAI,CAAC,CAAC,MAAM,KAAK,MAAO,UAAU,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,MAAM,QAAQ,MAAM,QAAQ,CAAC,GAAI,EAClG,KAAK,EAAE;AACV,gBAAM,kBAAkB,CAAC,OAAO,SAAS,MAAM,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,SAAS,UAAU,SAAS,KAAK;AAC7H,gBAAM,gBAAgB,gBAAgB,SAAS,KAAK,QAAQ,YAAY,CAAC;AACzE,iBAAO,gBAAgB,IAAI,KAAK,QAAQ,YAAY,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,QAAQ,YAAY,CAAC,GAAG,KAAK,IAAI,KAAK,SAAS,KAAK,KAAK,QAAQ,YAAY,CAAC;AAAA,QAC9J;AAAA,QAEA,IAAI,eAA8B;AAChC,iBAAO;AAAA,QACT;AAAA,QACA,IAAI,SAAwB;AAC1B,iBAAO;AAAA,QACT;AAAA,QACA,aAAa,eAAsC;AACjD,iBAAO,KAAK,YAAY,IAAI,cAAc,YAAY,CAAC,KAAK;AAAA,QAC9D;AAAA,QACA,aAAa,eAAuB,OAAqB;AACvD,gBAAM,OAAO,cAAc,YAAY;AACvC,eAAK,YAAY,IAAI,MAAM,KAAK;AAChC,cAAI,SAAS,KAAM,MAAK,MAAM;AAAA,mBACrB,SAAS,QAAS,MAAK,aAAa;AAAA,QAC/C;AAAA,QACA,gBAAgB,eAA6B;AAC3C,gBAAM,OAAO,cAAc,YAAY;AACvC,eAAK,YAAY,OAAO,IAAI;AAC5B,cAAI,SAAS,KAAM,MAAK,MAAM;AAAA,mBACrB,SAAS,QAAS,MAAK,aAAa;AAAA,QAC/C;AAAA,QACA,aAAa,eAAgC;AAC3C,iBAAO,KAAK,YAAY,IAAI,cAAc,YAAY,CAAC;AAAA,QACzD;AAAA,QACA,QAAQ,WAAwB;AAC9B,cAAI,UAA0B;AAC9B,iBAAO,SAAS;AACd,gBAAI,QAAQ,WAAW,QAAQ,QAAQ,SAAS,EAAG,QAAO;AAC1D,sBAAU,QAAQ;AAAA,UACpB;AACA,iBAAO;AAAA,QACT;AAAA,QACA,QAAQ,WAA4B;AAClC,iBAAO,YAAY,QAAQ,MAAa,SAAS;AAAA,QACnD;AAAA,QACA,IAAI,aAAkB;AACpB,iBAAO,IAAK,iBAAyB,KAAK,WAAW;AAAA,QACvD;AAAA,QACA,IAAI,eAAuB;AACzB,iBAAO;AAAA,QACT;AAAA,QACA,IAAI,aAAqB;AACvB,iBAAO;AAAA,QACT;AAAA,QACA,IAAI,YAAoB;AACtB,iBAAO;AAAA,QACT;AAAA,QACA,IAAI,cAAsB;AACxB,iBAAO;AAAA,QACT;AAAA,QACA,IAAI,iBAAyB;AAC3B,iBAAO;AAAA,QACT;AAAA,QAGA,IAAI,OAAY;AACd,iBAAO,EAAE,QAAQ,GAAG,OAAO,IAAI,KAAK,MAAM;AAAA,UAAC,GAAG,QAAQ,MAAM;AAAA,UAAC,GAAG,UAAU,MAAM,OAAO,QAAQ,MAAM,OAAO,SAAS,MAAM,OAAO,MAAM,MAAM,KAAK;AAAA,QACrJ;AAAA,QACA,IAAI,eAAuB;AACzB,iBAAO;AAAA,QACT;AAAA,QACA,IAAI,aAAqB;AACvB,iBAAO;AAAA,QACT;AAAA,QACA,IAAI,WAAW,GAAW;AAAA,QAAC;AAAA,QAC3B,IAAI,YAAoB;AACtB,iBAAO;AAAA,QACT;AAAA,QACA,IAAI,UAAU,GAAW;AAAA,QAAC;AAAA,QAC1B,IAAI,cAAsB;AACxB,iBAAO;AAAA,QACT;AAAA,QACA,IAAI,aAAgC;AAClC,iBAAO,KAAK;AAAA,QACd;AAAA,QACA,IAAI,OAAe;AACjB,iBAAO,KAAK,aAAa,MAAM,KAAK;AAAA,QACtC;AAAA,QACA,IAAI,KAAK,OAAe;AACtB,eAAK,aAAa,QAAQ,KAAK;AAAA,QACjC;AAAA,QACA,aAAa,MAAkC;AAC7C,cAAI,KAAK,YAAa,OAAM,IAAI,aAAa,gCAAgC,mBAAmB;AAChG,eAAK,cAAc,IAAI,eAAe,MAAa,MAAM,KAAK,cAAc;AAC5E,iBAAO,KAAK;AAAA,QACd;AAAA,QACA,gBAAgB,UAAyB;AACvC,iBAAO;AAAA,QACT;AAAA,QACA,mBAAwB;AACtB,iBAAO,oBAAI,IAAI;AAAA,QACjB;AAAA,QACA,eAAe,KAAoB,WAAkC;AACnE,iBAAO,KAAK,aAAa,SAAS;AAAA,QACpC;AAAA,QACA,oBAA8B;AAC5B,iBAAO,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC;AAAA,QAC3C;AAAA,QACA,iBAAiB,eAA4B;AAC3C,gBAAM,QAAQ,KAAK,aAAa,aAAa;AAC7C,iBAAO,UAAU,OAAO,IAAI,SAAS,eAAe,KAAK,IAAI;AAAA,QAC/D;AAAA,QACA,mBAAmB,KAAoB,WAAwB;AAC7D,iBAAO,KAAK,iBAAiB,SAAS;AAAA,QACxC;AAAA,QACA,wBAA6B;AAC3B,iBAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,OAAO,CAAC,GAAG;AAAA,QACrG;AAAA,QACA,iBAAsB;AACpB,iBAAO,EAAE,QAAQ,GAAG,MAAM,MAAM,MAAM,CAAC,OAAO,QAAQ,GAAG,aAAa;AAAA,UAAC,EAAE;AAAA,QAC3E;AAAA,QAEA,uBAAuB,YAA+C;AACpE,gBAAM,SAAoB,CAAC;AAC3B,gBAAM,gBAAgB,WAAW,KAAK,EAAE,MAAM,KAAK;AACnD,gBAAM,gBAAgB,CAAC,SAAkB,YAA+B;AACtE,kBAAM,iBAAiB,QAAQ,UAAU,KAAK,EAAE,MAAM,KAAK;AAC3D,mBAAO,QAAQ,MAAM,SAAO,eAAe,SAAS,GAAG,CAAC;AAAA,UAC1D;AACA,gBAAM,WAAW,CAAC,SAAc;AAC9B,gBAAI,KAAK,aAAa,gBAAgB,cAAc,MAAiB,aAAa,EAAG,QAAO,KAAK,IAAe;AAChH,qBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,IAAK,UAAS,KAAK,WAAW,CAAC,CAAC;AAAA,UAC9E;AACA,mBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,IAAK,UAAS,KAAK,WAAW,CAAC,CAAC;AAE5E,iBAAO,IAAI,oBAAoB,MAAM;AAAA,QACvC;AAAA,QAEA,qBAAqB,eAAuC;AAC1D,gBAAM,SAAoB,CAAC;AAC3B,gBAAM,UAAU,cAAc,YAAY;AAC1C,gBAAM,aAAa,YAAY;AAC/B,gBAAM,WAAW,CAAC,SAAc;AAC9B,gBAAI,KAAK,aAAa,iBAAiB,cAAc,KAAK,cAAc,SAAU,QAAO,KAAK,IAAe;AAC7G,qBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,IAAK,UAAS,KAAK,WAAW,CAAC,CAAC;AAAA,UAC9E;AACA,mBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,IAAK,UAAS,KAAK,WAAW,CAAC,CAAC;AAE5E,iBAAO,IAAI,kBAAkB,MAAM;AAAA,QACrC;AAAA,QACA,uBAAuB,KAAoB,WAAwB;AACjE,iBAAO,KAAK,qBAAqB,SAAS;AAAA,QAC5C;AAAA,QACA,QAAQ,UAAwB;AAC9B,iBAAO,KAAK;AAAA,QACd;AAAA,QACA,eAAe,KAAoB,WAA4B;AAC7D,iBAAO,KAAK,aAAa,SAAS;AAAA,QACpC;AAAA,QACA,gBAAyB;AACvB,iBAAO,KAAK,YAAY,OAAO;AAAA,QACjC;AAAA,QACA,kBAAkB,KAAsB;AACtC,iBAAO;AAAA,QACT;AAAA,QACA,sBAAsB,OAAuB,SAAkC;AAC7E,gBAAM,WAAW,MAAM,YAAY;AACnC,kBAAQ,UAAU;AAAA,YAChB,KAAK;AACH,kBAAI,KAAK,YAAY;AACnB,qBAAK,WAAW,aAAa,SAAgB,IAAW;AACxD,uBAAO;AAAA,cACT;AACA,qBAAO;AAAA,YACT,KAAK;AACH,kBAAI,KAAK,WAAY,MAAK,aAAa,SAAgB,KAAK,UAAU;AAAA,kBACjE,MAAK,YAAY,OAAc;AACpC,qBAAO;AAAA,YACT,KAAK;AACH,mBAAK,YAAY,OAAc;AAC/B,qBAAO;AAAA,YACT,KAAK;AACH,kBAAI,KAAK,YAAY;AACnB,oBAAI,KAAK,YAAa,MAAK,WAAW,aAAa,SAAgB,KAAK,WAAW;AAAA,oBAC9E,MAAK,WAAW,YAAY,OAAc;AAC/C,uBAAO;AAAA,cACT;AACA,qBAAO;AAAA,YACT;AACE,oBAAM,IAAI,aAAa,qBAAqB,KAAK,IAAI,aAAa;AAAA,UACtE;AAAA,QACF;AAAA,QACA,mBAAmB,UAA0B,MAAoB;AAC/D,gBAAM,MAAM,SAAS,YAAY;AACjC,gBAAM,UAAU,KAAK,eAAe,cAAc,KAAK;AACvD,kBAAQ,YAAY;AACpB,gBAAM,WAAW,KAAK,eAAe,uBAAuB;AAC5D,iBAAO,QAAQ,WAAY,UAAS,YAAY,QAAQ,UAAU;AAClE,kBAAQ,KAAK;AAAA,YACX,KAAK;AACH,kBAAI,KAAK,WAAY,MAAK,WAAW,aAAa,UAAU,IAAW;AACvE;AAAA,YACF,KAAK;AACH,kBAAI,KAAK,WAAY,MAAK,aAAa,UAAU,KAAK,UAAU;AAAA,kBAC3D,MAAK,YAAY,QAAQ;AAC9B;AAAA,YACF,KAAK;AACH,mBAAK,YAAY,QAAQ;AACzB;AAAA,YACF,KAAK;AACH,kBAAI,KAAK,YAAY;AACnB,oBAAI,KAAK,YAAa,MAAK,WAAW,aAAa,UAAU,KAAK,WAAW;AAAA,oBACxE,MAAK,WAAW,YAAY,QAAQ;AAAA,cAC3C;AACA;AAAA,YACF;AACE,oBAAM,IAAI,aAAa,qBAAqB,QAAQ,IAAI,aAAa;AAAA,UACzE;AAAA,QACF;AAAA,QACA,mBAAmB,OAAuB,MAAoB;AAC5D,gBAAM,WAAW,MAAM,YAAY;AACnC,gBAAM,WAAW,KAAK,eAAe,eAAe,IAAI;AACxD,kBAAQ,UAAU;AAAA,YAChB,KAAK;AACH,kBAAI,KAAK,WAAY,MAAK,WAAW,aAAa,UAAU,IAAW;AACvE;AAAA,YACF,KAAK;AACH,kBAAI,KAAK,WAAY,MAAK,aAAa,UAAU,KAAK,UAAU;AAAA,kBAC3D,MAAK,YAAY,QAAQ;AAC9B;AAAA,YACF,KAAK;AACH,mBAAK,YAAY,QAAQ;AACzB;AAAA,YACF,KAAK;AACH,kBAAI,KAAK,YAAY;AACnB,oBAAI,KAAK,YAAa,MAAK,WAAW,aAAa,UAAU,KAAK,WAAW;AAAA,oBACxE,MAAK,WAAW,YAAY,QAAQ;AAAA,cAC3C;AACA;AAAA,YACF;AACE,oBAAM,IAAI,aAAa,qBAAqB,KAAK,IAAI,aAAa;AAAA,UACtE;AAAA,QACF;AAAA,QACA,sBAAsB,KAAmB;AAAA,QAAC;AAAA,QAC1C,kBAAkB,KAAoB,WAAyB;AAC7D,eAAK,gBAAgB,SAAS;AAAA,QAChC;AAAA,QACA,oBAAoB,MAAgB;AAClC,gBAAM,WAAW,KAAK,aAAa,KAAK,IAAI;AAC5C,cAAI,aAAa,MAAM;AACrB,iBAAK,gBAAgB,KAAK,IAAI;AAC9B,mBAAO,IAAI,SAAS,KAAK,MAAM,QAAQ;AAAA,UACzC;AACA,gBAAM,IAAI,aAAa,0DAA0D,eAAe;AAAA,QAClG;AAAA,QACA,kBAAkB,MAA2B;AAC3C,iBAAO,QAAQ,QAAQ;AAAA,QACzB;AAAA,QACA,mBAAmB,MAA2B;AAC5C,iBAAO,QAAQ,QAAQ;AAAA,QACzB;AAAA,QACA,OAAO,IAAU,IAAgB;AAAA,QAAC;AAAA,QAClC,SAAS,IAAU,IAAgB;AAAA,QAAC;AAAA,QACpC,eAAe,MAAkB;AAAA,QAAC;AAAA,QAClC,SAAS,IAAU,IAAgB;AAAA,QAAC;AAAA,QACpC,eAAe,KAAoB,eAAuB,OAAqB;AAC7E,eAAK,aAAa,eAAe,KAAK;AAAA,QACxC;AAAA,QACA,iBAAiB,MAAgB;AAC/B,gBAAM,UAAU,KAAK,iBAAiB,KAAK,IAAI;AAC/C,eAAK,aAAa,KAAK,MAAM,KAAK,KAAK;AACvC,iBAAO;AAAA,QACT;AAAA,QACA,mBAAmB,MAAgB;AACjC,iBAAO,KAAK,iBAAiB,IAAI;AAAA,QACnC;AAAA,QACA,cAAc,MAAoB;AAChC,eAAK,YAAY;AAAA,QACnB;AAAA,QACA,kBAAkB,KAAmB;AAAA,QAAC;AAAA,QACtC,gBAAgB,eAAuB,OAA0B;AAC/D,gBAAM,UAAU,KAAK,aAAa,aAAa;AAC/C,cAAI,UAAU,QAAS,UAAU,UAAa,CAAC,SAAU;AACvD,iBAAK,aAAa,eAAe,EAAE;AACnC,mBAAO;AAAA,UACT,WAAW,UAAU,SAAU,UAAU,UAAa,SAAU;AAC9D,iBAAK,gBAAgB,aAAa;AAClC,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT;AAAA,QACA,sBAAsB,WAA4B;AAChD,iBAAO,KAAK,QAAQ,SAAS;AAAA,QAC/B;AAAA,QACA,iBAAiB,MAAc,UAAe,SAAqB;AAAA,QAAC;AAAA,QACpE,oBAAoB,MAAc,UAAe,SAAqB;AAAA,QAAC;AAAA,QACvE,cAAc,QAAsB;AAClC,iBAAO;AAAA,QACT;AAAA,QACA,UAAU,MAAqB;AAC7B,gBAAM,EAAE,gBAAAA,gBAAe,IAAI,aAAY;AACvC,gBAAM,QAAQA,gBAAe,cAAc,KAAK,SAAS,KAAK,cAAc;AAC5E,qBAAW,CAAC,MAAM,KAAK,KAAK,KAAK,YAAa,OAAM,aAAa,MAAM,KAAK;AAC5E,cAAI;AAAM,uBAAW,SAAS,KAAK,oBAAqB,KAAI,SAAS,eAAe,MAAO,OAAM,YAAa,MAAc,UAAU,IAAI,CAAC;AAAA;AAC3I,iBAAO;AAAA,QACT;AAAA,MACF;AAvtBE;AAAA;AAAA;AAAA;AAAA,MALoB,aAKN,eAIV,CAAC;AATA,MAAe,cAAf;AA+tBP,MAAM,mBAAN,MAA+C;AAAA,QAC7C,YAAoB,SAAsB;AAAtB;AAAA,QAAuB;AAAA,QAE3C,IAAI,SAAiB;AACnB,iBAAO,KAAK,QAAQ,UAAU,MAAM,KAAK,EAAE,OAAO,OAAK,EAAE,SAAS,CAAC,EAAE;AAAA,QACvE;AAAA,QACA,IAAI,QAAgB;AAClB,iBAAO,KAAK,QAAQ;AAAA,QACtB;AAAA,QACA,IAAI,MAAM,OAAe;AACvB,eAAK,QAAQ,YAAY;AAAA,QAC3B;AAAA,QACA,OAAO,QAAwB;AAC7B,gBAAM,UAAU,IAAI,IAAI,KAAK,QAAQ,UAAU,MAAM,KAAK,EAAE,OAAO,OAAK,EAAE,SAAS,CAAC,CAAC;AACrF,iBAAO,QAAQ,OAAK,QAAQ,IAAI,CAAC,CAAC;AAClC,eAAK,QAAQ,YAAY,MAAM,KAAK,OAAO,EAAE,KAAK,GAAG;AAAA,QACvD;AAAA,QACA,UAAU,QAAwB;AAChC,gBAAM,UAAU,IAAI,IAAI,KAAK,QAAQ,UAAU,MAAM,KAAK,EAAE,OAAO,OAAK,EAAE,SAAS,CAAC,CAAC;AACrF,iBAAO,QAAQ,OAAK,QAAQ,OAAO,CAAC,CAAC;AACrC,eAAK,QAAQ,YAAY,MAAM,KAAK,OAAO,EAAE,KAAK,GAAG;AAAA,QACvD;AAAA,QACA,SAAS,OAAwB;AAC/B,iBAAO,KAAK,QAAQ,UAAU,MAAM,KAAK,EAAE,SAAS,KAAK;AAAA,QAC3D;AAAA,QACA,OAAO,OAAe,OAA0B;AAC9C,gBAAM,WAAW,KAAK,SAAS,KAAK;AACpC,cAAI,UAAU,QAAS,UAAU,UAAa,CAAC,UAAW;AACxD,iBAAK,IAAI,KAAK;AACd,mBAAO;AAAA,UACT,OAAO;AACL,iBAAK,OAAO,KAAK;AACjB,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA,QAAQ,UAAkB,UAA2B;AACnD,cAAI,KAAK,SAAS,QAAQ,GAAG;AAC3B,iBAAK,OAAO,QAAQ;AACpB,iBAAK,IAAI,QAAQ;AACjB,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT;AAAA,QACA,KAAK,OAA8B;AACjC,gBAAM,UAAU,KAAK,QAAQ,UAAU,MAAM,KAAK,EAAE,OAAO,OAAK,EAAE,SAAS,CAAC;AAC5E,iBAAO,SAAS,KAAK,QAAQ,QAAQ,SAAS,QAAQ,KAAK,IAAI;AAAA,QACjE;AAAA,MAEF;AAGA,MAAM,WAAN,cAAuB,SAAyB;AAAA,QAK9C,YACS,MACA,OACP;AACA,gBAAM,gBAAgB,IAAI;AAHnB;AACA;AANT,eAAO,eAA+B;AACtC,eAAO,eAA8B;AACrC,eAAO,SAAwB;AAC/B,eAAO,YAAqB;AAAA,QAM5B;AAAA,QACA,IAAI,YAAoB;AACtB,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAEA,MAAM,mBAAN,MAA+C;AAAA,QAC7C,YAAoB,YAAiC;AAAjC;AAAA,QAAkC;AAAA,QACtD,IAAI,SAAiB;AACnB,iBAAO,KAAK,WAAW;AAAA,QACzB;AAAA,QACA,aAAa,eAA4B;AACvC,gBAAM,QAAQ,KAAK,WAAW,IAAI,cAAc,YAAY,CAAC;AAC7D,iBAAO,UAAU,SAAY,IAAI,SAAS,eAAe,KAAK,IAAI;AAAA,QACpE;AAAA,QACA,eAAe,KAAoB,WAAwB;AACzD,iBAAO,KAAK,aAAa,SAAS;AAAA,QACpC;AAAA,QACA,KAAK,OAAoB;AACvB,gBAAM,OAAO,MAAM,KAAK,KAAK,WAAW,KAAK,CAAC;AAC9C,cAAI,SAAS,KAAK,QAAQ,KAAK,OAAQ,QAAO,IAAI,SAAS,KAAK,KAAK,GAAG,KAAK,WAAW,IAAI,KAAK,KAAK,CAAC,CAAE;AACzG,iBAAO;AAAA,QACT;AAAA,QACA,gBAAgB,eAA4B;AAC1C,gBAAM,QAAQ,KAAK,WAAW,IAAI,cAAc,YAAY,CAAC;AAC7D,cAAI,UAAU,QAAW;AACvB,iBAAK,WAAW,OAAO,cAAc,YAAY,CAAC;AAClD,mBAAO,IAAI,SAAS,eAAe,KAAK;AAAA,UAC1C;AACA,gBAAM,IAAI,aAAa,8BAA8B,eAAe;AAAA,QACtE;AAAA,QACA,kBAAkB,KAAoB,WAAwB;AAC5D,iBAAO,KAAK,gBAAgB,SAAS;AAAA,QACvC;AAAA,QACA,aAAa,MAAgB;AAC3B,gBAAM,WAAW,KAAK,WAAW,IAAI,KAAK,KAAK,YAAY,CAAC;AAC5D,eAAK,WAAW,IAAI,KAAK,KAAK,YAAY,GAAG,KAAK,KAAK;AACvD,iBAAO,aAAa,SAAY,IAAI,SAAS,KAAK,MAAM,QAAQ,IAAI;AAAA,QACtE;AAAA,QACA,eAAe,MAAgB;AAC7B,iBAAO,KAAK,aAAa,IAAI;AAAA,QAC/B;AAAA,QACA,EAAE,OAAO,QAAQ,IAAS;AACxB,qBAAW,CAAC,KAAK,KAAK,KAAK,KAAK,WAAY,OAAM,IAAI,SAAS,KAAK,KAAK;AAAA,QAC3E;AAAA,QACA,OAAY;AACV,iBAAO,KAAK,WAAW,KAAK;AAAA,QAC9B;AAAA,QACA,SAAc;AACZ,gBAAM,OAAO;AACb,iBAAQ,aAAa;AACnB,uBAAW,CAAC,KAAK,KAAK,KAAK,KAAK,WAAY,OAAM,IAAI,SAAS,KAAK,KAAK;AAAA,UAC3E,EAAG;AAAA,QACL;AAAA,QACA,UAAe;AACb,gBAAM,OAAO;AACb,iBAAQ,aAAa;AACnB,uBAAW,CAAC,KAAK,KAAK,KAAK,KAAK,WAAY,OAAM,CAAC,KAAK,IAAI,SAAS,KAAK,KAAK,CAAC;AAAA,UAClF,EAAG;AAAA,QACL;AAAA,QACA,QAAQ,UAAe,SAAqB;AAC1C,gBAAM,OAAO,MAAM,KAAK,KAAK,WAAW,KAAK,CAAC;AAC9C,eAAK,QAAQ,CAAC,KAAK,UAAU,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,KAAK,WAAW,IAAI,GAAG,CAAE,GAAG,OAAO,IAAI,CAAC;AAAA,QAChH;AAAA,MAEF;AAAA;AAAA;;;ACn3BA;AAAA;AAAA;AAAA;AAAA,MAIa;AAJb;AAAA;AAIO,MAAM,eAAN,MAAmB;AAAA,QAOxB,YAAY,MAAY,aAAqB,WAAW,UAAU,SAA4B,MAAM;AAFpG,eAAQ,uBAAgC;AAGtC,eAAK,QAAQ;AACb,eAAK,cAAc;AACnB,eAAK,UAAU;AACf,eAAK,eAAe;AAAA,QACtB;AAAA,QAEA,IAAI,OAAa;AACf,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,aAAqB;AACvB,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,SAA4B;AAC9B,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,gBAAsB;AACxB,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,6BAAsC;AACxC,iBAAO,KAAK;AAAA,QACd;AAAA;AAAA;AAAA;AAAA,QAKA,WAAwB;AACtB,cAAI,OAAO,KAAK;AAEhB,cAAI,KAAK,sBAAsB;AAC7B,iBAAK,uBAAuB;AAC5B,gBAAI,KAAK,YAAY,IAAI,GAAG;AAC1B,qBAAO;AAAA,YACT;AAAA,UACF;AAEA,iBAAO,MAAM;AACX,kBAAM,aAAc,KAAa;AACjC,gBAAI,YAAY;AACd,qBAAO;AACP,kBAAI,KAAK,YAAY,IAAI,GAAG;AAC1B,qBAAK,eAAe;AACpB,uBAAO;AAAA,cACT;AACA;AAAA,YACF;AAEA,mBAAO,QAAQ,CAAE,KAAa,aAAa;AACzC,qBAAQ,KAAa;AACrB,kBAAI,CAAC,QAAQ,SAAU,KAAK,MAAc,YAAY;AACpD,uBAAO;AAAA,cACT;AAAA,YACF;AAEA,gBAAI,CAAC,MAAM;AACT,qBAAO;AAAA,YACT;AAEA,mBAAQ,KAAa;AACrB,gBAAI,KAAK,YAAY,IAAI,GAAG;AAC1B,mBAAK,eAAe;AACpB,qBAAO;AAAA,YACT;AAAA,UACF;AAEA,iBAAO;AAAA,QACT;AAAA;AAAA;AAAA;AAAA,QAKA,eAA4B;AAC1B,cAAI,OAAO,KAAK;AAEhB,cAAI,CAAC,KAAK,sBAAsB;AAC9B,iBAAK,uBAAuB;AAC5B,gBAAI,KAAK,YAAY,IAAI,GAAG;AAC1B,qBAAO;AAAA,YACT;AAAA,UACF;AAEA,iBAAO,QAAQ,SAAS,KAAK,OAAO;AAClC,kBAAM,cAAe,KAAa;AAClC,gBAAI,aAAa;AACf,qBAAO;AACP,qBAAQ,KAAa,WAAW;AAC9B,uBAAQ,KAAa;AAAA,cACvB;AAEA,kBAAI,KAAK,YAAY,IAAI,GAAG;AAC1B,qBAAK,eAAe;AACpB,uBAAO;AAAA,cACT;AACA;AAAA,YACF;AAEA,mBAAQ,KAAa;AACrB,gBAAI,CAAC,QAAQ,SAAU,KAAK,MAAc,YAAY;AACpD,qBAAO;AAAA,YACT;AAEA,gBAAI,KAAK,YAAY,IAAI,GAAG;AAC1B,mBAAK,eAAe;AACpB,qBAAO;AAAA,YACT;AAAA,UACF;AAEA,iBAAO;AAAA,QACT;AAAA,QAEA,SAAe;AAAA,QAAC;AAAA,QAER,YAAY,MAA4B;AAC9C,cAAI,CAAC,MAAM;AACT,mBAAO;AAAA,UACT;AAEA,gBAAM,eAAe,KAAM,KAAK,WAAW;AAC3C,cAAI,EAAE,KAAK,cAAc,eAAe;AACtC,mBAAO;AAAA,UACT;AAEA,cAAI,KAAK,SAAS;AAChB,kBAAM,SAAU,gBAAgB,KAAK,UAAW,KAAK,QAAQ,WAAW,IAAI,IAAI,KAAK,QAAQ,IAAI;AACjG,mBAAO,WAAW,WAAW;AAAA,UAC/B;AAEA,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA;;;AChJA,MAYaM;AAZb;AAAA;AAYO,MAAMA,cAiBT;AAAA;AAAA,QAEF,eAAe;AAAA,QACf,eAAe;AAAA,QACf,aAAa;AAAA;AAAA,QAGb,UAAU;AAAA,QACV,cAAc;AAAA,QACd,gBAAgB;AAAA,QAChB,WAAW;AAAA,QACX,oBAAoB;AAAA,QACpB,uBAAuB;AAAA,QACvB,aAAa;AAAA,QACb,6BAA6B;AAAA,QAC7B,cAAc;AAAA,QACd,eAAe;AAAA,QACf,oBAAoB;AAAA,QACpB,wBAAwB;AAAA,QACxB,eAAe;AAAA,MACjB;AAAA;AAAA;;;ACjDA;AAAA;AAAA;AAAA;AAAA,MAKa;AALb;AAAA;AAAA;AAKO,MAAM,aAAN,MAAiB;AAAA,QAMtB,YAAY,MAAY,aAAqBC,YAAW,UAAU,SAA4B,MAAM;AAClG,eAAK,QAAQ;AACb,eAAK,cAAc;AACnB,eAAK,UAAU;AACf,eAAK,eAAe;AAAA,QACtB;AAAA,QAEA,IAAI,OAAa;AACf,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,aAAqB;AACvB,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,SAA4B;AAC9B,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,cAAoB;AACtB,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,YAAY,MAAY;AAC1B,eAAK,eAAe;AAAA,QACtB;AAAA;AAAA;AAAA;AAAA,QAKA,aAA0B;AACxB,cAAI,OAAO,KAAK;AAChB,iBAAO,QAAQ,SAAS,KAAK,OAAO;AAClC,mBAAQ,KAAa;AACrB,gBAAI,QAAQ,KAAK,YAAY,IAAI,MAAMA,YAAW,eAAe;AAC/D,mBAAK,eAAe;AACpB,qBAAO;AAAA,YACT;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA;AAAA;AAAA;AAAA,QAKA,aAA0B;AACxB,cAAI,OAAQ,KAAK,aAAqB;AACtC,iBAAO,MAAM;AACX,kBAAM,SAAS,KAAK,YAAY,IAAI;AACpC,gBAAI,WAAWA,YAAW,eAAe;AACvC,mBAAK,eAAe;AACpB,qBAAO;AAAA,YACT;AACA,gBAAI,WAAWA,YAAW,aAAa;AACrC,oBAAM,QAAS,KAAa;AAC5B,kBAAI,OAAO;AACT,uBAAO;AACP;AAAA,cACF;AAAA,YACF;AACA,mBAAO,MAAM;AACX,oBAAM,OAAQ,KAAa;AAC3B,kBAAI,MAAM;AACR,uBAAO;AACP;AAAA,cACF;AACA,oBAAM,SAAU,KAAa;AAC7B,kBAAI,CAAC,UAAU,WAAW,KAAK,SAAS,WAAW,KAAK,cAAc;AACpE,uBAAO;AAAA,cACT;AACA,qBAAO;AAAA,YACT;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA;AAAA;AAAA;AAAA,QAKA,YAAyB;AACvB,cAAI,OAAQ,KAAK,aAAqB;AACtC,iBAAO,MAAM;AACX,kBAAM,SAAS,KAAK,YAAY,IAAI;AACpC,gBAAI,WAAWA,YAAW,eAAe;AACvC,mBAAK,eAAe;AACpB,qBAAO;AAAA,YACT;AACA,gBAAI,WAAWA,YAAW,aAAa;AACrC,oBAAM,QAAS,KAAa;AAC5B,kBAAI,OAAO;AACT,uBAAO;AACP;AAAA,cACF;AAAA,YACF;AACA,mBAAO,MAAM;AACX,oBAAM,OAAQ,KAAa;AAC3B,kBAAI,MAAM;AACR,uBAAO;AACP;AAAA,cACF;AACA,oBAAM,SAAU,KAAa;AAC7B,kBAAI,CAAC,UAAU,WAAW,KAAK,SAAS,WAAW,KAAK,cAAc;AACpE,uBAAO;AAAA,cACT;AACA,qBAAO;AAAA,YACT;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA;AAAA;AAAA;AAAA,QAKA,kBAA+B;AAC7B,cAAI,OAAO,KAAK;AAChB,cAAI,SAAS,KAAK,MAAO,QAAO;AAEhC,iBAAO,MAAM;AACX,gBAAI,UAAW,KAAa;AAC5B,mBAAO,SAAS;AACd,oBAAM,SAAS,KAAK,YAAY,OAAO;AACvC,kBAAI,WAAWA,YAAW,eAAe;AACvC,qBAAK,eAAe;AACpB,uBAAO;AAAA,cACT;AACA,kBAAI,WAAWA,YAAW,aAAa;AACrC,sBAAM,YAAa,QAAgB;AACnC,oBAAI,WAAW;AACb,4BAAU;AACV;AAAA,gBACF;AAAA,cACF;AACA,wBAAW,QAAgB;AAAA,YAC7B;AACA,mBAAQ,KAAa;AACrB,gBAAI,CAAC,QAAQ,SAAS,KAAK,SAAS,KAAK,YAAY,IAAI,MAAMA,YAAW,eAAe;AACvF,qBAAO;AAAA,YACT;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA;AAAA;AAAA;AAAA,QAKA,cAA2B;AACzB,cAAI,OAAO,KAAK;AAChB,cAAI,SAAS,KAAK,MAAO,QAAO;AAEhC,iBAAO,MAAM;AACX,gBAAI,UAAW,KAAa;AAC5B,mBAAO,SAAS;AACd,oBAAM,SAAS,KAAK,YAAY,OAAO;AACvC,kBAAI,WAAWA,YAAW,eAAe;AACvC,qBAAK,eAAe;AACpB,uBAAO;AAAA,cACT;AACA,kBAAI,WAAWA,YAAW,aAAa;AACrC,sBAAM,aAAc,QAAgB;AACpC,oBAAI,YAAY;AACd,4BAAU;AACV;AAAA,gBACF;AAAA,cACF;AACA,wBAAW,QAAgB;AAAA,YAC7B;AACA,mBAAQ,KAAa;AACrB,gBAAI,CAAC,QAAQ,SAAS,KAAK,SAAS,KAAK,YAAY,IAAI,MAAMA,YAAW,eAAe;AACvF,qBAAO;AAAA,YACT;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA;AAAA;AAAA;AAAA,QAKA,eAA4B;AAC1B,cAAI,OAAO,KAAK;AAChB,iBAAO,QAAQ,SAAS,KAAK,OAAO;AAClC,kBAAM,UAAW,KAAa;AAC9B,gBAAI,SAAS;AACX,qBAAO;AACP,qBAAO,MAAM;AACX,sBAAM,SAAS,KAAK,YAAY,IAAI;AACpC,oBAAI,WAAWA,YAAW,iBAAkB,KAAa,WAAW;AAClE,yBAAQ,KAAa;AAAA,gBACvB,OAAO;AACL,sBAAI,WAAWA,YAAW,eAAe;AACvC,yBAAK,eAAe;AACpB,2BAAO;AAAA,kBACT;AACA;AAAA,gBACF;AAAA,cACF;AACA;AAAA,YACF;AAEA,mBAAQ,KAAa;AACrB,gBAAI,MAAM;AACR,kBAAI,KAAK,YAAY,IAAI,MAAMA,YAAW,eAAe;AACvD,qBAAK,eAAe;AACpB,uBAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA;AAAA;AAAA;AAAA,QAKA,WAAwB;AACtB,cAAI,OAAO,KAAK;AAChB,cAAI,SAASA,YAAW;AAExB,iBAAO,MAAM;AACX,gBAAI,WAAWA,YAAW,eAAe;AACvC,oBAAM,aAAc,KAAa;AACjC,kBAAI,YAAY;AACd,uBAAO;AACP,yBAAS,KAAK,YAAY,IAAI;AAC9B,oBAAI,WAAWA,YAAW,eAAe;AACvC,uBAAK,eAAe;AACpB,yBAAO;AAAA,gBACT;AACA;AAAA,cACF;AAAA,YACF;AAEA,mBAAO,MAAM;AACX,kBAAI,SAAS,KAAK,MAAO,QAAO;AAChC,oBAAM,cAAe,KAAa;AAClC,kBAAI,aAAa;AACf,uBAAO;AACP;AAAA,cACF;AACA,qBAAQ,KAAa;AAAA,YACvB;AAEA,gBAAI,CAAC,KAAM,QAAO;AAElB,qBAAS,KAAK,YAAY,IAAI;AAC9B,gBAAI,WAAWA,YAAW,eAAe;AACvC,mBAAK,eAAe;AACpB,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA;AAAA;AAAA;AAAA,QAKQ,YAAY,MAAoB;AACtC,gBAAM,eAAe,KAAM,KAAK,WAAW;AAC3C,cAAI,EAAE,KAAK,cAAc,eAAe;AACtC,mBAAOA,YAAW;AAAA,UACpB;AAEA,cAAI,KAAK,SAAS;AAChB,gBAAI,OAAO,KAAK,YAAY,YAAY;AACtC,qBAAQ,KAAK,QAAgB,IAAI;AAAA,YACnC;AACA,mBAAO,KAAK,QAAQ,WAAW,IAAI;AAAA,UACrC;AAEA,iBAAOA,YAAW;AAAA,QACpB;AAAA,MACF;AAAA;AAAA;;;ACvRA;AAAA;AAAA;AAAA,sBAAAC;AAAA,IAAA;AAAA;AAAA;AAAA;;;ACCA;AACA;;;ACFA;AACA;AACA;AACA;;;ACHA;;;ACGO,MAAM,uBAAN,MAAuD;AAAA,IAG5D,YAAoB,SAA0B;AAA1B;AAAA,IACpB;AAAA,IAIA,IAAI,UAA6C;AAC/C,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IAEA,OAAO,UAAmC;AACxC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IAEA,IAAI,UAA2B;AAC7B,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IAEA,QAAQ,YAA6F,SAAqB;AACxH,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IAEA,UAA+E;AAC7E,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IAEA,OAAiD;AAC/C,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IAEA,SAAoE;AAClE,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IAEA,CAAC,OAAO,QAAQ,IAAyE;AACvF,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IAEA,IAAI,aAAqB,QAAgC;AACvD,YAAM,QAAQ,OAAO,CAAC;AACtB,WAAK,QAAQ,MAAM,YAAY,UAAU,OAAO,KAAK,CAAC;AAAA,IACxD;AAAA,IAEA,OAAO,aAAqB,QAAgC;AAC1D,WAAK,IAAI,UAAU,GAAG,MAAM;AAAA,IAC9B;AAAA,IAEA,OAAO,UAAwB;AAC7B,WAAK,QAAQ,MAAM,eAAe,QAAQ;AAAA,IAC5C;AAAA,IAEA,QAAc;AACZ,WAAK,QAAQ,MAAM,UAAU;AAAA,IAC/B;AAAA,EACF;;;ADlDO,MAAe,kBAAf,cAAuC,YAA0D;AAAA,IAYtG,YAAY,UAAkB,OAAO,eAAqB;AACxD,YAAM,SAAS,aAAa;AAX9B,WAAQ,SAAiB;AACzB,WAAQ,QAAgB;AACxB,WAAQ,OAAe;AACvB,WAAQ,UAAmB;AAC3B,WAAQ,YAAoB;AAC5B,WAAQ,aAAqB;AAC7B,WAAQ,mBAA2B;AACnC,WAAQ,aAAqB;AAC7B,WAAQ,aAAqB;AAoT7B;AAAA,WAAQ,SAAqC;AAC7C,WAAQ,WAAgC;AAkCxC,WAAQ,qBAA8C;AAAA,IAnVtD;AAAA,IAgBE,kBAAoC;AAChC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC7C;AAAA,IACA,cAAoB;AAChB,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC7C;AAAA,IACA,cAAoB;AAChB,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC7C;AAAA,IACA,cAAc,SAA4B;AACtC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC7C;AAAA;AAAA,IA0GF,IAAI,QAAgB;AAClB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,MAAM,OAAe;AACvB,WAAK,SAAS;AACd,WAAK,aAAa,SAAS,KAAK;AAAA,IAClC;AAAA,IAEA,IAAI,OAAe;AACjB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,KAAK,OAAe;AACtB,WAAK,QAAQ;AACb,WAAK,aAAa,QAAQ,KAAK;AAAA,IACjC;AAAA,IAEA,IAAI,MAAc;AAChB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,IAAI,OAAe;AACrB,WAAK,OAAO;AACZ,WAAK,aAAa,OAAO,KAAK;AAAA,IAChC;AAAA,IAEA,IAAI,SAAkB;AACpB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,OAAO,OAAgB;AACzB,WAAK,UAAU;AACf,UAAI,OAAO;AACT,aAAK,aAAa,UAAU,EAAE;AAAA,MAChC,OAAO;AACL,aAAK,gBAAgB,QAAQ;AAAA,MAC/B;AAAA,IACF;AAAA,IAEA,IAAI,WAAmB;AACrB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,SAAS,OAAe;AAC1B,WAAK,YAAY;AACjB,WAAK,aAAa,YAAY,MAAM,SAAS,CAAC;AAAA,IAChD;AAAA,IAEA,IAAI,YAAoB;AACtB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,UAAU,OAAe;AAC3B,WAAK,aAAa;AAClB,WAAK,aAAa,aAAa,KAAK;AAAA,IACtC;AAAA,IAEA,IAAI,kBAA0B;AAC5B,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,gBAAgB,OAAe;AACjC,WAAK,mBAAmB;AACxB,WAAK,aAAa,mBAAmB,KAAK;AAAA,IAC5C;AAAA,IAEA,IAAI,oBAA6B;AAC/B,aAAO,KAAK,qBAAqB;AAAA,IACnC;AAAA,IAEA,IAAI,YAAoB;AACtB,aAAO,KAAK,cAAc,KAAK,eAAe;AAAA,IAChD;AAAA,IAEA,IAAI,UAAU,OAAe;AAC3B,WAAK,aAAa;AAClB,WAAK,cAAc;AAAA,IACrB;AAAA,IAEA,IAAI,YAAoB;AACtB,aAAO,KAAK,cAAc,KAAK;AAAA,IACjC;AAAA,IAEA,IAAI,UAAU,OAAe;AAC3B,WAAK,aAAa;AAClB,UAAI,KAAK,YAAY;AACnB,cAAM,EAAE,UAAAC,UAAS,IAAI;AACrB,cAAM,WAAW,IAAIA,UAAS,OAAO,KAAK,cAAc;AACxD,aAAK,WAAW,aAAa,UAAU,IAAI;AAAA,MAC7C;AAAA,IACF;AAAA;AAAA;AAAA,IAKA,QAAc;AAEZ,cAAQ,IAAI,cAAc,KAAK,OAAO,UAAU;AAAA,IAClD;AAAA,IAEA,MAAM,SAA8B;AAAA,IAAC;AAAA,IAErC,OAAa;AAEX,WAAK,gBAAgB,cAAc;AACnC,cAAQ,IAAI,WAAW,KAAK,OAAO,UAAU;AAAA,IAC/C;AAAA;AAAA,IAGA,aAAa,eAAuB,OAAqB;AACvD,YAAM,aAAa,eAAe,KAAK;AAGvC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,eAAK,SAAS;AACd;AAAA,QACF,KAAK;AACH,eAAK,QAAQ;AACb;AAAA,QACF,KAAK;AACH,eAAK,OAAO;AACZ;AAAA,QACF,KAAK;AACH,eAAK,UAAU;AACf;AAAA,QACF,KAAK;AACH,eAAK,YAAY,SAAS,OAAO,EAAE,KAAK;AACxC;AAAA,QACF,KAAK;AACH,eAAK,aAAa;AAClB;AAAA,QACF,KAAK;AACH,eAAK,mBAAmB;AACxB;AAAA,MACJ;AAAA,IACF;AAAA;AAAA,IAGA,gBAAgB,eAA6B;AAC3C,YAAM,gBAAgB,aAAa;AAEnC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,eAAK,SAAS;AACd;AAAA,QACF,KAAK;AACH,eAAK,QAAQ;AACb;AAAA,QACF,KAAK;AACH,eAAK,OAAO;AACZ;AAAA,QACF,KAAK;AACH,eAAK,UAAU;AACf;AAAA,QACF,KAAK;AACH,eAAK,YAAY;AACjB;AAAA,QACF,KAAK;AACH,eAAK,aAAa;AAClB;AAAA,QACF,KAAK;AACH,eAAK,mBAAmB;AACxB;AAAA,MACJ;AAAA,IACF;AAAA,IAMA,IAAI,QAAa;AACf,UAAI,CAAC,KAAK,QAAQ;AAChB,aAAK,SAAS,IAAI,MAAM,IAAI,wBAAwB,IAAI,GAAG;AAAA,UACzD,KAAK,CAAC,QAAQ,SAA0B;AACtC,gBAAI,OAAO,SAAS,YAAY,EAAE,QAAQ,SAAS;AAEjD,oBAAM,UAAU,KAAK,QAAQ,UAAU,OAAK,IAAI,EAAE,YAAY,CAAC,EAAE;AACjE,qBAAO,OAAO,iBAAiB,OAAO;AAAA,YACxC;AACA,mBAAQ,OAAe,IAAI;AAAA,UAC7B;AAAA,UACA,KAAK,CAAC,QAAQ,MAAuB,UAAe;AAClD,gBAAI,OAAO,SAAS,YAAY,EAAE,QAAQ,SAAS;AAEjD,oBAAM,UAAU,KAAK,QAAQ,UAAU,OAAK,IAAI,EAAE,YAAY,CAAC,EAAE;AACjE,qBAAO,YAAY,SAAS,OAAO,KAAK,CAAC;AACzC,qBAAO;AAAA,YACT;AACA,YAAC,OAAe,IAAI,IAAI;AACxB,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AAAA,MACH;AACA,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,MAAM,OAAqC;AAC7C,UAAI,OAAO,UAAU,UAAU;AAC7B,QAAC,KAAK,MAAc,UAAU;AAAA,MAChC;AAAA,IACF;AAAA,IAIA,IAAI,oBAAyB;AAC3B,UAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAK,qBAAqB,IAAI,qBAAqB,IAAI;AAAA,MACzD;AACA,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,UAAe;AACjB,UAAI,CAAC,KAAK,UAAU;AAClB,aAAK,WAAW,IAAI;AAAA,UAClB,CAAC;AAAA,UACD;AAAA,YACE,KAAK,CAAC,QAAQ,SAA0B;AACtC,kBAAI,OAAO,SAAS,UAAU;AAE5B,sBAAM,WAAW,UAAU,KAAK,QAAQ,UAAU,OAAK,IAAI,EAAE,YAAY,CAAC,EAAE;AAC5E,uBAAO,KAAK,aAAa,QAAQ;AAAA,cACnC;AACA,qBAAO;AAAA,YACT;AAAA,YACA,KAAK,CAAC,QAAQ,MAAuB,UAAe;AAClD,kBAAI,OAAO,SAAS,UAAU;AAE5B,sBAAM,WAAW,UAAU,KAAK,QAAQ,UAAU,OAAK,IAAI,EAAE,YAAY,CAAC,EAAE;AAC5E,qBAAK,aAAa,UAAU,OAAO,KAAK,CAAC;AACzC,uBAAO;AAAA,cACT;AACA,qBAAO;AAAA,YACT;AAAA,YACA,gBAAgB,CAAC,QAAQ,SAA0B;AACjD,kBAAI,OAAO,SAAS,UAAU;AAC5B,sBAAM,WAAW,UAAU,KAAK,QAAQ,UAAU,OAAK,IAAI,EAAE,YAAY,CAAC,EAAE;AAC5E,qBAAK,gBAAgB,QAAQ;AAC7B,uBAAO;AAAA,cACT;AACA,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,QAAgB;AAClB,aAAO,KAAK,aAAa,OAAO,KAAK;AAAA,IACvC;AAAA,IAEA,IAAI,MAAM,OAAe;AACvB,WAAK,aAAa,SAAS,KAAK;AAAA,IAClC;AAAA,EACF;AAGA,MAAM,0BAAN,MAA8B;AAAA,IAG5B,YAAoB,SAA0B;AAA1B;AAEpB,wBAAkB;AAAA,IAF6B;AAAA,IAI/C,oBAAoB,UAA0B;AAC5C,aAAO;AAAA,IACT;AAAA,IAEA,IAAI,UAAkB;AACpB,aAAO,KAAK,QAAQ,aAAa,OAAO,KAAK;AAAA,IAC/C;AAAA,IAEA,IAAI,QAAQ,OAAe;AACzB,WAAK,QAAQ,aAAa,SAAS,KAAK;AAAA,IAC1C;AAAA,IAEA,IAAI,SAAiB;AACnB,aAAO,KAAK,WAAW,KAAK,OAAO,EAAE;AAAA,IACvC;AAAA,IAEA,iBAAiB,UAA0B;AACzC,YAAM,QAAQ,KAAK,WAAW,KAAK,OAAO;AAC1C,aAAO,MAAM,IAAI,QAAQ,KAAK;AAAA,IAChC;AAAA,IAEA,YAAY,UAAkB,OAAsB,WAAmB,IAAU;AAC/E,YAAM,QAAQ,KAAK,WAAW,KAAK,OAAO;AAC1C,UAAI,UAAU,QAAQ,UAAU,IAAI;AAClC,cAAM,OAAO,QAAQ;AAAA,MACvB,OAAO;AACL,cAAM,IAAI,UAAU,KAAK;AAAA,MAC3B;AACA,WAAK,UAAU,KAAK,eAAe,KAAK;AAAA,IAC1C;AAAA,IAEA,eAAe,UAA0B;AACvC,YAAM,QAAQ,KAAK,WAAW,KAAK,OAAO;AAC1C,YAAM,QAAQ,MAAM,IAAI,QAAQ,KAAK;AACrC,YAAM,OAAO,QAAQ;AACrB,WAAK,UAAU,KAAK,eAAe,KAAK;AACxC,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,OAAuB;AAC1B,YAAM,QAAQ,KAAK,WAAW,KAAK,OAAO;AAC1C,aAAO,MAAM,KAAK,MAAM,KAAK,CAAC,EAAE,KAAK,KAAK;AAAA,IAC5C;AAAA,IAEQ,WAAW,SAAsC;AACvD,YAAM,QAAQ,oBAAI,IAAoB;AACtC,UAAI,CAAC,QAAS,QAAO;AAErB,cAAQ,MAAM,GAAG,EAAE,QAAQ,iBAAe;AACxC,cAAM,OAAO,YAAY,KAAK;AAC9B,YAAI,CAAC,KAAM;AAEX,cAAM,aAAa,KAAK,QAAQ,GAAG;AACnC,YAAI,eAAe,IAAI;AACrB,gBAAM,WAAW,KAAK,UAAU,GAAG,UAAU,EAAE,KAAK;AACpD,gBAAM,QAAQ,KAAK,UAAU,aAAa,CAAC,EAAE,KAAK;AAClD,cAAI,YAAY,OAAO;AACrB,kBAAM,IAAI,UAAU,KAAK;AAAA,UAC3B;AAAA,QACF;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IAEQ,eAAe,OAAoC;AACzD,aAAO,MAAM,KAAK,MAAM,QAAQ,CAAC,EAC9B,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM,GAAG,QAAQ,KAAK,KAAK,EAAE,EAClD,KAAK,IAAI;AAAA,IACd;AAAA,EACF;;;AE3eO,MAAM,qBAAN,cAAiC,gBAAgB;AAAA,IAEpD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,IAGA,IAAI,YAAoB;AACpB,aAAO,KAAK,SAAS,YAAY;AAAA,IACrC;AAAA,EACJ;;;ACVO,MAAM,cAAN,cAA0B,gBAAgB;AAAA,EAEjD;;;ACGO,MAAM,oBAAN,cAAgC,gBAAiB;AAAA,IAIpD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAJhC,WAAQ,QAAgB;AACxB,WAAQ,UAAkB;AAAA,IAI1B;AAAA,IAEA,IAAI,OAAe;AACf,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,KAAK,OAAe;AACpB,WAAK,QAAQ;AACb,WAAK,aAAa,QAAQ,KAAK;AAAA,IACnC;AAAA,IAEA,IAAI,SAAiB;AACjB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,OAAO,OAAe;AACtB,WAAK,UAAU;AACf,WAAK,aAAa,UAAU,KAAK;AAAA,IACrC;AAAA;AAAA,IAGA,aAAa,eAAuB,OAAqB;AACrD,YAAM,aAAa,eAAe,KAAK;AAEvC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,UAAU;AACf;AAAA,MACR;AAAA,IACJ;AAAA;AAAA,IAGA,gBAAgB,eAA6B;AACzC,YAAM,gBAAgB,aAAa;AAEnC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,UAAU;AACf;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;;;ACvDO,MAAM,kBAAN,cAA8B,gBAAgB;AAAA,IA6DjD,YAAY,eAAyB;AACjC,YAAM,QAAQ,aAAa;AA1D/B;AAAA;AAAA;AAAA,iBAAc;AAKd;AAAA;AAAA;AAAA,oBAAiB;AAKjB;AAAA;AAAA;AAAA,mBAAgB;AAKhB;AAAA;AAAA;AAAA,kBAAe;AAKf;AAAA;AAAA;AAAA,oBAAiB;AAKjB;AAAA;AAAA;AAAA,iBAAc;AAKd;AAAA;AAAA;AAAA,kBAAe;AAKf;AAAA;AAAA;AAAA,sBAAmB;AAKnB;AAAA;AAAA;AAAA,mBAAgB;AAKhB;AAAA;AAAA;AAAA,sBAAmB;AAKnB;AAAA;AAAA;AAAA,kBAAe;AAKf;AAAA;AAAA;AAAA,4BAAyB;AAAA,IAIzB;AAAA,EACJ;;;AClEO,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IACpD,YAAY,UAAkB,SAAS,eAAqB;AAC1D,YAAM,SAAS,aAAa;AAAA,IAC9B;AAAA,EACF;;;ACDO,MAAM,kBAAN,cAA8B,gBAAgB;AAAA,IAIjD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAJhC,WAAQ,QAAgB;AACxB,WAAQ,UAAkB;AAAA,IAI1B;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,OAAe;AACf,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,KAAK,OAAe;AACpB,WAAK,QAAQ;AACb,WAAK,aAAa,QAAQ,KAAK;AAAA,IACnC;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,SAAiB;AACjB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,OAAO,OAAe;AACtB,WAAK,UAAU;AACf,WAAK,aAAa,UAAU,KAAK;AAAA,IACrC;AAAA;AAAA,IAGA,aAAa,eAAuB,OAAqB;AACrD,YAAM,aAAa,eAAe,KAAK;AAEvC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,UAAU;AACf;AAAA,MACR;AAAA,IACJ;AAAA;AAAA,IAGA,gBAAgB,eAA6B;AACzC,YAAM,gBAAgB,aAAa;AAEnC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,UAAU;AACf;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;;;AC9DO,MAAM,kBAAN,cAA8B,gBAAgB;AAAA,IACjD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,EACJ;;;ACJO,MAAM,oBAAN,cAAgC,gBAAgB;AAAA,IAKrD,YAAY,UAAkB,UAAU,eAAqB;AAC3D,YAAM,SAAS,aAAa;AAL9B,WAAQ,QAAgB;AACxB,WAAQ,YAAqB;AAC7B,WAAQ,SAAiB;AAAA,IAIzB;AAAA,IAEA,IAAI,OAAe;AACjB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,KAAK,OAAe;AACtB,WAAK,QAAQ;AACb,WAAK,aAAa,QAAQ,KAAK;AAAA,IACjC;AAAA,IAEA,IAAI,WAAoB;AACtB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,SAAS,OAAgB;AAC3B,WAAK,YAAY;AACjB,UAAI,OAAO;AACT,aAAK,aAAa,YAAY,EAAE;AAAA,MAClC,OAAO;AACL,aAAK,gBAAgB,UAAU;AAAA,MACjC;AAAA,IACF;AAAA,IAEA,IAAI,QAAgB;AAClB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,MAAM,OAAe;AACvB,WAAK,SAAS;AACd,WAAK,aAAa,SAAS,KAAK;AAAA,IAClC;AAAA;AAAA,IAGA,aAAa,eAAuB,OAAqB;AACvD,YAAM,aAAa,eAAe,KAAK;AAEvC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,eAAK,QAAQ;AACb;AAAA,QACF,KAAK;AACH,eAAK,YAAY;AACjB;AAAA,QACF,KAAK;AACH,eAAK,SAAS;AACd;AAAA,MACJ;AAAA,IACF;AAAA;AAAA,IAGA,gBAAgB,eAA6B;AAC3C,YAAM,gBAAgB,aAAa;AAEnC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,eAAK,QAAQ;AACb;AAAA,QACF,KAAK;AACH,eAAK,YAAY;AACjB;AAAA,QACF,KAAK;AACH,eAAK,SAAS;AACd;AAAA,MACJ;AAAA,IACF;AAAA,EACF;;;AChFO,MAAM,oBAAN,cAAgC,gBAAgB;AAAA,IAInD,YAAY,UAAkB,UAAU,eAAqB;AACzD,YAAM,SAAS,aAAa;AAJhC,WAAQ,SAAiB;AACzB,WAAQ,UAAkB;AAAA,IAI1B;AAAA,IAEA,IAAI,QAAgB;AAChB,YAAM,YAAY,KAAK,aAAa,OAAO;AAC3C,UAAI,cAAc,MAAM;AACpB,cAAM,SAAS,SAAS,WAAW,EAAE;AACrC,eAAO,MAAM,MAAM,IAAI,MAAM;AAAA,MACjC;AACA,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,MAAM,OAAe;AACrB,WAAK,SAAS;AACd,WAAK,aAAa,SAAS,MAAM,SAAS,CAAC;AAAA,IAC/C;AAAA,IAEA,IAAI,SAAiB;AACjB,YAAM,aAAa,KAAK,aAAa,QAAQ;AAC7C,UAAI,eAAe,MAAM;AACrB,cAAM,SAAS,SAAS,YAAY,EAAE;AACtC,eAAO,MAAM,MAAM,IAAI,MAAM;AAAA,MACjC;AACA,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,OAAO,OAAe;AACtB,WAAK,UAAU;AACf,WAAK,aAAa,UAAU,MAAM,SAAS,CAAC;AAAA,IAChD;AAAA;AAAA,IAGA,WAAW,WAAmB,SAAoB;AAG9C,aAAO;AAAA,IACX;AAAA,IAEA,UAAU,MAAe,SAAuB;AAE5C,aAAO;AAAA,IACX;AAAA,IAEA,OAAO,UAAuC,MAAe,SAAqB;AAE9E,iBAAW,MAAM,SAAS,IAAI,GAAG,CAAC;AAAA,IACtC;AAAA;AAAA,IAGA,wBAAiC;AAE7B,aAAO;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,OAAO,KAAK;AAAA,QACZ,QAAQ,KAAK;AAAA,QACb,KAAK;AAAA,QACL,OAAO,KAAK;AAAA,QACZ,QAAQ,KAAK;AAAA,QACb,MAAM;AAAA,QACN,QAAQ,OAAO,CAAC;AAAA,MACpB;AAAA,IACJ;AAAA,EACJ;;;AC/DM,MAAO,qBAAP,cAAkC,gBAAe;IACnD,YAAY,SAAiB,eAAmB;AAC5C,YAAM,SAAS,aAAa;IAChC;;;;IAKA,IAAI,QAAK;AACL,aAAO,KAAK,aAAa,OAAO,KAAK;IACzC;;;;IAKA,IAAI,MAAM,OAAa;AACnB,WAAK,aAAa,SAAS,KAAK;IACpC;;;;ACvBG,MAAM,kBAAN,cAA8B,gBAAgB;AAAA,IACnD,YAAY,UAAkB,QAAQ,eAAqB;AACzD,YAAM,SAAS,aAAa;AAAA,IAC9B;AAAA,EACF;;;ACJO,MAAM,sBAAN,cAAkC,gBAAgB;AAAA,IAAE,YAAY,UAAkB,YAAY,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACAtJ,MAAM,qBAAN,cAAiC,gBAAgB;AAAA,IAAE,YAAY,UAAkB,WAAW,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACApJ,MAAM,oBAAN,cAAgC,gBAAgB;AAAA,IAAE,YAAY,UAAkB,UAAU,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACMlJ,MAAM,iBAAN,cAA6B,gBAA0C;AAAA,IAC1E,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,EACJ;;;ACVO,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IAAE,YAAY,UAAkB,MAAM,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACM7I,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IAqBlD,YAAY,eAAyB;AACjC,YAAM,SAAS,aAAa;AAlBhC;AAAA;AAAA;AAAA,iBAAc;AAKd;AAAA;AAAA;AAAA,kBAAe;AAKf;AAAA;AAAA;AAAA,mBAAgB;AAKhB;AAAA;AAAA;AAAA,oBAAiB;AAAA,IAIjB;AAAA,EACJ;;;AC9BO,MAAM,sBAAN,cAAkC,gBAAgB;AAAA,IAAE,YAAY,UAAkB,YAAY,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACMtJ,MAAM,kBAAN,cAA8B,gBAAgB;AAAA,IAOjD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAPhC,WAAQ,UAAkB;AAC1B,WAAQ,UAAkB;AAC1B,WAAQ,WAAmB;AAC3B,WAAQ,UAAkB;AAC1B,WAAQ,cAAuB;AAAA,IAI/B;AAAA,IAEA,IAAI,SAAiB;AACjB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,OAAO,OAAe;AACtB,WAAK,UAAU;AACf,WAAK,aAAa,UAAU,KAAK;AAAA,IACrC;AAAA,IAEA,IAAI,SAAiB;AACjB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,OAAO,OAAe;AACtB,WAAK,UAAU,MAAM,YAAY;AACjC,WAAK,aAAa,UAAU,KAAK;AAAA,IACrC;AAAA,IAEA,IAAI,UAAkB;AAClB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,QAAQ,OAAe;AACvB,WAAK,WAAW;AAChB,WAAK,aAAa,WAAW,KAAK;AAAA,IACtC;AAAA,IAEA,IAAI,SAAiB;AACjB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,OAAO,OAAe;AACtB,WAAK,UAAU;AACf,WAAK,aAAa,UAAU,KAAK;AAAA,IACrC;AAAA,IAEA,IAAI,aAAsB;AACtB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,WAAW,OAAgB;AAC3B,WAAK,cAAc;AACnB,UAAI,OAAO;AACP,aAAK,aAAa,cAAc,EAAE;AAAA,MACtC,OAAO;AACH,aAAK,gBAAgB,YAAY;AAAA,MACrC;AAAA,IACJ;AAAA;AAAA,IAGA,SAAe;AAEX,cAAQ,IAAI,gBAAgB;AAAA,IAChC;AAAA,IAEA,QAAc;AAEV,cAAQ,IAAI,YAAY;AAAA,IAC5B;AAAA,IAEA,gBAAyB;AAErB,aAAO;AAAA,IACX;AAAA;AAAA,IAGA,aAAa,eAAuB,OAAqB;AACrD,YAAM,aAAa,eAAe,KAAK;AAEvC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,UAAU;AACf;AAAA,QACJ,KAAK;AACD,eAAK,UAAU,MAAM,YAAY;AACjC;AAAA,QACJ,KAAK;AACD,eAAK,WAAW;AAChB;AAAA,QACJ,KAAK;AACD,eAAK,UAAU;AACf;AAAA,QACJ,KAAK;AACD,eAAK,cAAc;AACnB;AAAA,MACR;AAAA,IACJ;AAAA;AAAA,IAGA,gBAAgB,eAA6B;AACzC,YAAM,gBAAgB,aAAa;AAEnC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,UAAU;AACf;AAAA,QACJ,KAAK;AACD,eAAK,UAAU;AACf;AAAA,QACJ,KAAK;AACD,eAAK,WAAW;AAChB;AAAA,QACJ,KAAK;AACD,eAAK,UAAU;AACf;AAAA,QACJ,KAAK;AACD,eAAK,cAAc;AACnB;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;;;AC3HO,MAAM,gBAAN,cAA4B,gBAAgB;AAAA,IAC/C,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,EACJ;;;ACJO,MAAM,kBAAN,cAA8B,gBAAgB;AAAA,IACjD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,EACJ;;;ACVO,MAAM,gBAAN,cAA4B,gBAAgB;AAAA,IAAE,YAAY,UAAkB,MAAM,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACO1I,MAAM,kBAAN,cAA8B,gBAAgB;AAAA;AAAA;AAAA,IAIjD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA8BA,IAAI,UAAkB;AAClB,aAAO,KAAK,aAAa,SAAS,KAAK;AAAA,IAC3C;AAAA,IAEA,IAAI,QAAQ,OAAe;AACvB,WAAK,aAAa,WAAW,KAAK;AAAA,IACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+BJ;;;AChFO,MAAM,oBAAN,cAAgC,gBAAgB;AAAA,IAAE,YAAY,UAAkB,UAAU,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACMlJ,MAAM,iBAAN,cAA6B,gBAAiB;AAAA,IAMjD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AANhC,WAAQ,OAAe;AACvB,WAAQ,OAAe;AACvB,WAAQ,SAAiB;AACzB,WAAQ,UAAkB;AAAA,IAI1B;AAAA,IAGA,IAAI,MAAc;AACd,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,IAAI,OAAe;AACnB,WAAK,OAAO;AACZ,WAAK,aAAa,OAAO,KAAK;AAAA,IAClC;AAAA,IAEA,IAAI,MAAc;AACd,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,IAAI,OAAe;AACnB,WAAK,OAAO;AACZ,WAAK,aAAa,OAAO,KAAK;AAAA,IAClC;AAAA,IAEA,IAAI,QAAgB;AAChB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,MAAM,OAAe;AACrB,WAAK,SAAS;AACd,WAAK,aAAa,SAAS,MAAM,SAAS,CAAC;AAAA,IAC/C;AAAA,IAEA,IAAI,SAAiB;AACjB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,OAAO,OAAe;AACtB,WAAK,UAAU;AACf,WAAK,aAAa,UAAU,MAAM,SAAS,CAAC;AAAA,IAChD;AAAA;AAAA,IAGA,aAAa,eAAuB,OAAqB;AACrD,YAAM,aAAa,eAAe,KAAK;AAEvC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,OAAO;AACZ;AAAA,QACJ,KAAK;AACD,eAAK,OAAO;AACZ;AAAA,QACJ,KAAK;AACD,eAAK,SAAS,SAAS,OAAO,EAAE,KAAK;AACrC;AAAA,QACJ,KAAK;AACD,eAAK,UAAU,SAAS,OAAO,EAAE,KAAK;AACtC;AAAA,MACR;AAAA,IACJ;AAAA;AAAA,IAGA,gBAAgB,eAA6B;AACzC,YAAM,gBAAgB,aAAa;AAEnC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,OAAO;AACZ;AAAA,QACJ,KAAK;AACD,eAAK,OAAO;AACZ;AAAA,QACJ,KAAK;AACD,eAAK,SAAS;AACd;AAAA,QACJ,KAAK;AACD,eAAK,UAAU;AACf;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;;;ACxFO,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IASlD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAThC,WAAQ,QAAgB;AACxB,WAAQ,SAAiB;AACzB,WAAQ,eAAuB;AAC/B,WAAQ,YAAqB;AAC7B,WAAQ,YAAqB;AAC7B,WAAQ,YAAqB;AAC7B,WAAQ,WAAoB;AAAA,IAI5B;AAAA,IAGA,IAAI,OAAe;AACf,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,KAAK,OAAe;AACpB,WAAK,QAAQ;AACb,WAAK,aAAa,QAAQ,KAAK;AAAA,IACnC;AAAA,IAEA,IAAI,QAAgB;AAChB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,MAAM,OAAe;AACrB,WAAK,SAAS;AACd,WAAK,aAAa,SAAS,KAAK;AAAA,IACpC;AAAA,IAEA,IAAI,cAAsB;AACtB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,YAAY,OAAe;AAC3B,WAAK,eAAe;AACpB,WAAK,aAAa,eAAe,KAAK;AAAA,IAC1C;AAAA,IAEA,IAAI,WAAoB;AACpB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,SAAS,OAAgB;AACzB,WAAK,YAAY;AACjB,UAAI,OAAO;AACP,aAAK,aAAa,YAAY,EAAE;AAAA,MACpC,OAAO;AACH,aAAK,gBAAgB,UAAU;AAAA,MACnC;AAAA,IACJ;AAAA,IAEA,IAAI,WAAoB;AACpB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,SAAS,OAAgB;AACzB,WAAK,YAAY;AACjB,UAAI,OAAO;AACP,aAAK,aAAa,YAAY,EAAE;AAAA,MACpC,OAAO;AACH,aAAK,gBAAgB,UAAU;AAAA,MACnC;AAAA,IACJ;AAAA,IAEA,IAAI,WAAoB;AACpB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,SAAS,OAAgB;AACzB,WAAK,YAAY;AACjB,UAAI,OAAO;AACP,aAAK,aAAa,YAAY,EAAE;AAAA,MACpC,OAAO;AACH,aAAK,gBAAgB,UAAU;AAAA,MACnC;AAAA,IACJ;AAAA,IAEA,IAAI,UAAmB;AACnB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,QAAQ,OAAgB;AACxB,WAAK,WAAW;AAChB,UAAI,OAAO;AACP,aAAK,aAAa,WAAW,EAAE;AAAA,MACnC,OAAO;AACH,aAAK,gBAAgB,SAAS;AAAA,MAClC;AAAA,IACJ;AAAA;AAAA,IAGA,aAAa,eAAuB,OAAqB;AACrD,YAAM,aAAa,eAAe,KAAK;AAEvC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,SAAS;AACd;AAAA,QACJ,KAAK;AACD,eAAK,eAAe;AACpB;AAAA,QACJ,KAAK;AACD,eAAK,YAAY;AACjB;AAAA,QACJ,KAAK;AACD,eAAK,YAAY;AACjB;AAAA,QACJ,KAAK;AACD,eAAK,YAAY;AACjB;AAAA,QACJ,KAAK;AACD,eAAK,WAAW;AAChB;AAAA,MACR;AAAA,IACJ;AAAA;AAAA,IAGA,gBAAgB,eAA6B;AACzC,YAAM,gBAAgB,aAAa;AAEnC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,SAAS;AACd;AAAA,QACJ,KAAK;AACD,eAAK,eAAe;AACpB;AAAA,QACJ,KAAK;AACD,eAAK,YAAY;AACjB;AAAA,QACJ,KAAK;AACD,eAAK,YAAY;AACjB;AAAA,QACJ,KAAK;AACD,eAAK,YAAY;AACjB;AAAA,QACJ,KAAK;AACD,eAAK,WAAW;AAChB;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;;;AC9JO,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IAAE,YAAY,UAAkB,SAAS,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACAhJ,MAAM,oBAAN,cAAgC,gBAAgB;AAAA,IAAE,YAAY,UAAkB,UAAU,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACMlJ,MAAM,gBAAN,cAA4B,gBAAgB;AAAA,IAG/C,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAHhC,WAAQ,SAAiB;AAAA,IAIzB;AAAA,IAEA,IAAI,QAAgB;AAChB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,MAAM,OAAe;AACrB,WAAK,SAAS;AACd,WAAK,aAAa,SAAS,MAAM,SAAS,CAAC;AAAA,IAC/C;AAAA;AAAA,IAGA,aAAa,eAAuB,OAAqB;AACrD,YAAM,aAAa,eAAe,KAAK;AAEvC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,SAAS,SAAS,OAAO,EAAE,KAAK;AACrC;AAAA,MACR;AAAA,IACJ;AAAA;AAAA,IAGA,gBAAgB,eAA6B;AACzC,YAAM,gBAAgB,aAAa;AAEnC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,SAAS;AACd;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;;;ACvCO,MAAM,kBAAN,cAA8B,gBAAgB;AAAA,IAMjD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AANhC,WAAQ,QAAgB;AACxB,WAAQ,OAAe;AACvB,WAAQ,QAAgB;AACxB,WAAQ,SAAiB;AAAA,IAIzB;AAAA,IAEA,IAAI,OAAe;AACf,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,KAAK,OAAe;AACpB,WAAK,QAAQ;AACb,WAAK,aAAa,QAAQ,KAAK;AAAA,IACnC;AAAA,IAEA,IAAI,MAAc;AACd,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,IAAI,OAAe;AACnB,WAAK,OAAO;AACZ,WAAK,aAAa,OAAO,KAAK;AAAA,IAClC;AAAA,IAEA,IAAI,OAAe;AACf,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,KAAK,OAAe;AACpB,WAAK,QAAQ;AACb,WAAK,aAAa,QAAQ,KAAK;AAAA,IACnC;AAAA,IAEA,IAAI,QAAgB;AAChB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,MAAM,OAAe;AACrB,WAAK,SAAS;AACd,WAAK,aAAa,SAAS,KAAK;AAAA,IACpC;AAAA;AAAA,IAGA,aAAa,eAAuB,OAAqB;AACrD,YAAM,aAAa,eAAe,KAAK;AAEvC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,OAAO;AACZ;AAAA,QACJ,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,SAAS;AACd;AAAA,MACR;AAAA,IACJ;AAAA;AAAA,IAGA,gBAAgB,eAA6B;AACzC,YAAM,gBAAgB,aAAa;AAEnC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,OAAO;AACZ;AAAA,QACJ,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,SAAS;AACd;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;;;AC7FO,MAAM,iBAAN,cAA6B,gBAAgB;AAAA,IAAE,YAAY,UAAkB,OAAO,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACDnJ;AAOO,MAAM,kBAAN,cAA8B,YAAY;AAAA,IAC7C,YAAY,SAAiB,eAAoB;AAC7C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,EACJ;;;ACVO,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IAAE,YAAY,UAAkB,SAAS,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACAhJ,MAAM,iBAAN,cAA6B,gBAAgB;AAAA,IAAE,YAAY,UAAkB,OAAO,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACA5I,MAAM,oBAAN,cAAgC,gBAAgB;AAAA,IAAE,YAAY,UAAkB,UAAU,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACMlJ,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IAKlD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AALhC,WAAQ,SAAiB;AACzB,WAAQ,QAAgB;AACxB,WAAQ,YAAqB;AAAA,IAI7B;AAAA,IAEA,IAAI,QAAgB;AAChB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,MAAM,OAAe;AACrB,WAAK,SAAS;AACd,WAAK,aAAa,SAAS,MAAM,SAAS,CAAC;AAAA,IAC/C;AAAA,IAEA,IAAI,OAAe;AACf,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,KAAK,OAAe;AACpB,WAAK,QAAQ;AACb,WAAK,aAAa,QAAQ,KAAK;AAAA,IACnC;AAAA,IAEA,IAAI,WAAoB;AACpB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,SAAS,OAAgB;AACzB,WAAK,YAAY;AACjB,UAAI,OAAO;AACP,aAAK,aAAa,YAAY,EAAE;AAAA,MACpC,OAAO;AACH,aAAK,gBAAgB,UAAU;AAAA,MACnC;AAAA,IACJ;AAAA;AAAA,IAGA,aAAa,eAAuB,OAAqB;AACrD,YAAM,aAAa,eAAe,KAAK;AAEvC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,SAAS,SAAS,OAAO,EAAE,KAAK;AACrC;AAAA,QACJ,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,YAAY;AACjB;AAAA,MACR;AAAA,IACJ;AAAA;AAAA,IAGA,gBAAgB,eAA6B;AACzC,YAAM,gBAAgB,aAAa;AAEnC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,SAAS;AACd;AAAA,QACJ,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,YAAY;AACjB;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;;;ACjFO,MAAM,sBAAN,cAAkC,gBAAgB;AAAA,IAAE,YAAY,UAAkB,YAAY,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACAtJ,MAAM,oBAAN,cAAgC,gBAAgB;AAAA,IAAE,YAAY,UAAkB,UAAU,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACAlJ,MAAM,oBAAN,cAAgC,gBAAgB;AAAA,IAAE,YAAY,UAAkB,UAAU,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACMlJ,MAAM,eAAN,cAA2B,gBAAiB;AAAA,IAC/C,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,EACJ;;;ACVO,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IAAE,YAAY,UAAkB,SAAS,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACAhJ,MAAM,qBAAN,cAAiC,gBAAgB;AAAA,IAAE,YAAY,UAAkB,WAAW,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACApJ,MAAM,iBAAN,cAA6B,gBAAgB;AAAA,IAAE,YAAY,UAAkB,OAAO,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACA5I,MAAM,sBAAN,cAAkC,gBAAgB;AAAA,IAAE,YAAY,UAAkB,YAAY,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACAtJ,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IAAE,YAAY,UAAkB,cAAc,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACMrJ,MAAM,oBAAN,cAAgC,gBAAgB;AAAA,IAOnD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAPhC,WAAQ,OAAe;AACvB,WAAQ,QAAgB;AACxB,WAAQ,SAAkB;AAC1B,WAAQ,SAAkB;AAC1B,WAAQ,eAAuB;AAAA,IAI/B;AAAA,IAEA,IAAI,MAAc;AACd,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,IAAI,OAAe;AACnB,WAAK,OAAO;AACZ,WAAK,aAAa,OAAO,KAAK;AAAA,IAClC;AAAA,IAEA,IAAI,OAAe;AACf,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,KAAK,OAAe;AACpB,WAAK,QAAQ;AACb,WAAK,aAAa,QAAQ,KAAK;AAAA,IACnC;AAAA,IAEA,IAAI,QAAiB;AACjB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,MAAM,OAAgB;AACtB,WAAK,SAAS;AACd,UAAI,OAAO;AACP,aAAK,aAAa,SAAS,EAAE;AAAA,MACjC,OAAO;AACH,aAAK,gBAAgB,OAAO;AAAA,MAChC;AAAA,IACJ;AAAA,IAEA,IAAI,QAAiB;AACjB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,MAAM,OAAgB;AACtB,WAAK,SAAS;AACd,UAAI,OAAO;AACP,aAAK,aAAa,SAAS,EAAE;AAAA,MACjC,OAAO;AACH,aAAK,gBAAgB,OAAO;AAAA,MAChC;AAAA,IACJ;AAAA,IAEA,IAAI,cAAsB;AACtB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,YAAY,OAAe;AAC3B,WAAK,eAAe;AACpB,WAAK,aAAa,eAAe,KAAK;AAAA,IAC1C;AAAA,IAEA,IAAI,OAAe;AACf,aAAO,KAAK,eAAe;AAAA,IAC/B;AAAA,IAEA,IAAI,KAAK,OAAe;AACpB,WAAK,cAAc;AAAA,IACvB;AAAA;AAAA,IAGA,aAAa,eAAuB,OAAqB;AACrD,YAAM,aAAa,eAAe,KAAK;AAEvC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,OAAO;AACZ;AAAA,QACJ,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,SAAS;AACd;AAAA,QACJ,KAAK;AACD,eAAK,SAAS;AACd;AAAA,QACJ,KAAK;AACD,eAAK,eAAe;AACpB;AAAA,MACR;AAAA,IACJ;AAAA;AAAA,IAGA,gBAAgB,eAA6B;AACzC,YAAM,gBAAgB,aAAa;AAEnC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,OAAO;AACZ;AAAA,QACJ,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,SAAS;AACd;AAAA,QACJ,KAAK;AACD,eAAK,SAAS;AACd;AAAA,QACJ,KAAK;AACD,eAAK,eAAe;AACpB;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;;;AC7HO,MAAM,oBAAN,cAAgC,gBAAgB;AAAA,IAAE,YAAY,UAAkB,UAAU,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACAlJ,MAAM,kBAAN,cAA8B,gBAAgB;AAAA,IAAE,YAAY,UAAkB,QAAQ,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACA9I,MAAM,oBAAN,cAAgC,gBAAgB;AAAA,IAAE,YAAY,UAAkB,UAAU,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACMlJ,MAAM,kBAAN,cAA8B,gBAAgB;AAAA,IACjD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,EACJ;;;ACJO,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IAIlD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAJhC,WAAQ,QAAgB;AACxB,WAAQ,SAAiB;AAAA,IAIzB;AAAA,IAEA,IAAI,OAAe;AACf,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,KAAK,OAAe;AACpB,WAAK,QAAQ;AACb,WAAK,aAAa,QAAQ,KAAK;AAAA,IACnC;AAAA,IAEA,IAAI,QAAgB;AAChB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,MAAM,OAAe;AACrB,WAAK,SAAS;AACd,WAAK,aAAa,SAAS,KAAK;AAAA,IACpC;AAAA;AAAA,IAGA,aAAa,eAAuB,OAAqB;AACrD,YAAM,aAAa,eAAe,KAAK;AAEvC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,SAAS;AACd;AAAA,MACR;AAAA,IACJ;AAAA;AAAA,IAGA,gBAAgB,eAA6B;AACzC,YAAM,gBAAgB,aAAa;AAEnC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,QAAQ;AACb;AAAA,QACJ,KAAK;AACD,eAAK,SAAS;AACd;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;;;ACtDO,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IAClD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,IAEA,IAAI,UAA8B;AAC9B,aAAO,KAAK,cAAc,SAAS;AAAA,IACvC;AAAA,IAEA,IAAI,QAA4B;AAC5B,aAAO,KAAK,cAAc,OAAO;AAAA,IACrC;AAAA,IAEA,IAAI,QAA4B;AAC5B,aAAO,KAAK,cAAc,OAAO;AAAA,IACrC;AAAA,IAEA,IAAI,UAA6B;AAC7B,aAAO,KAAK,iBAAiB,OAAO;AAAA,IACxC;AAAA,IAEA,IAAI,OAA0B;AAC1B,aAAO,KAAK,iBAAiB,IAAI;AAAA,IACrC;AAAA,IAEA,gBAA6B;AACzB,UAAI,UAAU,KAAK;AACnB,UAAI,CAAC,SAAS;AACV,kBAAU,KAAK,cAAc,cAAc,SAAS;AACpD,aAAK,aAAa,SAAS,KAAK,UAAU;AAAA,MAC9C;AACA,aAAO;AAAA,IACX;AAAA,IAEA,gBAAsB;AAClB,YAAM,UAAU,KAAK;AACrB,UAAI,SAAS;AACT,aAAK,YAAY,OAAO;AAAA,MAC5B;AAAA,IACJ;AAAA,IAEA,cAA2B;AACvB,UAAI,QAAQ,KAAK;AACjB,UAAI,CAAC,OAAO;AACR,gBAAQ,KAAK,cAAc,cAAc,OAAO;AAChD,cAAM,aAAa,KAAK,cAAc,OAAO;AAC7C,aAAK,aAAa,OAAO,UAAU;AAAA,MACvC;AACA,aAAO;AAAA,IACX;AAAA,IAEA,cAAoB;AAChB,YAAM,QAAQ,KAAK;AACnB,UAAI,OAAO;AACP,aAAK,YAAY,KAAK;AAAA,MAC1B;AAAA,IACJ;AAAA,IAEA,cAA2B;AACvB,UAAI,QAAQ,KAAK;AACjB,UAAI,CAAC,OAAO;AACR,gBAAQ,KAAK,cAAc,cAAc,OAAO;AAChD,aAAK,YAAY,KAAK;AAAA,MAC1B;AACA,aAAO;AAAA,IACX;AAAA,IAEA,cAAoB;AAChB,YAAM,QAAQ,KAAK;AACnB,UAAI,OAAO;AACP,aAAK,YAAY,KAAK;AAAA,MAC1B;AAAA,IACJ;AAAA,IAEA,UAAU,OAA6B;AACnC,YAAM,MAAM,KAAK,cAAc,cAAc,IAAI;AACjD,YAAM,OAAO,KAAK;AAElB,UAAI,UAAU,UAAa,UAAU,IAAI;AAErC,cAAM,YAAY,KAAK,cAAc,kBAAkB;AACvD,YAAI,WAAW;AACX,oBAAU,YAAY,GAAG;AAAA,QAC7B,OAAO;AACH,eAAK,YAAY,GAAG;AAAA,QACxB;AAAA,MACJ,OAAO;AAEH,YAAI,SAAS,KAAK,QAAQ,KAAK,QAAQ;AACnC,gBAAM,eAAe,KAAK,KAAK;AAC/B,uBAAa,YAAY,aAAa,KAAK,YAAY;AAAA,QAC3D;AAAA,MACJ;AAEA,aAAO;AAAA,IACX;AAAA,IAEA,UAAU,OAAqB;AAC3B,YAAM,OAAO,KAAK;AAClB,UAAI,SAAS,KAAK,QAAQ,KAAK,QAAQ;AACnC,cAAM,MAAM,KAAK,KAAK;AACtB,YAAI,YAAY,YAAY,GAAG;AAAA,MACnC;AAAA,IACJ;AAAA,EACJ;;;ACxGO,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IAClD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,IAEA,IAAI,OAA0B;AAC1B,aAAO,KAAK,iBAAiB,IAAI;AAAA,IACrC;AAAA,IAEA,UAAU,OAA6B;AACnC,YAAM,MAAM,KAAK,cAAc,cAAc,IAAI;AACjD,YAAM,OAAO,KAAK;AAElB,UAAI,UAAU,UAAa,UAAU,IAAI;AAErC,aAAK,YAAY,GAAG;AAAA,MACxB,OAAO;AAEH,YAAI,SAAS,KAAK,QAAQ,KAAK,QAAQ;AACnC,gBAAM,eAAe,KAAK,KAAK;AAC/B,eAAK,aAAa,KAAK,YAAY;AAAA,QACvC,WAAW,SAAS,KAAK,QAAQ;AAC7B,eAAK,YAAY,GAAG;AAAA,QACxB;AAAA,MACJ;AAEA,aAAO;AAAA,IACX;AAAA,IAEA,UAAU,OAAqB;AAC3B,YAAM,OAAO,KAAK;AAClB,UAAI,SAAS,KAAK,QAAQ,KAAK,QAAQ;AACnC,cAAM,MAAM,KAAK,KAAK;AACtB,aAAK,YAAY,GAAG;AAAA,MACxB;AAAA,IACJ;AAAA,EACJ;;;ACrCO,MAAM,gBAAN,cAA4B,gBAAgB;AAAA,IAC/C,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,IAEA,IAAI,YAAoB;AACpB,YAAM,MAAM,KAAK;AACjB,UAAI,CAAC,IAAK,QAAO;AAEjB,YAAM,QAAQ,IAAI,iBAAiB,QAAQ;AAC3C,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,YAAI,MAAM,CAAC,MAAM,MAAgC;AAC7C,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAAA,IAEA,IAAI,UAAkB;AAClB,YAAM,QAAQ,KAAK,aAAa,SAAS;AACzC,aAAO,QAAQ,SAAS,OAAO,EAAE,IAAI;AAAA,IACzC;AAAA,IAEA,IAAI,QAAQ,OAAe;AACvB,WAAK,aAAa,WAAW,MAAM,SAAS,CAAC;AAAA,IACjD;AAAA,IAEA,IAAI,UAAkB;AAClB,YAAM,QAAQ,KAAK,aAAa,SAAS;AACzC,aAAO,QAAQ,SAAS,OAAO,EAAE,IAAI;AAAA,IACzC;AAAA,IAEA,IAAI,QAAQ,OAAe;AACvB,WAAK,aAAa,WAAW,MAAM,SAAS,CAAC;AAAA,IACjD;AAAA,IAEA,IAAI,UAAkB;AAClB,aAAO,KAAK,aAAa,SAAS,KAAK;AAAA,IAC3C;AAAA,IAEA,IAAI,QAAQ,OAAe;AACvB,WAAK,aAAa,WAAW,KAAK;AAAA,IACtC;AAAA,IAEA,IAAI,QAAgB;AAChB,aAAO,KAAK,aAAa,OAAO,KAAK;AAAA,IACzC;AAAA,IAEA,IAAI,MAAM,OAAe;AACrB,WAAK,aAAa,SAAS,KAAK;AAAA,IACpC;AAAA,IAEA,IAAI,OAAe;AACf,aAAO,KAAK,aAAa,MAAM,KAAK;AAAA,IACxC;AAAA,IAEA,IAAI,KAAK,OAAe;AACpB,WAAK,aAAa,QAAQ,KAAK;AAAA,IACnC;AAAA,EACJ;;;ACjEA;AACA;AAOO,MAAM,sBAAN,cAAkC,gBAAgB;AAAA,IAGrD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAG5B,WAAK,WAAW,IAAI,qBAAqB,aAAa;AAGtD,WAAK,2BAA2B;AAAA,IACpC;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,UAAgC;AAChC,aAAO,KAAK;AAAA,IAChB;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,UAAU,OAAe;AAEzB,aAAO,KAAK,SAAS,WAAW,SAAS,GAAG;AACxC,cAAM,QAAQ,KAAK,SAAS,WAAW,CAAC;AACxC,YAAI,OAAO;AACP,eAAK,SAAS,YAAY,KAAK;AAAA,QACnC;AAAA,MACJ;AAGA,UAAI,MAAM,KAAK,GAAG;AACd,aAAK,sBAAsB,KAAK;AAAA,MACpC;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,YAAoB;AAEpB,UAAI,OAAO;AACX,eAAS,IAAI,GAAG,IAAI,KAAK,SAAS,WAAW,QAAQ,KAAK;AACtD,cAAM,QAAQ,KAAK,SAAS,WAAW,CAAC;AACxC,YAAI,SAAS,eAAe,OAAO;AAC/B,kBAAS,MAAc;AAAA,QAC3B,WAAW,SAAS,MAAM,aAAa,WAAW;AAC9C,kBAAS,MAAc,eAAe;AAAA,QAC1C,WAAW,SAAS,MAAM,aAAa,GAAG;AACtC,kBAAQ,OAAQ,MAAc,eAAe,EAAE;AAAA,QACnD;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,YAA4B,MAAY;AAEpC,YAAM,SAAS,MAAM,YAAY,IAAI;AAGrC,UAAI,eAAe,MAAM;AACrB,aAAK,SAAS,YAAa,KAAa,UAAU,IAAI,CAAC;AAAA,MAC3D;AAEA,aAAO;AAAA,IACX;AAAA,IAEQ,6BAAmC;AAEvC,YAAM,WAAW,CAAC,GAAG,KAAK,mBAAmB;AAC7C,iBAAW,SAAS,UAAU;AAC1B,YAAI,OAAO;AACP,eAAK,YAAY,KAAwB;AACzC,eAAK,SAAS,YAAY,KAAwB;AAAA,QACtD;AAAA,MACJ;AAAA,IACJ;AAAA,IAEQ,sBAAsB,MAAoB;AAG9C,YAAM,gBAAgB,IAAK,wDAAyB,YAAa,OAAO,KAAK,cAAc;AAG3F,oBAAc,YAAY;AAG1B,aAAO,cAAc,YAAY;AAC7B,aAAK,SAAS,YAAY,cAAc,UAAU;AAAA,MACtD;AAAA,IACJ;AAAA,EAGJ;;;AC3GO,MAAM,sBAAN,cAAkC,gBAAgB;AAAA,IAAE,YAAY,UAAkB,YAAY,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACMtJ,MAAM,oBAAN,MAAM,0BAAyB,gBAAgB;AAAA,IAGlD,YAAY,eAAqB;AAC7B,YAAM,kBAAiB,UAAU,aAAa;AAAA,IAClD;AAAA,IAEA,IAAI,OAA0B;AAC1B,aAAO,KAAK,iBAAiB,IAAI;AAAA,IACrC;AAAA,IAEA,UAAU,OAA6B;AACnC,YAAM,MAAM,KAAK,cAAc,cAAc,IAAI;AACjD,YAAM,OAAO,KAAK;AAElB,UAAI,UAAU,UAAa,UAAU,IAAI;AAErC,aAAK,YAAY,GAAG;AAAA,MACxB,OAAO;AAEH,YAAI,SAAS,KAAK,QAAQ,KAAK,QAAQ;AACnC,gBAAM,eAAe,KAAK,KAAK;AAC/B,eAAK,aAAa,KAAK,YAAY;AAAA,QACvC,WAAW,SAAS,KAAK,QAAQ;AAC7B,eAAK,YAAY,GAAG;AAAA,QACxB;AAAA,MACJ;AAEA,aAAO;AAAA,IACX;AAAA,IAEA,UAAU,OAAqB;AAC3B,YAAM,OAAO,KAAK;AAClB,UAAI,SAAS,KAAK,QAAQ,KAAK,QAAQ;AACnC,cAAM,MAAM,KAAK,KAAK;AACtB,aAAK,YAAY,GAAG;AAAA,MACxB;AAAA,IACJ;AAAA,EACJ;AArCI,EADS,kBACO,WAAW;AADxB,MAAM,mBAAN;;;ACCA,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IAClD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,IAEA,IAAI,OAA0B;AAC1B,aAAO,KAAK,iBAAiB,IAAI;AAAA,IACrC;AAAA,IAEA,UAAU,OAA6B;AACnC,YAAM,MAAM,KAAK,cAAc,cAAc,IAAI;AACjD,YAAM,OAAO,KAAK;AAElB,UAAI,UAAU,UAAa,UAAU,IAAI;AAErC,aAAK,YAAY,GAAG;AAAA,MACxB,OAAO;AAEH,YAAI,SAAS,KAAK,QAAQ,KAAK,QAAQ;AACnC,gBAAM,eAAe,KAAK,KAAK;AAC/B,eAAK,aAAa,KAAK,YAAY;AAAA,QACvC,WAAW,SAAS,KAAK,QAAQ;AAC7B,eAAK,YAAY,GAAG;AAAA,QACxB;AAAA,MACJ;AAEA,aAAO;AAAA,IACX;AAAA,IAEA,UAAU,OAAqB;AAC3B,YAAM,OAAO,KAAK;AAClB,UAAI,SAAS,KAAK,QAAQ,KAAK,QAAQ;AACnC,cAAM,MAAM,KAAK,KAAK;AACtB,aAAK,YAAY,GAAG;AAAA,MACxB;AAAA,IACJ;AAAA,EACJ;;;ACrCO,MAAM,gBAAN,cAA4B,gBAAgB;AAAA,IAC/C,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,IAEA,IAAI,YAAoB;AACpB,YAAM,MAAM,KAAK;AACjB,UAAI,CAAC,IAAK,QAAO;AAEjB,YAAM,QAAQ,IAAI,iBAAiB,QAAQ;AAC3C,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,YAAI,MAAM,CAAC,MAAM,MAAM;AACnB,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAAA,IAEA,IAAI,UAAkB;AAClB,YAAM,QAAQ,KAAK,aAAa,SAAS;AACzC,aAAO,QAAQ,SAAS,OAAO,EAAE,IAAI;AAAA,IACzC;AAAA,IAEA,IAAI,QAAQ,OAAe;AACvB,WAAK,aAAa,WAAW,MAAM,SAAS,CAAC;AAAA,IACjD;AAAA,IAEA,IAAI,UAAkB;AAClB,YAAM,QAAQ,KAAK,aAAa,SAAS;AACzC,aAAO,QAAQ,SAAS,OAAO,EAAE,IAAI;AAAA,IACzC;AAAA,IAEA,IAAI,QAAQ,OAAe;AACvB,WAAK,aAAa,WAAW,MAAM,SAAS,CAAC;AAAA,IACjD;AAAA,IAEA,IAAI,UAAkB;AAClB,aAAO,KAAK,aAAa,SAAS,KAAK;AAAA,IAC3C;AAAA,IAEA,IAAI,QAAQ,OAAe;AACvB,WAAK,aAAa,WAAW,KAAK;AAAA,IACtC;AAAA,IAEA,IAAI,QAAgB;AAChB,aAAO,KAAK,aAAa,OAAO,KAAK;AAAA,IACzC;AAAA,IAEA,IAAI,MAAM,OAAe;AACrB,WAAK,aAAa,SAAS,KAAK;AAAA,IACpC;AAAA,IAEA,IAAI,OAAe;AACf,aAAO,KAAK,aAAa,MAAM,KAAK;AAAA,IACxC;AAAA,IAEA,IAAI,KAAK,OAAe;AACpB,WAAK,aAAa,QAAQ,KAAK;AAAA,IACnC;AAAA,EACJ;;;ACjEO,MAAM,kBAAN,cAA8B,gBAAgB;AAAA,IAAE,YAAY,UAAkB,QAAQ,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACM9I,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IAClD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,OAAe;AACf,aAAO,KAAK,eAAe;AAAA,IAC/B;AAAA,IAEA,IAAI,KAAK,OAAe;AACpB,WAAK,cAAc;AAAA,IACvB;AAAA,EACJ;;;ACrBO,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IAAE,YAAY,UAAkB,SAAS,eAAqB;AAAE,YAAM,SAAS,aAAa;AAAA,IAAG;AAAA,EAAE;;;ACMhJ,MAAM,gBAAN,cAA4B,gBAAgB;AAAA,IAC/C,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,IAEA,IAAI,QAA2B;AAC3B,aAAO,KAAK,iBAAiB,QAAQ;AAAA,IACzC;AAAA,IAEA,IAAI,WAAmB;AACnB,YAAM,QAAQ,KAAK,QAAQ,OAAO;AAClC,UAAI,CAAC,MAAO,QAAO;AAEnB,YAAM,UAAU,MAAM,iBAAiB,IAAI;AAC3C,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,cAAM,IAAI,QAAQ,CAAC;AACnB,YAAI,QAAQ,CAAC,MAAM,MAAM;AACrB,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAAA,IAEA,IAAI,kBAA0B;AAC1B,YAAM,UAAU,KAAK;AACrB,UAAI,CAAC,QAAS,QAAO;AAErB,YAAM,cAAc,QAAQ,iBAAiB,IAAI;AACjD,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AACzC,YAAI,YAAY,CAAC,MAAM,MAAgC;AACnD,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAAA,IAEA,WAAW,OAA6B;AACpC,YAAM,OAAO,KAAK,cAAc,cAAc,IAAI;AAClD,YAAM,QAAQ,KAAK;AAEnB,UAAI,UAAU,UAAa,UAAU,IAAI;AAErC,aAAK,YAAY,IAAI;AAAA,MACzB,OAAO;AAEH,YAAI,SAAS,KAAK,QAAQ,MAAM,QAAQ;AACpC,gBAAM,gBAAgB,MAAM,KAAK;AACjC,eAAK,aAAa,MAAM,aAAa;AAAA,QACzC,WAAW,SAAS,MAAM,QAAQ;AAC9B,eAAK,YAAY,IAAI;AAAA,QACzB;AAAA,MACJ;AAEA,aAAO;AAAA,IACX;AAAA,IAEA,WAAW,OAAqB;AAC5B,YAAM,QAAQ,KAAK;AACnB,UAAI,SAAS,KAAK,QAAQ,MAAM,QAAQ;AACpC,cAAM,OAAO,MAAM,KAAK;AACxB,aAAK,YAAY,IAAI;AAAA,MACzB;AAAA,IACJ;AAAA,EACJ;;;AC/DO,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IAClD,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,EACJ;;;ACNO,MAAM,mBAAN,cAA+B,gBAAgB;AAAA,IACpD,YAAY,UAAkB,SAAS,eAAqB;AAC1D,YAAM,SAAS,aAAa;AAAA,IAC9B;AAAA,EACF;;;ACTA;AAOO,MAAM,gBAAN,cAA4B,YAAY;AAAA,IAC3C,YAAY,SAAiB,eAAqB;AAC9C,YAAM,QAAQ,YAAY,GAAG,aAAa;AAAA,IAC9C;AAAA,IAEA,IAAI,eAA8B;AAC9B,aAAO;AAAA,IACX;AAAA,EACJ;;;ACfA;AAOO,MAAM,aAAN,cAAyB,YAAY;AAAA,IACxC,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AAAA,IAChC;AAAA,IAEA,IAAI,eAA8B;AAC9B,aAAO;AAAA,IACX;AAAA,EACJ;;;ACRO,MAAM,mBAAN,cAA+B,WAAW;AAAA,IAK7C,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AALhC,WAAQ,MAAc;AACtB,WAAQ,MAAc;AACtB,WAAQ,KAAa;AAAA,IAIrB;AAAA,IAEA,IAAI,KAAa;AACb,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,GAAG,OAAe;AAClB,WAAK,MAAM;AACX,WAAK,aAAa,MAAM,MAAM,SAAS,CAAC;AAAA,IAC5C;AAAA,IAEA,IAAI,KAAa;AACb,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,GAAG,OAAe;AAClB,WAAK,MAAM;AACX,WAAK,aAAa,MAAM,MAAM,SAAS,CAAC;AAAA,IAC5C;AAAA,IAEA,IAAI,IAAY;AACZ,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,EAAE,OAAe;AACjB,WAAK,KAAK;AACV,WAAK,aAAa,KAAK,MAAM,SAAS,CAAC;AAAA,IAC3C;AAAA;AAAA,IAGA,aAAa,eAAuB,OAAqB;AACrD,YAAM,aAAa,eAAe,KAAK;AAEvC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,MAAM,WAAW,KAAK,KAAK;AAChC;AAAA,QACJ,KAAK;AACD,eAAK,MAAM,WAAW,KAAK,KAAK;AAChC;AAAA,QACJ,KAAK;AACD,eAAK,KAAK,WAAW,KAAK,KAAK;AAC/B;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;;;ACrDO,MAAM,iBAAN,cAA6B,WAAW;AAAA,IAM3C,YAAY,SAAiB,eAAqB;AAC9C,YAAM,SAAS,aAAa;AANhC,WAAQ,KAAa;AACrB,WAAQ,KAAa;AACrB,WAAQ,SAAiB;AACzB,WAAQ,UAAkB;AAAA,IAI1B;AAAA,IAEA,IAAI,IAAY;AACZ,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,EAAE,OAAe;AACjB,WAAK,KAAK;AACV,WAAK,aAAa,KAAK,MAAM,SAAS,CAAC;AAAA,IAC3C;AAAA,IAEA,IAAI,IAAY;AACZ,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,EAAE,OAAe;AACjB,WAAK,KAAK;AACV,WAAK,aAAa,KAAK,MAAM,SAAS,CAAC;AAAA,IAC3C;AAAA,IAEA,IAAI,QAAgB;AAChB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,MAAM,OAAe;AACrB,WAAK,SAAS;AACd,WAAK,aAAa,SAAS,MAAM,SAAS,CAAC;AAAA,IAC/C;AAAA,IAEA,IAAI,SAAiB;AACjB,aAAO,KAAK;AAAA,IAChB;AAAA,IAEA,IAAI,OAAO,OAAe;AACtB,WAAK,UAAU;AACf,WAAK,aAAa,UAAU,MAAM,SAAS,CAAC;AAAA,IAChD;AAAA;AAAA,IAGA,aAAa,eAAuB,OAAqB;AACrD,YAAM,aAAa,eAAe,KAAK;AAEvC,YAAM,OAAO,cAAc,YAAY;AACvC,cAAQ,MAAM;AAAA,QACV,KAAK;AACD,eAAK,KAAK,WAAW,KAAK,KAAK;AAC/B;AAAA,QACJ,KAAK;AACD,eAAK,KAAK,WAAW,KAAK,KAAK;AAC/B;AAAA,QACJ,KAAK;AACD,eAAK,SAAS,WAAW,KAAK,KAAK;AACnC;AAAA,QACJ,KAAK;AACD,eAAK,UAAU,WAAW,KAAK,KAAK;AACpC;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;;;AC+EO,MAAM,eAAe;AAAA,IAC1B,GAAG;AAAA,IACH,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,GAAG;AAAA,IACH,OAAO;AAAA,IACP,SAAS;AAAA,IACT,KAAK;AAAA,IACL,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,EACT;AAEO,MAAM,cAAc;AAAA,IACzB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAEO,MAAM,iBAAiB;AAAA,IAC5B,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,eAAe;AAAA,IACf,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,UAAU;AAAA,IACV,aAAa;AAAA,IACb,OAAO;AAAA,IACP,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;;;AC1PO,MAAM,iBAAN,MAAM,gBAAe;AAAA;AAAA;AAAA;AAAA,IAI1B,OAAO,cAAc,SAAiB,eAAqB,SAAgC;AACzF,YAAM,oBAAoB,QAAQ,YAAY;AAC9C,YAAM,iBAAkB,eAAuB,aAAa;AAG5D,YAAM,cAAc,OAAO,YAAY,WAAW,UAAU,SAAS;AACrE,UAAI,eAAe,kBAAkB,OAAO,eAAe,QAAQ,YAAY;AAC7E,cAAM,qBAAqB,eAAe,IAAI,WAAW;AACzD,YAAI,oBAAoB;AACtB,gBAAM,UAAU,IAAI,mBAAmB;AACvC,kBAAQ,WAAW,QAAQ,YAAY;AACvC,kBAAQ,WAAW,QAAQ,YAAY;AACvC,kBAAQ,iBAAiB;AACzB,cAAI,QAAQ,cAAc;AACxB,oBAAQ,aAAa,MAAM,WAAW;AAAA,UACxC;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AAGA,UAAI,kBAAkB,SAAS,GAAG,KAAK,kBAAkB,OAAO,eAAe,QAAQ,YAAY;AACjG,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;AAIA,iBAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,YAAY,GAAG;AAC9D,YAAI,QAAQ,mBAAmB;AAC7B,iBAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,QAC9D;AAAA,MACF;AAGA,iBAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,WAAW,GAAG;AAC7D,YAAI,QAAQ,mBAAmB;AAC7B,iBAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,QAC9D;AAAA,MACF;AAGA,iBAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,cAAc,GAAG;AAChE,YAAI,QAAQ,mBAAmB;AAC7B,iBAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,QAC9D;AAAA,MACF;AAGA,aAAO,IAAI,mBAAmB,QAAQ,YAAY,GAAG,aAAa;AAAA,IACpE;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,2BAAqC;AAC1C,aAAO,OAAO,KAAK,YAAY;AAAA,IACjC;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,0BAAoC;AACzC,aAAO,OAAO,KAAK,WAAW;AAAA,IAChC;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,6BAAuC;AAC5C,aAAO,OAAO,KAAK,cAAc;AAAA,IACnC;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,uBAAiC;AACtC,aAAO,CAAC,GAAG,gBAAe,yBAAyB,GAAG,GAAG,gBAAe,wBAAwB,GAAG,GAAG,gBAAe,2BAA2B,CAAC;AAAA,IACnJ;AAAA,EACF;;;AzExFO,MAAM,eAAN,cAA2B,eAAmC;AAAA,IAgCnE,cAAc;AACZ,YAAM,eAAe,WAAW;AA/BlC,WAAQ,cAAkC;AAC1C,WAAQ,UAAe;AAsBvB,WAAQ,SAAiB;AACzB,WAAO,SAAiB;AACxB,WAAO,aAAqB;AAC5B,WAAO,MAAc;AACrB,WAAO,SAAiB;AACxB,WAAO,WAAmB;AAIxB,WAAK,iBAAiB;AAAA,IACxB;AAAA,IA3BA,IAAI,QAAgB;AAClB,YAAM,UAAU,KAAK,cAAc,OAAO;AAC1C,aAAO,UAAU,QAAQ,eAAe,KAAK,KAAK,UAAU;AAAA,IAC9D;AAAA,IAEA,IAAI,MAAM,OAAe;AACvB,WAAK,SAAS;AACd,UAAI,UAAU,KAAK,cAAc,OAAO;AACxC,UAAI,CAAC,WAAW,KAAK,MAAM;AACzB,kBAAU,KAAK,cAAc,OAAO;AACpC,aAAK,KAAK,YAAY,OAAO;AAAA,MAC/B;AACA,UAAI,SAAS;AACX,gBAAQ,cAAc;AAAA,MACxB;AAAA,IACF;AAAA,IAcA,IAAI,MAAc;AAChB,aAAO,KAAK,UAAU,QAAQ;AAAA,IAChC;AAAA,IACA,IAAI,aAAqB;AACvB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,WAAW,GAAW;AAAA,IAAC;AAAA,IAC3B,IAAI,MAAW;AACb,aAAO,CAAC;AAAA,IACV;AAAA,IACA,IAAI,UAAe;AACjB,aAAO,CAAC;AAAA,IACV;AAAA,IACA,IAAI,UAAe;AACjB,aAAO,CAAC;AAAA,IACV;AAAA,IACA,IAAI,UAAkB;AACpB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,QAAQ,GAAW;AAAA,IAAC;AAAA,IACxB,IAAI,eAAuB;AACzB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,UAAkB;AACpB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,aAAqB;AACvB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,cAAsB;AACxB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,gBAAqB;AACvB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,cAAmB;AACrB,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,UAAe;AACjB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,cAAsB;AACxB,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,SAAc;AAChB,aAAO,CAAC;AAAA,IACV;AAAA,IACA,IAAI,UAAkB;AACpB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,QAAQ,GAAW;AAAA,IAAC;AAAA,IACxB,IAAI,QAAa;AACf,aAAO,CAAC;AAAA,IACV;AAAA,IACA,IAAI,oBAAyB;AAC3B,aAAO,CAAC;AAAA,IACV;AAAA,IACA,IAAI,aAAsB;AACxB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,oBAA6B;AAC/B,aAAO;AAAA,IACT;AAAA,IACA,IAAI,SAAkB;AACpB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,SAAc;AAChB,aAAO,CAAC;AAAA,IACV;AAAA,IACA,IAAI,iBAAsB;AACxB,aAAO,CAAC;AAAA,IACV;AAAA,IACA,IAAI,gBAAwB;AAC1B,aAAO;AAAA,IACT;AAAA,IACA,IAAI,eAAuB;AACzB,cAAO,oBAAI,KAAK,GAAE,YAAY;AAAA,IAChC;AAAA,IACA,IAAI,YAAoB;AACtB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,UAAU,GAAW;AAAA,IAAC;AAAA,IAC1B,IAAI,QAAa;AACf,aAAO,CAAC;AAAA,IACV;AAAA,IACA,IAAI,gBAAsB;AACxB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,0BAAmC;AACrC,aAAO;AAAA,IACT;AAAA,IACA,IAAI,UAAe;AACjB,aAAO,CAAC;AAAA,IACV;AAAA,IACA,IAAI,aAAiC;AACnC,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,cAAmB;AACrB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,UAAe;AACjB,aAAO,CAAC;AAAA,IACV;AAAA,IACA,IAAI,mBAAwB;AAC1B,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,WAAgB;AAClB,aAAO,CAAC;AAAA,IACV;AAAA,IACA,IAAI,kBAAuB;AACzB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,aAAqB;AACvB,aAAO;AAAA,IACT;AAAA,IACA,IAAI,WAAW,GAAW;AAAA,IAAC;AAAA,IAC3B,IAAI,cAAoB;AACtB,aAAO;AAAA,IACT;AAAA,IAEA,UAA0B,MAAY;AACpC,MAAC,KAAa,iBAAiB;AAC/B,aAAO;AAAA,IACT;AAAA,IAEA,gBAAsB;AAAA,IAAC;AAAA,IAEvB,uBAAuB,IAAY,IAAY,UAA+C;AAC5F,aAAO;AAAA,IACT;AAAA,IAEA,oBAAoB,IAAY,IAAiB;AAC/C,aAAO;AAAA,IACT;AAAA,IAEA,QAAc;AAAA,IAAC;AAAA,IAEf,QAAc;AAAA,IAAC;AAAA,IAEf,gBAAgB,WAAwB;AACtC,aAAO,EAAE,MAAM,WAAW,OAAO,IAAI,UAAU,EAAE;AAAA,IACnD;AAAA,IAEA,kBAAkB,KAAoB,eAA4B;AAChE,aAAO,KAAK,gBAAgB,aAAa;AAAA,IAC3C;AAAA,IAEA,mBAAmB,MAAmB;AACpC,aAAO,EAAE,MAAM,UAAU,EAAE;AAAA,IAC7B;AAAA,IAEA,cAAc,MAAmB;AAC/B,YAAM,EAAE,SAAAC,SAAQ,IAAI;AACpB,aAAO,IAAIA,SAAQ,MAAM,IAAI;AAAA,IAC/B;AAAA,IAEA,yBAA8B;AAC5B,YAAM,EAAE,sBAAAC,sBAAqB,IAAI;AACjC,aAAO,IAAIA,sBAAqB,IAAI;AAAA,IACtC;AAAA,IAIA,cAAc,SAAiB,SAA+C;AAC5E,aAAO,eAAe,cAAc,SAAS,MAAM,OAAO;AAAA,IAC5D;AAAA,IAEA,gBAAgB,KAAoB,eAAuB,SAAuC;AAChG,aAAO,KAAK,cAAc,eAAsB,OAAO;AAAA,IACzD;AAAA,IAEA,YAAY,iBAA8B;AACxC,aAAO,EAAE,MAAM,gBAAgB;AAAA,IACjC;AAAA,IAEA,mBAAmB,MAAY,aAAqB,YAAY,SAAc,MAAW;AACvF,YAAM,EAAE,cAAAC,cAAa,IAAI;AACzB,aAAO,IAAIA,cAAa,MAAM,YAAY,MAAM;AAAA,IAClD;AAAA,IAEA,4BAA4B,QAAgB,MAAmB;AAC7D,aAAO,EAAE,QAAQ,MAAM,UAAU,EAAE;AAAA,IACrC;AAAA,IAEA,cAAmB;AACjB,aAAO,CAAC;AAAA,IACV;AAAA,IAEA,eAAe,MAAmB;AAChC,YAAM,EAAE,UAAAC,UAAS,IAAI;AACrB,aAAO,IAAIA,UAAS,MAAM,IAAI;AAAA,IAChC;AAAA,IAEA,iBAAiB,MAAY,aAAqB,YAAY,SAAc,MAAW;AACrF,YAAM,EAAE,YAAAC,YAAW,IAAI;AACvB,aAAO,IAAIA,YAAW,MAAM,YAAY,MAAM;AAAA,IAChD;AAAA,IAEA,YAAY,YAAoB,SAAmB,QAA0B;AAC3E,aAAO;AAAA,IACT;AAAA,IAEA,iBAAgC;AAC9B,aAAO,QAAQ,QAAQ;AAAA,IACzB;AAAA,IAEA,uBAAsC;AACpC,aAAO,QAAQ,QAAQ;AAAA,IACzB;AAAA,IAEA,kBAAwB;AAAA,IAAC;AAAA,IAEzB,eAAe,WAAuC;AACpD,YAAM,WAAW,KAAK,iBAAiB,IAAI,SAAS,EAAE;AACtD,aAAO,SAAS,SAAS,IAAK,SAAS,CAAC,IAAoB;AAAA,IAC9D;AAAA,IAEA,uBAAuB,YAA+C;AACpE,YAAM,WAAW,KAAK,iBAAiB,IAAI,WAAW,MAAM,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE;AAC5E,aAAO,IAAI,oBAAoB,MAAM,KAAK,QAAQ,CAAC;AAAA,IACrD;AAAA;AAAA,IAGA,kBAAkB,aAAiD;AACjE,YAAM,WAAW,KAAK,iBAAiB,UAAU,WAAW,IAAI;AAChE,aAAO,IAAI,cAA2B,MAAM,KAAK,QAAQ,CAA6B;AAAA,IACxF;AAAA,IAKA,qBAAqB,eAAqD;AACxE,YAAM,WAAW,KAAK,iBAA0B,aAAa;AAC7D,aAAO,IAAI,oBAAoB,MAAM,KAAK,QAAQ,CAAC;AAAA,IACrD;AAAA;AAAA,IAGA,uBAAuB,KAAoB,WAA8C;AACvF,aAAO,KAAK,qBAAqB,SAAS;AAAA,IAC5C;AAAA,IAEA,eAAoB;AAClB,aAAO;AAAA,IACT;AAAA,IAEA,WAAoB;AAClB,aAAO;AAAA,IACT;AAAA,IAEA,mBAAqC;AACnC,aAAO,QAAQ,QAAQ,KAAK;AAAA,IAC9B;AAAA,IAEA,WAA2B,MAAS,UAA2C;AAC7E,YAAM,SAAU,KAAa,UAAU,OAAO,aAAa,YAAY,WAAY,UAAkB,IAAI;AACzG,MAAC,OAAe,iBAAiB;AACjC,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,UAAmB,UAAwB;AAC9C,aAAO;AAAA,IACT;AAAA,IAEA,oBAAoB,YAA6B;AAC/C,aAAO;AAAA,IACT;AAAA,IAEA,sBAAsB,YAA6B;AACjD,aAAO;AAAA,IACT;AAAA,IAEA,gBAAsB;AAAA,IAAC;AAAA,IAEvB,uBAAsC;AACpC,aAAO,QAAQ,QAAQ;AAAA,IACzB;AAAA,IAEA,oBAAoB,kBAAmF;AACrG,aAAO,CAAC;AAAA,IACV;AAAA,IAEA,SAAS,MAAsB;AAC7B,cAAQ,IAAI,mBAAmB,KAAK,KAAK,EAAE,CAAC;AAAA,IAC9C;AAAA,IAEA,WAAW,MAAsB;AAC/B,WAAK,MAAM,GAAG,MAAM,IAAI;AAAA,IAC1B;AAAA,IAEA,iBAAiB,MAAc,UAAe,SAAqB;AACjE,WAAK,gBAAgB,KAAK,EAAE,MAAM,UAAU,QAAQ,CAAC;AAAA,IACvD;AAAA,IAEA,oBAAoB,MAAc,UAAe,SAAqB;AACpE,WAAK,kBAAkB,KAAK,gBAAgB,OAAO,OAAK,EAAE,EAAE,SAAS,QAAQ,EAAE,aAAa,SAAS;AAAA,IACvG;AAAA,IAEA,UAAU,QAAmB;AAC3B,WAAK,UAAU;AAAA,IACjB;AAAA,IAEA,cAAc,OAAiC;AAC7C,UAAI,KAAK,gBAAgB,MAAO;AAChC,WAAK,cAAc;AACnB,WAAK,cAAc,EAAE,MAAM,oBAAoB,QAAQ,KAAK,CAAC;AAC7D,UAAI,UAAU,eAAe;AAC3B,aAAK,cAAc,EAAE,MAAM,oBAAoB,QAAQ,KAAK,CAAC;AAAA,MAC/D;AACA,UAAI,UAAU,cAAc,KAAK,SAAS;AACxC,mBAAW,MAAM;AACf,cAAI,KAAK,WAAW,KAAK,QAAQ,eAAe;AAC9C,iBAAK,QAAQ,cAAc,EAAE,MAAM,QAAQ,QAAQ,KAAK,QAAQ,CAAC;AAAA,UACnE;AAAA,QACF,GAAG,CAAC;AAAA,MACN;AAAA,IACF;AAAA,IAEA,kBAAwB;AAEtB,iBAAW,MAAM;AACf,aAAK,cAAc,aAAa;AAChC,mBAAW,MAAM;AACf,eAAK,cAAc,UAAU;AAAA,QAC/B,GAAG,EAAE;AAAA,MACP,GAAG,EAAE;AAAA,IACP;AAAA,IAEA,YAAY,UAAqB;AAC/B,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;;;A0EjXA;AACA;;;ACAO,MAAM,2BAAN,MAAoE;AAAA,IAApE;AACL,WAAQ,eAAe,oBAAI,IAAuC;AAClE,WAAQ,uBAAuB,oBAAI,IAA6D;AAAA;AAAA,IAGhG,UAAU,QAAmB;AAC3B,WAAK,UAAU;AAAA,IACjB;AAAA,IAEA,OAAO,MAAc,aAAkB,SAA0C;AAC/E,UAAI,KAAK,aAAa,IAAI,IAAI,GAAG;AAC/B,cAAM,IAAI,MAAM,4BAA4B,IAAI,yDAAyD;AAAA,MAC3G;AAGA,UAAI,CAAC,KAAK,SAAS,GAAG,GAAG;AACvB,cAAM,IAAI,MAAM,4BAA4B,IAAI,iDAAiD;AAAA,MACnG;AAEA,WAAK,aAAa,IAAI,MAAM,EAAE,aAAa,QAAQ,CAAC;AAGpD,UAAI,KAAK,qBAAqB,IAAI,IAAI,GAAG;AACvC,aAAK,qBAAqB,IAAI,IAAI,EAAG,QAAQ;AAAA,MAC/C;AAGA,UAAI,KAAK,WAAW,KAAK,QAAQ,UAAU;AAEzC,aAAK,QAAQ,KAAK,QAAQ,QAAQ;AAAA,MACpC;AAAA,IACF;AAAA,IAEA,IAAI,MAA+B;AACjC,aAAO,KAAK,aAAa,IAAI,IAAI,GAAG;AAAA,IACtC;AAAA,IAEA,QAAQ,MAAiB;AACvB,UAAI,CAAC,KAAM;AAEX,YAAM,iBAAwB,CAAC;AAC/B,YAAM,OAAO,CAAC,SAAc;AAC1B,YAAI,KAAK,aAAa,GAAG;AACvB,gBAAM,UAAU,KAAK,QAAQ,YAAY;AACzC,gBAAM,SAAS,KAAK,aAAa,IAAI;AACrC,gBAAM,eAAe,SAAS,KAAK,aAAa,IAAI,MAAM,IAAI,KAAK,aAAa,IAAI,OAAO;AAE3F,cAAI,cAAc;AAChB,kBAAM,aAAa,gBAAgB,aAAa;AAChD,gBAAI,CAAC,YAAY;AAEf,6BAAe,KAAK,EAAE,MAAM,aAAa,CAAC;AAAA,YAC5C;AAAA,UACF;AAAA,QACF;AAEA,YAAI,QAAQ,KAAK;AACjB,eAAO,OAAO;AACZ,eAAK,KAAK;AACV,kBAAQ,MAAM;AAAA,QAChB;AAAA,MACF;AAEA,WAAK,IAAI;AAGT,iBAAW,EAAE,MAAM,aAAa,KAAK,gBAAgB;AACnD,cAAM,cAAc,IAAI,aAAa,YAAY;AAGjD,oBAAY,WAAW,KAAK;AAC5B,oBAAY,WAAW,KAAK;AAG5B,YAAI,KAAK,YAAY;AACnB,mBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,KAAK;AAC/C,kBAAM,OAAO,KAAK,WAAW,KAAK,CAAC;AACnC,gBAAI,MAAM;AACR,0BAAY,aAAa,KAAK,MAAM,KAAK,KAAK;AAAA,YAChD;AAAA,UACF;AAAA,QACF;AAGA,eAAO,KAAK,YAAY;AACtB,sBAAY,YAAY,KAAK,UAAU;AAAA,QACzC;AAGA,YAAI,KAAK,YAAY;AACnB,eAAK,WAAW,aAAa,aAAa,IAAI;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAAA,IAEA,YAAY,MAA6B;AACvC,UAAI,KAAK,aAAa,IAAI,IAAI,GAAG;AAC/B,eAAO,QAAQ,QAAQ;AAAA,MACzB;AAEA,UAAI,CAAC,KAAK,qBAAqB,IAAI,IAAI,GAAG;AACxC,YAAI;AACJ,cAAM,UAAU,IAAI,QAAc,OAAK;AACrC,oBAAU;AAAA,QACZ,CAAC;AACD,aAAK,qBAAqB,IAAI,MAAM,EAAE,SAAS,QAAQ,CAAC;AAAA,MAC1D;AAEA,aAAO,KAAK,qBAAqB,IAAI,IAAI,EAAG;AAAA,IAC9C;AAAA,EACF;;;ADtCA,MAAM,eAAN,MAAuC;AAAA,IAYrC,YAAY,aAAqB,eAAe,mBAA2C;AAX3F,WAAQ,QAAgB;AACxB,WAAQ,YAAoB;AAC5B,WAAQ,QAAgB;AACxB,WAAQ,YAAoB;AAC5B,WAAQ,QAAgB;AACxB,WAAQ,YAAoB;AAC5B,WAAQ,UAAkB;AAC1B,WAAQ,QAAgB;AACxB,WAAQ,UAAkB;AAIxB,WAAK,oBAAoB;AACzB,WAAK,SAAS,UAAU;AAAA,IAC1B;AAAA,IAIA,IAAI,OAAe;AACjB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,KAAK,KAAa;AACpB,YAAM,UAAU,KAAK;AACrB,WAAK,SAAS,GAAG;AAEjB,UAAI,KAAK,UAAU,WAAW,KAAK,mBAAmB;AACpD,aAAK,kBAAkB,KAAK,KAAK;AAAA,MACnC;AAAA,IACF;AAAA,IAEA,IAAI,WAAmB;AACrB,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,SAAS,OAAe;AAC1B,UAAI,CAAC,MAAM,SAAS,GAAG,EAAG,UAAS;AACnC,WAAK,YAAY;AACjB,WAAK,eAAe;AAAA,IACtB;AAAA,IAEA,IAAI,OAAe;AACjB,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,KAAK,OAAe;AACtB,WAAK,QAAQ;AACb,YAAM,aAAa,MAAM,YAAY,GAAG;AACxC,UAAI,eAAe,MAAM,aAAa,MAAM,YAAY,GAAG,GAAG;AAC5D,aAAK,YAAY,MAAM,UAAU,GAAG,UAAU;AAC9C,aAAK,QAAQ,MAAM,UAAU,aAAa,CAAC;AAAA,MAC7C,OAAO;AACL,aAAK,YAAY;AACjB,aAAK,QAAQ;AAAA,MACf;AACA,WAAK,eAAe;AAAA,IACtB;AAAA,IAEA,IAAI,WAAmB;AACrB,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,SAAS,OAAe;AAC1B,WAAK,YAAY;AACjB,WAAK,QAAQ,KAAK,QAAQ,GAAG,KAAK,IAAI,KAAK,KAAK,KAAK;AACrD,WAAK,eAAe;AAAA,IACtB;AAAA,IAEA,IAAI,OAAe;AACjB,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,KAAK,OAAe;AACtB,WAAK,QAAQ;AACb,WAAK,QAAQ,QAAQ,GAAG,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK;AACzD,WAAK,eAAe;AAAA,IACtB;AAAA,IAEA,IAAI,WAAmB;AACrB,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,SAAS,OAAe;AAC1B,UAAI,CAAC,MAAM,WAAW,GAAG,EAAG,SAAQ,MAAM;AAC1C,WAAK,YAAY;AACjB,WAAK,eAAe;AAAA,IACtB;AAAA,IAEA,IAAI,SAAiB;AACnB,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,OAAO,OAAe;AACxB,UAAI,SAAS,CAAC,MAAM,WAAW,GAAG,EAAG,SAAQ,MAAM;AACnD,WAAK,UAAU;AACf,WAAK,eAAe;AAAA,IACtB;AAAA,IAEA,IAAI,OAAe;AACjB,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,KAAK,OAAe;AACtB,UAAI,SAAS,CAAC,MAAM,WAAW,GAAG,EAAG,SAAQ,MAAM;AACnD,WAAK,QAAQ;AACb,WAAK,eAAe;AAAA,IACtB;AAAA,IAEA,IAAI,SAAiB;AACnB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,OAAO,KAAmB;AACxB,YAAM,UAAU,KAAK;AACrB,WAAK,SAAS,GAAG;AACjB,UAAI,KAAK,UAAU,WAAW,KAAK,mBAAmB;AACpD,aAAK,kBAAkB,KAAK,KAAK;AAAA,MACnC;AAAA,IACF;AAAA,IAEA,QAAQ,KAAmB;AACzB,WAAK,OAAO,GAAG;AAAA,IACjB;AAAA,IAEA,OAAO,eAA+B;AAAA,IAAC;AAAA,IAEvC,WAAmB;AACjB,aAAO,KAAK;AAAA,IACd;AAAA,IAEQ,SAAS,KAAmB;AAClC,UAAI;AACF,YAAI;AACJ,YAAI,IAAI,WAAW,IAAI,GAAG;AACxB,sBAAY,IAAI,IAAI,KAAK,YAAY,GAAG;AAAA,QAC1C,WAAW,IAAI,WAAW,GAAG,GAAG;AAC9B,sBAAY,IAAI,IAAI,KAAK,GAAG,KAAK,SAAS,KAAK,KAAK,KAAK,EAAE;AAAA,QAC7D,WAAW,IAAI,SAAS,KAAK,GAAG;AAC9B,sBAAY,IAAI,IAAI,GAAG;AAAA,QACzB,OAAO;AACL,gBAAM,OAAO,GAAG,KAAK,SAAS,KAAK,KAAK,KAAK,GAAG,KAAK,SAAS;AAC9D,sBAAY,IAAI,IAAI,KAAK,IAAI;AAAA,QAC/B;AACA,aAAK,QAAQ,UAAU;AACvB,aAAK,YAAY,UAAU;AAC3B,aAAK,QAAQ,UAAU;AACvB,aAAK,YAAY,UAAU;AAC3B,aAAK,QAAQ,UAAU;AACvB,aAAK,YAAY,UAAU;AAC3B,aAAK,UAAU,UAAU;AACzB,aAAK,QAAQ,UAAU;AACvB,aAAK,UAAU,UAAU;AAAA,MAC3B,SAAS,GAAG;AACV,YAAI,QAAQ,eAAe;AACzB,eAAK,QAAQ;AACb,eAAK,YAAY;AACjB,eAAK,QAAQ;AACb,eAAK,YAAY;AACjB,eAAK,QAAQ;AACb,eAAK,YAAY;AACjB,eAAK,UAAU;AACf,eAAK,QAAQ;AACb,eAAK,UAAU;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAAA,IAEQ,iBAAuB;AAC7B,UAAI;AACF,YAAI,MAAM,KAAK;AACf,YAAI,KAAK,cAAc,YAAY,KAAK,cAAc,SAAS;AAC7D,iBAAO;AACP,cAAI,KAAK,MAAO,QAAO,KAAK;AAAA,QAC9B;AACA,eAAO,KAAK;AACZ,eAAO,KAAK;AACZ,eAAO,KAAK;AACZ,cAAM,UAAU,IAAI,IAAI,GAAG;AAC3B,aAAK,QAAQ,QAAQ;AACrB,aAAK,UAAU,QAAQ;AAAA,MACzB,SAAS,GAAG;AAAA,MAAC;AAAA,IACf;AAAA,EACF;AAEA,MAAM,cAAN,MAAqC;AAAA,IAOnC,YAAY,QAAoB;AANhC,oBAAiB;AACjB,mBAAa;AAEb,WAAQ,eAAmE,CAAC;AAC5E,WAAQ,eAAuB;AAG7B,WAAK,SAAS;AAAA,IAChB;AAAA,IAIA,OAAa;AACX,WAAK,GAAG,EAAE;AAAA,IACZ;AAAA,IACA,UAAgB;AACd,WAAK,GAAG,CAAC;AAAA,IACX;AAAA,IACA,GAAG,OAAsB;AACvB,UAAI,CAAC,SAAS,KAAK,aAAa,WAAW,EAAG;AAC9C,YAAM,WAAW,KAAK,eAAe;AACrC,UAAI,YAAY,KAAK,WAAW,KAAK,aAAa,QAAQ;AACxD,aAAK,eAAe;AACpB,cAAM,QAAQ,KAAK,aAAa,KAAK,YAAY;AACjD,aAAK,QAAQ,MAAM;AACnB,YAAI,MAAM,OAAO,KAAK,OAAO,UAAU;AACrC,UAAC,KAAK,OAAO,SAAiB,QAAQ,MAAM;AAC5C,UAAC,KAAK,OAAO,SAAiB,SAAS,MAAM,GAAG;AAAA,QAClD;AACA,QAAC,KAAK,OAAe,sBAAsB,MAAM,OAAO,MAAM,GAAG;AAAA,MACnE;AAAA,IACF;AAAA,IAEA,UAAU,MAAW,OAAe,KAAoB;AACtD,WAAK,eAAe,KAAK,aAAa,MAAM,GAAG,KAAK,eAAe,CAAC;AACpE,WAAK,aAAa,KAAK,EAAE,OAAO,MAAM,OAAO,IAAI,CAAC;AAClD,WAAK,eAAe,KAAK,aAAa,SAAS;AAC/C,WAAK,QAAQ;AACb,WAAK,SAAS,KAAK,aAAa;AAChC,UAAI,OAAO,KAAK,OAAO,UAAU;AAC/B,cAAM,UAAW,KAAK,OAAO,SAAiB;AAC9C,QAAC,KAAK,OAAO,SAAiB,QAAQ;AACtC,QAAC,KAAK,OAAO,SAAiB,SAAS,GAAG;AAC1C,YAAI,QAAQ,WAAY,KAAK,OAAO,SAAiB,mBAAmB;AACtE,UAAC,KAAK,OAAO,SAAiB,kBAAkB,GAAG;AAAA,QACrD;AAAA,MACF;AAAA,IACF;AAAA,IAEA,aAAa,MAAW,OAAe,KAAoB;AACzD,UAAI,KAAK,gBAAgB,KAAK,KAAK,eAAe,KAAK,aAAa,QAAQ;AAC1E,aAAK,aAAa,KAAK,YAAY,IAAI,EAAE,OAAO,MAAM,OAAO,IAAI;AAAA,MACnE,OAAO;AACL,aAAK,eAAe,CAAC,EAAE,OAAO,MAAM,OAAO,IAAI,CAAC;AAChD,aAAK,eAAe;AACpB,aAAK,SAAS;AAAA,MAChB;AACA,WAAK,QAAQ;AACb,UAAI,OAAO,KAAK,OAAO,UAAU;AAC/B,cAAM,UAAW,KAAK,OAAO,SAAiB;AAC9C,QAAC,KAAK,OAAO,SAAiB,QAAQ;AACtC,QAAC,KAAK,OAAO,SAAiB,SAAS,GAAG;AAC1C,YAAI,QAAQ,WAAY,KAAK,OAAO,SAAiB,mBAAmB;AACtE,UAAC,KAAK,OAAO,SAAiB,kBAAkB,GAAG;AAAA,QACrD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAM,gBAAN,MAAyC;AAAA,IAAzC;AA6DE,uBAAoB;AACpB,sBAAmB;AACnB,uBAA+B,CAAC,SAAS,IAAI;AAC7C,sBAAmB;AACnB,2BAAyB;AACzB,oBAAkB;AAAA;AAAA,IApDlB,SAAS,MAA2B;AAClC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,cAAkC;AAChC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,kBAAkB,SAA4C;AAC5D,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,4BAA4B,WAAoB,yBAAiE;AAC/G,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,WAAW,KAAmB,MAAiC;AAC7D,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,MAAM,MAAiC;AACrC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,QAAQ,SAA2B;AACjC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IAEA,gBAA+B;AAC7B,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,YAAY,UAAkC;AAC5C,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IAEA,wBAAwB,QAAgB,KAAyB;AAC/D,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IAYA,cAAuB;AACrB,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,EAQF;AAQO,MAAM,aAAN,MAAmC;AAAA,IAwHxC,YAAY,QAAkC;AAtH9C,WAAQ,kBAAyC,CAAC;AAClD,WAAQ,UAAuB,oBAAI,IAAI;AACvC,WAAQ,aAA0B,oBAAI,IAAI;AAC1C,WAAQ,mBAAgC,oBAAI,IAAI;AAEhD,WAAQ,UAAmB;AAM3B,WAAS,cAAmB,CAAC;AAE7B,WAAS,mBAA2B;AAIpC,WAAS,OAAY;AACrB,WAAS,SAAc;AAYvB;AAAA,mBAAQ,MAAM,MAAM;AAAA,QAClB,YAAmB,MAAc;AAAd;AAAA,QAAe;AAAA,MACpC;AACA,yBAAc,MAAM,oBAAoB,KAAK,MAAM;AAAA,QACjD,YACE,MACO,QACP;AACA,gBAAM,IAAI;AAFH;AAAA,QAGT;AAAA,MACF;AAGA;AAAA,kBAAO;AACP,qBAAU;AACV,yBAAc;AACd,+BAAoB;AACpB,6BAAkB;AAClB,8BAAmB;AACnB,6BAAkB;AAClB,6BAAkB;AAClB,+BAAoB;AACpB,+BAAoB;AACpB,gCAAqB;AACrB,6BAAkB;AAClB,iCAAsB;AACtB,gCAAqB;AACrB,+BAAoB;AACpB,4BAAiB;AACjB,8BAAmB;AACnB,8BAAmB;AACnB,iCAAsB;AACtB,6BAAkB;AAClB,2BAAgB;AAChB,6BAAkB;AAClB,2BAAgB;AAChB,6BAAkB;AAClB,+BAAoB;AACpB,4BAAiB;AACjB,8BAAmB;AACnB,8BAAmB;AACnB,+BAAoB;AACpB,2BAAgB;AAChB,6BAAkB;AAClB,4BAAiB;AACjB,6BAAkB;AAClB,8BAAmB;AACnB,4BAAiB;AACjB,+BAAoB;AACpB,8BAAmB;AACnB,iCAAsB;AACtB,+BAAoB;AACpB,+BAAoB;AACpB,0BAAe;AACf,8BAAmB;AACnB,gCAAqB;AACrB,4BAAiB;AACjB,iCAAsB;AACtB,8BAAmB;AACnB,+BAAoB;AACpB,+BAAoB;AACpB,6BAAkB;AAClB,+BAAoB;AACpB,6BAAkB;AAClB,8BAAmB;AACnB,8BAAmB;AACnB,8BAAmB;AACnB,2BAAgB;AAChB,iCAAsB;AACtB,iCAAsB;AACtB,8BAAmB;AACnB,8BAAmB;AACnB,2BAAgB;AAChB,6BAAkB;AAClB,8BAAmB;AACnB,8BAAmB;AACnB,2BAAgB;AAChB,8BAAmB;AACnB,8BAAmB;AAGnB;AAAA,8BAAmB;AACnB,kCAAuB;AACvB,gCAAqB;AACrB,qCAA0B;AAC1B,kCAAuB;AACvB,iCAAsB;AAGpB,YAAM,eAAe,IAAI,aAAa;AACtC,UAAI,gBAAiB,aAAqB,WAAW;AACnD,QAAC,aAAqB,UAAU,IAAI;AAAA,MACtC;AACA,WAAK,YAAY,IAAI,aAAa,QAAQ,UAAU;AACpD,mBAAa,YAAY,KAAK,SAAS;AACvC,WAAK,WAAW;AAChB,YAAM,2BAA2B,IAAI,yBAAyB;AAC9D,+BAAyB,UAAU,IAAI;AACvC,WAAK,iBAAiB;AACtB,WAAK,UAAU,IAAI,YAAY,IAAI;AACnC,WAAK,YAAY,IAAI,cAAc;AACnC,WAAK,oBAAoB,KAAK;AAAA,IAChC;AAAA,IA7HA,IAAI,SAAkB;AACpB,aAAO,KAAK;AAAA,IACd;AAAA,IAYA,IAAI,WAAqB;AACvB,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,SAAS,MAAyB;AACpC,UAAI,OAAO,SAAS,SAAU,MAAK,UAAU,OAAO;AAAA,UAC/C,MAAK,UAAU,OAAO,KAAK;AAAA,IAClC;AAAA,IAiJA,OAAa;AACX,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,mBAAmB,QAAsB;AACvC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,gBAAsB;AACpB,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,QAAQ,SAA2B;AACjC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,QAAc;AACZ,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,iBAAiB,KAAc,WAAgD;AAC7E,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,eAAiC;AAC/B,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,WAAW,OAA+B;AACxC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,OAAO,GAAW,GAAiB;AACjC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,OAAO,GAAW,GAAiB;AACjC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,KAAK,KAAoB,QAAiB,UAAuC;AAC/E,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,YAAY,SAAkB,cAAwB,UAA0B;AAC9E,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,QAAc;AACZ,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,OAAO,SAAkB,UAAkC;AACzD,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,gBAAsB;AACpB,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,oBAAoB,UAA+B,SAAsC;AACvF,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,SAAS,GAAW,GAAiB;AACnC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,SAAS,OAAe,QAAsB;AAC5C,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,OAAO,GAAa,GAAmB;AACrC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,SAAS,GAAa,GAAmB;AACvC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,SAAS,GAAa,GAAmB;AACvC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,OAAa;AACX,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,qBAAqB,QAAsB;AACzC,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,sBAAsB,UAAwC;AAC5D,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IAiIA,KAAK,MAAsB;AACzB,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,KAAK,MAAsB;AACzB,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,kBAAkB,OAAgB,IAAc,IAAc,IAAc,IAAc,SAAyC;AACjI,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,MAAM,OAA0B,MAAuC;AACrE,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,eAAe,UAA8B;AAC3C,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,YAAY,GAAc;AACxB,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IACA,gBAAyB,OAAU,SAAyC;AAC1E,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAAA,IAGA,MAAM,UAAsB;AAAA,IAAC;AAAA,IAC7B,QAAc;AACZ,UAAI,KAAK,QAAS;AAClB,WAAK,UAAU;AACf,WAAK,QAAQ,QAAQ,QAAM,aAAa,EAAE,CAAC;AAC3C,WAAK,WAAW,QAAQ,QAAM,cAAc,EAAE,CAAC;AAC/C,WAAK,gBAAgB,SAAS;AAAA,IAChC;AAAA,IAEA,WAAW,UAAoB,UAAmB,MAAqB;AACrE,YAAM,KAAK,WAAW,MAAM;AAC1B,aAAK,QAAQ,OAAO,EAAS;AAC7B,iBAAS,GAAG,IAAI;AAAA,MAClB,GAAG,KAAK;AACR,WAAK,QAAQ,IAAI,EAAE;AACnB,aAAO;AAAA,IACT;AAAA,IACA,aAAa,IAAkB;AAC7B,mBAAa,EAAE;AACf,WAAK,QAAQ,OAAO,EAAE;AAAA,IACxB;AAAA,IACA,YAAY,UAAoB,UAAmB,MAAqB;AACtE,YAAM,KAAK,YAAY,UAAU,OAAO,GAAG,IAAI;AAC/C,WAAK,WAAW,IAAI,EAAE;AACtB,aAAO;AAAA,IACT;AAAA,IACA,cAAc,IAAkB;AAC9B,oBAAc,EAAE;AAChB,WAAK,WAAW,OAAO,EAAE;AAAA,IAC3B;AAAA,IAEA,iBAAiB,MAAc,UAAe,SAAqB;AAEjE,WAAK,gBAAgB,KAAK;AAAA,QACxB;AAAA,QACA,UAAU,OAAO,aAAa,aAAa,WAAW,UAAU;AAAA,QAChE;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,oBAAoB,MAAc,UAAqB;AACrD,YAAM,iBAAiB,OAAO,aAAa,aAAa,WAAW,UAAU;AAC7E,WAAK,kBAAkB,KAAK,gBAAgB,OAAO,OAAK,EAAE,EAAE,SAAS,QAAQ,EAAE,aAAa,eAAe;AAAA,IAC7G;AAAA,IACA,cAAc,OAAqB;AACjC,YAAM,OAAO,OAAO,UAAU,WAAW,QAAQ,MAAM;AACvD,YAAM,YAAY,CAAC,GAAG,KAAK,gBAAgB,OAAO,OAAK,EAAE,SAAS,IAAI,CAAC;AAEvE,iBAAW,KAAK,WAAW;AACzB,YAAI;AACF,YAAE,SAAS,KAAK,MAAM,KAAK;AAC3B,cAAI,EAAE,SAAS,MAAM;AACnB,iBAAK,oBAAoB,MAAM,EAAE,QAAQ;AAAA,UAC3C;AAAA,QACF,SAAS,GAAG;AACV,kBAAQ,MAAM,sCAAsC,IAAI,KAAK,CAAC;AAAA,QAChE;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IAEQ,sBAAsB,OAAY,KAAoB;AAC5D,WAAK,cAAc,EAAE,MAAM,YAAY,OAAO,IAAI,CAAC;AAAA,IACrD;AAAA,EACF;;;A3Ez1BA;AAKA,cAAY,eAAe;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAMO,MAAM,YAAN,MAAgB;AAAA,IAIrB,YAAY,MAAc,QAA2B;AAEnD,YAAM,aAAa,IAAI,WAAW,EAAE,YAAY,QAAQ,KAAK,CAAC;AAC9D,WAAK,UAAU;AACf,WAAK,YAAY,WAAW;AAG5B,WAAK,UAAU,IAAI;AAGnB,WAAK,wBAAwB;AAG7B,UAAI,KAAK,aAAc,KAAK,UAAkB,iBAAiB;AAC7D,QAAC,KAAK,UAAkB,gBAAgB;AAAA,MAC1C;AAAA,IACF;AAAA,IAEA,IAAI,SAAiB;AACnB,UAAI,CAAC,KAAK,SAAS;AACjB,cAAM,IAAI,MAAM,8BAA8B;AAAA,MAChD;AACA,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,WAAqB;AACvB,UAAI,CAAC,KAAK,WAAW;AACnB,cAAM,IAAI,MAAM,8BAA8B;AAAA,MAChD;AACA,aAAO,KAAK;AAAA,IACd;AAAA;AAAA;AAAA;AAAA,IAKA,UAAgB;AACd,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ,MAAM;AACnB,aAAK,UAAU;AAAA,MACjB;AAEA,WAAK,YAAY;AAAA,IACnB;AAAA;AAAA;AAAA;AAAA,IAKA,SAAS,MAAoB;AAC3B,UAAI,CAAC,KAAK,WAAW;AACnB,cAAM,IAAI,MAAM,8BAA8B;AAAA,MAChD;AAGA,WAAK,cAAc;AAGnB,WAAK,UAAU,IAAI;AAGnB,WAAK,wBAAwB;AAAA,IAC/B;AAAA,IAEQ,gBAAsB;AAC5B,UAAI,CAAC,KAAK,UAAW;AAGrB,UAAI,KAAK,UAAU,MAAM;AACvB,eAAO,KAAK,UAAU,KAAK,YAAY;AACrC,eAAK,UAAU,KAAK,YAAY,KAAK,UAAU,KAAK,UAAU;AAAA,QAChE;AAAA,MACF;AAEA,UAAI,KAAK,UAAU,MAAM;AACvB,eAAO,KAAK,UAAU,KAAK,YAAY;AACrC,eAAK,UAAU,KAAK,YAAY,KAAK,UAAU,KAAK,UAAU;AAAA,QAChE;AAAA,MACF;AAAA,IACF;AAAA,IAEA,UAAU,MAAoB;AAC5B,UAAI,CAAC,KAAK,WAAW;AACnB,cAAM,IAAI,MAAM,8BAA8B;AAAA,MAChD;AAGA,UAAI,CAAC,KAAK,KAAK,GAAG;AAChB,eAAO;AAAA,MACT,WAAW,CAAC,SAAS,KAAK,IAAI,GAAG;AAI/B,eAAO,4BAA4B,IAAI;AAAA,MACzC;AAGA,WAAK,gBAAgB,MAAM,KAAK,QAAQ;AAAA,IAC1C;AAAA,IAEQ,gBAAgB,MAAc,QAAmB;AAEvD,aAAO,KAAK,QAAQ,oBAAoB,EAAE,EAAE,KAAK;AAEjD,UAAI,CAAC,KAAM;AAGX,YAAM,gBAAgB;AACtB,aAAO,KAAK,QAAQ,eAAe,CAAC,OAAO,YAAY,YAAY;AACjE,cAAM,UAAU,KAAK,SAAS,cAAc,UAAU;AAGtD,YAAI,WAAW,KAAK,GAAG;AACrB,eAAK,gBAAgB,YAAY,OAAO;AAAA,QAC1C;AAGA,YAAI,QAAQ,KAAK,GAAG;AAElB,eAAK,gBAAgB,QAAQ,KAAK,GAAG,QAAQ,OAAO;AAAA,QACtD;AAEA,eAAO,YAAY,OAAO;AAC1B,eAAO;AAAA,MACT,CAAC;AAGD,WAAK,mBAAmB,MAAM,MAAM;AAAA,IACtC;AAAA,IAEQ,mBAAmB,MAAc,QAAmB;AAC1D,UAAI,WAAW;AAEf,aAAO,WAAW,KAAK,QAAQ;AAE7B,cAAM,WAAW,KAAK,QAAQ,KAAK,QAAQ;AAE3C,YAAI,aAAa,IAAI;AAEnB,gBAAM,gBAAgB,KAAK,UAAU,QAAQ,EAAE,KAAK;AACpD,cAAI,eAAe;AACjB,kBAAM,WAAW,IAAI,SAAS,eAAe,KAAK,QAAQ;AAC1D,mBAAO,YAAY,QAAQ;AAAA,UAC7B;AACA;AAAA,QACF;AAGA,YAAI,WAAW,UAAU;AACvB,gBAAM,cAAc,KAAK,UAAU,UAAU,QAAQ,EAAE,KAAK;AAC5D,cAAI,aAAa;AACf,kBAAM,WAAW,IAAI,SAAS,aAAa,KAAK,QAAQ;AACxD,mBAAO,YAAY,QAAQ;AAAA,UAC7B;AAAA,QACF;AAGA,YAAI,KAAK,UAAU,UAAU,WAAW,CAAC,MAAM,QAAQ;AACrD,gBAAM,aAAa,KAAK,QAAQ,OAAO,WAAW,CAAC;AACnD,cAAI,eAAe,IAAI;AACrB,kBAAM,iBAAiB,KAAK,UAAU,WAAW,GAAG,UAAU;AAC9D,kBAAM,cAAc,IAAI,QAAQ,gBAAgB,KAAK,QAAQ;AAC7D,mBAAO,YAAY,WAAW;AAC9B,uBAAW,aAAa;AACxB;AAAA,UACF,OAAO;AAEL,kBAAM,WAAW,IAAI,SAAS,KAAK,UAAU,UAAU,WAAW,CAAC,GAAG,KAAK,QAAQ;AACnF,mBAAO,YAAY,QAAQ;AAC3B,uBAAW,WAAW;AACtB;AAAA,UACF;AAAA,QACF;AAGA,cAAM,SAAS,KAAK,QAAQ,KAAK,QAAQ;AACzC,YAAI,WAAW,GAAI;AAEnB,cAAM,aAAa,KAAK,UAAU,WAAW,GAAG,MAAM;AAGtD,YAAI,WAAW,WAAW,GAAG,GAAG;AAE9B,qBAAW,SAAS;AACpB;AAAA,QACF;AAGA,cAAM,gBAAgB,WAAW,SAAS,GAAG,KAAK,KAAK,iBAAiB,WAAW,MAAM,KAAK,EAAE,CAAC,CAAC;AAGlG,cAAM,aAAa,WAAW,QAAQ,GAAG;AACzC,cAAM,UAAU,eAAe,KAAK,WAAW,QAAQ,KAAK,EAAE,IAAI,WAAW,UAAU,GAAG,UAAU;AACpG,YAAI,aAAa,eAAe,KAAK,KAAK,WAAW,UAAU,aAAa,CAAC;AAG7E,YAAI,WAAW,SAAS,GAAG,GAAG;AAC5B,uBAAa,WAAW,MAAM,GAAG,EAAE,EAAE,KAAK;AAAA,QAC5C;AAGA,cAAM,UAAU,KAAK,SAAS,cAAc,QAAQ,YAAY,CAAC;AAGjE,YAAI,WAAW,KAAK,GAAG;AACrB,eAAK,gBAAgB,YAAY,OAAO;AAAA,QAC1C;AAEA,eAAO,YAAY,OAAO;AAE1B,YAAI,eAAe;AACjB,qBAAW,SAAS;AAAA,QACtB,OAAO;AAEL,gBAAM,aAAa,KAAK,OAAO;AAC/B,gBAAM,kBAAkB,KAAK,uBAAuB,MAAM,SAAS,GAAG,OAAO;AAE7E,cAAI,oBAAoB,IAAI;AAC1B,kBAAM,eAAe,KAAK,UAAU,SAAS,GAAG,eAAe;AAC/D,gBAAI,aAAa,KAAK,GAAG;AACvB,mBAAK,mBAAmB,cAAc,OAAO;AAAA,YAC/C;AACA,uBAAW,kBAAkB,WAAW;AAAA,UAC1C,OAAO;AAEL,uBAAW,SAAS;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEQ,uBAAuB,MAAc,UAAkB,SAAyB;AACtF,YAAM,UAAU,IAAI,OAAO;AAC3B,YAAM,WAAW,KAAK,OAAO;AAC7B,UAAI,QAAQ;AACZ,UAAI,MAAM;AAEV,aAAO,MAAM,KAAK,UAAU,QAAQ,GAAG;AACrC,cAAM,WAAW,KAAK,QAAQ,SAAS,GAAG;AAC1C,cAAM,YAAY,KAAK,QAAQ,UAAU,GAAG;AAE5C,YAAI,cAAc,IAAI;AAEpB,iBAAO;AAAA,QACT;AAEA,YAAI,aAAa,MAAM,WAAW,WAAW;AAE3C;AACA,gBAAM,WAAW,QAAQ;AAAA,QAC3B,OAAO;AAEL;AACA,cAAI,UAAU,GAAG;AACf,mBAAO;AAAA,UACT;AACA,gBAAM,YAAY,SAAS;AAAA,QAC7B;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,IAEQ,gBAAgB,iBAAyB,SAAoB;AAEnE,UAAI,WAAW;AACf,YAAM,SAAS,gBAAgB;AAE/B,aAAO,WAAW,QAAQ;AAExB,eAAO,WAAW,UAAU,KAAK,KAAK,gBAAgB,QAAQ,CAAC,GAAG;AAChE;AAAA,QACF;AAEA,YAAI,YAAY,OAAQ;AAGxB,cAAM,YAAY;AAClB,eAAO,WAAW,UAAU,SAAS,KAAK,gBAAgB,QAAQ,CAAC,GAAG;AACpE;AAAA,QACF;AAEA,YAAI,aAAa,WAAW;AAE1B;AACA;AAAA,QACF;AAEA,cAAM,OAAO,gBAAgB,UAAU,WAAW,QAAQ;AAG1D,eAAO,WAAW,UAAU,KAAK,KAAK,gBAAgB,QAAQ,CAAC,GAAG;AAChE;AAAA,QACF;AAEA,YAAI,QAAQ;AAGZ,YAAI,WAAW,UAAU,gBAAgB,QAAQ,MAAM,KAAK;AAC1D;AAGA,iBAAO,WAAW,UAAU,KAAK,KAAK,gBAAgB,QAAQ,CAAC,GAAG;AAChE;AAAA,UACF;AAEA,cAAI,WAAW,QAAQ;AACrB,kBAAM,QAAQ,gBAAgB,QAAQ;AAEtC,gBAAI,UAAU,OAAO,UAAU,KAAK;AAElC;AACA,oBAAM,aAAa;AAEnB,qBAAO,WAAW,UAAU,gBAAgB,QAAQ,MAAM,OAAO;AAC/D;AAAA,cACF;AAEA,sBAAQ,gBAAgB,UAAU,YAAY,QAAQ;AAEtD,kBAAI,WAAW,UAAU,gBAAgB,QAAQ,MAAM,OAAO;AAC5D;AAAA,cACF;AAAA,YACF,OAAO;AAEL,oBAAM,aAAa;AACnB,qBAAO,WAAW,UAAU,CAAC,KAAK,KAAK,gBAAgB,QAAQ,CAAC,GAAG;AACjE;AAAA,cACF;AACA,sBAAQ,gBAAgB,UAAU,YAAY,QAAQ;AAAA,YACxD;AAAA,UACF;AAAA,QACF;AAGA,gBAAQ,KAAK,mBAAmB,KAAK;AAErC,gBAAQ,aAAa,MAAM,KAAK;AAAA,MAClC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKQ,mBAAmB,KAAqB;AAC9C,YAAM,YAAuC;AAAA,QAC3C,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,QACT,SAAS;AAAA,QACT,UAAU;AAAA,QACV,UAAU;AAAA,QACV,SAAS;AAAA,QACT,WAAW;AAAA,QACX,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,MACb;AAEA,aAAO,IAAI,QAAQ,oBAAoB,YAAU;AAE/C,YAAI,UAAU,MAAM,GAAG;AACrB,iBAAO,UAAU,MAAM;AAAA,QACzB;AAGA,YAAI,OAAO,WAAW,IAAI,KAAK,OAAO,SAAS,GAAG,GAAG;AACnD,gBAAM,SAAS,OAAO,MAAM,GAAG,EAAE;AACjC,gBAAM,MAAM,SAAS,QAAQ,EAAE;AAC/B,cAAI,CAAC,MAAM,GAAG,GAAG;AACf,mBAAO,OAAO,aAAa,GAAG;AAAA,UAChC;AAAA,QACF;AAGA,YAAI,OAAO,WAAW,KAAK,KAAK,OAAO,SAAS,GAAG,GAAG;AACpD,gBAAM,SAAS,OAAO,MAAM,GAAG,EAAE;AACjC,gBAAM,MAAM,SAAS,QAAQ,EAAE;AAC/B,cAAI,CAAC,MAAM,GAAG,GAAG;AACf,mBAAO,OAAO,aAAa,GAAG;AAAA,UAChC;AAAA,QACF;AAGA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IAEQ,iBAAiB,SAA0B;AACjD,YAAM,kBAAkB,CAAC,QAAQ,QAAQ,MAAM,OAAO,SAAS,MAAM,OAAO,SAAS,QAAQ,QAAQ,SAAS,UAAU,SAAS,KAAK;AACtI,aAAO,gBAAgB,SAAS,QAAQ,YAAY,CAAC;AAAA,IACvD;AAAA;AAAA;AAAA;AAAA,IAKQ,0BAAgC;AAEtC,YAAM,kBAAkB,KAAK,SAAS,iBAAiB,MAAM;AAC7D,YAAM,kBAAkB,KAAK,SAAS,iBAAiB,MAAM;AAC7D,YAAM,kBAAkB,KAAK,SAAS,iBAAiB,MAAM;AAG7D,UAAI,cAAc;AAElB,eAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC/C,cAAM,OAAO,gBAAgB,CAAC;AAC9B,YAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,wBAAc;AACd;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,aAAa;AAChB,iBAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC/C,gBAAM,OAAO,gBAAgB,CAAC;AAC9B,cAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,0BAAc;AACd;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,eAAe,gBAAgB,SAAS,GAAG;AAC9C,sBAAc,gBAAgB,CAAC;AAAA,MACjC;AAGA,UAAI,cAAc;AAElB,eAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC/C,cAAM,OAAO,gBAAgB,CAAC;AAC9B,YAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,wBAAc;AACd;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,aAAa;AAChB,iBAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC/C,gBAAM,OAAO,gBAAgB,CAAC;AAC9B,cAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,0BAAc;AACd;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,eAAe,gBAAgB,SAAS,GAAG;AAC9C,sBAAc,gBAAgB,CAAC;AAAA,MACjC;AAGA,UAAI,cAAc;AAGlB,eAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC/C,cAAM,OAAO,gBAAgB,CAAC;AAC9B,YAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,wBAAc;AACd;AAAA,QACF;AAAA,MACF;AAGA,UAAI,CAAC,aAAa;AAChB,iBAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC/C,gBAAM,OAAO,gBAAgB,CAAC;AAC9B,cAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,0BAAc;AACd;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAGA,UAAI,CAAC,eAAe,gBAAgB,SAAS,GAAG;AAC9C,sBAAc,gBAAgB,CAAC;AAAA,MACjC;AAGA,UAAI,aAAa;AACf,QAAC,KAAK,SAAiB,kBAAkB;AAAA,MAC3C;AACA,UAAI,aAAa;AACf,QAAC,KAAK,SAAiB,OAAO;AAAA,MAChC;AACA,UAAI,aAAa;AACf,QAAC,KAAK,SAAiB,OAAO;AAAA,MAChC;AAAA,IACF;AAAA,EACF;;;ADngBA;AACA;AAEO,MAAM,YAAY,CAAC,MAAc,WAA8B;AACpE,UAAM,SAAS,IAAI,UAAU,MAAM,MAAM;AACzC,WAAO,OAAO;AAAA,EAChB;AAGA,MAAO,cAAQ;AAAA,IACb;AAAA,IACA;AAAA,EACF;",
6
+ "names": ["TextBase", "TextBase", "TextBase", "ElementFactory", "Comment", "parts", "tagName", "attributeString", "closingTagIndex", "NodeFilter", "NodeFilter", "NodeFilter", "TextBase", "Comment", "DocumentFragmentBase", "NodeIterator", "TextBase", "TreeWalker"]
7
7
  }