@jxsuite/studio 2.2.2 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/data/css-meta.json +1487 -0
  2. package/data/elements-meta.json +370 -0
  3. package/data/html-meta.json +366 -0
  4. package/data/stylebook-meta.json +200 -0
  5. package/data/webdata.json +1621 -0
  6. package/dist/chunks/{Overlay.dev-ymy3et3y.js → Overlay.dev-d2ajy6sj.js} +7 -7
  7. package/dist/chunks/{content-source-r2n7v682.js → content-source-56xpvx83.js} +13 -12
  8. package/dist/chunks/{convert-to-repeater-cnpyvj74.js → convert-to-repeater-0xh9wwek.js} +12 -11
  9. package/dist/chunks/{extension-sections-vpcm4jvx.js → extension-sections-g34239vm.js} +17 -16
  10. package/dist/chunks/{files-zeg88k2d.js → files-gkz202dp.js} +18 -19
  11. package/dist/chunks/{format-host-taymsw55.js → format-host-pej3srnw.js} +2 -2
  12. package/dist/chunks/{git-panel-qp4rrwr9.js → git-panel-4j6xbh8g.js} +12 -11
  13. package/dist/chunks/{layers-panel-kj93w2zg.js → layers-panel-8mvn8sgd.js} +15 -14
  14. package/dist/chunks/{monaco-setup-xy3bs05d.js → monaco-setup-a5wkmbgh.js} +6 -3
  15. package/dist/chunks/{publish-panel-6qz6kp41.js → publish-panel-ptddc3kg.js} +6 -6
  16. package/dist/chunks/{quick-search-9wwa09hh.js → quick-search-j88azfs2.js} +19 -18
  17. package/dist/chunks/right-panel-egkaxy89.js +38 -0
  18. package/dist/chunks/{sp-overlay.dev-h6kdx076.js → sp-overlay.dev-s18hymn9.js} +8 -8
  19. package/dist/chunks/sp-progress-circle.dev-0zxcyz3r.js +15 -0
  20. package/dist/chunks/sp-tooltip.dev-5c6d1kjz.js +15 -0
  21. package/dist/chunks/{studio-753znj4c.js → studio-0e4h32g6.js} +5 -5
  22. package/dist/chunks/{studio-yz9s88s0.js → studio-10s469da.js} +25 -9
  23. package/dist/chunks/{studio-6f0am8f2.js → studio-2w11grav.js} +2 -2
  24. package/dist/chunks/{studio-zqv3w24n.js → studio-3q65xvzv.js} +5 -5
  25. package/dist/chunks/{studio-qhh8r5fz.js → studio-4058pg09.js} +4 -4
  26. package/dist/chunks/{studio-hekaagev.js → studio-4enps87v.js} +17 -17
  27. package/dist/chunks/{studio-tqemhphj.js → studio-50eed4c9.js} +4 -4
  28. package/dist/chunks/studio-53n8bp04.js +16 -0
  29. package/dist/chunks/{studio-nqq8jk8f.js → studio-5amdrjm4.js} +14 -14
  30. package/dist/chunks/{studio-6zzbyx17.js → studio-5ne8mdx9.js} +2 -2
  31. package/dist/chunks/{studio-3z8jjm2p.js → studio-7ejemhej.js} +3 -3
  32. package/dist/chunks/{studio-1kgfcv7s.js → studio-a11d3a1b.js} +12 -11
  33. package/dist/chunks/{studio-rgwcpast.js → studio-ay8wcr2b.js} +2 -2
  34. package/dist/chunks/{studio-fys6z73y.js → studio-bak2cyjr.js} +7 -7
  35. package/dist/chunks/{studio-xmvbhg31.js → studio-c31yb4t6.js} +2 -2
  36. package/dist/chunks/{studio-8sdyjfd6.js → studio-cf4rk7kv.js} +2 -2
  37. package/dist/chunks/{studio-yphy4z9m.js → studio-cv606rs1.js} +5 -5
  38. package/dist/chunks/{studio-5kt960pk.js → studio-hk523hby.js} +133 -147
  39. package/dist/chunks/{studio-x0et2z9g.js → studio-hs8x23fv.js} +15 -15
  40. package/dist/chunks/{studio-p471gg5n.js → studio-kvfx9z2c.js} +7 -3
  41. package/dist/chunks/{studio-22xr4q8q.js → studio-ncnet0ba.js} +18 -29
  42. package/dist/chunks/{studio-ckwz4d3x.js → studio-twsafr1e.js} +2 -2
  43. package/dist/chunks/{studio-qrsfh1w7.js → studio-tzx3xmvx.js} +5 -5
  44. package/dist/chunks/{studio-g8t7g0gp.js → studio-vdpcpada.js} +3 -3
  45. package/dist/chunks/{studio-6a0h7sne.js → studio-vhk5fmfv.js} +2 -2
  46. package/dist/chunks/{studio-hrajjyt2.js → studio-wdt9y92a.js} +2 -2
  47. package/dist/chunks/{studio-r8vx7bkz.js → studio-x3etxs0s.js} +14 -13
  48. package/dist/chunks/{studio-pv8m0h4a.js → studio-yxzgjq8q.js} +28 -23
  49. package/dist/chunks/{studio-300zsz1k.js → studio-zdkgwhkv.js} +6 -6
  50. package/dist/codicon.ttf +0 -0
  51. package/dist/iframe-entry.js +8 -1
  52. package/dist/manifest.json +82 -0
  53. package/dist/studio.js +232 -103
  54. package/index.html +0 -50
  55. package/package.json +11 -4
  56. package/src/canvas/iframe-entry.ts +5 -0
  57. package/src/canvas/iframe-host.ts +45 -4
  58. package/src/content/entry-editor.ts +2 -1
  59. package/src/editor/context-menu.ts +13 -2
  60. package/src/editor/slash-menu.ts +26 -11
  61. package/src/files/files.ts +11 -23
  62. package/src/grid/grid-panel.ts +27 -6
  63. package/src/hosting/document.ts +109 -0
  64. package/src/hosting/layout.ts +211 -0
  65. package/src/hosting/stage.ts +166 -0
  66. package/src/hosting/tsconfig.json +18 -0
  67. package/src/panels/ai-chat/chat-view.ts +25 -14
  68. package/src/panels/git-panel.ts +17 -14
  69. package/src/panels/head-panel.ts +32 -14
  70. package/src/panels/imports-panel.ts +32 -13
  71. package/src/panels/layers-panel.ts +9 -1
  72. package/src/panels/panel-registry.ts +0 -1
  73. package/src/panels/properties-panel.ts +3 -3
  74. package/src/panels/settings-pane.ts +1 -1
  75. package/src/panels/style-panel.ts +3 -3
  76. package/src/panels/stylebook-panel.ts +10 -1
  77. package/src/panels/toolbar.ts +1 -1
  78. package/src/services/bundle-base.ts +69 -0
  79. package/src/services/monaco-setup.ts +19 -13
  80. package/src/shell/tree.ts +155 -0
  81. package/src/shell.ts +0 -2
  82. package/src/studio.ts +22 -2
  83. package/src/types.ts +15 -0
  84. package/src/ui/regions.ts +10 -45
  85. package/styles/overlays.css +35 -0
  86. package/dist/chunks/2020-xp8vnwma.js.map +0 -24
  87. package/dist/chunks/Overlay.dev-ymy3et3y.js.map +0 -9
  88. package/dist/chunks/adapter-jkcyhgtr.js.map +0 -9
  89. package/dist/chunks/cf-settings-g5fbf2zp.js.map +0 -9
  90. package/dist/chunks/components-z6cnkyy1.js.map +0 -9
  91. package/dist/chunks/content-source-r2n7v682.js.map +0 -9
  92. package/dist/chunks/convert-to-repeater-cnpyvj74.js.map +0 -10
  93. package/dist/chunks/editor-cptq5jp1.js.map +0 -9
  94. package/dist/chunks/extension-sections-vpcm4jvx.js.map +0 -11
  95. package/dist/chunks/files-zeg88k2d.js.map +0 -9
  96. package/dist/chunks/flow-qbfgrpeh.js.map +0 -12
  97. package/dist/chunks/focus-trap.esm-ggawf1hy.js.map +0 -11
  98. package/dist/chunks/focus-visible-6eg70z18.js.map +0 -10
  99. package/dist/chunks/format-host-taymsw55.js.map +0 -9
  100. package/dist/chunks/git-panel-qp4rrwr9.js.map +0 -9
  101. package/dist/chunks/index-nj44jpzj.js.map +0 -14
  102. package/dist/chunks/index-zqxmqxmh.js.map +0 -9
  103. package/dist/chunks/javascript-q8kpmfah.js.map +0 -11
  104. package/dist/chunks/jsonMode-dkr040ga.js.map +0 -18
  105. package/dist/chunks/jx-validate-jj9rnt4n.js.map +0 -9
  106. package/dist/chunks/layers-panel-kj93w2zg.js.map +0 -9
  107. package/dist/chunks/monaco-binding-rj6xpx9y.js.map +0 -10
  108. package/dist/chunks/monaco-setup-xy3bs05d.js.map +0 -15
  109. package/dist/chunks/publish-panel-6qz6kp41.js.map +0 -9
  110. package/dist/chunks/quick-search-9wwa09hh.js.map +0 -9
  111. package/dist/chunks/right-panel-faf816ch.js +0 -37
  112. package/dist/chunks/right-panel-faf816ch.js.map +0 -9
  113. package/dist/chunks/section-registry-sx1ykvkw.js.map +0 -9
  114. package/dist/chunks/sp-overlay.dev-h6kdx076.js.map +0 -9
  115. package/dist/chunks/sp-popover.dev-dj9x7e7a.js.map +0 -9
  116. package/dist/chunks/sp-progress-circle.dev-0fpvhm52.js +0 -15
  117. package/dist/chunks/sp-progress-circle.dev-0fpvhm52.js.map +0 -9
  118. package/dist/chunks/sp-tooltip.dev-rvepkw4r.js +0 -15
  119. package/dist/chunks/sp-tooltip.dev-rvepkw4r.js.map +0 -9
  120. package/dist/chunks/sp-tray.dev-64v4pxw8.js.map +0 -12
  121. package/dist/chunks/studio-0a5qrh01.js.map +0 -9
  122. package/dist/chunks/studio-0rqqhrdy.js.map +0 -12
  123. package/dist/chunks/studio-18j3bmcz.js.map +0 -10
  124. package/dist/chunks/studio-1kgfcv7s.js.map +0 -13
  125. package/dist/chunks/studio-22xr4q8q.js.map +0 -13
  126. package/dist/chunks/studio-300zsz1k.js.map +0 -39
  127. package/dist/chunks/studio-3fk1ac9z.js.map +0 -12
  128. package/dist/chunks/studio-3n4ndrzh.js.map +0 -41
  129. package/dist/chunks/studio-3z8jjm2p.js.map +0 -13
  130. package/dist/chunks/studio-4mqb9a0j.js.map +0 -14
  131. package/dist/chunks/studio-4q0wznzf.js.map +0 -73
  132. package/dist/chunks/studio-5ehhackm.js.map +0 -10
  133. package/dist/chunks/studio-5kt960pk.js.map +0 -38
  134. package/dist/chunks/studio-5x5774ak.js.map +0 -10
  135. package/dist/chunks/studio-685s0ytq.js.map +0 -76
  136. package/dist/chunks/studio-6a0h7sne.js.map +0 -15
  137. package/dist/chunks/studio-6f0am8f2.js.map +0 -10
  138. package/dist/chunks/studio-6kv3apa9.js.map +0 -10
  139. package/dist/chunks/studio-6zzbyx17.js.map +0 -12
  140. package/dist/chunks/studio-753znj4c.js.map +0 -16
  141. package/dist/chunks/studio-7afd21nw.js.map +0 -10
  142. package/dist/chunks/studio-8jpzqk5s.js.map +0 -10
  143. package/dist/chunks/studio-8q517dfr.js.map +0 -10
  144. package/dist/chunks/studio-8sdyjfd6.js.map +0 -10
  145. package/dist/chunks/studio-a0tswy0w.js.map +0 -9
  146. package/dist/chunks/studio-a7pzveq1.js.map +0 -11
  147. package/dist/chunks/studio-ahnzd9rg.js.map +0 -10
  148. package/dist/chunks/studio-b9b6t1dg.js.map +0 -651
  149. package/dist/chunks/studio-bw5dz6km.js.map +0 -21
  150. package/dist/chunks/studio-cjm7fdjf.js.map +0 -14
  151. package/dist/chunks/studio-ckwz4d3x.js.map +0 -12
  152. package/dist/chunks/studio-d1ks410h.js.map +0 -10
  153. package/dist/chunks/studio-dg7zyt5x.js.map +0 -10
  154. package/dist/chunks/studio-fys6z73y.js.map +0 -10
  155. package/dist/chunks/studio-g1wdche0.js.map +0 -56
  156. package/dist/chunks/studio-g8t7g0gp.js.map +0 -10
  157. package/dist/chunks/studio-h4rxscfc.js.map +0 -10
  158. package/dist/chunks/studio-hekaagev.js.map +0 -18
  159. package/dist/chunks/studio-hrajjyt2.js.map +0 -10
  160. package/dist/chunks/studio-nqq8jk8f.js.map +0 -14
  161. package/dist/chunks/studio-p471gg5n.js.map +0 -14
  162. package/dist/chunks/studio-pv8m0h4a.js.map +0 -98
  163. package/dist/chunks/studio-qhh8r5fz.js.map +0 -13
  164. package/dist/chunks/studio-qrsfh1w7.js.map +0 -41
  165. package/dist/chunks/studio-r8vx7bkz.js.map +0 -235
  166. package/dist/chunks/studio-rgwcpast.js.map +0 -12
  167. package/dist/chunks/studio-s519zc99.js.map +0 -10
  168. package/dist/chunks/studio-sas7mt3k.js.map +0 -10
  169. package/dist/chunks/studio-t5wqwzdh.js.map +0 -10
  170. package/dist/chunks/studio-tqemhphj.js.map +0 -11
  171. package/dist/chunks/studio-tr20m8g8.js.map +0 -9
  172. package/dist/chunks/studio-tvgyw9xw.js.map +0 -14
  173. package/dist/chunks/studio-x0et2z9g.js.map +0 -32
  174. package/dist/chunks/studio-xm3dbxvn.js.map +0 -19
  175. package/dist/chunks/studio-xmvbhg31.js.map +0 -10
  176. package/dist/chunks/studio-ynxwkrzd.js.map +0 -246
  177. package/dist/chunks/studio-yphy4z9m.js.map +0 -10
  178. package/dist/chunks/studio-yz9s88s0.js.map +0 -54
  179. package/dist/chunks/studio-z6nw2ek2.js.map +0 -10
  180. package/dist/chunks/studio-zqv3w24n.js.map +0 -11
  181. package/dist/chunks/tsMode-76kr53q0.js.map +0 -13
  182. package/dist/chunks/ws-client-6shc5rze.js.map +0 -12
@@ -1,98 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/panels/stylebook-layers-panel.ts", "../../../node_modules/hastscript/node_modules/property-information/lib/util/schema.js", "../../../node_modules/hastscript/node_modules/property-information/lib/util/merge.js", "../../../node_modules/hastscript/node_modules/property-information/lib/normalize.js", "../../../node_modules/hastscript/node_modules/property-information/lib/util/info.js", "../../../node_modules/hastscript/node_modules/property-information/lib/util/types.js", "../../../node_modules/hastscript/node_modules/property-information/lib/util/defined-info.js", "../../../node_modules/hastscript/node_modules/property-information/lib/util/create.js", "../../../node_modules/hastscript/node_modules/property-information/lib/aria.js", "../../../node_modules/hastscript/node_modules/property-information/lib/util/case-sensitive-transform.js", "../../../node_modules/hastscript/node_modules/property-information/lib/util/case-insensitive-transform.js", "../../../node_modules/hastscript/node_modules/property-information/lib/html.js", "../../../node_modules/hastscript/node_modules/property-information/lib/svg.js", "../../../node_modules/hastscript/node_modules/property-information/lib/xlink.js", "../../../node_modules/hastscript/node_modules/property-information/lib/xmlns.js", "../../../node_modules/hastscript/node_modules/property-information/lib/xml.js", "../../../node_modules/hastscript/node_modules/property-information/lib/find.js", "../../../node_modules/hastscript/node_modules/property-information/index.js", "../../../node_modules/hast-util-parse-selector/lib/index.js", "../../../node_modules/hastscript/lib/create-h.js", "../../../node_modules/hastscript/lib/svg-case-sensitive-tag-names.js", "../../../node_modules/hastscript/lib/index.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/util/schema.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/util/merge.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/normalize.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/util/info.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/util/types.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/util/defined-info.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/util/create.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/aria.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/util/case-sensitive-transform.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/util/case-insensitive-transform.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/html.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/svg.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/xlink.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/xmlns.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/xml.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/lib/find.js", "../../../node_modules/hast-util-from-parse5/node_modules/property-information/index.js", "../../../node_modules/vfile-location/lib/index.js", "../../../node_modules/web-namespaces/index.js", "../../../node_modules/hast-util-from-parse5/lib/index.js", "../../../node_modules/parse5/dist/common/unicode.js", "../../../node_modules/parse5/dist/common/error-codes.js", "../../../node_modules/parse5/dist/tokenizer/preprocessor.js", "../../../node_modules/parse5/dist/common/token.js", "../../../node_modules/parse5/node_modules/entities/dist/esm/generated/decode-data-html.js", "../../../node_modules/parse5/node_modules/entities/dist/esm/decode-codepoint.js", "../../../node_modules/parse5/node_modules/entities/dist/esm/decode.js", "../../../node_modules/parse5/dist/common/html.js", "../../../node_modules/parse5/dist/tokenizer/index.js", "../../../node_modules/parse5/dist/parser/open-element-stack.js", "../../../node_modules/parse5/dist/parser/formatting-element-list.js", "../../../node_modules/parse5/dist/tree-adapters/default.js", "../../../node_modules/parse5/dist/common/doctype.js", "../../../node_modules/parse5/dist/common/foreign-content.js", "../../../node_modules/parse5/dist/parser/index.js", "../../../node_modules/parse5/dist/serializer/index.js", "../../../node_modules/parse5/dist/index.js", "../../../node_modules/hast-util-from-html/lib/errors.js", "../../../node_modules/hast-util-from-html/lib/index.js", "../../../node_modules/property-information/lib/util/schema.js", "../../../node_modules/property-information/lib/util/merge.js", "../../../node_modules/property-information/lib/normalize.js", "../../../node_modules/property-information/lib/util/info.js", "../../../node_modules/property-information/lib/util/types.js", "../../../node_modules/property-information/lib/util/defined-info.js", "../../../node_modules/property-information/lib/util/create.js", "../../../node_modules/property-information/lib/aria.js", "../../../node_modules/property-information/lib/util/case-sensitive-transform.js", "../../../node_modules/property-information/lib/util/case-insensitive-transform.js", "../../../node_modules/property-information/lib/html.js", "../../../node_modules/property-information/lib/svg.js", "../../../node_modules/property-information/lib/xlink.js", "../../../node_modules/property-information/lib/xmlns.js", "../../../node_modules/property-information/lib/xml.js", "../../../node_modules/property-information/lib/find.js", "../../../node_modules/property-information/index.js", "../../markup/src/html-to-jx.ts", "../src/commands/keymap.ts", "../src/commands/registry.ts", "../src/editor/merge-tags.ts", "../src/editor/repeater-scope.ts", "../src/editor/convert-to-component.ts", "../src/editor/slash-menu.ts", "../src/editor/convert-targets.ts", "../src/panels/block-action-bar.ts", "../src/editor/context-menu.ts", "../src/panels/layers-panel.ts"],
4
- "sourcesContent": [
5
- "/// <reference lib=\"dom\" />\n/** Stylebook layers panel — shows element/variable tree when in stylebook (settings) mode. */\n\nimport { html, nothing } from \"lit-html\";\nimport { classMap } from \"lit-html/directives/class-map.js\";\nimport { activeTab } from \"../workspace/workspace\";\nimport { shell } from \"../shell\";\nimport { componentRegistry } from \"../files/components\";\n\nimport type { StylebookEntry } from \"./stylebook-panel\";\nimport type { JxStyle } from \"@jxsuite/schema/types\";\nimport type { TemplateResult } from \"lit-html\";\nimport type { ComponentEntry } from \"../files/components.js\";\n\n/**\n * @param {JxStyle} rootStyle\n * @param {string} tag\n */\nfunction hasTagStyle(rootStyle: JxStyle, tag: string) {\n const s = rootStyle[`& ${tag}`];\n return s && typeof s === \"object\" && Object.keys(s).length > 0;\n}\n\n/**\n * @param {{\n * selectStylebookTag: (\n * tag: string,\n * media?: string | null,\n * opts?: { panCanvas?: boolean },\n * ) => void;\n * stylebookMeta: { $sections: { label: string; elements: StylebookEntry[] }[] };\n * }} ctx\n * @returns {import(\"lit-html\").TemplateResult}\n */\nexport function renderStylebookLayersTemplate(ctx: {\n selectStylebookTag: (tag: string, media?: string | null, opts?: { panCanvas?: boolean }) => void;\n stylebookMeta: { $sections: { label: string; elements: StylebookEntry[] }[] };\n}) {\n const tab = activeTab.value;\n const rootStyle = tab?.doc.document?.style || {};\n const selectedTag = shell.stylebook.selection;\n const selectedLeaf = selectedTag?.includes(\" \") ? selectedTag.split(\" \").pop() : selectedTag;\n\n if (shell.stylebook.tab === \"elements\") {\n /**\n * @param {StylebookEntry} entry\n * @param {number} depth\n * @param {string} parentPath\n * @returns {import(\"lit-html\").TemplateResult}\n */\n const renderEntryRow = (entry: StylebookEntry, depth = 0, parentPath = \"\"): TemplateResult => {\n const { tag } = entry;\n const fullPath = parentPath ? `${parentPath} ${tag}` : tag;\n const uniqueChildren = entry.children\n ? [...new Map(entry.children.map((c: StylebookEntry) => [c.tag, c])).values()]\n : [];\n return html`\n <div\n class=${classMap({\n \"layer-row\": true,\n selected: tag === selectedLeaf,\n })}\n style=\"padding-left:${8 + depth * 16}px\"\n @click=${(e: MouseEvent) => {\n e.stopPropagation();\n ctx.selectStylebookTag(fullPath, undefined, { panCanvas: true });\n }}\n >\n <span class=\"layer-tag\">${tag}</span>\n <span\n class=\"layer-label\"\n style=\"overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1\"\n >${entry.text || `<${tag}>`}</span\n >\n ${\n hasTagStyle(rootStyle, tag)\n ? html`<span\n style=\"width:6px;height:6px;border-radius:50%;background:var(--accent);flex-shrink:0\"\n ></span>`\n : nothing\n }\n </div>\n ${uniqueChildren.map((child: StylebookEntry) => renderEntryRow(child, depth + 1, fullPath))}\n `;\n };\n\n const elementRows: TemplateResult[] = [];\n for (const section of ctx.stylebookMeta.$sections) {\n for (const entry of section.elements) {\n elementRows.push(renderEntryRow(entry, 0));\n }\n }\n const compRows = componentRegistry.map(\n /** @param {import(\"../files/components.js\").ComponentEntry} comp */ (\n comp: ComponentEntry,\n ) => html`\n <div\n class=${classMap({\n \"layer-row\": true,\n selected: comp.tagName === selectedTag,\n })}\n @click=${() =>\n ctx.selectStylebookTag(comp.tagName, undefined, {\n panCanvas: true,\n })}\n >\n <span class=\"layer-tag component-tag\" style=\"background:var(--accent)\">⬡</span>\n <span class=\"layer-label\">${comp.tagName}</span>\n </div>\n `,\n );\n return html`${elementRows}${compRows}`;\n }\n const style = rootStyle;\n const vars = Object.entries(style).filter(([k]) => k.startsWith(\"--\"));\n if (vars.length === 0) {\n return html`<div\n style=\"padding:16px;text-align:center;color:var(--fg-dim);font-size:var(--spectrum-font-size-75, 12px)\"\n >\n No variables defined\n </div>`;\n }\n return html`${vars.map(\n ([k, v]) => html`\n <div class=\"layer-row\">\n <span class=\"layer-tag\" style=\"font-size:10px;font-family:var(--font-mono)\">var</span>\n <span class=\"layer-label\">${k}</span>\n <span\n style=\"font-size:var(--spectrum-font-size-50, 11px);color:var(--fg-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:80px\"\n >${String(v)}</span\n >\n </div>\n `,\n )}`;\n}\n",
6
- "/**\n * @import {Schema as SchemaType, Space} from 'property-information'\n */\n\n/** @type {SchemaType} */\nexport class Schema {\n /**\n * @param {SchemaType['property']} property\n * Property.\n * @param {SchemaType['normal']} normal\n * Normal.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Schema.\n */\n constructor(property, normal, space) {\n this.normal = normal\n this.property = property\n\n if (space) {\n this.space = space\n }\n }\n}\n\nSchema.prototype.normal = {}\nSchema.prototype.property = {}\nSchema.prototype.space = undefined\n",
7
- "/**\n * @import {Info, Space} from 'property-information'\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {ReadonlyArray<Schema>} definitions\n * Definitions.\n * @param {Space | undefined} [space]\n * Space.\n * @returns {Schema}\n * Schema.\n */\nexport function merge(definitions, space) {\n /** @type {Record<string, Info>} */\n const property = {}\n /** @type {Record<string, string>} */\n const normal = {}\n\n for (const definition of definitions) {\n Object.assign(property, definition.property)\n Object.assign(normal, definition.normal)\n }\n\n return new Schema(property, normal, space)\n}\n",
8
- "/**\n * Get the cleaned case insensitive form of an attribute or property.\n *\n * @param {string} value\n * An attribute-like or property-like name.\n * @returns {string}\n * Value that can be used to look up the properly cased property on a\n * `Schema`.\n */\nexport function normalize(value) {\n return value.toLowerCase()\n}\n",
9
- "/**\n * @import {Info as InfoType} from 'property-information'\n */\n\n/** @type {InfoType} */\nexport class Info {\n /**\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @returns\n * Info.\n */\n constructor(property, attribute) {\n this.attribute = attribute\n this.property = property\n }\n}\n\nInfo.prototype.attribute = ''\nInfo.prototype.booleanish = false\nInfo.prototype.boolean = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.defined = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.number = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.property = ''\nInfo.prototype.spaceSeparated = false\nInfo.prototype.space = undefined\n",
10
- "let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n return 2 ** ++powers\n}\n",
11
- "/**\n * @import {Space} from 'property-information'\n */\n\nimport {Info} from './info.js'\nimport * as types from './types.js'\n\nconst checks = /** @type {ReadonlyArray<keyof typeof types>} */ (\n Object.keys(types)\n)\n\nexport class DefinedInfo extends Info {\n /**\n * @constructor\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @param {number | null | undefined} [mask]\n * Mask.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Info.\n */\n constructor(property, attribute, mask, space) {\n let index = -1\n\n super(property, attribute)\n\n mark(this, 'space', space)\n\n if (typeof mask === 'number') {\n while (++index < checks.length) {\n const check = checks[index]\n mark(this, checks[index], (mask & types[check]) === types[check])\n }\n }\n }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @template {keyof DefinedInfo} Key\n * Key type.\n * @param {DefinedInfo} values\n * Info.\n * @param {Key} key\n * Key.\n * @param {DefinedInfo[Key]} value\n * Value.\n * @returns {undefined}\n * Nothing.\n */\nfunction mark(values, key, value) {\n if (value) {\n values[key] = value\n }\n}\n",
12
- "/**\n * @import {Info, Space} from 'property-information'\n */\n\n/**\n * @typedef Definition\n * Definition of a schema.\n * @property {Record<string, string> | undefined} [attributes]\n * Normalzed names to special attribute case.\n * @property {ReadonlyArray<string> | undefined} [mustUseProperty]\n * Normalized names that must be set as properties.\n * @property {Record<string, number | null>} properties\n * Property names to their types.\n * @property {Space | undefined} [space]\n * Space.\n * @property {Transform} transform\n * Transform a property name.\n */\n\n/**\n * @callback Transform\n * Transform.\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Attribute.\n */\n\nimport {normalize} from '../normalize.js'\nimport {DefinedInfo} from './defined-info.js'\nimport {Schema} from './schema.js'\n\n/**\n * @param {Definition} definition\n * Definition.\n * @returns {Schema}\n * Schema.\n */\nexport function create(definition) {\n /** @type {Record<string, Info>} */\n const properties = {}\n /** @type {Record<string, string>} */\n const normals = {}\n\n for (const [property, value] of Object.entries(definition.properties)) {\n const info = new DefinedInfo(\n property,\n definition.transform(definition.attributes || {}, property),\n value,\n definition.space\n )\n\n if (\n definition.mustUseProperty &&\n definition.mustUseProperty.includes(property)\n ) {\n info.mustUseProperty = true\n }\n\n properties[property] = info\n\n normals[normalize(property)] = property\n normals[normalize(info.attribute)] = property\n }\n\n return new Schema(properties, normals, definition.space)\n}\n",
13
- "import {create} from './util/create.js'\nimport {booleanish, number, spaceSeparated} from './util/types.js'\n\nexport const aria = create({\n properties: {\n ariaActiveDescendant: null,\n ariaAtomic: booleanish,\n ariaAutoComplete: null,\n ariaBusy: booleanish,\n ariaChecked: booleanish,\n ariaColCount: number,\n ariaColIndex: number,\n ariaColSpan: number,\n ariaControls: spaceSeparated,\n ariaCurrent: null,\n ariaDescribedBy: spaceSeparated,\n ariaDetails: null,\n ariaDisabled: booleanish,\n ariaDropEffect: spaceSeparated,\n ariaErrorMessage: null,\n ariaExpanded: booleanish,\n ariaFlowTo: spaceSeparated,\n ariaGrabbed: booleanish,\n ariaHasPopup: null,\n ariaHidden: booleanish,\n ariaInvalid: null,\n ariaKeyShortcuts: null,\n ariaLabel: null,\n ariaLabelledBy: spaceSeparated,\n ariaLevel: number,\n ariaLive: null,\n ariaModal: booleanish,\n ariaMultiLine: booleanish,\n ariaMultiSelectable: booleanish,\n ariaOrientation: null,\n ariaOwns: spaceSeparated,\n ariaPlaceholder: null,\n ariaPosInSet: number,\n ariaPressed: booleanish,\n ariaReadOnly: booleanish,\n ariaRelevant: null,\n ariaRequired: booleanish,\n ariaRoleDescription: spaceSeparated,\n ariaRowCount: number,\n ariaRowIndex: number,\n ariaRowSpan: number,\n ariaSelected: booleanish,\n ariaSetSize: number,\n ariaSort: null,\n ariaValueMax: number,\n ariaValueMin: number,\n ariaValueNow: number,\n ariaValueText: null,\n role: null\n },\n transform(_, property) {\n return property === 'role'\n ? property\n : 'aria-' + property.slice(4).toLowerCase()\n }\n})\n",
14
- "/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} attribute\n * Attribute.\n * @returns {string}\n * Transformed attribute.\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n return attribute in attributes ? attributes[attribute] : attribute\n}\n",
15
- "import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Transformed property.\n */\nexport function caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n",
16
- "import {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n booleanish,\n boolean,\n commaSeparated,\n number,\n overloadedBoolean,\n spaceSeparated\n} from './util/types.js'\n\nexport const html = create({\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\n mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n properties: {\n // Standard Properties.\n abbr: null,\n accept: commaSeparated,\n acceptCharset: spaceSeparated,\n accessKey: spaceSeparated,\n action: null,\n allow: null,\n allowFullScreen: boolean,\n allowPaymentRequest: boolean,\n allowUserMedia: boolean,\n alt: null,\n as: null,\n async: boolean,\n autoCapitalize: null,\n autoComplete: spaceSeparated,\n autoFocus: boolean,\n autoPlay: boolean,\n blocking: spaceSeparated,\n capture: null,\n charSet: null,\n checked: boolean,\n cite: null,\n className: spaceSeparated,\n cols: number,\n colSpan: null,\n content: null,\n contentEditable: booleanish,\n controls: boolean,\n controlsList: spaceSeparated,\n coords: number | commaSeparated,\n crossOrigin: null,\n data: null,\n dateTime: null,\n decoding: null,\n default: boolean,\n defer: boolean,\n dir: null,\n dirName: null,\n disabled: boolean,\n download: overloadedBoolean,\n draggable: booleanish,\n encType: null,\n enterKeyHint: null,\n fetchPriority: null,\n form: null,\n formAction: null,\n formEncType: null,\n formMethod: null,\n formNoValidate: boolean,\n formTarget: null,\n headers: spaceSeparated,\n height: number,\n hidden: overloadedBoolean,\n high: number,\n href: null,\n hrefLang: null,\n htmlFor: spaceSeparated,\n httpEquiv: spaceSeparated,\n id: null,\n imageSizes: null,\n imageSrcSet: null,\n inert: boolean,\n inputMode: null,\n integrity: null,\n is: null,\n isMap: boolean,\n itemId: null,\n itemProp: spaceSeparated,\n itemRef: spaceSeparated,\n itemScope: boolean,\n itemType: spaceSeparated,\n kind: null,\n label: null,\n lang: null,\n language: null,\n list: null,\n loading: null,\n loop: boolean,\n low: number,\n manifest: null,\n max: null,\n maxLength: number,\n media: null,\n method: null,\n min: null,\n minLength: number,\n multiple: boolean,\n muted: boolean,\n name: null,\n nonce: null,\n noModule: boolean,\n noValidate: boolean,\n onAbort: null,\n onAfterPrint: null,\n onAuxClick: null,\n onBeforeMatch: null,\n onBeforePrint: null,\n onBeforeToggle: null,\n onBeforeUnload: null,\n onBlur: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onContextLost: null,\n onContextMenu: null,\n onContextRestored: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFormData: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLanguageChange: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadEnd: null,\n onLoadStart: null,\n onMessage: null,\n onMessageError: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRejectionHandled: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onScrollEnd: null,\n onSecurityPolicyViolation: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onSlotChange: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnhandledRejection: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onWheel: null,\n open: boolean,\n optimum: number,\n pattern: null,\n ping: spaceSeparated,\n placeholder: null,\n playsInline: boolean,\n popover: null,\n popoverTarget: null,\n popoverTargetAction: null,\n poster: null,\n preload: null,\n readOnly: boolean,\n referrerPolicy: null,\n rel: spaceSeparated,\n required: boolean,\n reversed: boolean,\n rows: number,\n rowSpan: number,\n sandbox: spaceSeparated,\n scope: null,\n scoped: boolean,\n seamless: boolean,\n selected: boolean,\n shadowRootClonable: boolean,\n shadowRootDelegatesFocus: boolean,\n shadowRootMode: null,\n shape: null,\n size: number,\n sizes: null,\n slot: null,\n span: number,\n spellCheck: booleanish,\n src: null,\n srcDoc: null,\n srcLang: null,\n srcSet: null,\n start: number,\n step: null,\n style: null,\n tabIndex: number,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: boolean,\n useMap: null,\n value: booleanish,\n width: number,\n wrap: null,\n writingSuggestions: null,\n\n // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null, // Several. Use CSS `text-align` instead,\n aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n archive: spaceSeparated, // `<object>`. List of URIs to archives\n axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n background: null, // `<body>`. Use CSS `background-image` instead\n bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n border: number, // `<table>`. Use CSS `border-width` instead,\n borderColor: null, // `<table>`. Use CSS `border-color` instead,\n bottomMargin: number, // `<body>`\n cellPadding: null, // `<table>`\n cellSpacing: null, // `<table>`\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // `<object>`\n clear: null, // `<br>`. Use CSS `clear` instead\n code: null, // `<object>`\n codeBase: null, // `<object>`\n codeType: null, // `<object>`\n color: null, // `<font>` and `<hr>`. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // `<object>`\n event: null, // `<script>`\n face: null, // `<font>`. Use CSS instead\n frame: null, // `<table>`\n frameBorder: null, // `<iframe>`. Use CSS `border` instead\n hSpace: number, // `<img>` and `<object>`\n leftMargin: number, // `<body>`\n link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n lowSrc: null, // `<img>`. Use a `<picture>`\n marginHeight: number, // `<body>`\n marginWidth: number, // `<body>`\n noResize: boolean, // `<frame>`\n noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n noWrap: boolean, // `<td>` and `<th>`\n object: null, // `<applet>`\n profile: null, // `<head>`\n prompt: null, // `<isindex>`\n rev: null, // `<link>`\n rightMargin: number, // `<body>`\n rules: null, // `<table>`\n scheme: null, // `<meta>`\n scrolling: booleanish, // `<frame>`. Use overflow in the child context\n standby: null, // `<object>`\n summary: null, // `<table>`\n text: null, // `<body>`. Use CSS `color` instead\n topMargin: number, // `<body>`\n valueType: null, // `<param>`\n version: null, // `<html>`. Use a doctype.\n vAlign: null, // Several. Use CSS `vertical-align` instead\n vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n vSpace: number, // `<img>` and `<object>`\n\n // Non-standard Properties.\n allowTransparency: null,\n autoCorrect: null,\n autoSave: null,\n disablePictureInPicture: boolean,\n disableRemotePlayback: boolean,\n prefix: null,\n property: null,\n results: number,\n security: null,\n unselectable: null\n },\n space: 'html',\n transform: caseInsensitiveTransform\n})\n",
17
- "import {caseSensitiveTransform} from './util/case-sensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n boolean,\n commaOrSpaceSeparated,\n commaSeparated,\n number,\n spaceSeparated\n} from './util/types.js'\n\nexport const svg = create({\n attributes: {\n accentHeight: 'accent-height',\n alignmentBaseline: 'alignment-baseline',\n arabicForm: 'arabic-form',\n baselineShift: 'baseline-shift',\n capHeight: 'cap-height',\n className: 'class',\n clipPath: 'clip-path',\n clipRule: 'clip-rule',\n colorInterpolation: 'color-interpolation',\n colorInterpolationFilters: 'color-interpolation-filters',\n colorProfile: 'color-profile',\n colorRendering: 'color-rendering',\n crossOrigin: 'crossorigin',\n dataType: 'datatype',\n dominantBaseline: 'dominant-baseline',\n enableBackground: 'enable-background',\n fillOpacity: 'fill-opacity',\n fillRule: 'fill-rule',\n floodColor: 'flood-color',\n floodOpacity: 'flood-opacity',\n fontFamily: 'font-family',\n fontSize: 'font-size',\n fontSizeAdjust: 'font-size-adjust',\n fontStretch: 'font-stretch',\n fontStyle: 'font-style',\n fontVariant: 'font-variant',\n fontWeight: 'font-weight',\n glyphName: 'glyph-name',\n glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n glyphOrientationVertical: 'glyph-orientation-vertical',\n hrefLang: 'hreflang',\n horizAdvX: 'horiz-adv-x',\n horizOriginX: 'horiz-origin-x',\n horizOriginY: 'horiz-origin-y',\n imageRendering: 'image-rendering',\n letterSpacing: 'letter-spacing',\n lightingColor: 'lighting-color',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n navDown: 'nav-down',\n navDownLeft: 'nav-down-left',\n navDownRight: 'nav-down-right',\n navLeft: 'nav-left',\n navNext: 'nav-next',\n navPrev: 'nav-prev',\n navRight: 'nav-right',\n navUp: 'nav-up',\n navUpLeft: 'nav-up-left',\n navUpRight: 'nav-up-right',\n onAbort: 'onabort',\n onActivate: 'onactivate',\n onAfterPrint: 'onafterprint',\n onBeforePrint: 'onbeforeprint',\n onBegin: 'onbegin',\n onCancel: 'oncancel',\n onCanPlay: 'oncanplay',\n onCanPlayThrough: 'oncanplaythrough',\n onChange: 'onchange',\n onClick: 'onclick',\n onClose: 'onclose',\n onCopy: 'oncopy',\n onCueChange: 'oncuechange',\n onCut: 'oncut',\n onDblClick: 'ondblclick',\n onDrag: 'ondrag',\n onDragEnd: 'ondragend',\n onDragEnter: 'ondragenter',\n onDragExit: 'ondragexit',\n onDragLeave: 'ondragleave',\n onDragOver: 'ondragover',\n onDragStart: 'ondragstart',\n onDrop: 'ondrop',\n onDurationChange: 'ondurationchange',\n onEmptied: 'onemptied',\n onEnd: 'onend',\n onEnded: 'onended',\n onError: 'onerror',\n onFocus: 'onfocus',\n onFocusIn: 'onfocusin',\n onFocusOut: 'onfocusout',\n onHashChange: 'onhashchange',\n onInput: 'oninput',\n onInvalid: 'oninvalid',\n onKeyDown: 'onkeydown',\n onKeyPress: 'onkeypress',\n onKeyUp: 'onkeyup',\n onLoad: 'onload',\n onLoadedData: 'onloadeddata',\n onLoadedMetadata: 'onloadedmetadata',\n onLoadStart: 'onloadstart',\n onMessage: 'onmessage',\n onMouseDown: 'onmousedown',\n onMouseEnter: 'onmouseenter',\n onMouseLeave: 'onmouseleave',\n onMouseMove: 'onmousemove',\n onMouseOut: 'onmouseout',\n onMouseOver: 'onmouseover',\n onMouseUp: 'onmouseup',\n onMouseWheel: 'onmousewheel',\n onOffline: 'onoffline',\n onOnline: 'ononline',\n onPageHide: 'onpagehide',\n onPageShow: 'onpageshow',\n onPaste: 'onpaste',\n onPause: 'onpause',\n onPlay: 'onplay',\n onPlaying: 'onplaying',\n onPopState: 'onpopstate',\n onProgress: 'onprogress',\n onRateChange: 'onratechange',\n onRepeat: 'onrepeat',\n onReset: 'onreset',\n onResize: 'onresize',\n onScroll: 'onscroll',\n onSeeked: 'onseeked',\n onSeeking: 'onseeking',\n onSelect: 'onselect',\n onShow: 'onshow',\n onStalled: 'onstalled',\n onStorage: 'onstorage',\n onSubmit: 'onsubmit',\n onSuspend: 'onsuspend',\n onTimeUpdate: 'ontimeupdate',\n onToggle: 'ontoggle',\n onUnload: 'onunload',\n onVolumeChange: 'onvolumechange',\n onWaiting: 'onwaiting',\n onZoom: 'onzoom',\n overlinePosition: 'overline-position',\n overlineThickness: 'overline-thickness',\n paintOrder: 'paint-order',\n panose1: 'panose-1',\n pointerEvents: 'pointer-events',\n referrerPolicy: 'referrerpolicy',\n renderingIntent: 'rendering-intent',\n shapeRendering: 'shape-rendering',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strikethroughPosition: 'strikethrough-position',\n strikethroughThickness: 'strikethrough-thickness',\n strokeDashArray: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeLineCap: 'stroke-linecap',\n strokeLineJoin: 'stroke-linejoin',\n strokeMiterLimit: 'stroke-miterlimit',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n tabIndex: 'tabindex',\n textAnchor: 'text-anchor',\n textDecoration: 'text-decoration',\n textRendering: 'text-rendering',\n transformOrigin: 'transform-origin',\n typeOf: 'typeof',\n underlinePosition: 'underline-position',\n underlineThickness: 'underline-thickness',\n unicodeBidi: 'unicode-bidi',\n unicodeRange: 'unicode-range',\n unitsPerEm: 'units-per-em',\n vAlphabetic: 'v-alphabetic',\n vHanging: 'v-hanging',\n vIdeographic: 'v-ideographic',\n vMathematical: 'v-mathematical',\n vectorEffect: 'vector-effect',\n vertAdvY: 'vert-adv-y',\n vertOriginX: 'vert-origin-x',\n vertOriginY: 'vert-origin-y',\n wordSpacing: 'word-spacing',\n writingMode: 'writing-mode',\n xHeight: 'x-height',\n // These were camelcased in Tiny. Now lowercased in SVG 2\n playbackOrder: 'playbackorder',\n timelineBegin: 'timelinebegin'\n },\n properties: {\n about: commaOrSpaceSeparated,\n accentHeight: number,\n accumulate: null,\n additive: null,\n alignmentBaseline: null,\n alphabetic: number,\n amplitude: number,\n arabicForm: null,\n ascent: number,\n attributeName: null,\n attributeType: null,\n azimuth: number,\n bandwidth: null,\n baselineShift: null,\n baseFrequency: null,\n baseProfile: null,\n bbox: null,\n begin: null,\n bias: number,\n by: null,\n calcMode: null,\n capHeight: number,\n className: spaceSeparated,\n clip: null,\n clipPath: null,\n clipPathUnits: null,\n clipRule: null,\n color: null,\n colorInterpolation: null,\n colorInterpolationFilters: null,\n colorProfile: null,\n colorRendering: null,\n content: null,\n contentScriptType: null,\n contentStyleType: null,\n crossOrigin: null,\n cursor: null,\n cx: null,\n cy: null,\n d: null,\n dataType: null,\n defaultAction: null,\n descent: number,\n diffuseConstant: number,\n direction: null,\n display: null,\n dur: null,\n divisor: number,\n dominantBaseline: null,\n download: boolean,\n dx: null,\n dy: null,\n edgeMode: null,\n editable: null,\n elevation: number,\n enableBackground: null,\n end: null,\n event: null,\n exponent: number,\n externalResourcesRequired: null,\n fill: null,\n fillOpacity: number,\n fillRule: null,\n filter: null,\n filterRes: null,\n filterUnits: null,\n floodColor: null,\n floodOpacity: null,\n focusable: null,\n focusHighlight: null,\n fontFamily: null,\n fontSize: null,\n fontSizeAdjust: null,\n fontStretch: null,\n fontStyle: null,\n fontVariant: null,\n fontWeight: null,\n format: null,\n fr: null,\n from: null,\n fx: null,\n fy: null,\n g1: commaSeparated,\n g2: commaSeparated,\n glyphName: commaSeparated,\n glyphOrientationHorizontal: null,\n glyphOrientationVertical: null,\n glyphRef: null,\n gradientTransform: null,\n gradientUnits: null,\n handler: null,\n hanging: number,\n hatchContentUnits: null,\n hatchUnits: null,\n height: null,\n href: null,\n hrefLang: null,\n horizAdvX: number,\n horizOriginX: number,\n horizOriginY: number,\n id: null,\n ideographic: number,\n imageRendering: null,\n initialVisibility: null,\n in: null,\n in2: null,\n intercept: number,\n k: number,\n k1: number,\n k2: number,\n k3: number,\n k4: number,\n kernelMatrix: commaOrSpaceSeparated,\n kernelUnitLength: null,\n keyPoints: null, // SEMI_COLON_SEPARATED\n keySplines: null, // SEMI_COLON_SEPARATED\n keyTimes: null, // SEMI_COLON_SEPARATED\n kerning: null,\n lang: null,\n lengthAdjust: null,\n letterSpacing: null,\n lightingColor: null,\n limitingConeAngle: number,\n local: null,\n markerEnd: null,\n markerMid: null,\n markerStart: null,\n markerHeight: null,\n markerUnits: null,\n markerWidth: null,\n mask: null,\n maskContentUnits: null,\n maskUnits: null,\n mathematical: null,\n max: null,\n media: null,\n mediaCharacterEncoding: null,\n mediaContentEncodings: null,\n mediaSize: number,\n mediaTime: null,\n method: null,\n min: null,\n mode: null,\n name: null,\n navDown: null,\n navDownLeft: null,\n navDownRight: null,\n navLeft: null,\n navNext: null,\n navPrev: null,\n navRight: null,\n navUp: null,\n navUpLeft: null,\n navUpRight: null,\n numOctaves: null,\n observer: null,\n offset: null,\n onAbort: null,\n onActivate: null,\n onAfterPrint: null,\n onBeforePrint: null,\n onBegin: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnd: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFocusIn: null,\n onFocusOut: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadStart: null,\n onMessage: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onMouseWheel: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRepeat: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onShow: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onZoom: null,\n opacity: null,\n operator: null,\n order: null,\n orient: null,\n orientation: null,\n origin: null,\n overflow: null,\n overlay: null,\n overlinePosition: number,\n overlineThickness: number,\n paintOrder: null,\n panose1: null,\n path: null,\n pathLength: number,\n patternContentUnits: null,\n patternTransform: null,\n patternUnits: null,\n phase: null,\n ping: spaceSeparated,\n pitch: null,\n playbackOrder: null,\n pointerEvents: null,\n points: null,\n pointsAtX: number,\n pointsAtY: number,\n pointsAtZ: number,\n preserveAlpha: null,\n preserveAspectRatio: null,\n primitiveUnits: null,\n propagate: null,\n property: commaOrSpaceSeparated,\n r: null,\n radius: null,\n referrerPolicy: null,\n refX: null,\n refY: null,\n rel: commaOrSpaceSeparated,\n rev: commaOrSpaceSeparated,\n renderingIntent: null,\n repeatCount: null,\n repeatDur: null,\n requiredExtensions: commaOrSpaceSeparated,\n requiredFeatures: commaOrSpaceSeparated,\n requiredFonts: commaOrSpaceSeparated,\n requiredFormats: commaOrSpaceSeparated,\n resource: null,\n restart: null,\n result: null,\n rotate: null,\n rx: null,\n ry: null,\n scale: null,\n seed: null,\n shapeRendering: null,\n side: null,\n slope: null,\n snapshotTime: null,\n specularConstant: number,\n specularExponent: number,\n spreadMethod: null,\n spacing: null,\n startOffset: null,\n stdDeviation: null,\n stemh: null,\n stemv: null,\n stitchTiles: null,\n stopColor: null,\n stopOpacity: null,\n strikethroughPosition: number,\n strikethroughThickness: number,\n string: null,\n stroke: null,\n strokeDashArray: commaOrSpaceSeparated,\n strokeDashOffset: null,\n strokeLineCap: null,\n strokeLineJoin: null,\n strokeMiterLimit: number,\n strokeOpacity: number,\n strokeWidth: null,\n style: null,\n surfaceScale: number,\n syncBehavior: null,\n syncBehaviorDefault: null,\n syncMaster: null,\n syncTolerance: null,\n syncToleranceDefault: null,\n systemLanguage: commaOrSpaceSeparated,\n tabIndex: number,\n tableValues: null,\n target: null,\n targetX: number,\n targetY: number,\n textAnchor: null,\n textDecoration: null,\n textRendering: null,\n textLength: null,\n timelineBegin: null,\n title: null,\n transformBehavior: null,\n type: null,\n typeOf: commaOrSpaceSeparated,\n to: null,\n transform: null,\n transformOrigin: null,\n u1: null,\n u2: null,\n underlinePosition: number,\n underlineThickness: number,\n unicode: null,\n unicodeBidi: null,\n unicodeRange: null,\n unitsPerEm: number,\n values: null,\n vAlphabetic: number,\n vMathematical: number,\n vectorEffect: null,\n vHanging: number,\n vIdeographic: number,\n version: null,\n vertAdvY: number,\n vertOriginX: number,\n vertOriginY: number,\n viewBox: null,\n viewTarget: null,\n visibility: null,\n width: null,\n widths: null,\n wordSpacing: null,\n writingMode: null,\n x: null,\n x1: null,\n x2: null,\n xChannelSelector: null,\n xHeight: number,\n y: null,\n y1: null,\n y2: null,\n yChannelSelector: null,\n z: null,\n zoomAndPan: null\n },\n space: 'svg',\n transform: caseSensitiveTransform\n})\n",
18
- "import {create} from './util/create.js'\n\nexport const xlink = create({\n properties: {\n xLinkActuate: null,\n xLinkArcRole: null,\n xLinkHref: null,\n xLinkRole: null,\n xLinkShow: null,\n xLinkTitle: null,\n xLinkType: null\n },\n space: 'xlink',\n transform(_, property) {\n return 'xlink:' + property.slice(5).toLowerCase()\n }\n})\n",
19
- "import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n attributes: {xmlnsxlink: 'xmlns:xlink'},\n properties: {xmlnsXLink: null, xmlns: null},\n space: 'xmlns',\n transform: caseInsensitiveTransform\n})\n",
20
- "import {create} from './util/create.js'\n\nexport const xml = create({\n properties: {xmlBase: null, xmlLang: null, xmlSpace: null},\n space: 'xml',\n transform(_, property) {\n return 'xml:' + property.slice(3).toLowerCase()\n }\n})\n",
21
- "/**\n * @import {Schema} from 'property-information'\n */\n\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\nimport {normalize} from './normalize.js'\n\nconst cap = /[A-Z]/g\nconst dash = /-[a-z]/g\nconst valid = /^data[-\\w.:]+$/i\n\n/**\n * Look up info on a property.\n *\n * In most cases the given `schema` contains info on the property.\n * All standard,\n * most legacy,\n * and some non-standard properties are supported.\n * For these cases,\n * the returned `Info` has hints about the value of the property.\n *\n * `name` can also be a valid data attribute or property,\n * in which case an `Info` object with the correctly cased `attribute` and\n * `property` is returned.\n *\n * `name` can be an unknown attribute,\n * in which case an `Info` object with `attribute` and `property` set to the\n * given name is returned.\n * It is not recommended to provide unsupported legacy or recently specced\n * properties.\n *\n *\n * @param {Schema} schema\n * Schema;\n * either the `html` or `svg` export.\n * @param {string} value\n * An attribute-like or property-like name;\n * it will be passed through `normalize` to hopefully find the correct info.\n * @returns {Info}\n * Info.\n */\nexport function find(schema, value) {\n const normal = normalize(value)\n let property = value\n let Type = Info\n\n if (normal in schema.normal) {\n return schema.property[schema.normal[normal]]\n }\n\n if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n // Attribute or property.\n if (value.charAt(4) === '-') {\n // Turn it into a property.\n const rest = value.slice(5).replace(dash, camelcase)\n property = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n } else {\n // Turn it into an attribute.\n const rest = value.slice(4)\n\n if (!dash.test(rest)) {\n let dashes = rest.replace(cap, kebab)\n\n if (dashes.charAt(0) !== '-') {\n dashes = '-' + dashes\n }\n\n value = 'data' + dashes\n }\n }\n\n Type = DefinedInfo\n }\n\n return new Type(property, value)\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Kebab.\n */\nfunction kebab($0) {\n return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Camel.\n */\nfunction camelcase($0) {\n return $0.charAt(1).toUpperCase()\n}\n",
22
- "// Note: types exposed from `index.d.ts`.\nimport {merge} from './lib/util/merge.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\nimport {xlink} from './lib/xlink.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {xml} from './lib/xml.js'\n\nexport {hastToReact} from './lib/hast-to-react.js'\n\nexport const html = merge([aria, htmlBase, xlink, xmlns, xml], 'html')\n\nexport {find} from './lib/find.js'\nexport {normalize} from './lib/normalize.js'\n\nexport const svg = merge([aria, svgBase, xlink, xmlns, xml], 'svg')\n",
23
- "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n */\n\n/**\n * @template {string} SimpleSelector\n * Selector type.\n * @template {string} DefaultTagName\n * Default tag name.\n * @typedef {(\n * SimpleSelector extends ''\n * ? DefaultTagName\n * : SimpleSelector extends `${infer TagName}.${infer Rest}`\n * ? ExtractTagName<TagName, DefaultTagName>\n * : SimpleSelector extends `${infer TagName}#${infer Rest}`\n * ? ExtractTagName<TagName, DefaultTagName>\n * : SimpleSelector extends string\n * ? SimpleSelector\n * : DefaultTagName\n * )} ExtractTagName\n * Extract tag name from a simple selector.\n */\n\nconst search = /[#.]/g\n\n/**\n * Create a hast element from a simple CSS selector.\n *\n * @template {string} Selector\n * Type of selector.\n * @template {string} [DefaultTagName='div']\n * Type of default tag name (default: `'div'`).\n * @param {Selector | null | undefined} [selector]\n * Simple CSS selector (optional).\n *\n * Can contain a tag name (`foo`), classes (`.bar`), and an ID (`#baz`).\n * Multiple classes are allowed.\n * Uses the last ID if multiple IDs are found.\n * @param {DefaultTagName | null | undefined} [defaultTagName='div']\n * Tag name to use if `selector` does not specify one (default: `'div'`).\n * @returns {Element & {tagName: ExtractTagName<Selector, DefaultTagName>}}\n * Built element.\n */\nexport function parseSelector(selector, defaultTagName) {\n const value = selector || ''\n /** @type {Properties} */\n const props = {}\n let start = 0\n /** @type {string | undefined} */\n let previous\n /** @type {string | undefined} */\n let tagName\n\n while (start < value.length) {\n search.lastIndex = start\n const match = search.exec(value)\n const subvalue = value.slice(start, match ? match.index : value.length)\n\n if (subvalue) {\n if (!previous) {\n tagName = subvalue\n } else if (previous === '#') {\n props.id = subvalue\n } else if (Array.isArray(props.className)) {\n props.className.push(subvalue)\n } else {\n props.className = [subvalue]\n }\n\n start += subvalue.length\n }\n\n if (match) {\n previous = match[0]\n start++\n }\n }\n\n return {\n type: 'element',\n // @ts-expect-error: tag name is parsed.\n tagName: tagName || defaultTagName || 'div',\n properties: props,\n children: []\n }\n}\n",
24
- "/**\n * @import {Element, Nodes, RootContent, Root} from 'hast'\n * @import {Info, Schema} from 'property-information'\n */\n\n/**\n * @typedef {Array<Nodes | PrimitiveChild>} ArrayChildNested\n * List of children (deep).\n */\n\n/**\n * @typedef {Array<ArrayChildNested | Nodes | PrimitiveChild>} ArrayChild\n * List of children.\n */\n\n/**\n * @typedef {Array<number | string>} ArrayValue\n * List of property values for space- or comma separated values (such as `className`).\n */\n\n/**\n * @typedef {ArrayChild | Nodes | PrimitiveChild} Child\n * Acceptable child value.\n */\n\n/**\n * @typedef {number | string | null | undefined} PrimitiveChild\n * Primitive children, either ignored (nullish), or turned into text nodes.\n */\n\n/**\n * @typedef {boolean | number | string | null | undefined} PrimitiveValue\n * Primitive property value.\n */\n\n/**\n * @typedef {Record<string, PropertyValue | Style>} Properties\n * Acceptable value for element properties.\n */\n\n/**\n * @typedef {ArrayValue | PrimitiveValue} PropertyValue\n * Primitive value or list value.\n */\n\n/**\n * @typedef {Element | Root} Result\n * Result from a `h` (or `s`) call.\n */\n\n/**\n * @typedef {number | string} StyleValue\n * Value for a CSS style field.\n */\n\n/**\n * @typedef {Record<string, StyleValue>} Style\n * Supported value of a `style` prop.\n */\n\nimport {parse as parseCommas} from 'comma-separated-tokens'\nimport {parseSelector} from 'hast-util-parse-selector'\nimport {find, normalize} from 'property-information'\nimport {parse as parseSpaces} from 'space-separated-tokens'\n\n/**\n * @param {Schema} schema\n * Schema to use.\n * @param {string} defaultTagName\n * Default tag name.\n * @param {ReadonlyArray<string> | undefined} [caseSensitive]\n * Case-sensitive tag names (default: `undefined`).\n * @returns\n * `h`.\n */\nexport function createH(schema, defaultTagName, caseSensitive) {\n const adjust = caseSensitive ? createAdjustMap(caseSensitive) : undefined\n\n /**\n * Hyperscript compatible DSL for creating virtual hast trees.\n *\n * @overload\n * @param {null | undefined} [selector]\n * @param {...Child} children\n * @returns {Root}\n *\n * @overload\n * @param {string} selector\n * @param {Properties} properties\n * @param {...Child} children\n * @returns {Element}\n *\n * @overload\n * @param {string} selector\n * @param {...Child} children\n * @returns {Element}\n *\n * @param {string | null | undefined} [selector]\n * Selector.\n * @param {Child | Properties | null | undefined} [properties]\n * Properties (or first child) (default: `undefined`).\n * @param {...Child} children\n * Children.\n * @returns {Result}\n * Result.\n */\n function h(selector, properties, ...children) {\n /** @type {Result} */\n let node\n\n if (selector === null || selector === undefined) {\n node = {type: 'root', children: []}\n // Properties are not supported for roots.\n const child = /** @type {Child} */ (properties)\n children.unshift(child)\n } else {\n node = parseSelector(selector, defaultTagName)\n // Normalize the name.\n const lower = node.tagName.toLowerCase()\n const adjusted = adjust ? adjust.get(lower) : undefined\n node.tagName = adjusted || lower\n\n // Handle properties.\n if (isChild(properties)) {\n children.unshift(properties)\n } else {\n for (const [key, value] of Object.entries(properties)) {\n addProperty(schema, node.properties, key, value)\n }\n }\n }\n\n // Handle children.\n for (const child of children) {\n addChild(node.children, child)\n }\n\n if (node.type === 'element' && node.tagName === 'template') {\n node.content = {type: 'root', children: node.children}\n node.children = []\n }\n\n return node\n }\n\n return h\n}\n\n/**\n * Check if something is properties or a child.\n *\n * @param {Child | Properties} value\n * Value to check.\n * @returns {value is Child}\n * Whether `value` is definitely a child.\n */\nfunction isChild(value) {\n // Never properties if not an object.\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n return true\n }\n\n // Never node without `type`; that’s the main discriminator.\n if (typeof value.type !== 'string') return false\n\n // Slower check: never property value if object or array with\n // non-number/strings.\n const record = /** @type {Record<string, unknown>} */ (value)\n const keys = Object.keys(value)\n\n for (const key of keys) {\n const value = record[key]\n\n if (value && typeof value === 'object') {\n if (!Array.isArray(value)) return true\n\n const list = /** @type {ReadonlyArray<unknown>} */ (value)\n\n for (const item of list) {\n if (typeof item !== 'number' && typeof item !== 'string') {\n return true\n }\n }\n }\n }\n\n // Also see empty `children` as a node.\n if ('children' in value && Array.isArray(value.children)) {\n return true\n }\n\n // Default to properties, someone can always pass an empty object,\n // put `data: {}` in a node,\n // or wrap it in an array.\n return false\n}\n\n/**\n * @param {Schema} schema\n * Schema.\n * @param {Properties} properties\n * Properties object.\n * @param {string} key\n * Property name.\n * @param {PropertyValue | Style} value\n * Property value.\n * @returns {undefined}\n * Nothing.\n */\nfunction addProperty(schema, properties, key, value) {\n const info = find(schema, key)\n /** @type {PropertyValue} */\n let result\n\n // Ignore nullish and NaN values.\n if (value === null || value === undefined) return\n\n if (typeof value === 'number') {\n // Ignore NaN.\n if (Number.isNaN(value)) return\n\n result = value\n }\n // Booleans.\n else if (typeof value === 'boolean') {\n result = value\n }\n // Handle list values.\n else if (typeof value === 'string') {\n if (info.spaceSeparated) {\n result = parseSpaces(value)\n } else if (info.commaSeparated) {\n result = parseCommas(value)\n } else if (info.commaOrSpaceSeparated) {\n result = parseSpaces(parseCommas(value).join(' '))\n } else {\n result = parsePrimitive(info, info.property, value)\n }\n } else if (Array.isArray(value)) {\n result = [...value]\n } else {\n result = info.property === 'style' ? style(value) : String(value)\n }\n\n if (Array.isArray(result)) {\n /** @type {Array<number | string>} */\n const finalResult = []\n\n for (const item of result) {\n // Assume no booleans in array.\n finalResult.push(\n /** @type {number | string} */ (\n parsePrimitive(info, info.property, item)\n )\n )\n }\n\n result = finalResult\n }\n\n // Class names (which can be added both on the `selector` and here).\n if (info.property === 'className' && Array.isArray(properties.className)) {\n // Assume no booleans in `className`.\n result = properties.className.concat(\n /** @type {Array<number | string> | number | string} */ (result)\n )\n }\n\n properties[info.property] = result\n}\n\n/**\n * @param {Array<RootContent>} nodes\n * Children.\n * @param {Child} value\n * Child.\n * @returns {undefined}\n * Nothing.\n */\nfunction addChild(nodes, value) {\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'number' || typeof value === 'string') {\n nodes.push({type: 'text', value: String(value)})\n } else if (Array.isArray(value)) {\n for (const child of value) {\n addChild(nodes, child)\n }\n } else if (typeof value === 'object' && 'type' in value) {\n if (value.type === 'root') {\n addChild(nodes, value.children)\n } else {\n nodes.push(value)\n }\n } else {\n throw new Error('Expected node, nodes, or string, got `' + value + '`')\n }\n}\n\n/**\n * Parse a single primitives.\n *\n * @param {Info} info\n * Property information.\n * @param {string} name\n * Property name.\n * @param {PrimitiveValue} value\n * Property value.\n * @returns {PrimitiveValue}\n * Property value.\n */\nfunction parsePrimitive(info, name, value) {\n if (typeof value === 'string') {\n if (info.number && value && !Number.isNaN(Number(value))) {\n return Number(value)\n }\n\n if (\n (info.boolean || info.overloadedBoolean) &&\n (value === '' || normalize(value) === normalize(name))\n ) {\n return true\n }\n }\n\n return value\n}\n\n/**\n * Serialize a `style` object as a string.\n *\n * @param {Style} styles\n * Style object.\n * @returns {string}\n * CSS string.\n */\nfunction style(styles) {\n /** @type {Array<string>} */\n const result = []\n\n for (const [key, value] of Object.entries(styles)) {\n result.push([key, value].join(': '))\n }\n\n return result.join('; ')\n}\n\n/**\n * Create a map to adjust casing.\n *\n * @param {ReadonlyArray<string>} values\n * List of properly cased keys.\n * @returns {Map<string, string>}\n * Map of lowercase keys to uppercase keys.\n */\nfunction createAdjustMap(values) {\n /** @type {Map<string, string>} */\n const result = new Map()\n\n for (const value of values) {\n result.set(value.toLowerCase(), value)\n }\n\n return result\n}\n",
25
- "/**\n * List of case-sensitive SVG tag names.\n *\n * @type {ReadonlyArray<string>}\n */\nexport const svgCaseSensitiveTagNames = [\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'clipPath',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'foreignObject',\n 'glyphRef',\n 'linearGradient',\n 'radialGradient',\n 'solidColor',\n 'textArea',\n 'textPath'\n]\n",
26
- "// Register the JSX namespace on `h`.\n/**\n * @typedef {import('./jsx-classic.js').Element} h.JSX.Element\n * @typedef {import('./jsx-classic.js').ElementChildrenAttribute} h.JSX.ElementChildrenAttribute\n * @typedef {import('./jsx-classic.js').IntrinsicAttributes} h.JSX.IntrinsicAttributes\n * @typedef {import('./jsx-classic.js').IntrinsicElements} h.JSX.IntrinsicElements\n */\n\n// Register the JSX namespace on `s`.\n/**\n * @typedef {import('./jsx-classic.js').Element} s.JSX.Element\n * @typedef {import('./jsx-classic.js').ElementChildrenAttribute} s.JSX.ElementChildrenAttribute\n * @typedef {import('./jsx-classic.js').IntrinsicAttributes} s.JSX.IntrinsicAttributes\n * @typedef {import('./jsx-classic.js').IntrinsicElements} s.JSX.IntrinsicElements\n */\n\nimport {html, svg} from 'property-information'\nimport {createH} from './create-h.js'\nimport {svgCaseSensitiveTagNames} from './svg-case-sensitive-tag-names.js'\n\n// Note: this explicit type is needed, otherwise TS creates broken types.\n/** @type {ReturnType<createH>} */\nexport const h = createH(html, 'div')\n\n// Note: this explicit type is needed, otherwise TS creates broken types.\n/** @type {ReturnType<createH>} */\nexport const s = createH(svg, 'g', svgCaseSensitiveTagNames)\n",
27
- "/**\n * @import {Schema as SchemaType, Space} from 'property-information'\n */\n\n/** @type {SchemaType} */\nexport class Schema {\n /**\n * @param {SchemaType['property']} property\n * Property.\n * @param {SchemaType['normal']} normal\n * Normal.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Schema.\n */\n constructor(property, normal, space) {\n this.normal = normal\n this.property = property\n\n if (space) {\n this.space = space\n }\n }\n}\n\nSchema.prototype.normal = {}\nSchema.prototype.property = {}\nSchema.prototype.space = undefined\n",
28
- "/**\n * @import {Info, Space} from 'property-information'\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {ReadonlyArray<Schema>} definitions\n * Definitions.\n * @param {Space | undefined} [space]\n * Space.\n * @returns {Schema}\n * Schema.\n */\nexport function merge(definitions, space) {\n /** @type {Record<string, Info>} */\n const property = {}\n /** @type {Record<string, string>} */\n const normal = {}\n\n for (const definition of definitions) {\n Object.assign(property, definition.property)\n Object.assign(normal, definition.normal)\n }\n\n return new Schema(property, normal, space)\n}\n",
29
- "/**\n * Get the cleaned case insensitive form of an attribute or property.\n *\n * @param {string} value\n * An attribute-like or property-like name.\n * @returns {string}\n * Value that can be used to look up the properly cased property on a\n * `Schema`.\n */\nexport function normalize(value) {\n return value.toLowerCase()\n}\n",
30
- "/**\n * @import {Info as InfoType} from 'property-information'\n */\n\n/** @type {InfoType} */\nexport class Info {\n /**\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @returns\n * Info.\n */\n constructor(property, attribute) {\n this.attribute = attribute\n this.property = property\n }\n}\n\nInfo.prototype.attribute = ''\nInfo.prototype.booleanish = false\nInfo.prototype.boolean = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.defined = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.number = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.property = ''\nInfo.prototype.spaceSeparated = false\nInfo.prototype.space = undefined\n",
31
- "let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n return 2 ** ++powers\n}\n",
32
- "/**\n * @import {Space} from 'property-information'\n */\n\nimport {Info} from './info.js'\nimport * as types from './types.js'\n\nconst checks = /** @type {ReadonlyArray<keyof typeof types>} */ (\n Object.keys(types)\n)\n\nexport class DefinedInfo extends Info {\n /**\n * @constructor\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @param {number | null | undefined} [mask]\n * Mask.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Info.\n */\n constructor(property, attribute, mask, space) {\n let index = -1\n\n super(property, attribute)\n\n mark(this, 'space', space)\n\n if (typeof mask === 'number') {\n while (++index < checks.length) {\n const check = checks[index]\n mark(this, checks[index], (mask & types[check]) === types[check])\n }\n }\n }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @template {keyof DefinedInfo} Key\n * Key type.\n * @param {DefinedInfo} values\n * Info.\n * @param {Key} key\n * Key.\n * @param {DefinedInfo[Key]} value\n * Value.\n * @returns {undefined}\n * Nothing.\n */\nfunction mark(values, key, value) {\n if (value) {\n values[key] = value\n }\n}\n",
33
- "/**\n * @import {Info, Space} from 'property-information'\n */\n\n/**\n * @typedef Definition\n * Definition of a schema.\n * @property {Record<string, string> | undefined} [attributes]\n * Normalzed names to special attribute case.\n * @property {ReadonlyArray<string> | undefined} [mustUseProperty]\n * Normalized names that must be set as properties.\n * @property {Record<string, number | null>} properties\n * Property names to their types.\n * @property {Space | undefined} [space]\n * Space.\n * @property {Transform} transform\n * Transform a property name.\n */\n\n/**\n * @callback Transform\n * Transform.\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Attribute.\n */\n\nimport {normalize} from '../normalize.js'\nimport {DefinedInfo} from './defined-info.js'\nimport {Schema} from './schema.js'\n\n/**\n * @param {Definition} definition\n * Definition.\n * @returns {Schema}\n * Schema.\n */\nexport function create(definition) {\n /** @type {Record<string, Info>} */\n const properties = {}\n /** @type {Record<string, string>} */\n const normals = {}\n\n for (const [property, value] of Object.entries(definition.properties)) {\n const info = new DefinedInfo(\n property,\n definition.transform(definition.attributes || {}, property),\n value,\n definition.space\n )\n\n if (\n definition.mustUseProperty &&\n definition.mustUseProperty.includes(property)\n ) {\n info.mustUseProperty = true\n }\n\n properties[property] = info\n\n normals[normalize(property)] = property\n normals[normalize(info.attribute)] = property\n }\n\n return new Schema(properties, normals, definition.space)\n}\n",
34
- "import {create} from './util/create.js'\nimport {booleanish, number, spaceSeparated} from './util/types.js'\n\nexport const aria = create({\n properties: {\n ariaActiveDescendant: null,\n ariaAtomic: booleanish,\n ariaAutoComplete: null,\n ariaBusy: booleanish,\n ariaChecked: booleanish,\n ariaColCount: number,\n ariaColIndex: number,\n ariaColSpan: number,\n ariaControls: spaceSeparated,\n ariaCurrent: null,\n ariaDescribedBy: spaceSeparated,\n ariaDetails: null,\n ariaDisabled: booleanish,\n ariaDropEffect: spaceSeparated,\n ariaErrorMessage: null,\n ariaExpanded: booleanish,\n ariaFlowTo: spaceSeparated,\n ariaGrabbed: booleanish,\n ariaHasPopup: null,\n ariaHidden: booleanish,\n ariaInvalid: null,\n ariaKeyShortcuts: null,\n ariaLabel: null,\n ariaLabelledBy: spaceSeparated,\n ariaLevel: number,\n ariaLive: null,\n ariaModal: booleanish,\n ariaMultiLine: booleanish,\n ariaMultiSelectable: booleanish,\n ariaOrientation: null,\n ariaOwns: spaceSeparated,\n ariaPlaceholder: null,\n ariaPosInSet: number,\n ariaPressed: booleanish,\n ariaReadOnly: booleanish,\n ariaRelevant: null,\n ariaRequired: booleanish,\n ariaRoleDescription: spaceSeparated,\n ariaRowCount: number,\n ariaRowIndex: number,\n ariaRowSpan: number,\n ariaSelected: booleanish,\n ariaSetSize: number,\n ariaSort: null,\n ariaValueMax: number,\n ariaValueMin: number,\n ariaValueNow: number,\n ariaValueText: null,\n role: null\n },\n transform(_, property) {\n return property === 'role'\n ? property\n : 'aria-' + property.slice(4).toLowerCase()\n }\n})\n",
35
- "/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} attribute\n * Attribute.\n * @returns {string}\n * Transformed attribute.\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n return attribute in attributes ? attributes[attribute] : attribute\n}\n",
36
- "import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Transformed property.\n */\nexport function caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n",
37
- "import {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n booleanish,\n boolean,\n commaSeparated,\n number,\n overloadedBoolean,\n spaceSeparated\n} from './util/types.js'\n\nexport const html = create({\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\n mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n properties: {\n // Standard Properties.\n abbr: null,\n accept: commaSeparated,\n acceptCharset: spaceSeparated,\n accessKey: spaceSeparated,\n action: null,\n allow: null,\n allowFullScreen: boolean,\n allowPaymentRequest: boolean,\n allowUserMedia: boolean,\n alt: null,\n as: null,\n async: boolean,\n autoCapitalize: null,\n autoComplete: spaceSeparated,\n autoFocus: boolean,\n autoPlay: boolean,\n blocking: spaceSeparated,\n capture: null,\n charSet: null,\n checked: boolean,\n cite: null,\n className: spaceSeparated,\n cols: number,\n colSpan: null,\n content: null,\n contentEditable: booleanish,\n controls: boolean,\n controlsList: spaceSeparated,\n coords: number | commaSeparated,\n crossOrigin: null,\n data: null,\n dateTime: null,\n decoding: null,\n default: boolean,\n defer: boolean,\n dir: null,\n dirName: null,\n disabled: boolean,\n download: overloadedBoolean,\n draggable: booleanish,\n encType: null,\n enterKeyHint: null,\n fetchPriority: null,\n form: null,\n formAction: null,\n formEncType: null,\n formMethod: null,\n formNoValidate: boolean,\n formTarget: null,\n headers: spaceSeparated,\n height: number,\n hidden: overloadedBoolean,\n high: number,\n href: null,\n hrefLang: null,\n htmlFor: spaceSeparated,\n httpEquiv: spaceSeparated,\n id: null,\n imageSizes: null,\n imageSrcSet: null,\n inert: boolean,\n inputMode: null,\n integrity: null,\n is: null,\n isMap: boolean,\n itemId: null,\n itemProp: spaceSeparated,\n itemRef: spaceSeparated,\n itemScope: boolean,\n itemType: spaceSeparated,\n kind: null,\n label: null,\n lang: null,\n language: null,\n list: null,\n loading: null,\n loop: boolean,\n low: number,\n manifest: null,\n max: null,\n maxLength: number,\n media: null,\n method: null,\n min: null,\n minLength: number,\n multiple: boolean,\n muted: boolean,\n name: null,\n nonce: null,\n noModule: boolean,\n noValidate: boolean,\n onAbort: null,\n onAfterPrint: null,\n onAuxClick: null,\n onBeforeMatch: null,\n onBeforePrint: null,\n onBeforeToggle: null,\n onBeforeUnload: null,\n onBlur: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onContextLost: null,\n onContextMenu: null,\n onContextRestored: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFormData: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLanguageChange: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadEnd: null,\n onLoadStart: null,\n onMessage: null,\n onMessageError: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRejectionHandled: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onScrollEnd: null,\n onSecurityPolicyViolation: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onSlotChange: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnhandledRejection: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onWheel: null,\n open: boolean,\n optimum: number,\n pattern: null,\n ping: spaceSeparated,\n placeholder: null,\n playsInline: boolean,\n popover: null,\n popoverTarget: null,\n popoverTargetAction: null,\n poster: null,\n preload: null,\n readOnly: boolean,\n referrerPolicy: null,\n rel: spaceSeparated,\n required: boolean,\n reversed: boolean,\n rows: number,\n rowSpan: number,\n sandbox: spaceSeparated,\n scope: null,\n scoped: boolean,\n seamless: boolean,\n selected: boolean,\n shadowRootClonable: boolean,\n shadowRootDelegatesFocus: boolean,\n shadowRootMode: null,\n shape: null,\n size: number,\n sizes: null,\n slot: null,\n span: number,\n spellCheck: booleanish,\n src: null,\n srcDoc: null,\n srcLang: null,\n srcSet: null,\n start: number,\n step: null,\n style: null,\n tabIndex: number,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: boolean,\n useMap: null,\n value: booleanish,\n width: number,\n wrap: null,\n writingSuggestions: null,\n\n // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null, // Several. Use CSS `text-align` instead,\n aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n archive: spaceSeparated, // `<object>`. List of URIs to archives\n axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n background: null, // `<body>`. Use CSS `background-image` instead\n bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n border: number, // `<table>`. Use CSS `border-width` instead,\n borderColor: null, // `<table>`. Use CSS `border-color` instead,\n bottomMargin: number, // `<body>`\n cellPadding: null, // `<table>`\n cellSpacing: null, // `<table>`\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // `<object>`\n clear: null, // `<br>`. Use CSS `clear` instead\n code: null, // `<object>`\n codeBase: null, // `<object>`\n codeType: null, // `<object>`\n color: null, // `<font>` and `<hr>`. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // `<object>`\n event: null, // `<script>`\n face: null, // `<font>`. Use CSS instead\n frame: null, // `<table>`\n frameBorder: null, // `<iframe>`. Use CSS `border` instead\n hSpace: number, // `<img>` and `<object>`\n leftMargin: number, // `<body>`\n link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n lowSrc: null, // `<img>`. Use a `<picture>`\n marginHeight: number, // `<body>`\n marginWidth: number, // `<body>`\n noResize: boolean, // `<frame>`\n noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n noWrap: boolean, // `<td>` and `<th>`\n object: null, // `<applet>`\n profile: null, // `<head>`\n prompt: null, // `<isindex>`\n rev: null, // `<link>`\n rightMargin: number, // `<body>`\n rules: null, // `<table>`\n scheme: null, // `<meta>`\n scrolling: booleanish, // `<frame>`. Use overflow in the child context\n standby: null, // `<object>`\n summary: null, // `<table>`\n text: null, // `<body>`. Use CSS `color` instead\n topMargin: number, // `<body>`\n valueType: null, // `<param>`\n version: null, // `<html>`. Use a doctype.\n vAlign: null, // Several. Use CSS `vertical-align` instead\n vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n vSpace: number, // `<img>` and `<object>`\n\n // Non-standard Properties.\n allowTransparency: null,\n autoCorrect: null,\n autoSave: null,\n disablePictureInPicture: boolean,\n disableRemotePlayback: boolean,\n prefix: null,\n property: null,\n results: number,\n security: null,\n unselectable: null\n },\n space: 'html',\n transform: caseInsensitiveTransform\n})\n",
38
- "import {caseSensitiveTransform} from './util/case-sensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n boolean,\n commaOrSpaceSeparated,\n commaSeparated,\n number,\n spaceSeparated\n} from './util/types.js'\n\nexport const svg = create({\n attributes: {\n accentHeight: 'accent-height',\n alignmentBaseline: 'alignment-baseline',\n arabicForm: 'arabic-form',\n baselineShift: 'baseline-shift',\n capHeight: 'cap-height',\n className: 'class',\n clipPath: 'clip-path',\n clipRule: 'clip-rule',\n colorInterpolation: 'color-interpolation',\n colorInterpolationFilters: 'color-interpolation-filters',\n colorProfile: 'color-profile',\n colorRendering: 'color-rendering',\n crossOrigin: 'crossorigin',\n dataType: 'datatype',\n dominantBaseline: 'dominant-baseline',\n enableBackground: 'enable-background',\n fillOpacity: 'fill-opacity',\n fillRule: 'fill-rule',\n floodColor: 'flood-color',\n floodOpacity: 'flood-opacity',\n fontFamily: 'font-family',\n fontSize: 'font-size',\n fontSizeAdjust: 'font-size-adjust',\n fontStretch: 'font-stretch',\n fontStyle: 'font-style',\n fontVariant: 'font-variant',\n fontWeight: 'font-weight',\n glyphName: 'glyph-name',\n glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n glyphOrientationVertical: 'glyph-orientation-vertical',\n hrefLang: 'hreflang',\n horizAdvX: 'horiz-adv-x',\n horizOriginX: 'horiz-origin-x',\n horizOriginY: 'horiz-origin-y',\n imageRendering: 'image-rendering',\n letterSpacing: 'letter-spacing',\n lightingColor: 'lighting-color',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n navDown: 'nav-down',\n navDownLeft: 'nav-down-left',\n navDownRight: 'nav-down-right',\n navLeft: 'nav-left',\n navNext: 'nav-next',\n navPrev: 'nav-prev',\n navRight: 'nav-right',\n navUp: 'nav-up',\n navUpLeft: 'nav-up-left',\n navUpRight: 'nav-up-right',\n onAbort: 'onabort',\n onActivate: 'onactivate',\n onAfterPrint: 'onafterprint',\n onBeforePrint: 'onbeforeprint',\n onBegin: 'onbegin',\n onCancel: 'oncancel',\n onCanPlay: 'oncanplay',\n onCanPlayThrough: 'oncanplaythrough',\n onChange: 'onchange',\n onClick: 'onclick',\n onClose: 'onclose',\n onCopy: 'oncopy',\n onCueChange: 'oncuechange',\n onCut: 'oncut',\n onDblClick: 'ondblclick',\n onDrag: 'ondrag',\n onDragEnd: 'ondragend',\n onDragEnter: 'ondragenter',\n onDragExit: 'ondragexit',\n onDragLeave: 'ondragleave',\n onDragOver: 'ondragover',\n onDragStart: 'ondragstart',\n onDrop: 'ondrop',\n onDurationChange: 'ondurationchange',\n onEmptied: 'onemptied',\n onEnd: 'onend',\n onEnded: 'onended',\n onError: 'onerror',\n onFocus: 'onfocus',\n onFocusIn: 'onfocusin',\n onFocusOut: 'onfocusout',\n onHashChange: 'onhashchange',\n onInput: 'oninput',\n onInvalid: 'oninvalid',\n onKeyDown: 'onkeydown',\n onKeyPress: 'onkeypress',\n onKeyUp: 'onkeyup',\n onLoad: 'onload',\n onLoadedData: 'onloadeddata',\n onLoadedMetadata: 'onloadedmetadata',\n onLoadStart: 'onloadstart',\n onMessage: 'onmessage',\n onMouseDown: 'onmousedown',\n onMouseEnter: 'onmouseenter',\n onMouseLeave: 'onmouseleave',\n onMouseMove: 'onmousemove',\n onMouseOut: 'onmouseout',\n onMouseOver: 'onmouseover',\n onMouseUp: 'onmouseup',\n onMouseWheel: 'onmousewheel',\n onOffline: 'onoffline',\n onOnline: 'ononline',\n onPageHide: 'onpagehide',\n onPageShow: 'onpageshow',\n onPaste: 'onpaste',\n onPause: 'onpause',\n onPlay: 'onplay',\n onPlaying: 'onplaying',\n onPopState: 'onpopstate',\n onProgress: 'onprogress',\n onRateChange: 'onratechange',\n onRepeat: 'onrepeat',\n onReset: 'onreset',\n onResize: 'onresize',\n onScroll: 'onscroll',\n onSeeked: 'onseeked',\n onSeeking: 'onseeking',\n onSelect: 'onselect',\n onShow: 'onshow',\n onStalled: 'onstalled',\n onStorage: 'onstorage',\n onSubmit: 'onsubmit',\n onSuspend: 'onsuspend',\n onTimeUpdate: 'ontimeupdate',\n onToggle: 'ontoggle',\n onUnload: 'onunload',\n onVolumeChange: 'onvolumechange',\n onWaiting: 'onwaiting',\n onZoom: 'onzoom',\n overlinePosition: 'overline-position',\n overlineThickness: 'overline-thickness',\n paintOrder: 'paint-order',\n panose1: 'panose-1',\n pointerEvents: 'pointer-events',\n referrerPolicy: 'referrerpolicy',\n renderingIntent: 'rendering-intent',\n shapeRendering: 'shape-rendering',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strikethroughPosition: 'strikethrough-position',\n strikethroughThickness: 'strikethrough-thickness',\n strokeDashArray: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeLineCap: 'stroke-linecap',\n strokeLineJoin: 'stroke-linejoin',\n strokeMiterLimit: 'stroke-miterlimit',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n tabIndex: 'tabindex',\n textAnchor: 'text-anchor',\n textDecoration: 'text-decoration',\n textRendering: 'text-rendering',\n transformOrigin: 'transform-origin',\n typeOf: 'typeof',\n underlinePosition: 'underline-position',\n underlineThickness: 'underline-thickness',\n unicodeBidi: 'unicode-bidi',\n unicodeRange: 'unicode-range',\n unitsPerEm: 'units-per-em',\n vAlphabetic: 'v-alphabetic',\n vHanging: 'v-hanging',\n vIdeographic: 'v-ideographic',\n vMathematical: 'v-mathematical',\n vectorEffect: 'vector-effect',\n vertAdvY: 'vert-adv-y',\n vertOriginX: 'vert-origin-x',\n vertOriginY: 'vert-origin-y',\n wordSpacing: 'word-spacing',\n writingMode: 'writing-mode',\n xHeight: 'x-height',\n // These were camelcased in Tiny. Now lowercased in SVG 2\n playbackOrder: 'playbackorder',\n timelineBegin: 'timelinebegin'\n },\n properties: {\n about: commaOrSpaceSeparated,\n accentHeight: number,\n accumulate: null,\n additive: null,\n alignmentBaseline: null,\n alphabetic: number,\n amplitude: number,\n arabicForm: null,\n ascent: number,\n attributeName: null,\n attributeType: null,\n azimuth: number,\n bandwidth: null,\n baselineShift: null,\n baseFrequency: null,\n baseProfile: null,\n bbox: null,\n begin: null,\n bias: number,\n by: null,\n calcMode: null,\n capHeight: number,\n className: spaceSeparated,\n clip: null,\n clipPath: null,\n clipPathUnits: null,\n clipRule: null,\n color: null,\n colorInterpolation: null,\n colorInterpolationFilters: null,\n colorProfile: null,\n colorRendering: null,\n content: null,\n contentScriptType: null,\n contentStyleType: null,\n crossOrigin: null,\n cursor: null,\n cx: null,\n cy: null,\n d: null,\n dataType: null,\n defaultAction: null,\n descent: number,\n diffuseConstant: number,\n direction: null,\n display: null,\n dur: null,\n divisor: number,\n dominantBaseline: null,\n download: boolean,\n dx: null,\n dy: null,\n edgeMode: null,\n editable: null,\n elevation: number,\n enableBackground: null,\n end: null,\n event: null,\n exponent: number,\n externalResourcesRequired: null,\n fill: null,\n fillOpacity: number,\n fillRule: null,\n filter: null,\n filterRes: null,\n filterUnits: null,\n floodColor: null,\n floodOpacity: null,\n focusable: null,\n focusHighlight: null,\n fontFamily: null,\n fontSize: null,\n fontSizeAdjust: null,\n fontStretch: null,\n fontStyle: null,\n fontVariant: null,\n fontWeight: null,\n format: null,\n fr: null,\n from: null,\n fx: null,\n fy: null,\n g1: commaSeparated,\n g2: commaSeparated,\n glyphName: commaSeparated,\n glyphOrientationHorizontal: null,\n glyphOrientationVertical: null,\n glyphRef: null,\n gradientTransform: null,\n gradientUnits: null,\n handler: null,\n hanging: number,\n hatchContentUnits: null,\n hatchUnits: null,\n height: null,\n href: null,\n hrefLang: null,\n horizAdvX: number,\n horizOriginX: number,\n horizOriginY: number,\n id: null,\n ideographic: number,\n imageRendering: null,\n initialVisibility: null,\n in: null,\n in2: null,\n intercept: number,\n k: number,\n k1: number,\n k2: number,\n k3: number,\n k4: number,\n kernelMatrix: commaOrSpaceSeparated,\n kernelUnitLength: null,\n keyPoints: null, // SEMI_COLON_SEPARATED\n keySplines: null, // SEMI_COLON_SEPARATED\n keyTimes: null, // SEMI_COLON_SEPARATED\n kerning: null,\n lang: null,\n lengthAdjust: null,\n letterSpacing: null,\n lightingColor: null,\n limitingConeAngle: number,\n local: null,\n markerEnd: null,\n markerMid: null,\n markerStart: null,\n markerHeight: null,\n markerUnits: null,\n markerWidth: null,\n mask: null,\n maskContentUnits: null,\n maskUnits: null,\n mathematical: null,\n max: null,\n media: null,\n mediaCharacterEncoding: null,\n mediaContentEncodings: null,\n mediaSize: number,\n mediaTime: null,\n method: null,\n min: null,\n mode: null,\n name: null,\n navDown: null,\n navDownLeft: null,\n navDownRight: null,\n navLeft: null,\n navNext: null,\n navPrev: null,\n navRight: null,\n navUp: null,\n navUpLeft: null,\n navUpRight: null,\n numOctaves: null,\n observer: null,\n offset: null,\n onAbort: null,\n onActivate: null,\n onAfterPrint: null,\n onBeforePrint: null,\n onBegin: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnd: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFocusIn: null,\n onFocusOut: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadStart: null,\n onMessage: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onMouseWheel: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRepeat: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onShow: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onZoom: null,\n opacity: null,\n operator: null,\n order: null,\n orient: null,\n orientation: null,\n origin: null,\n overflow: null,\n overlay: null,\n overlinePosition: number,\n overlineThickness: number,\n paintOrder: null,\n panose1: null,\n path: null,\n pathLength: number,\n patternContentUnits: null,\n patternTransform: null,\n patternUnits: null,\n phase: null,\n ping: spaceSeparated,\n pitch: null,\n playbackOrder: null,\n pointerEvents: null,\n points: null,\n pointsAtX: number,\n pointsAtY: number,\n pointsAtZ: number,\n preserveAlpha: null,\n preserveAspectRatio: null,\n primitiveUnits: null,\n propagate: null,\n property: commaOrSpaceSeparated,\n r: null,\n radius: null,\n referrerPolicy: null,\n refX: null,\n refY: null,\n rel: commaOrSpaceSeparated,\n rev: commaOrSpaceSeparated,\n renderingIntent: null,\n repeatCount: null,\n repeatDur: null,\n requiredExtensions: commaOrSpaceSeparated,\n requiredFeatures: commaOrSpaceSeparated,\n requiredFonts: commaOrSpaceSeparated,\n requiredFormats: commaOrSpaceSeparated,\n resource: null,\n restart: null,\n result: null,\n rotate: null,\n rx: null,\n ry: null,\n scale: null,\n seed: null,\n shapeRendering: null,\n side: null,\n slope: null,\n snapshotTime: null,\n specularConstant: number,\n specularExponent: number,\n spreadMethod: null,\n spacing: null,\n startOffset: null,\n stdDeviation: null,\n stemh: null,\n stemv: null,\n stitchTiles: null,\n stopColor: null,\n stopOpacity: null,\n strikethroughPosition: number,\n strikethroughThickness: number,\n string: null,\n stroke: null,\n strokeDashArray: commaOrSpaceSeparated,\n strokeDashOffset: null,\n strokeLineCap: null,\n strokeLineJoin: null,\n strokeMiterLimit: number,\n strokeOpacity: number,\n strokeWidth: null,\n style: null,\n surfaceScale: number,\n syncBehavior: null,\n syncBehaviorDefault: null,\n syncMaster: null,\n syncTolerance: null,\n syncToleranceDefault: null,\n systemLanguage: commaOrSpaceSeparated,\n tabIndex: number,\n tableValues: null,\n target: null,\n targetX: number,\n targetY: number,\n textAnchor: null,\n textDecoration: null,\n textRendering: null,\n textLength: null,\n timelineBegin: null,\n title: null,\n transformBehavior: null,\n type: null,\n typeOf: commaOrSpaceSeparated,\n to: null,\n transform: null,\n transformOrigin: null,\n u1: null,\n u2: null,\n underlinePosition: number,\n underlineThickness: number,\n unicode: null,\n unicodeBidi: null,\n unicodeRange: null,\n unitsPerEm: number,\n values: null,\n vAlphabetic: number,\n vMathematical: number,\n vectorEffect: null,\n vHanging: number,\n vIdeographic: number,\n version: null,\n vertAdvY: number,\n vertOriginX: number,\n vertOriginY: number,\n viewBox: null,\n viewTarget: null,\n visibility: null,\n width: null,\n widths: null,\n wordSpacing: null,\n writingMode: null,\n x: null,\n x1: null,\n x2: null,\n xChannelSelector: null,\n xHeight: number,\n y: null,\n y1: null,\n y2: null,\n yChannelSelector: null,\n z: null,\n zoomAndPan: null\n },\n space: 'svg',\n transform: caseSensitiveTransform\n})\n",
39
- "import {create} from './util/create.js'\n\nexport const xlink = create({\n properties: {\n xLinkActuate: null,\n xLinkArcRole: null,\n xLinkHref: null,\n xLinkRole: null,\n xLinkShow: null,\n xLinkTitle: null,\n xLinkType: null\n },\n space: 'xlink',\n transform(_, property) {\n return 'xlink:' + property.slice(5).toLowerCase()\n }\n})\n",
40
- "import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n attributes: {xmlnsxlink: 'xmlns:xlink'},\n properties: {xmlnsXLink: null, xmlns: null},\n space: 'xmlns',\n transform: caseInsensitiveTransform\n})\n",
41
- "import {create} from './util/create.js'\n\nexport const xml = create({\n properties: {xmlBase: null, xmlLang: null, xmlSpace: null},\n space: 'xml',\n transform(_, property) {\n return 'xml:' + property.slice(3).toLowerCase()\n }\n})\n",
42
- "/**\n * @import {Schema} from 'property-information'\n */\n\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\nimport {normalize} from './normalize.js'\n\nconst cap = /[A-Z]/g\nconst dash = /-[a-z]/g\nconst valid = /^data[-\\w.:]+$/i\n\n/**\n * Look up info on a property.\n *\n * In most cases the given `schema` contains info on the property.\n * All standard,\n * most legacy,\n * and some non-standard properties are supported.\n * For these cases,\n * the returned `Info` has hints about the value of the property.\n *\n * `name` can also be a valid data attribute or property,\n * in which case an `Info` object with the correctly cased `attribute` and\n * `property` is returned.\n *\n * `name` can be an unknown attribute,\n * in which case an `Info` object with `attribute` and `property` set to the\n * given name is returned.\n * It is not recommended to provide unsupported legacy or recently specced\n * properties.\n *\n *\n * @param {Schema} schema\n * Schema;\n * either the `html` or `svg` export.\n * @param {string} value\n * An attribute-like or property-like name;\n * it will be passed through `normalize` to hopefully find the correct info.\n * @returns {Info}\n * Info.\n */\nexport function find(schema, value) {\n const normal = normalize(value)\n let property = value\n let Type = Info\n\n if (normal in schema.normal) {\n return schema.property[schema.normal[normal]]\n }\n\n if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n // Attribute or property.\n if (value.charAt(4) === '-') {\n // Turn it into a property.\n const rest = value.slice(5).replace(dash, camelcase)\n property = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n } else {\n // Turn it into an attribute.\n const rest = value.slice(4)\n\n if (!dash.test(rest)) {\n let dashes = rest.replace(cap, kebab)\n\n if (dashes.charAt(0) !== '-') {\n dashes = '-' + dashes\n }\n\n value = 'data' + dashes\n }\n }\n\n Type = DefinedInfo\n }\n\n return new Type(property, value)\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Kebab.\n */\nfunction kebab($0) {\n return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Camel.\n */\nfunction camelcase($0) {\n return $0.charAt(1).toUpperCase()\n}\n",
43
- "// Note: types exposed from `index.d.ts`.\nimport {merge} from './lib/util/merge.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\nimport {xlink} from './lib/xlink.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {xml} from './lib/xml.js'\n\nexport {hastToReact} from './lib/hast-to-react.js'\n\nexport const html = merge([aria, htmlBase, xlink, xmlns, xml], 'html')\n\nexport {find} from './lib/find.js'\nexport {normalize} from './lib/normalize.js'\n\nexport const svg = merge([aria, svgBase, xlink, xmlns, xml], 'svg')\n",
44
- "/**\n * @import {VFile, Value} from 'vfile'\n * @import {Location} from 'vfile-location'\n */\n\n/**\n * Create an index of the given document to translate between line/column and\n * offset based positional info.\n *\n * Also implemented in Rust in [`wooorm/markdown-rs`][markdown-rs].\n *\n * [markdown-rs]: https://github.com/wooorm/markdown-rs/blob/main/src/util/location.rs\n *\n * @param {VFile | Value} file\n * File to index.\n * @returns {Location}\n * Accessors for index.\n */\nexport function location(file) {\n const value = String(file)\n /**\n * List, where each index is a line number (0-based), and each value is the\n * byte index *after* where the line ends.\n *\n * @type {Array<number>}\n */\n const indices = []\n\n return {toOffset, toPoint}\n\n /** @type {Location['toPoint']} */\n function toPoint(offset) {\n if (typeof offset === 'number' && offset > -1 && offset <= value.length) {\n let index = 0\n\n while (true) {\n let end = indices[index]\n\n if (end === undefined) {\n const eol = next(value, indices[index - 1])\n end = eol === -1 ? value.length + 1 : eol + 1\n indices[index] = end\n }\n\n if (end > offset) {\n return {\n line: index + 1,\n column: offset - (index > 0 ? indices[index - 1] : 0) + 1,\n offset\n }\n }\n\n index++\n }\n }\n }\n\n /** @type {Location['toOffset']} */\n function toOffset(point) {\n if (\n point &&\n typeof point.line === 'number' &&\n typeof point.column === 'number' &&\n !Number.isNaN(point.line) &&\n !Number.isNaN(point.column)\n ) {\n while (indices.length < point.line) {\n const from = indices[indices.length - 1]\n const eol = next(value, from)\n const end = eol === -1 ? value.length + 1 : eol + 1\n if (from === end) break\n indices.push(end)\n }\n\n const offset =\n (point.line > 1 ? indices[point.line - 2] : 0) + point.column - 1\n // The given `column` could not exist on this line.\n if (offset < indices[point.line - 1]) return offset\n }\n }\n}\n\n/**\n * @param {string} value\n * @param {number} from\n */\nfunction next(value, from) {\n const cr = value.indexOf('\\r', from)\n const lf = value.indexOf('\\n', from)\n if (lf === -1) return cr\n if (cr === -1 || cr + 1 === lf) return lf\n return cr < lf ? cr : lf\n}\n",
45
- "/**\n * Map of web namespaces.\n *\n * @type {Record<string, string>}\n */\nexport const webNamespaces = {\n html: 'http://www.w3.org/1999/xhtml',\n mathml: 'http://www.w3.org/1998/Math/MathML',\n svg: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n xml: 'http://www.w3.org/XML/1998/namespace',\n xmlns: 'http://www.w3.org/2000/xmlns/'\n}\n",
46
- "/**\n * @import {ElementData, Element, Nodes, RootContent, Root} from 'hast'\n * @import {DefaultTreeAdapterMap, Token} from 'parse5'\n * @import {Schema} from 'property-information'\n * @import {Point, Position} from 'unist'\n * @import {VFile} from 'vfile'\n * @import {Options} from 'hast-util-from-parse5'\n */\n\n/**\n * @typedef State\n * Info passed around about the current state.\n * @property {VFile | undefined} file\n * Corresponding file.\n * @property {boolean} location\n * Whether location info was found.\n * @property {Schema} schema\n * Current schema.\n * @property {boolean | undefined} verbose\n * Add extra positional info.\n */\n\nimport {ok as assert} from 'devlop'\nimport {h, s} from 'hastscript'\nimport {find, html, svg} from 'property-information'\nimport {location} from 'vfile-location'\nimport {webNamespaces} from 'web-namespaces'\n\nconst own = {}.hasOwnProperty\n/** @type {unknown} */\n// type-coverage:ignore-next-line\nconst proto = Object.prototype\n\n/**\n * Transform a `parse5` AST to hast.\n *\n * @param {DefaultTreeAdapterMap['node']} tree\n * `parse5` tree to transform.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {Nodes}\n * hast tree.\n */\nexport function fromParse5(tree, options) {\n const settings = options || {}\n\n return one(\n {\n file: settings.file || undefined,\n location: false,\n schema: settings.space === 'svg' ? svg : html,\n verbose: settings.verbose || false\n },\n tree\n )\n}\n\n/**\n * Transform a node.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {DefaultTreeAdapterMap['node']} node\n * p5 node.\n * @returns {Nodes}\n * hast node.\n */\nfunction one(state, node) {\n /** @type {Nodes} */\n let result\n\n switch (node.nodeName) {\n case '#comment': {\n const reference = /** @type {DefaultTreeAdapterMap['commentNode']} */ (\n node\n )\n result = {type: 'comment', value: reference.data}\n patch(state, reference, result)\n return result\n }\n\n case '#document':\n case '#document-fragment': {\n const reference =\n /** @type {DefaultTreeAdapterMap['document'] | DefaultTreeAdapterMap['documentFragment']} */ (\n node\n )\n const quirksMode =\n 'mode' in reference\n ? reference.mode === 'quirks' || reference.mode === 'limited-quirks'\n : false\n\n result = {\n type: 'root',\n children: all(state, node.childNodes),\n data: {quirksMode}\n }\n\n if (state.file && state.location) {\n const document = String(state.file)\n const loc = location(document)\n const start = loc.toPoint(0)\n const end = loc.toPoint(document.length)\n // Always defined as we give valid input.\n assert(start, 'expected `start`')\n assert(end, 'expected `end`')\n result.position = {start, end}\n }\n\n return result\n }\n\n case '#documentType': {\n const reference = /** @type {DefaultTreeAdapterMap['documentType']} */ (\n node\n )\n result = {type: 'doctype'}\n patch(state, reference, result)\n return result\n }\n\n case '#text': {\n const reference = /** @type {DefaultTreeAdapterMap['textNode']} */ (node)\n result = {type: 'text', value: reference.value}\n patch(state, reference, result)\n return result\n }\n\n // Element.\n default: {\n const reference = /** @type {DefaultTreeAdapterMap['element']} */ (node)\n result = element(state, reference)\n return result\n }\n }\n}\n\n/**\n * Transform children.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {Array<DefaultTreeAdapterMap['node']>} nodes\n * Nodes.\n * @returns {Array<RootContent>}\n * hast nodes.\n */\nfunction all(state, nodes) {\n let index = -1\n /** @type {Array<RootContent>} */\n const results = []\n\n while (++index < nodes.length) {\n // Assume no roots in `nodes`.\n const result = /** @type {RootContent} */ (one(state, nodes[index]))\n results.push(result)\n }\n\n return results\n}\n\n/**\n * Transform an element.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {DefaultTreeAdapterMap['element']} node\n * `parse5` node to transform.\n * @returns {Element}\n * hast node.\n */\nfunction element(state, node) {\n const schema = state.schema\n\n state.schema = node.namespaceURI === webNamespaces.svg ? svg : html\n\n // Props.\n let index = -1\n /** @type {Record<string, string>} */\n const properties = {}\n\n while (++index < node.attrs.length) {\n const attribute = node.attrs[index]\n const name =\n (attribute.prefix ? attribute.prefix + ':' : '') + attribute.name\n if (!own.call(proto, name)) {\n properties[name] = attribute.value\n }\n }\n\n // Build.\n const x = state.schema.space === 'svg' ? s : h\n const result = x(node.tagName, properties, all(state, node.childNodes))\n patch(state, node, result)\n\n // Switch content.\n if (result.tagName === 'template') {\n const reference = /** @type {DefaultTreeAdapterMap['template']} */ (node)\n const pos = reference.sourceCodeLocation\n const startTag = pos && pos.startTag && position(pos.startTag)\n const endTag = pos && pos.endTag && position(pos.endTag)\n\n // Root in, root out.\n const content = /** @type {Root} */ (one(state, reference.content))\n\n if (startTag && endTag && state.file) {\n content.position = {start: startTag.end, end: endTag.start}\n }\n\n result.content = content\n }\n\n state.schema = schema\n\n return result\n}\n\n/**\n * Patch positional info from `from` onto `to`.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {DefaultTreeAdapterMap['node']} from\n * p5 node.\n * @param {Nodes} to\n * hast node.\n * @returns {undefined}\n * Nothing.\n */\nfunction patch(state, from, to) {\n if ('sourceCodeLocation' in from && from.sourceCodeLocation && state.file) {\n const position = createLocation(state, to, from.sourceCodeLocation)\n\n if (position) {\n state.location = true\n to.position = position\n }\n }\n}\n\n/**\n * Create clean positional information.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {Nodes} node\n * hast node.\n * @param {Token.ElementLocation} location\n * p5 location info.\n * @returns {Position | undefined}\n * Position, or nothing.\n */\nfunction createLocation(state, node, location) {\n const result = position(location)\n\n if (node.type === 'element') {\n const tail = node.children[node.children.length - 1]\n\n // Bug for unclosed with children.\n // See: <https://github.com/inikulin/parse5/issues/109>.\n if (\n result &&\n !location.endTag &&\n tail &&\n tail.position &&\n tail.position.end\n ) {\n result.end = Object.assign({}, tail.position.end)\n }\n\n if (state.verbose) {\n /** @type {Record<string, Position | undefined>} */\n const properties = {}\n /** @type {string} */\n let key\n\n if (location.attrs) {\n for (key in location.attrs) {\n if (own.call(location.attrs, key)) {\n properties[find(state.schema, key).property] = position(\n location.attrs[key]\n )\n }\n }\n }\n\n assert(location.startTag, 'a start tag should exist')\n const opening = position(location.startTag)\n const closing = location.endTag ? position(location.endTag) : undefined\n /** @type {ElementData['position']} */\n const data = {opening}\n if (closing) data.closing = closing\n data.properties = properties\n\n node.data = {position: data}\n }\n }\n\n return result\n}\n\n/**\n * Turn a p5 location into a position.\n *\n * @param {Token.Location} loc\n * Location.\n * @returns {Position | undefined}\n * Position or nothing.\n */\nfunction position(loc) {\n const start = point({\n line: loc.startLine,\n column: loc.startCol,\n offset: loc.startOffset\n })\n const end = point({\n line: loc.endLine,\n column: loc.endCol,\n offset: loc.endOffset\n })\n\n // @ts-expect-error: we do use `undefined` for points if one or the other\n // exists.\n return start || end ? {start, end} : undefined\n}\n\n/**\n * Filter out invalid points.\n *\n * @param {Point} point\n * Point with potentially `undefined` values.\n * @returns {Point | undefined}\n * Point or nothing.\n */\nfunction point(point) {\n return point.line && point.column ? point : undefined\n}\n",
47
- "const UNDEFINED_CODE_POINTS = new Set([\n 65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214,\n 393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894,\n 720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574,\n 1048575, 1114110, 1114111,\n]);\nexport const REPLACEMENT_CHARACTER = '\\uFFFD';\nexport var CODE_POINTS;\n(function (CODE_POINTS) {\n CODE_POINTS[CODE_POINTS[\"EOF\"] = -1] = \"EOF\";\n CODE_POINTS[CODE_POINTS[\"NULL\"] = 0] = \"NULL\";\n CODE_POINTS[CODE_POINTS[\"TABULATION\"] = 9] = \"TABULATION\";\n CODE_POINTS[CODE_POINTS[\"CARRIAGE_RETURN\"] = 13] = \"CARRIAGE_RETURN\";\n CODE_POINTS[CODE_POINTS[\"LINE_FEED\"] = 10] = \"LINE_FEED\";\n CODE_POINTS[CODE_POINTS[\"FORM_FEED\"] = 12] = \"FORM_FEED\";\n CODE_POINTS[CODE_POINTS[\"SPACE\"] = 32] = \"SPACE\";\n CODE_POINTS[CODE_POINTS[\"EXCLAMATION_MARK\"] = 33] = \"EXCLAMATION_MARK\";\n CODE_POINTS[CODE_POINTS[\"QUOTATION_MARK\"] = 34] = \"QUOTATION_MARK\";\n CODE_POINTS[CODE_POINTS[\"AMPERSAND\"] = 38] = \"AMPERSAND\";\n CODE_POINTS[CODE_POINTS[\"APOSTROPHE\"] = 39] = \"APOSTROPHE\";\n CODE_POINTS[CODE_POINTS[\"HYPHEN_MINUS\"] = 45] = \"HYPHEN_MINUS\";\n CODE_POINTS[CODE_POINTS[\"SOLIDUS\"] = 47] = \"SOLIDUS\";\n CODE_POINTS[CODE_POINTS[\"DIGIT_0\"] = 48] = \"DIGIT_0\";\n CODE_POINTS[CODE_POINTS[\"DIGIT_9\"] = 57] = \"DIGIT_9\";\n CODE_POINTS[CODE_POINTS[\"SEMICOLON\"] = 59] = \"SEMICOLON\";\n CODE_POINTS[CODE_POINTS[\"LESS_THAN_SIGN\"] = 60] = \"LESS_THAN_SIGN\";\n CODE_POINTS[CODE_POINTS[\"EQUALS_SIGN\"] = 61] = \"EQUALS_SIGN\";\n CODE_POINTS[CODE_POINTS[\"GREATER_THAN_SIGN\"] = 62] = \"GREATER_THAN_SIGN\";\n CODE_POINTS[CODE_POINTS[\"QUESTION_MARK\"] = 63] = \"QUESTION_MARK\";\n CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_A\"] = 65] = \"LATIN_CAPITAL_A\";\n CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_Z\"] = 90] = \"LATIN_CAPITAL_Z\";\n CODE_POINTS[CODE_POINTS[\"RIGHT_SQUARE_BRACKET\"] = 93] = \"RIGHT_SQUARE_BRACKET\";\n CODE_POINTS[CODE_POINTS[\"GRAVE_ACCENT\"] = 96] = \"GRAVE_ACCENT\";\n CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_A\"] = 97] = \"LATIN_SMALL_A\";\n CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_Z\"] = 122] = \"LATIN_SMALL_Z\";\n})(CODE_POINTS || (CODE_POINTS = {}));\nexport const SEQUENCES = {\n DASH_DASH: '--',\n CDATA_START: '[CDATA[',\n DOCTYPE: 'doctype',\n SCRIPT: 'script',\n PUBLIC: 'public',\n SYSTEM: 'system',\n};\n//Surrogates\nexport function isSurrogate(cp) {\n return cp >= 55296 && cp <= 57343;\n}\nexport function isSurrogatePair(cp) {\n return cp >= 56320 && cp <= 57343;\n}\nexport function getSurrogatePairCodePoint(cp1, cp2) {\n return (cp1 - 55296) * 1024 + 9216 + cp2;\n}\n//NOTE: excluding NULL and ASCII whitespace\nexport function isControlCodePoint(cp) {\n return ((cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) ||\n (cp >= 0x7f && cp <= 0x9f));\n}\nexport function isUndefinedCodePoint(cp) {\n return (cp >= 64976 && cp <= 65007) || UNDEFINED_CODE_POINTS.has(cp);\n}\n",
48
- "export var ERR;\n(function (ERR) {\n ERR[\"controlCharacterInInputStream\"] = \"control-character-in-input-stream\";\n ERR[\"noncharacterInInputStream\"] = \"noncharacter-in-input-stream\";\n ERR[\"surrogateInInputStream\"] = \"surrogate-in-input-stream\";\n ERR[\"nonVoidHtmlElementStartTagWithTrailingSolidus\"] = \"non-void-html-element-start-tag-with-trailing-solidus\";\n ERR[\"endTagWithAttributes\"] = \"end-tag-with-attributes\";\n ERR[\"endTagWithTrailingSolidus\"] = \"end-tag-with-trailing-solidus\";\n ERR[\"unexpectedSolidusInTag\"] = \"unexpected-solidus-in-tag\";\n ERR[\"unexpectedNullCharacter\"] = \"unexpected-null-character\";\n ERR[\"unexpectedQuestionMarkInsteadOfTagName\"] = \"unexpected-question-mark-instead-of-tag-name\";\n ERR[\"invalidFirstCharacterOfTagName\"] = \"invalid-first-character-of-tag-name\";\n ERR[\"unexpectedEqualsSignBeforeAttributeName\"] = \"unexpected-equals-sign-before-attribute-name\";\n ERR[\"missingEndTagName\"] = \"missing-end-tag-name\";\n ERR[\"unexpectedCharacterInAttributeName\"] = \"unexpected-character-in-attribute-name\";\n ERR[\"unknownNamedCharacterReference\"] = \"unknown-named-character-reference\";\n ERR[\"missingSemicolonAfterCharacterReference\"] = \"missing-semicolon-after-character-reference\";\n ERR[\"unexpectedCharacterAfterDoctypeSystemIdentifier\"] = \"unexpected-character-after-doctype-system-identifier\";\n ERR[\"unexpectedCharacterInUnquotedAttributeValue\"] = \"unexpected-character-in-unquoted-attribute-value\";\n ERR[\"eofBeforeTagName\"] = \"eof-before-tag-name\";\n ERR[\"eofInTag\"] = \"eof-in-tag\";\n ERR[\"missingAttributeValue\"] = \"missing-attribute-value\";\n ERR[\"missingWhitespaceBetweenAttributes\"] = \"missing-whitespace-between-attributes\";\n ERR[\"missingWhitespaceAfterDoctypePublicKeyword\"] = \"missing-whitespace-after-doctype-public-keyword\";\n ERR[\"missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers\"] = \"missing-whitespace-between-doctype-public-and-system-identifiers\";\n ERR[\"missingWhitespaceAfterDoctypeSystemKeyword\"] = \"missing-whitespace-after-doctype-system-keyword\";\n ERR[\"missingQuoteBeforeDoctypePublicIdentifier\"] = \"missing-quote-before-doctype-public-identifier\";\n ERR[\"missingQuoteBeforeDoctypeSystemIdentifier\"] = \"missing-quote-before-doctype-system-identifier\";\n ERR[\"missingDoctypePublicIdentifier\"] = \"missing-doctype-public-identifier\";\n ERR[\"missingDoctypeSystemIdentifier\"] = \"missing-doctype-system-identifier\";\n ERR[\"abruptDoctypePublicIdentifier\"] = \"abrupt-doctype-public-identifier\";\n ERR[\"abruptDoctypeSystemIdentifier\"] = \"abrupt-doctype-system-identifier\";\n ERR[\"cdataInHtmlContent\"] = \"cdata-in-html-content\";\n ERR[\"incorrectlyOpenedComment\"] = \"incorrectly-opened-comment\";\n ERR[\"eofInScriptHtmlCommentLikeText\"] = \"eof-in-script-html-comment-like-text\";\n ERR[\"eofInDoctype\"] = \"eof-in-doctype\";\n ERR[\"nestedComment\"] = \"nested-comment\";\n ERR[\"abruptClosingOfEmptyComment\"] = \"abrupt-closing-of-empty-comment\";\n ERR[\"eofInComment\"] = \"eof-in-comment\";\n ERR[\"incorrectlyClosedComment\"] = \"incorrectly-closed-comment\";\n ERR[\"eofInCdata\"] = \"eof-in-cdata\";\n ERR[\"absenceOfDigitsInNumericCharacterReference\"] = \"absence-of-digits-in-numeric-character-reference\";\n ERR[\"nullCharacterReference\"] = \"null-character-reference\";\n ERR[\"surrogateCharacterReference\"] = \"surrogate-character-reference\";\n ERR[\"characterReferenceOutsideUnicodeRange\"] = \"character-reference-outside-unicode-range\";\n ERR[\"controlCharacterReference\"] = \"control-character-reference\";\n ERR[\"noncharacterCharacterReference\"] = \"noncharacter-character-reference\";\n ERR[\"missingWhitespaceBeforeDoctypeName\"] = \"missing-whitespace-before-doctype-name\";\n ERR[\"missingDoctypeName\"] = \"missing-doctype-name\";\n ERR[\"invalidCharacterSequenceAfterDoctypeName\"] = \"invalid-character-sequence-after-doctype-name\";\n ERR[\"duplicateAttribute\"] = \"duplicate-attribute\";\n ERR[\"nonConformingDoctype\"] = \"non-conforming-doctype\";\n ERR[\"missingDoctype\"] = \"missing-doctype\";\n ERR[\"misplacedDoctype\"] = \"misplaced-doctype\";\n ERR[\"endTagWithoutMatchingOpenElement\"] = \"end-tag-without-matching-open-element\";\n ERR[\"closingOfElementWithOpenChildElements\"] = \"closing-of-element-with-open-child-elements\";\n ERR[\"disallowedContentInNoscriptInHead\"] = \"disallowed-content-in-noscript-in-head\";\n ERR[\"openElementsLeftAfterEof\"] = \"open-elements-left-after-eof\";\n ERR[\"abandonedHeadElementChild\"] = \"abandoned-head-element-child\";\n ERR[\"misplacedStartTagForHeadElement\"] = \"misplaced-start-tag-for-head-element\";\n ERR[\"nestedNoscriptInHead\"] = \"nested-noscript-in-head\";\n ERR[\"eofInElementThatCanContainOnlyText\"] = \"eof-in-element-that-can-contain-only-text\";\n})(ERR || (ERR = {}));\n",
49
- "import { CODE_POINTS as $, getSurrogatePairCodePoint, isControlCodePoint, isSurrogate, isSurrogatePair, isUndefinedCodePoint, } from '../common/unicode.js';\nimport { ERR } from '../common/error-codes.js';\n//Const\nconst DEFAULT_BUFFER_WATERLINE = 1 << 16;\n//Preprocessor\n//NOTE: HTML input preprocessing\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream)\nexport class Preprocessor {\n constructor(handler) {\n this.handler = handler;\n this.html = '';\n this.pos = -1;\n // NOTE: Initial `lastGapPos` is -2, to ensure `col` on initialisation is 0\n this.lastGapPos = -2;\n this.gapStack = [];\n this.skipNextNewLine = false;\n this.lastChunkWritten = false;\n this.endOfChunkHit = false;\n this.bufferWaterline = DEFAULT_BUFFER_WATERLINE;\n this.isEol = false;\n this.lineStartPos = 0;\n this.droppedBufferSize = 0;\n this.line = 1;\n //NOTE: avoid reporting errors twice on advance/retreat\n this.lastErrOffset = -1;\n }\n /** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */\n get col() {\n return this.pos - this.lineStartPos + Number(this.lastGapPos !== this.pos);\n }\n get offset() {\n return this.droppedBufferSize + this.pos;\n }\n getError(code, cpOffset) {\n const { line, col, offset } = this;\n const startCol = col + cpOffset;\n const startOffset = offset + cpOffset;\n return {\n code,\n startLine: line,\n endLine: line,\n startCol,\n endCol: startCol,\n startOffset,\n endOffset: startOffset,\n };\n }\n _err(code) {\n if (this.handler.onParseError && this.lastErrOffset !== this.offset) {\n this.lastErrOffset = this.offset;\n this.handler.onParseError(this.getError(code, 0));\n }\n }\n _addGap() {\n this.gapStack.push(this.lastGapPos);\n this.lastGapPos = this.pos;\n }\n _processSurrogate(cp) {\n //NOTE: try to peek a surrogate pair\n if (this.pos !== this.html.length - 1) {\n const nextCp = this.html.charCodeAt(this.pos + 1);\n if (isSurrogatePair(nextCp)) {\n //NOTE: we have a surrogate pair. Peek pair character and recalculate code point.\n this.pos++;\n //NOTE: add a gap that should be avoided during retreat\n this._addGap();\n return getSurrogatePairCodePoint(cp, nextCp);\n }\n }\n //NOTE: we are at the end of a chunk, therefore we can't infer the surrogate pair yet.\n else if (!this.lastChunkWritten) {\n this.endOfChunkHit = true;\n return $.EOF;\n }\n //NOTE: isolated surrogate\n this._err(ERR.surrogateInInputStream);\n return cp;\n }\n willDropParsedChunk() {\n return this.pos > this.bufferWaterline;\n }\n dropParsedChunk() {\n if (this.willDropParsedChunk()) {\n this.html = this.html.substring(this.pos);\n this.lineStartPos -= this.pos;\n this.droppedBufferSize += this.pos;\n this.pos = 0;\n this.lastGapPos = -2;\n this.gapStack.length = 0;\n }\n }\n write(chunk, isLastChunk) {\n if (this.html.length > 0) {\n this.html += chunk;\n }\n else {\n this.html = chunk;\n }\n this.endOfChunkHit = false;\n this.lastChunkWritten = isLastChunk;\n }\n insertHtmlAtCurrentPos(chunk) {\n this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1);\n this.endOfChunkHit = false;\n }\n startsWith(pattern, caseSensitive) {\n // Check if our buffer has enough characters\n if (this.pos + pattern.length > this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return false;\n }\n if (caseSensitive) {\n return this.html.startsWith(pattern, this.pos);\n }\n for (let i = 0; i < pattern.length; i++) {\n const cp = this.html.charCodeAt(this.pos + i) | 0x20;\n if (cp !== pattern.charCodeAt(i)) {\n return false;\n }\n }\n return true;\n }\n peek(offset) {\n const pos = this.pos + offset;\n if (pos >= this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return $.EOF;\n }\n const code = this.html.charCodeAt(pos);\n return code === $.CARRIAGE_RETURN ? $.LINE_FEED : code;\n }\n advance() {\n this.pos++;\n //NOTE: LF should be in the last column of the line\n if (this.isEol) {\n this.isEol = false;\n this.line++;\n this.lineStartPos = this.pos;\n }\n if (this.pos >= this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return $.EOF;\n }\n let cp = this.html.charCodeAt(this.pos);\n //NOTE: all U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters\n if (cp === $.CARRIAGE_RETURN) {\n this.isEol = true;\n this.skipNextNewLine = true;\n return $.LINE_FEED;\n }\n //NOTE: any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character\n //must be ignored.\n if (cp === $.LINE_FEED) {\n this.isEol = true;\n if (this.skipNextNewLine) {\n // `line` will be bumped again in the recursive call.\n this.line--;\n this.skipNextNewLine = false;\n this._addGap();\n return this.advance();\n }\n }\n this.skipNextNewLine = false;\n if (isSurrogate(cp)) {\n cp = this._processSurrogate(cp);\n }\n //OPTIMIZATION: first check if code point is in the common allowed\n //range (ASCII alphanumeric, whitespaces, big chunk of BMP)\n //before going into detailed performance cost validation.\n const isCommonValidRange = this.handler.onParseError === null ||\n (cp > 0x1f && cp < 0x7f) ||\n cp === $.LINE_FEED ||\n cp === $.CARRIAGE_RETURN ||\n (cp > 0x9f && cp < 64976);\n if (!isCommonValidRange) {\n this._checkForProblematicCharacters(cp);\n }\n return cp;\n }\n _checkForProblematicCharacters(cp) {\n if (isControlCodePoint(cp)) {\n this._err(ERR.controlCharacterInInputStream);\n }\n else if (isUndefinedCodePoint(cp)) {\n this._err(ERR.noncharacterInInputStream);\n }\n }\n retreat(count) {\n this.pos -= count;\n while (this.pos < this.lastGapPos) {\n this.lastGapPos = this.gapStack.pop();\n this.pos--;\n }\n this.isEol = false;\n }\n}\n",
50
- "export var TokenType;\n(function (TokenType) {\n TokenType[TokenType[\"CHARACTER\"] = 0] = \"CHARACTER\";\n TokenType[TokenType[\"NULL_CHARACTER\"] = 1] = \"NULL_CHARACTER\";\n TokenType[TokenType[\"WHITESPACE_CHARACTER\"] = 2] = \"WHITESPACE_CHARACTER\";\n TokenType[TokenType[\"START_TAG\"] = 3] = \"START_TAG\";\n TokenType[TokenType[\"END_TAG\"] = 4] = \"END_TAG\";\n TokenType[TokenType[\"COMMENT\"] = 5] = \"COMMENT\";\n TokenType[TokenType[\"DOCTYPE\"] = 6] = \"DOCTYPE\";\n TokenType[TokenType[\"EOF\"] = 7] = \"EOF\";\n TokenType[TokenType[\"HIBERNATION\"] = 8] = \"HIBERNATION\";\n})(TokenType || (TokenType = {}));\nexport function getTokenAttr(token, attrName) {\n for (let i = token.attrs.length - 1; i >= 0; i--) {\n if (token.attrs[i].name === attrName) {\n return token.attrs[i].value;\n }\n }\n return null;\n}\n",
51
- "// Generated using scripts/write-decode-map.ts\nexport const htmlDecodeTree = /* #__PURE__ */ new Uint16Array(\n// prettier-ignore\n/* #__PURE__ */ \"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-html.js.map",
52
- "// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = new Map([\n [0, 65533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n let output = \"\";\n if (codePoint > 65535) {\n codePoint -= 65536;\n output += String.fromCharCode(((codePoint >>> 10) & 1023) | 55296);\n codePoint = 56320 | (codePoint & 1023);\n }\n output += String.fromCharCode(codePoint);\n return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint) {\n var _a;\n if ((codePoint >= 55296 && codePoint <= 57343) ||\n codePoint > 1114111) {\n return 65533;\n }\n return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport function decodeCodePoint(codePoint) {\n return fromCodePoint(replaceCodePoint(codePoint));\n}\n//# sourceMappingURL=decode-codepoint.js.map",
53
- "import { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { replaceCodePoint, fromCodePoint } from \"./decode-codepoint.js\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 32;\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\nfunction isNumber(code) {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nexport var DecodingMode;\n(function (DecodingMode) {\n /** Entities in text nodes that can end with any character. */\n DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n /** Only allow entities terminated with a semicolon. */\n DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n /** Entities in attributes have limitations on ending characters. */\n DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n constructor(\n /** The tree used to decode entities. */\n decodeTree, \n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n *\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n emitCodePoint, \n /** An object that is used to produce errors. */\n errors) {\n this.decodeTree = decodeTree;\n this.emitCodePoint = emitCodePoint;\n this.errors = errors;\n /** The current state of the decoder. */\n this.state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n this.consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n this.result = 0;\n /** The current index in the decode tree. */\n this.treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n this.excess = 1;\n /** The mode in which the decoder is operating. */\n this.decodeMode = DecodingMode.Strict;\n }\n /** Resets the instance to make it reusable. */\n startEntity(decodeMode) {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n }\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(input, offset) {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (input.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(input, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(input, offset);\n }\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(input, offset);\n }\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(input, offset);\n }\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(input, offset);\n }\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(input, offset);\n }\n }\n }\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericStart(input, offset) {\n if (offset >= input.length) {\n return -1;\n }\n if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(input, offset + 1);\n }\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(input, offset);\n }\n addToNumericResult(input, start, end, base) {\n if (start !== end) {\n const digitCount = end - start;\n this.result =\n this.result * Math.pow(base, digitCount) +\n Number.parseInt(input.substr(start, digitCount), base);\n this.consumed += digitCount;\n }\n }\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericHex(input, offset) {\n const startIndex = offset;\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(input, startIndex, offset, 16);\n return this.emitNumericEntity(char, 3);\n }\n }\n this.addToNumericResult(input, startIndex, offset, 16);\n return -1;\n }\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericDecimal(input, offset) {\n const startIndex = offset;\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(input, startIndex, offset, 10);\n return this.emitNumericEntity(char, 2);\n }\n }\n this.addToNumericResult(input, startIndex, offset, 10);\n return -1;\n }\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n *\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n emitNumericEntity(lastCp, expectedLength) {\n var _a;\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n }\n else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n this.errors.validateNumericCharacterReference(this.result);\n }\n return this.consumed;\n }\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNamedEntity(input, offset) {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The mask is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n for (; offset < input.length; offset++, this.excess++) {\n const char = input.charCodeAt(offset);\n this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (this.decodeMode !== DecodingMode.Strict) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n }\n return -1;\n }\n /**\n * Emit a named entity that was not terminated with a semicolon.\n *\n * @returns The number of characters consumed.\n */\n emitNotTerminatedNamedEntity() {\n var _a;\n const { result, decodeTree } = this;\n const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n this.emitNamedEntityData(result, valueLength, this.consumed);\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n return this.consumed;\n }\n /**\n * Emit a named entity.\n *\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n *\n * @returns The number of characters consumed.\n */\n emitNamedEntityData(result, valueLength, consumed) {\n const { decodeTree } = this;\n this.emitCodePoint(valueLength === 1\n ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n : decodeTree[result + 1], consumed);\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n return consumed;\n }\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n *\n * @returns The number of characters consumed.\n */\n end() {\n var _a;\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n let returnValue = \"\";\n const decoder = new EntityDecoder(decodeTree, (data) => (returnValue += fromCodePoint(data)));\n return function decodeWithTrie(input, decodeMode) {\n let lastIndex = 0;\n let offset = 0;\n while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n returnValue += input.slice(lastIndex, offset);\n decoder.startEntity(decodeMode);\n const length = decoder.write(input, \n // Skip the \"&\"\n offset + 1);\n if (length < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n lastIndex = offset + length;\n // If `length` is 0, skip the current `&` and continue.\n offset = length === 0 ? lastIndex + 1 : lastIndex;\n }\n const result = returnValue + input.slice(lastIndex);\n // Make sure we don't keep a reference to the final string.\n returnValue = \"\";\n return result;\n };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIndex, char) {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n }\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIndex + value] - 1;\n }\n // Case 3: Multiple branches encoded in dictionary\n // Binary search for the character.\n let lo = nodeIndex;\n let hi = lo + branchCount - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const midValue = decodeTree[mid];\n if (midValue < char) {\n lo = mid + 1;\n }\n else if (midValue > char) {\n hi = mid - 1;\n }\n else {\n return decodeTree[mid + branchCount];\n }\n }\n return -1;\n}\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n *\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(htmlString, mode = DecodingMode.Legacy) {\n return htmlDecoder(htmlString, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute) {\n return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString) {\n return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString) {\n return xmlDecoder(xmlString, DecodingMode.Strict);\n}\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nexport { decodeCodePoint, replaceCodePoint, fromCodePoint, } from \"./decode-codepoint.js\";\n//# sourceMappingURL=decode.js.map",
54
- "/** All valid namespaces in HTML. */\nexport var NS;\n(function (NS) {\n NS[\"HTML\"] = \"http://www.w3.org/1999/xhtml\";\n NS[\"MATHML\"] = \"http://www.w3.org/1998/Math/MathML\";\n NS[\"SVG\"] = \"http://www.w3.org/2000/svg\";\n NS[\"XLINK\"] = \"http://www.w3.org/1999/xlink\";\n NS[\"XML\"] = \"http://www.w3.org/XML/1998/namespace\";\n NS[\"XMLNS\"] = \"http://www.w3.org/2000/xmlns/\";\n})(NS || (NS = {}));\nexport var ATTRS;\n(function (ATTRS) {\n ATTRS[\"TYPE\"] = \"type\";\n ATTRS[\"ACTION\"] = \"action\";\n ATTRS[\"ENCODING\"] = \"encoding\";\n ATTRS[\"PROMPT\"] = \"prompt\";\n ATTRS[\"NAME\"] = \"name\";\n ATTRS[\"COLOR\"] = \"color\";\n ATTRS[\"FACE\"] = \"face\";\n ATTRS[\"SIZE\"] = \"size\";\n})(ATTRS || (ATTRS = {}));\n/**\n * The mode of the document.\n *\n * @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks}\n */\nexport var DOCUMENT_MODE;\n(function (DOCUMENT_MODE) {\n DOCUMENT_MODE[\"NO_QUIRKS\"] = \"no-quirks\";\n DOCUMENT_MODE[\"QUIRKS\"] = \"quirks\";\n DOCUMENT_MODE[\"LIMITED_QUIRKS\"] = \"limited-quirks\";\n})(DOCUMENT_MODE || (DOCUMENT_MODE = {}));\nexport var TAG_NAMES;\n(function (TAG_NAMES) {\n TAG_NAMES[\"A\"] = \"a\";\n TAG_NAMES[\"ADDRESS\"] = \"address\";\n TAG_NAMES[\"ANNOTATION_XML\"] = \"annotation-xml\";\n TAG_NAMES[\"APPLET\"] = \"applet\";\n TAG_NAMES[\"AREA\"] = \"area\";\n TAG_NAMES[\"ARTICLE\"] = \"article\";\n TAG_NAMES[\"ASIDE\"] = \"aside\";\n TAG_NAMES[\"B\"] = \"b\";\n TAG_NAMES[\"BASE\"] = \"base\";\n TAG_NAMES[\"BASEFONT\"] = \"basefont\";\n TAG_NAMES[\"BGSOUND\"] = \"bgsound\";\n TAG_NAMES[\"BIG\"] = \"big\";\n TAG_NAMES[\"BLOCKQUOTE\"] = \"blockquote\";\n TAG_NAMES[\"BODY\"] = \"body\";\n TAG_NAMES[\"BR\"] = \"br\";\n TAG_NAMES[\"BUTTON\"] = \"button\";\n TAG_NAMES[\"CAPTION\"] = \"caption\";\n TAG_NAMES[\"CENTER\"] = \"center\";\n TAG_NAMES[\"CODE\"] = \"code\";\n TAG_NAMES[\"COL\"] = \"col\";\n TAG_NAMES[\"COLGROUP\"] = \"colgroup\";\n TAG_NAMES[\"DD\"] = \"dd\";\n TAG_NAMES[\"DESC\"] = \"desc\";\n TAG_NAMES[\"DETAILS\"] = \"details\";\n TAG_NAMES[\"DIALOG\"] = \"dialog\";\n TAG_NAMES[\"DIR\"] = \"dir\";\n TAG_NAMES[\"DIV\"] = \"div\";\n TAG_NAMES[\"DL\"] = \"dl\";\n TAG_NAMES[\"DT\"] = \"dt\";\n TAG_NAMES[\"EM\"] = \"em\";\n TAG_NAMES[\"EMBED\"] = \"embed\";\n TAG_NAMES[\"FIELDSET\"] = \"fieldset\";\n TAG_NAMES[\"FIGCAPTION\"] = \"figcaption\";\n TAG_NAMES[\"FIGURE\"] = \"figure\";\n TAG_NAMES[\"FONT\"] = \"font\";\n TAG_NAMES[\"FOOTER\"] = \"footer\";\n TAG_NAMES[\"FOREIGN_OBJECT\"] = \"foreignObject\";\n TAG_NAMES[\"FORM\"] = \"form\";\n TAG_NAMES[\"FRAME\"] = \"frame\";\n TAG_NAMES[\"FRAMESET\"] = \"frameset\";\n TAG_NAMES[\"H1\"] = \"h1\";\n TAG_NAMES[\"H2\"] = \"h2\";\n TAG_NAMES[\"H3\"] = \"h3\";\n TAG_NAMES[\"H4\"] = \"h4\";\n TAG_NAMES[\"H5\"] = \"h5\";\n TAG_NAMES[\"H6\"] = \"h6\";\n TAG_NAMES[\"HEAD\"] = \"head\";\n TAG_NAMES[\"HEADER\"] = \"header\";\n TAG_NAMES[\"HGROUP\"] = \"hgroup\";\n TAG_NAMES[\"HR\"] = \"hr\";\n TAG_NAMES[\"HTML\"] = \"html\";\n TAG_NAMES[\"I\"] = \"i\";\n TAG_NAMES[\"IMG\"] = \"img\";\n TAG_NAMES[\"IMAGE\"] = \"image\";\n TAG_NAMES[\"INPUT\"] = \"input\";\n TAG_NAMES[\"IFRAME\"] = \"iframe\";\n TAG_NAMES[\"KEYGEN\"] = \"keygen\";\n TAG_NAMES[\"LABEL\"] = \"label\";\n TAG_NAMES[\"LI\"] = \"li\";\n TAG_NAMES[\"LINK\"] = \"link\";\n TAG_NAMES[\"LISTING\"] = \"listing\";\n TAG_NAMES[\"MAIN\"] = \"main\";\n TAG_NAMES[\"MALIGNMARK\"] = \"malignmark\";\n TAG_NAMES[\"MARQUEE\"] = \"marquee\";\n TAG_NAMES[\"MATH\"] = \"math\";\n TAG_NAMES[\"MENU\"] = \"menu\";\n TAG_NAMES[\"META\"] = \"meta\";\n TAG_NAMES[\"MGLYPH\"] = \"mglyph\";\n TAG_NAMES[\"MI\"] = \"mi\";\n TAG_NAMES[\"MO\"] = \"mo\";\n TAG_NAMES[\"MN\"] = \"mn\";\n TAG_NAMES[\"MS\"] = \"ms\";\n TAG_NAMES[\"MTEXT\"] = \"mtext\";\n TAG_NAMES[\"NAV\"] = \"nav\";\n TAG_NAMES[\"NOBR\"] = \"nobr\";\n TAG_NAMES[\"NOFRAMES\"] = \"noframes\";\n TAG_NAMES[\"NOEMBED\"] = \"noembed\";\n TAG_NAMES[\"NOSCRIPT\"] = \"noscript\";\n TAG_NAMES[\"OBJECT\"] = \"object\";\n TAG_NAMES[\"OL\"] = \"ol\";\n TAG_NAMES[\"OPTGROUP\"] = \"optgroup\";\n TAG_NAMES[\"OPTION\"] = \"option\";\n TAG_NAMES[\"P\"] = \"p\";\n TAG_NAMES[\"PARAM\"] = \"param\";\n TAG_NAMES[\"PLAINTEXT\"] = \"plaintext\";\n TAG_NAMES[\"PRE\"] = \"pre\";\n TAG_NAMES[\"RB\"] = \"rb\";\n TAG_NAMES[\"RP\"] = \"rp\";\n TAG_NAMES[\"RT\"] = \"rt\";\n TAG_NAMES[\"RTC\"] = \"rtc\";\n TAG_NAMES[\"RUBY\"] = \"ruby\";\n TAG_NAMES[\"S\"] = \"s\";\n TAG_NAMES[\"SCRIPT\"] = \"script\";\n TAG_NAMES[\"SEARCH\"] = \"search\";\n TAG_NAMES[\"SECTION\"] = \"section\";\n TAG_NAMES[\"SELECT\"] = \"select\";\n TAG_NAMES[\"SOURCE\"] = \"source\";\n TAG_NAMES[\"SMALL\"] = \"small\";\n TAG_NAMES[\"SPAN\"] = \"span\";\n TAG_NAMES[\"STRIKE\"] = \"strike\";\n TAG_NAMES[\"STRONG\"] = \"strong\";\n TAG_NAMES[\"STYLE\"] = \"style\";\n TAG_NAMES[\"SUB\"] = \"sub\";\n TAG_NAMES[\"SUMMARY\"] = \"summary\";\n TAG_NAMES[\"SUP\"] = \"sup\";\n TAG_NAMES[\"TABLE\"] = \"table\";\n TAG_NAMES[\"TBODY\"] = \"tbody\";\n TAG_NAMES[\"TEMPLATE\"] = \"template\";\n TAG_NAMES[\"TEXTAREA\"] = \"textarea\";\n TAG_NAMES[\"TFOOT\"] = \"tfoot\";\n TAG_NAMES[\"TD\"] = \"td\";\n TAG_NAMES[\"TH\"] = \"th\";\n TAG_NAMES[\"THEAD\"] = \"thead\";\n TAG_NAMES[\"TITLE\"] = \"title\";\n TAG_NAMES[\"TR\"] = \"tr\";\n TAG_NAMES[\"TRACK\"] = \"track\";\n TAG_NAMES[\"TT\"] = \"tt\";\n TAG_NAMES[\"U\"] = \"u\";\n TAG_NAMES[\"UL\"] = \"ul\";\n TAG_NAMES[\"SVG\"] = \"svg\";\n TAG_NAMES[\"VAR\"] = \"var\";\n TAG_NAMES[\"WBR\"] = \"wbr\";\n TAG_NAMES[\"XMP\"] = \"xmp\";\n})(TAG_NAMES || (TAG_NAMES = {}));\n/**\n * Tag IDs are numeric IDs for known tag names.\n *\n * We use tag IDs to improve the performance of tag name comparisons.\n */\nexport var TAG_ID;\n(function (TAG_ID) {\n TAG_ID[TAG_ID[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n TAG_ID[TAG_ID[\"A\"] = 1] = \"A\";\n TAG_ID[TAG_ID[\"ADDRESS\"] = 2] = \"ADDRESS\";\n TAG_ID[TAG_ID[\"ANNOTATION_XML\"] = 3] = \"ANNOTATION_XML\";\n TAG_ID[TAG_ID[\"APPLET\"] = 4] = \"APPLET\";\n TAG_ID[TAG_ID[\"AREA\"] = 5] = \"AREA\";\n TAG_ID[TAG_ID[\"ARTICLE\"] = 6] = \"ARTICLE\";\n TAG_ID[TAG_ID[\"ASIDE\"] = 7] = \"ASIDE\";\n TAG_ID[TAG_ID[\"B\"] = 8] = \"B\";\n TAG_ID[TAG_ID[\"BASE\"] = 9] = \"BASE\";\n TAG_ID[TAG_ID[\"BASEFONT\"] = 10] = \"BASEFONT\";\n TAG_ID[TAG_ID[\"BGSOUND\"] = 11] = \"BGSOUND\";\n TAG_ID[TAG_ID[\"BIG\"] = 12] = \"BIG\";\n TAG_ID[TAG_ID[\"BLOCKQUOTE\"] = 13] = \"BLOCKQUOTE\";\n TAG_ID[TAG_ID[\"BODY\"] = 14] = \"BODY\";\n TAG_ID[TAG_ID[\"BR\"] = 15] = \"BR\";\n TAG_ID[TAG_ID[\"BUTTON\"] = 16] = \"BUTTON\";\n TAG_ID[TAG_ID[\"CAPTION\"] = 17] = \"CAPTION\";\n TAG_ID[TAG_ID[\"CENTER\"] = 18] = \"CENTER\";\n TAG_ID[TAG_ID[\"CODE\"] = 19] = \"CODE\";\n TAG_ID[TAG_ID[\"COL\"] = 20] = \"COL\";\n TAG_ID[TAG_ID[\"COLGROUP\"] = 21] = \"COLGROUP\";\n TAG_ID[TAG_ID[\"DD\"] = 22] = \"DD\";\n TAG_ID[TAG_ID[\"DESC\"] = 23] = \"DESC\";\n TAG_ID[TAG_ID[\"DETAILS\"] = 24] = \"DETAILS\";\n TAG_ID[TAG_ID[\"DIALOG\"] = 25] = \"DIALOG\";\n TAG_ID[TAG_ID[\"DIR\"] = 26] = \"DIR\";\n TAG_ID[TAG_ID[\"DIV\"] = 27] = \"DIV\";\n TAG_ID[TAG_ID[\"DL\"] = 28] = \"DL\";\n TAG_ID[TAG_ID[\"DT\"] = 29] = \"DT\";\n TAG_ID[TAG_ID[\"EM\"] = 30] = \"EM\";\n TAG_ID[TAG_ID[\"EMBED\"] = 31] = \"EMBED\";\n TAG_ID[TAG_ID[\"FIELDSET\"] = 32] = \"FIELDSET\";\n TAG_ID[TAG_ID[\"FIGCAPTION\"] = 33] = \"FIGCAPTION\";\n TAG_ID[TAG_ID[\"FIGURE\"] = 34] = \"FIGURE\";\n TAG_ID[TAG_ID[\"FONT\"] = 35] = \"FONT\";\n TAG_ID[TAG_ID[\"FOOTER\"] = 36] = \"FOOTER\";\n TAG_ID[TAG_ID[\"FOREIGN_OBJECT\"] = 37] = \"FOREIGN_OBJECT\";\n TAG_ID[TAG_ID[\"FORM\"] = 38] = \"FORM\";\n TAG_ID[TAG_ID[\"FRAME\"] = 39] = \"FRAME\";\n TAG_ID[TAG_ID[\"FRAMESET\"] = 40] = \"FRAMESET\";\n TAG_ID[TAG_ID[\"H1\"] = 41] = \"H1\";\n TAG_ID[TAG_ID[\"H2\"] = 42] = \"H2\";\n TAG_ID[TAG_ID[\"H3\"] = 43] = \"H3\";\n TAG_ID[TAG_ID[\"H4\"] = 44] = \"H4\";\n TAG_ID[TAG_ID[\"H5\"] = 45] = \"H5\";\n TAG_ID[TAG_ID[\"H6\"] = 46] = \"H6\";\n TAG_ID[TAG_ID[\"HEAD\"] = 47] = \"HEAD\";\n TAG_ID[TAG_ID[\"HEADER\"] = 48] = \"HEADER\";\n TAG_ID[TAG_ID[\"HGROUP\"] = 49] = \"HGROUP\";\n TAG_ID[TAG_ID[\"HR\"] = 50] = \"HR\";\n TAG_ID[TAG_ID[\"HTML\"] = 51] = \"HTML\";\n TAG_ID[TAG_ID[\"I\"] = 52] = \"I\";\n TAG_ID[TAG_ID[\"IMG\"] = 53] = \"IMG\";\n TAG_ID[TAG_ID[\"IMAGE\"] = 54] = \"IMAGE\";\n TAG_ID[TAG_ID[\"INPUT\"] = 55] = \"INPUT\";\n TAG_ID[TAG_ID[\"IFRAME\"] = 56] = \"IFRAME\";\n TAG_ID[TAG_ID[\"KEYGEN\"] = 57] = \"KEYGEN\";\n TAG_ID[TAG_ID[\"LABEL\"] = 58] = \"LABEL\";\n TAG_ID[TAG_ID[\"LI\"] = 59] = \"LI\";\n TAG_ID[TAG_ID[\"LINK\"] = 60] = \"LINK\";\n TAG_ID[TAG_ID[\"LISTING\"] = 61] = \"LISTING\";\n TAG_ID[TAG_ID[\"MAIN\"] = 62] = \"MAIN\";\n TAG_ID[TAG_ID[\"MALIGNMARK\"] = 63] = \"MALIGNMARK\";\n TAG_ID[TAG_ID[\"MARQUEE\"] = 64] = \"MARQUEE\";\n TAG_ID[TAG_ID[\"MATH\"] = 65] = \"MATH\";\n TAG_ID[TAG_ID[\"MENU\"] = 66] = \"MENU\";\n TAG_ID[TAG_ID[\"META\"] = 67] = \"META\";\n TAG_ID[TAG_ID[\"MGLYPH\"] = 68] = \"MGLYPH\";\n TAG_ID[TAG_ID[\"MI\"] = 69] = \"MI\";\n TAG_ID[TAG_ID[\"MO\"] = 70] = \"MO\";\n TAG_ID[TAG_ID[\"MN\"] = 71] = \"MN\";\n TAG_ID[TAG_ID[\"MS\"] = 72] = \"MS\";\n TAG_ID[TAG_ID[\"MTEXT\"] = 73] = \"MTEXT\";\n TAG_ID[TAG_ID[\"NAV\"] = 74] = \"NAV\";\n TAG_ID[TAG_ID[\"NOBR\"] = 75] = \"NOBR\";\n TAG_ID[TAG_ID[\"NOFRAMES\"] = 76] = \"NOFRAMES\";\n TAG_ID[TAG_ID[\"NOEMBED\"] = 77] = \"NOEMBED\";\n TAG_ID[TAG_ID[\"NOSCRIPT\"] = 78] = \"NOSCRIPT\";\n TAG_ID[TAG_ID[\"OBJECT\"] = 79] = \"OBJECT\";\n TAG_ID[TAG_ID[\"OL\"] = 80] = \"OL\";\n TAG_ID[TAG_ID[\"OPTGROUP\"] = 81] = \"OPTGROUP\";\n TAG_ID[TAG_ID[\"OPTION\"] = 82] = \"OPTION\";\n TAG_ID[TAG_ID[\"P\"] = 83] = \"P\";\n TAG_ID[TAG_ID[\"PARAM\"] = 84] = \"PARAM\";\n TAG_ID[TAG_ID[\"PLAINTEXT\"] = 85] = \"PLAINTEXT\";\n TAG_ID[TAG_ID[\"PRE\"] = 86] = \"PRE\";\n TAG_ID[TAG_ID[\"RB\"] = 87] = \"RB\";\n TAG_ID[TAG_ID[\"RP\"] = 88] = \"RP\";\n TAG_ID[TAG_ID[\"RT\"] = 89] = \"RT\";\n TAG_ID[TAG_ID[\"RTC\"] = 90] = \"RTC\";\n TAG_ID[TAG_ID[\"RUBY\"] = 91] = \"RUBY\";\n TAG_ID[TAG_ID[\"S\"] = 92] = \"S\";\n TAG_ID[TAG_ID[\"SCRIPT\"] = 93] = \"SCRIPT\";\n TAG_ID[TAG_ID[\"SEARCH\"] = 94] = \"SEARCH\";\n TAG_ID[TAG_ID[\"SECTION\"] = 95] = \"SECTION\";\n TAG_ID[TAG_ID[\"SELECT\"] = 96] = \"SELECT\";\n TAG_ID[TAG_ID[\"SOURCE\"] = 97] = \"SOURCE\";\n TAG_ID[TAG_ID[\"SMALL\"] = 98] = \"SMALL\";\n TAG_ID[TAG_ID[\"SPAN\"] = 99] = \"SPAN\";\n TAG_ID[TAG_ID[\"STRIKE\"] = 100] = \"STRIKE\";\n TAG_ID[TAG_ID[\"STRONG\"] = 101] = \"STRONG\";\n TAG_ID[TAG_ID[\"STYLE\"] = 102] = \"STYLE\";\n TAG_ID[TAG_ID[\"SUB\"] = 103] = \"SUB\";\n TAG_ID[TAG_ID[\"SUMMARY\"] = 104] = \"SUMMARY\";\n TAG_ID[TAG_ID[\"SUP\"] = 105] = \"SUP\";\n TAG_ID[TAG_ID[\"TABLE\"] = 106] = \"TABLE\";\n TAG_ID[TAG_ID[\"TBODY\"] = 107] = \"TBODY\";\n TAG_ID[TAG_ID[\"TEMPLATE\"] = 108] = \"TEMPLATE\";\n TAG_ID[TAG_ID[\"TEXTAREA\"] = 109] = \"TEXTAREA\";\n TAG_ID[TAG_ID[\"TFOOT\"] = 110] = \"TFOOT\";\n TAG_ID[TAG_ID[\"TD\"] = 111] = \"TD\";\n TAG_ID[TAG_ID[\"TH\"] = 112] = \"TH\";\n TAG_ID[TAG_ID[\"THEAD\"] = 113] = \"THEAD\";\n TAG_ID[TAG_ID[\"TITLE\"] = 114] = \"TITLE\";\n TAG_ID[TAG_ID[\"TR\"] = 115] = \"TR\";\n TAG_ID[TAG_ID[\"TRACK\"] = 116] = \"TRACK\";\n TAG_ID[TAG_ID[\"TT\"] = 117] = \"TT\";\n TAG_ID[TAG_ID[\"U\"] = 118] = \"U\";\n TAG_ID[TAG_ID[\"UL\"] = 119] = \"UL\";\n TAG_ID[TAG_ID[\"SVG\"] = 120] = \"SVG\";\n TAG_ID[TAG_ID[\"VAR\"] = 121] = \"VAR\";\n TAG_ID[TAG_ID[\"WBR\"] = 122] = \"WBR\";\n TAG_ID[TAG_ID[\"XMP\"] = 123] = \"XMP\";\n})(TAG_ID || (TAG_ID = {}));\nconst TAG_NAME_TO_ID = new Map([\n [TAG_NAMES.A, TAG_ID.A],\n [TAG_NAMES.ADDRESS, TAG_ID.ADDRESS],\n [TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML],\n [TAG_NAMES.APPLET, TAG_ID.APPLET],\n [TAG_NAMES.AREA, TAG_ID.AREA],\n [TAG_NAMES.ARTICLE, TAG_ID.ARTICLE],\n [TAG_NAMES.ASIDE, TAG_ID.ASIDE],\n [TAG_NAMES.B, TAG_ID.B],\n [TAG_NAMES.BASE, TAG_ID.BASE],\n [TAG_NAMES.BASEFONT, TAG_ID.BASEFONT],\n [TAG_NAMES.BGSOUND, TAG_ID.BGSOUND],\n [TAG_NAMES.BIG, TAG_ID.BIG],\n [TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE],\n [TAG_NAMES.BODY, TAG_ID.BODY],\n [TAG_NAMES.BR, TAG_ID.BR],\n [TAG_NAMES.BUTTON, TAG_ID.BUTTON],\n [TAG_NAMES.CAPTION, TAG_ID.CAPTION],\n [TAG_NAMES.CENTER, TAG_ID.CENTER],\n [TAG_NAMES.CODE, TAG_ID.CODE],\n [TAG_NAMES.COL, TAG_ID.COL],\n [TAG_NAMES.COLGROUP, TAG_ID.COLGROUP],\n [TAG_NAMES.DD, TAG_ID.DD],\n [TAG_NAMES.DESC, TAG_ID.DESC],\n [TAG_NAMES.DETAILS, TAG_ID.DETAILS],\n [TAG_NAMES.DIALOG, TAG_ID.DIALOG],\n [TAG_NAMES.DIR, TAG_ID.DIR],\n [TAG_NAMES.DIV, TAG_ID.DIV],\n [TAG_NAMES.DL, TAG_ID.DL],\n [TAG_NAMES.DT, TAG_ID.DT],\n [TAG_NAMES.EM, TAG_ID.EM],\n [TAG_NAMES.EMBED, TAG_ID.EMBED],\n [TAG_NAMES.FIELDSET, TAG_ID.FIELDSET],\n [TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION],\n [TAG_NAMES.FIGURE, TAG_ID.FIGURE],\n [TAG_NAMES.FONT, TAG_ID.FONT],\n [TAG_NAMES.FOOTER, TAG_ID.FOOTER],\n [TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT],\n [TAG_NAMES.FORM, TAG_ID.FORM],\n [TAG_NAMES.FRAME, TAG_ID.FRAME],\n [TAG_NAMES.FRAMESET, TAG_ID.FRAMESET],\n [TAG_NAMES.H1, TAG_ID.H1],\n [TAG_NAMES.H2, TAG_ID.H2],\n [TAG_NAMES.H3, TAG_ID.H3],\n [TAG_NAMES.H4, TAG_ID.H4],\n [TAG_NAMES.H5, TAG_ID.H5],\n [TAG_NAMES.H6, TAG_ID.H6],\n [TAG_NAMES.HEAD, TAG_ID.HEAD],\n [TAG_NAMES.HEADER, TAG_ID.HEADER],\n [TAG_NAMES.HGROUP, TAG_ID.HGROUP],\n [TAG_NAMES.HR, TAG_ID.HR],\n [TAG_NAMES.HTML, TAG_ID.HTML],\n [TAG_NAMES.I, TAG_ID.I],\n [TAG_NAMES.IMG, TAG_ID.IMG],\n [TAG_NAMES.IMAGE, TAG_ID.IMAGE],\n [TAG_NAMES.INPUT, TAG_ID.INPUT],\n [TAG_NAMES.IFRAME, TAG_ID.IFRAME],\n [TAG_NAMES.KEYGEN, TAG_ID.KEYGEN],\n [TAG_NAMES.LABEL, TAG_ID.LABEL],\n [TAG_NAMES.LI, TAG_ID.LI],\n [TAG_NAMES.LINK, TAG_ID.LINK],\n [TAG_NAMES.LISTING, TAG_ID.LISTING],\n [TAG_NAMES.MAIN, TAG_ID.MAIN],\n [TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK],\n [TAG_NAMES.MARQUEE, TAG_ID.MARQUEE],\n [TAG_NAMES.MATH, TAG_ID.MATH],\n [TAG_NAMES.MENU, TAG_ID.MENU],\n [TAG_NAMES.META, TAG_ID.META],\n [TAG_NAMES.MGLYPH, TAG_ID.MGLYPH],\n [TAG_NAMES.MI, TAG_ID.MI],\n [TAG_NAMES.MO, TAG_ID.MO],\n [TAG_NAMES.MN, TAG_ID.MN],\n [TAG_NAMES.MS, TAG_ID.MS],\n [TAG_NAMES.MTEXT, TAG_ID.MTEXT],\n [TAG_NAMES.NAV, TAG_ID.NAV],\n [TAG_NAMES.NOBR, TAG_ID.NOBR],\n [TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES],\n [TAG_NAMES.NOEMBED, TAG_ID.NOEMBED],\n [TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT],\n [TAG_NAMES.OBJECT, TAG_ID.OBJECT],\n [TAG_NAMES.OL, TAG_ID.OL],\n [TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP],\n [TAG_NAMES.OPTION, TAG_ID.OPTION],\n [TAG_NAMES.P, TAG_ID.P],\n [TAG_NAMES.PARAM, TAG_ID.PARAM],\n [TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT],\n [TAG_NAMES.PRE, TAG_ID.PRE],\n [TAG_NAMES.RB, TAG_ID.RB],\n [TAG_NAMES.RP, TAG_ID.RP],\n [TAG_NAMES.RT, TAG_ID.RT],\n [TAG_NAMES.RTC, TAG_ID.RTC],\n [TAG_NAMES.RUBY, TAG_ID.RUBY],\n [TAG_NAMES.S, TAG_ID.S],\n [TAG_NAMES.SCRIPT, TAG_ID.SCRIPT],\n [TAG_NAMES.SEARCH, TAG_ID.SEARCH],\n [TAG_NAMES.SECTION, TAG_ID.SECTION],\n [TAG_NAMES.SELECT, TAG_ID.SELECT],\n [TAG_NAMES.SOURCE, TAG_ID.SOURCE],\n [TAG_NAMES.SMALL, TAG_ID.SMALL],\n [TAG_NAMES.SPAN, TAG_ID.SPAN],\n [TAG_NAMES.STRIKE, TAG_ID.STRIKE],\n [TAG_NAMES.STRONG, TAG_ID.STRONG],\n [TAG_NAMES.STYLE, TAG_ID.STYLE],\n [TAG_NAMES.SUB, TAG_ID.SUB],\n [TAG_NAMES.SUMMARY, TAG_ID.SUMMARY],\n [TAG_NAMES.SUP, TAG_ID.SUP],\n [TAG_NAMES.TABLE, TAG_ID.TABLE],\n [TAG_NAMES.TBODY, TAG_ID.TBODY],\n [TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE],\n [TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA],\n [TAG_NAMES.TFOOT, TAG_ID.TFOOT],\n [TAG_NAMES.TD, TAG_ID.TD],\n [TAG_NAMES.TH, TAG_ID.TH],\n [TAG_NAMES.THEAD, TAG_ID.THEAD],\n [TAG_NAMES.TITLE, TAG_ID.TITLE],\n [TAG_NAMES.TR, TAG_ID.TR],\n [TAG_NAMES.TRACK, TAG_ID.TRACK],\n [TAG_NAMES.TT, TAG_ID.TT],\n [TAG_NAMES.U, TAG_ID.U],\n [TAG_NAMES.UL, TAG_ID.UL],\n [TAG_NAMES.SVG, TAG_ID.SVG],\n [TAG_NAMES.VAR, TAG_ID.VAR],\n [TAG_NAMES.WBR, TAG_ID.WBR],\n [TAG_NAMES.XMP, TAG_ID.XMP],\n]);\nexport function getTagID(tagName) {\n var _a;\n return (_a = TAG_NAME_TO_ID.get(tagName)) !== null && _a !== void 0 ? _a : TAG_ID.UNKNOWN;\n}\nconst $ = TAG_ID;\nexport const SPECIAL_ELEMENTS = {\n [NS.HTML]: new Set([\n $.ADDRESS,\n $.APPLET,\n $.AREA,\n $.ARTICLE,\n $.ASIDE,\n $.BASE,\n $.BASEFONT,\n $.BGSOUND,\n $.BLOCKQUOTE,\n $.BODY,\n $.BR,\n $.BUTTON,\n $.CAPTION,\n $.CENTER,\n $.COL,\n $.COLGROUP,\n $.DD,\n $.DETAILS,\n $.DIR,\n $.DIV,\n $.DL,\n $.DT,\n $.EMBED,\n $.FIELDSET,\n $.FIGCAPTION,\n $.FIGURE,\n $.FOOTER,\n $.FORM,\n $.FRAME,\n $.FRAMESET,\n $.H1,\n $.H2,\n $.H3,\n $.H4,\n $.H5,\n $.H6,\n $.HEAD,\n $.HEADER,\n $.HGROUP,\n $.HR,\n $.HTML,\n $.IFRAME,\n $.IMG,\n $.INPUT,\n $.LI,\n $.LINK,\n $.LISTING,\n $.MAIN,\n $.MARQUEE,\n $.MENU,\n $.META,\n $.NAV,\n $.NOEMBED,\n $.NOFRAMES,\n $.NOSCRIPT,\n $.OBJECT,\n $.OL,\n $.P,\n $.PARAM,\n $.PLAINTEXT,\n $.PRE,\n $.SCRIPT,\n $.SECTION,\n $.SELECT,\n $.SOURCE,\n $.STYLE,\n $.SUMMARY,\n $.TABLE,\n $.TBODY,\n $.TD,\n $.TEMPLATE,\n $.TEXTAREA,\n $.TFOOT,\n $.TH,\n $.THEAD,\n $.TITLE,\n $.TR,\n $.TRACK,\n $.UL,\n $.WBR,\n $.XMP,\n ]),\n [NS.MATHML]: new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]),\n [NS.SVG]: new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]),\n [NS.XLINK]: new Set(),\n [NS.XML]: new Set(),\n [NS.XMLNS]: new Set(),\n};\nexport const NUMBERED_HEADERS = new Set([$.H1, $.H2, $.H3, $.H4, $.H5, $.H6]);\nconst UNESCAPED_TEXT = new Set([\n TAG_NAMES.STYLE,\n TAG_NAMES.SCRIPT,\n TAG_NAMES.XMP,\n TAG_NAMES.IFRAME,\n TAG_NAMES.NOEMBED,\n TAG_NAMES.NOFRAMES,\n TAG_NAMES.PLAINTEXT,\n]);\nexport function hasUnescapedText(tn, scriptingEnabled) {\n return UNESCAPED_TEXT.has(tn) || (scriptingEnabled && tn === TAG_NAMES.NOSCRIPT);\n}\n",
55
- "import { Preprocessor } from './preprocessor.js';\nimport { CODE_POINTS as $, SEQUENCES as $$, REPLACEMENT_CHARACTER, isSurrogate, isUndefinedCodePoint, isControlCodePoint, } from '../common/unicode.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\nimport { htmlDecodeTree, EntityDecoder, DecodingMode } from 'entities/decode';\nimport { ERR } from '../common/error-codes.js';\nimport { TAG_ID, getTagID } from '../common/html.js';\n//States\nvar State;\n(function (State) {\n State[State[\"DATA\"] = 0] = \"DATA\";\n State[State[\"RCDATA\"] = 1] = \"RCDATA\";\n State[State[\"RAWTEXT\"] = 2] = \"RAWTEXT\";\n State[State[\"SCRIPT_DATA\"] = 3] = \"SCRIPT_DATA\";\n State[State[\"PLAINTEXT\"] = 4] = \"PLAINTEXT\";\n State[State[\"TAG_OPEN\"] = 5] = \"TAG_OPEN\";\n State[State[\"END_TAG_OPEN\"] = 6] = \"END_TAG_OPEN\";\n State[State[\"TAG_NAME\"] = 7] = \"TAG_NAME\";\n State[State[\"RCDATA_LESS_THAN_SIGN\"] = 8] = \"RCDATA_LESS_THAN_SIGN\";\n State[State[\"RCDATA_END_TAG_OPEN\"] = 9] = \"RCDATA_END_TAG_OPEN\";\n State[State[\"RCDATA_END_TAG_NAME\"] = 10] = \"RCDATA_END_TAG_NAME\";\n State[State[\"RAWTEXT_LESS_THAN_SIGN\"] = 11] = \"RAWTEXT_LESS_THAN_SIGN\";\n State[State[\"RAWTEXT_END_TAG_OPEN\"] = 12] = \"RAWTEXT_END_TAG_OPEN\";\n State[State[\"RAWTEXT_END_TAG_NAME\"] = 13] = \"RAWTEXT_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_LESS_THAN_SIGN\"] = 14] = \"SCRIPT_DATA_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_END_TAG_OPEN\"] = 15] = \"SCRIPT_DATA_END_TAG_OPEN\";\n State[State[\"SCRIPT_DATA_END_TAG_NAME\"] = 16] = \"SCRIPT_DATA_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_ESCAPE_START\"] = 17] = \"SCRIPT_DATA_ESCAPE_START\";\n State[State[\"SCRIPT_DATA_ESCAPE_START_DASH\"] = 18] = \"SCRIPT_DATA_ESCAPE_START_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED\"] = 19] = \"SCRIPT_DATA_ESCAPED\";\n State[State[\"SCRIPT_DATA_ESCAPED_DASH\"] = 20] = \"SCRIPT_DATA_ESCAPED_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED_DASH_DASH\"] = 21] = \"SCRIPT_DATA_ESCAPED_DASH_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\"] = 22] = \"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\"] = 23] = \"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\";\n State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_NAME\"] = 24] = \"SCRIPT_DATA_ESCAPED_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_START\"] = 25] = \"SCRIPT_DATA_DOUBLE_ESCAPE_START\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED\"] = 26] = \"SCRIPT_DATA_DOUBLE_ESCAPED\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\"] = 27] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\"] = 28] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\"] = 29] = \"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_END\"] = 30] = \"SCRIPT_DATA_DOUBLE_ESCAPE_END\";\n State[State[\"BEFORE_ATTRIBUTE_NAME\"] = 31] = \"BEFORE_ATTRIBUTE_NAME\";\n State[State[\"ATTRIBUTE_NAME\"] = 32] = \"ATTRIBUTE_NAME\";\n State[State[\"AFTER_ATTRIBUTE_NAME\"] = 33] = \"AFTER_ATTRIBUTE_NAME\";\n State[State[\"BEFORE_ATTRIBUTE_VALUE\"] = 34] = \"BEFORE_ATTRIBUTE_VALUE\";\n State[State[\"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"] = 35] = \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\";\n State[State[\"ATTRIBUTE_VALUE_SINGLE_QUOTED\"] = 36] = \"ATTRIBUTE_VALUE_SINGLE_QUOTED\";\n State[State[\"ATTRIBUTE_VALUE_UNQUOTED\"] = 37] = \"ATTRIBUTE_VALUE_UNQUOTED\";\n State[State[\"AFTER_ATTRIBUTE_VALUE_QUOTED\"] = 38] = \"AFTER_ATTRIBUTE_VALUE_QUOTED\";\n State[State[\"SELF_CLOSING_START_TAG\"] = 39] = \"SELF_CLOSING_START_TAG\";\n State[State[\"BOGUS_COMMENT\"] = 40] = \"BOGUS_COMMENT\";\n State[State[\"MARKUP_DECLARATION_OPEN\"] = 41] = \"MARKUP_DECLARATION_OPEN\";\n State[State[\"COMMENT_START\"] = 42] = \"COMMENT_START\";\n State[State[\"COMMENT_START_DASH\"] = 43] = \"COMMENT_START_DASH\";\n State[State[\"COMMENT\"] = 44] = \"COMMENT\";\n State[State[\"COMMENT_LESS_THAN_SIGN\"] = 45] = \"COMMENT_LESS_THAN_SIGN\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG\"] = 46] = \"COMMENT_LESS_THAN_SIGN_BANG\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH\"] = 47] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\"] = 48] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\";\n State[State[\"COMMENT_END_DASH\"] = 49] = \"COMMENT_END_DASH\";\n State[State[\"COMMENT_END\"] = 50] = \"COMMENT_END\";\n State[State[\"COMMENT_END_BANG\"] = 51] = \"COMMENT_END_BANG\";\n State[State[\"DOCTYPE\"] = 52] = \"DOCTYPE\";\n State[State[\"BEFORE_DOCTYPE_NAME\"] = 53] = \"BEFORE_DOCTYPE_NAME\";\n State[State[\"DOCTYPE_NAME\"] = 54] = \"DOCTYPE_NAME\";\n State[State[\"AFTER_DOCTYPE_NAME\"] = 55] = \"AFTER_DOCTYPE_NAME\";\n State[State[\"AFTER_DOCTYPE_PUBLIC_KEYWORD\"] = 56] = \"AFTER_DOCTYPE_PUBLIC_KEYWORD\";\n State[State[\"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\"] = 57] = \"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\";\n State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\"] = 58] = \"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\";\n State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\"] = 59] = \"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\";\n State[State[\"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\"] = 60] = \"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\";\n State[State[\"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\"] = 61] = \"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\";\n State[State[\"AFTER_DOCTYPE_SYSTEM_KEYWORD\"] = 62] = \"AFTER_DOCTYPE_SYSTEM_KEYWORD\";\n State[State[\"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\"] = 63] = \"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\";\n State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\"] = 64] = \"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\";\n State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\"] = 65] = \"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\";\n State[State[\"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\"] = 66] = \"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\";\n State[State[\"BOGUS_DOCTYPE\"] = 67] = \"BOGUS_DOCTYPE\";\n State[State[\"CDATA_SECTION\"] = 68] = \"CDATA_SECTION\";\n State[State[\"CDATA_SECTION_BRACKET\"] = 69] = \"CDATA_SECTION_BRACKET\";\n State[State[\"CDATA_SECTION_END\"] = 70] = \"CDATA_SECTION_END\";\n State[State[\"CHARACTER_REFERENCE\"] = 71] = \"CHARACTER_REFERENCE\";\n State[State[\"AMBIGUOUS_AMPERSAND\"] = 72] = \"AMBIGUOUS_AMPERSAND\";\n})(State || (State = {}));\n//Tokenizer initial states for different modes\nexport const TokenizerMode = {\n DATA: State.DATA,\n RCDATA: State.RCDATA,\n RAWTEXT: State.RAWTEXT,\n SCRIPT_DATA: State.SCRIPT_DATA,\n PLAINTEXT: State.PLAINTEXT,\n CDATA_SECTION: State.CDATA_SECTION,\n};\n//Utils\n//OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline\n//this functions if they will be situated in another module due to context switch.\n//Always perform inlining check before modifying this functions ('node --trace-inlining').\nfunction isAsciiDigit(cp) {\n return cp >= $.DIGIT_0 && cp <= $.DIGIT_9;\n}\nfunction isAsciiUpper(cp) {\n return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_Z;\n}\nfunction isAsciiLower(cp) {\n return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_Z;\n}\nfunction isAsciiLetter(cp) {\n return isAsciiLower(cp) || isAsciiUpper(cp);\n}\nfunction isAsciiAlphaNumeric(cp) {\n return isAsciiLetter(cp) || isAsciiDigit(cp);\n}\nfunction toAsciiLower(cp) {\n return cp + 32;\n}\nfunction isWhitespace(cp) {\n return cp === $.SPACE || cp === $.LINE_FEED || cp === $.TABULATION || cp === $.FORM_FEED;\n}\nfunction isScriptDataDoubleEscapeSequenceEnd(cp) {\n return isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN;\n}\nfunction getErrorForNumericCharacterReference(code) {\n if (code === $.NULL) {\n return ERR.nullCharacterReference;\n }\n else if (code > 1114111) {\n return ERR.characterReferenceOutsideUnicodeRange;\n }\n else if (isSurrogate(code)) {\n return ERR.surrogateCharacterReference;\n }\n else if (isUndefinedCodePoint(code)) {\n return ERR.noncharacterCharacterReference;\n }\n else if (isControlCodePoint(code) || code === $.CARRIAGE_RETURN) {\n return ERR.controlCharacterReference;\n }\n return null;\n}\n//Tokenizer\nexport class Tokenizer {\n constructor(options, handler) {\n this.options = options;\n this.handler = handler;\n this.paused = false;\n /** Ensures that the parsing loop isn't run multiple times at once. */\n this.inLoop = false;\n /**\n * Indicates that the current adjusted node exists, is not an element in the HTML namespace,\n * and that it is not an integration point for either MathML or HTML.\n *\n * @see {@link https://html.spec.whatwg.org/multipage/parsing.html#tree-construction}\n */\n this.inForeignNode = false;\n this.lastStartTagName = '';\n this.active = false;\n this.state = State.DATA;\n this.returnState = State.DATA;\n this.entityStartPos = 0;\n this.consumedAfterSnapshot = -1;\n this.currentCharacterToken = null;\n this.currentToken = null;\n this.currentAttr = { name: '', value: '' };\n this.preprocessor = new Preprocessor(handler);\n this.currentLocation = this.getCurrentLocation(-1);\n this.entityDecoder = new EntityDecoder(htmlDecodeTree, (cp, consumed) => {\n // Note: Set `pos` _before_ flushing, as flushing might drop\n // the current chunk and invalidate `entityStartPos`.\n this.preprocessor.pos = this.entityStartPos + consumed - 1;\n this._flushCodePointConsumedAsCharacterReference(cp);\n }, handler.onParseError\n ? {\n missingSemicolonAfterCharacterReference: () => {\n this._err(ERR.missingSemicolonAfterCharacterReference, 1);\n },\n absenceOfDigitsInNumericCharacterReference: (consumed) => {\n this._err(ERR.absenceOfDigitsInNumericCharacterReference, this.entityStartPos - this.preprocessor.pos + consumed);\n },\n validateNumericCharacterReference: (code) => {\n const error = getErrorForNumericCharacterReference(code);\n if (error)\n this._err(error, 1);\n },\n }\n : undefined);\n }\n //Errors\n _err(code, cpOffset = 0) {\n var _a, _b;\n (_b = (_a = this.handler).onParseError) === null || _b === void 0 ? void 0 : _b.call(_a, this.preprocessor.getError(code, cpOffset));\n }\n // NOTE: `offset` may never run across line boundaries.\n getCurrentLocation(offset) {\n if (!this.options.sourceCodeLocationInfo) {\n return null;\n }\n return {\n startLine: this.preprocessor.line,\n startCol: this.preprocessor.col - offset,\n startOffset: this.preprocessor.offset - offset,\n endLine: -1,\n endCol: -1,\n endOffset: -1,\n };\n }\n _runParsingLoop() {\n if (this.inLoop)\n return;\n this.inLoop = true;\n while (this.active && !this.paused) {\n this.consumedAfterSnapshot = 0;\n const cp = this._consume();\n if (!this._ensureHibernation()) {\n this._callState(cp);\n }\n }\n this.inLoop = false;\n }\n //API\n pause() {\n this.paused = true;\n }\n resume(writeCallback) {\n if (!this.paused) {\n throw new Error('Parser was already resumed');\n }\n this.paused = false;\n // Necessary for synchronous resume.\n if (this.inLoop)\n return;\n this._runParsingLoop();\n if (!this.paused) {\n writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n }\n }\n write(chunk, isLastChunk, writeCallback) {\n this.active = true;\n this.preprocessor.write(chunk, isLastChunk);\n this._runParsingLoop();\n if (!this.paused) {\n writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n }\n }\n insertHtmlAtCurrentPos(chunk) {\n this.active = true;\n this.preprocessor.insertHtmlAtCurrentPos(chunk);\n this._runParsingLoop();\n }\n //Hibernation\n _ensureHibernation() {\n if (this.preprocessor.endOfChunkHit) {\n this.preprocessor.retreat(this.consumedAfterSnapshot);\n this.consumedAfterSnapshot = 0;\n this.active = false;\n return true;\n }\n return false;\n }\n //Consumption\n _consume() {\n this.consumedAfterSnapshot++;\n return this.preprocessor.advance();\n }\n _advanceBy(count) {\n this.consumedAfterSnapshot += count;\n for (let i = 0; i < count; i++) {\n this.preprocessor.advance();\n }\n }\n _consumeSequenceIfMatch(pattern, caseSensitive) {\n if (this.preprocessor.startsWith(pattern, caseSensitive)) {\n // We will already have consumed one character before calling this method.\n this._advanceBy(pattern.length - 1);\n return true;\n }\n return false;\n }\n //Token creation\n _createStartTagToken() {\n this.currentToken = {\n type: TokenType.START_TAG,\n tagName: '',\n tagID: TAG_ID.UNKNOWN,\n selfClosing: false,\n ackSelfClosing: false,\n attrs: [],\n location: this.getCurrentLocation(1),\n };\n }\n _createEndTagToken() {\n this.currentToken = {\n type: TokenType.END_TAG,\n tagName: '',\n tagID: TAG_ID.UNKNOWN,\n selfClosing: false,\n ackSelfClosing: false,\n attrs: [],\n location: this.getCurrentLocation(2),\n };\n }\n _createCommentToken(offset) {\n this.currentToken = {\n type: TokenType.COMMENT,\n data: '',\n location: this.getCurrentLocation(offset),\n };\n }\n _createDoctypeToken(initialName) {\n this.currentToken = {\n type: TokenType.DOCTYPE,\n name: initialName,\n forceQuirks: false,\n publicId: null,\n systemId: null,\n location: this.currentLocation,\n };\n }\n _createCharacterToken(type, chars) {\n this.currentCharacterToken = {\n type,\n chars,\n location: this.currentLocation,\n };\n }\n //Tag attributes\n _createAttr(attrNameFirstCh) {\n this.currentAttr = {\n name: attrNameFirstCh,\n value: '',\n };\n this.currentLocation = this.getCurrentLocation(0);\n }\n _leaveAttrName() {\n var _a;\n var _b;\n const token = this.currentToken;\n if (getTokenAttr(token, this.currentAttr.name) === null) {\n token.attrs.push(this.currentAttr);\n if (token.location && this.currentLocation) {\n const attrLocations = ((_a = (_b = token.location).attrs) !== null && _a !== void 0 ? _a : (_b.attrs = Object.create(null)));\n attrLocations[this.currentAttr.name] = this.currentLocation;\n // Set end location\n this._leaveAttrValue();\n }\n }\n else {\n this._err(ERR.duplicateAttribute);\n }\n }\n _leaveAttrValue() {\n if (this.currentLocation) {\n this.currentLocation.endLine = this.preprocessor.line;\n this.currentLocation.endCol = this.preprocessor.col;\n this.currentLocation.endOffset = this.preprocessor.offset;\n }\n }\n //Token emission\n prepareToken(ct) {\n this._emitCurrentCharacterToken(ct.location);\n this.currentToken = null;\n if (ct.location) {\n ct.location.endLine = this.preprocessor.line;\n ct.location.endCol = this.preprocessor.col + 1;\n ct.location.endOffset = this.preprocessor.offset + 1;\n }\n this.currentLocation = this.getCurrentLocation(-1);\n }\n emitCurrentTagToken() {\n const ct = this.currentToken;\n this.prepareToken(ct);\n ct.tagID = getTagID(ct.tagName);\n if (ct.type === TokenType.START_TAG) {\n this.lastStartTagName = ct.tagName;\n this.handler.onStartTag(ct);\n }\n else {\n if (ct.attrs.length > 0) {\n this._err(ERR.endTagWithAttributes);\n }\n if (ct.selfClosing) {\n this._err(ERR.endTagWithTrailingSolidus);\n }\n this.handler.onEndTag(ct);\n }\n this.preprocessor.dropParsedChunk();\n }\n emitCurrentComment(ct) {\n this.prepareToken(ct);\n this.handler.onComment(ct);\n this.preprocessor.dropParsedChunk();\n }\n emitCurrentDoctype(ct) {\n this.prepareToken(ct);\n this.handler.onDoctype(ct);\n this.preprocessor.dropParsedChunk();\n }\n _emitCurrentCharacterToken(nextLocation) {\n if (this.currentCharacterToken) {\n //NOTE: if we have a pending character token, make it's end location equal to the\n //current token's start location.\n if (nextLocation && this.currentCharacterToken.location) {\n this.currentCharacterToken.location.endLine = nextLocation.startLine;\n this.currentCharacterToken.location.endCol = nextLocation.startCol;\n this.currentCharacterToken.location.endOffset = nextLocation.startOffset;\n }\n switch (this.currentCharacterToken.type) {\n case TokenType.CHARACTER: {\n this.handler.onCharacter(this.currentCharacterToken);\n break;\n }\n case TokenType.NULL_CHARACTER: {\n this.handler.onNullCharacter(this.currentCharacterToken);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n this.handler.onWhitespaceCharacter(this.currentCharacterToken);\n break;\n }\n }\n this.currentCharacterToken = null;\n }\n }\n _emitEOFToken() {\n const location = this.getCurrentLocation(0);\n if (location) {\n location.endLine = location.startLine;\n location.endCol = location.startCol;\n location.endOffset = location.startOffset;\n }\n this._emitCurrentCharacterToken(location);\n this.handler.onEof({ type: TokenType.EOF, location });\n this.active = false;\n }\n //Characters emission\n //OPTIMIZATION: The specification uses only one type of character token (one token per character).\n //This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters.\n //If we have a sequence of characters that belong to the same group, the parser can process it\n //as a single solid character token.\n //So, there are 3 types of character tokens in parse5:\n //1)TokenType.NULL_CHARACTER - \\u0000-character sequences (e.g. '\\u0000\\u0000\\u0000')\n //2)TokenType.WHITESPACE_CHARACTER - any whitespace/new-line character sequences (e.g. '\\n \\r\\t \\f')\n //3)TokenType.CHARACTER - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^')\n _appendCharToCurrentCharacterToken(type, ch) {\n if (this.currentCharacterToken) {\n if (this.currentCharacterToken.type === type) {\n this.currentCharacterToken.chars += ch;\n return;\n }\n else {\n this.currentLocation = this.getCurrentLocation(0);\n this._emitCurrentCharacterToken(this.currentLocation);\n this.preprocessor.dropParsedChunk();\n }\n }\n this._createCharacterToken(type, ch);\n }\n _emitCodePoint(cp) {\n const type = isWhitespace(cp)\n ? TokenType.WHITESPACE_CHARACTER\n : cp === $.NULL\n ? TokenType.NULL_CHARACTER\n : TokenType.CHARACTER;\n this._appendCharToCurrentCharacterToken(type, String.fromCodePoint(cp));\n }\n //NOTE: used when we emit characters explicitly.\n //This is always for non-whitespace and non-null characters, which allows us to avoid additional checks.\n _emitChars(ch) {\n this._appendCharToCurrentCharacterToken(TokenType.CHARACTER, ch);\n }\n // Character reference helpers\n _startCharacterReference() {\n this.returnState = this.state;\n this.state = State.CHARACTER_REFERENCE;\n this.entityStartPos = this.preprocessor.pos;\n this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute() ? DecodingMode.Attribute : DecodingMode.Legacy);\n }\n _isCharacterReferenceInAttribute() {\n return (this.returnState === State.ATTRIBUTE_VALUE_DOUBLE_QUOTED ||\n this.returnState === State.ATTRIBUTE_VALUE_SINGLE_QUOTED ||\n this.returnState === State.ATTRIBUTE_VALUE_UNQUOTED);\n }\n _flushCodePointConsumedAsCharacterReference(cp) {\n if (this._isCharacterReferenceInAttribute()) {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n else {\n this._emitCodePoint(cp);\n }\n }\n // Calling states this way turns out to be much faster than any other approach.\n _callState(cp) {\n switch (this.state) {\n case State.DATA: {\n this._stateData(cp);\n break;\n }\n case State.RCDATA: {\n this._stateRcdata(cp);\n break;\n }\n case State.RAWTEXT: {\n this._stateRawtext(cp);\n break;\n }\n case State.SCRIPT_DATA: {\n this._stateScriptData(cp);\n break;\n }\n case State.PLAINTEXT: {\n this._statePlaintext(cp);\n break;\n }\n case State.TAG_OPEN: {\n this._stateTagOpen(cp);\n break;\n }\n case State.END_TAG_OPEN: {\n this._stateEndTagOpen(cp);\n break;\n }\n case State.TAG_NAME: {\n this._stateTagName(cp);\n break;\n }\n case State.RCDATA_LESS_THAN_SIGN: {\n this._stateRcdataLessThanSign(cp);\n break;\n }\n case State.RCDATA_END_TAG_OPEN: {\n this._stateRcdataEndTagOpen(cp);\n break;\n }\n case State.RCDATA_END_TAG_NAME: {\n this._stateRcdataEndTagName(cp);\n break;\n }\n case State.RAWTEXT_LESS_THAN_SIGN: {\n this._stateRawtextLessThanSign(cp);\n break;\n }\n case State.RAWTEXT_END_TAG_OPEN: {\n this._stateRawtextEndTagOpen(cp);\n break;\n }\n case State.RAWTEXT_END_TAG_NAME: {\n this._stateRawtextEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_LESS_THAN_SIGN: {\n this._stateScriptDataLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_END_TAG_OPEN: {\n this._stateScriptDataEndTagOpen(cp);\n break;\n }\n case State.SCRIPT_DATA_END_TAG_NAME: {\n this._stateScriptDataEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPE_START: {\n this._stateScriptDataEscapeStart(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPE_START_DASH: {\n this._stateScriptDataEscapeStartDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED: {\n this._stateScriptDataEscaped(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_DASH: {\n this._stateScriptDataEscapedDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_DASH_DASH: {\n this._stateScriptDataEscapedDashDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN: {\n this._stateScriptDataEscapedLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN: {\n this._stateScriptDataEscapedEndTagOpen(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_END_TAG_NAME: {\n this._stateScriptDataEscapedEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPE_START: {\n this._stateScriptDataDoubleEscapeStart(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED: {\n this._stateScriptDataDoubleEscaped(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH: {\n this._stateScriptDataDoubleEscapedDash(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH: {\n this._stateScriptDataDoubleEscapedDashDash(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN: {\n this._stateScriptDataDoubleEscapedLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPE_END: {\n this._stateScriptDataDoubleEscapeEnd(cp);\n break;\n }\n case State.BEFORE_ATTRIBUTE_NAME: {\n this._stateBeforeAttributeName(cp);\n break;\n }\n case State.ATTRIBUTE_NAME: {\n this._stateAttributeName(cp);\n break;\n }\n case State.AFTER_ATTRIBUTE_NAME: {\n this._stateAfterAttributeName(cp);\n break;\n }\n case State.BEFORE_ATTRIBUTE_VALUE: {\n this._stateBeforeAttributeValue(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_DOUBLE_QUOTED: {\n this._stateAttributeValueDoubleQuoted(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_SINGLE_QUOTED: {\n this._stateAttributeValueSingleQuoted(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_UNQUOTED: {\n this._stateAttributeValueUnquoted(cp);\n break;\n }\n case State.AFTER_ATTRIBUTE_VALUE_QUOTED: {\n this._stateAfterAttributeValueQuoted(cp);\n break;\n }\n case State.SELF_CLOSING_START_TAG: {\n this._stateSelfClosingStartTag(cp);\n break;\n }\n case State.BOGUS_COMMENT: {\n this._stateBogusComment(cp);\n break;\n }\n case State.MARKUP_DECLARATION_OPEN: {\n this._stateMarkupDeclarationOpen(cp);\n break;\n }\n case State.COMMENT_START: {\n this._stateCommentStart(cp);\n break;\n }\n case State.COMMENT_START_DASH: {\n this._stateCommentStartDash(cp);\n break;\n }\n case State.COMMENT: {\n this._stateComment(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN: {\n this._stateCommentLessThanSign(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG: {\n this._stateCommentLessThanSignBang(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG_DASH: {\n this._stateCommentLessThanSignBangDash(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH: {\n this._stateCommentLessThanSignBangDashDash(cp);\n break;\n }\n case State.COMMENT_END_DASH: {\n this._stateCommentEndDash(cp);\n break;\n }\n case State.COMMENT_END: {\n this._stateCommentEnd(cp);\n break;\n }\n case State.COMMENT_END_BANG: {\n this._stateCommentEndBang(cp);\n break;\n }\n case State.DOCTYPE: {\n this._stateDoctype(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_NAME: {\n this._stateBeforeDoctypeName(cp);\n break;\n }\n case State.DOCTYPE_NAME: {\n this._stateDoctypeName(cp);\n break;\n }\n case State.AFTER_DOCTYPE_NAME: {\n this._stateAfterDoctypeName(cp);\n break;\n }\n case State.AFTER_DOCTYPE_PUBLIC_KEYWORD: {\n this._stateAfterDoctypePublicKeyword(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER: {\n this._stateBeforeDoctypePublicIdentifier(cp);\n break;\n }\n case State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED: {\n this._stateDoctypePublicIdentifierDoubleQuoted(cp);\n break;\n }\n case State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED: {\n this._stateDoctypePublicIdentifierSingleQuoted(cp);\n break;\n }\n case State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER: {\n this._stateAfterDoctypePublicIdentifier(cp);\n break;\n }\n case State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS: {\n this._stateBetweenDoctypePublicAndSystemIdentifiers(cp);\n break;\n }\n case State.AFTER_DOCTYPE_SYSTEM_KEYWORD: {\n this._stateAfterDoctypeSystemKeyword(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER: {\n this._stateBeforeDoctypeSystemIdentifier(cp);\n break;\n }\n case State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED: {\n this._stateDoctypeSystemIdentifierDoubleQuoted(cp);\n break;\n }\n case State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED: {\n this._stateDoctypeSystemIdentifierSingleQuoted(cp);\n break;\n }\n case State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER: {\n this._stateAfterDoctypeSystemIdentifier(cp);\n break;\n }\n case State.BOGUS_DOCTYPE: {\n this._stateBogusDoctype(cp);\n break;\n }\n case State.CDATA_SECTION: {\n this._stateCdataSection(cp);\n break;\n }\n case State.CDATA_SECTION_BRACKET: {\n this._stateCdataSectionBracket(cp);\n break;\n }\n case State.CDATA_SECTION_END: {\n this._stateCdataSectionEnd(cp);\n break;\n }\n case State.CHARACTER_REFERENCE: {\n this._stateCharacterReference();\n break;\n }\n case State.AMBIGUOUS_AMPERSAND: {\n this._stateAmbiguousAmpersand(cp);\n break;\n }\n default: {\n throw new Error('Unknown state');\n }\n }\n }\n // State machine\n // Data state\n //------------------------------------------------------------------\n _stateData(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.TAG_OPEN;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitCodePoint(cp);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // RCDATA state\n //------------------------------------------------------------------\n _stateRcdata(cp) {\n switch (cp) {\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.RCDATA_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // RAWTEXT state\n //------------------------------------------------------------------\n _stateRawtext(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.RAWTEXT_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data state\n //------------------------------------------------------------------\n _stateScriptData(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // PLAINTEXT state\n //------------------------------------------------------------------\n _statePlaintext(cp) {\n switch (cp) {\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Tag open state\n //------------------------------------------------------------------\n _stateTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this._createStartTagToken();\n this.state = State.TAG_NAME;\n this._stateTagName(cp);\n }\n else\n switch (cp) {\n case $.EXCLAMATION_MARK: {\n this.state = State.MARKUP_DECLARATION_OPEN;\n break;\n }\n case $.SOLIDUS: {\n this.state = State.END_TAG_OPEN;\n break;\n }\n case $.QUESTION_MARK: {\n this._err(ERR.unexpectedQuestionMarkInsteadOfTagName);\n this._createCommentToken(1);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofBeforeTagName);\n this._emitChars('<');\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.invalidFirstCharacterOfTagName);\n this._emitChars('<');\n this.state = State.DATA;\n this._stateData(cp);\n }\n }\n }\n // End tag open state\n //------------------------------------------------------------------\n _stateEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this._createEndTagToken();\n this.state = State.TAG_NAME;\n this._stateTagName(cp);\n }\n else\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingEndTagName);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofBeforeTagName);\n this._emitChars('</');\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.invalidFirstCharacterOfTagName);\n this._createCommentToken(2);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n }\n }\n }\n // Tag name state\n //------------------------------------------------------------------\n _stateTagName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.SOLIDUS: {\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.tagName += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n token.tagName += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // RCDATA less-than sign state\n //------------------------------------------------------------------\n _stateRcdataLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.RCDATA_END_TAG_OPEN;\n }\n else {\n this._emitChars('<');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n // RCDATA end tag open state\n //------------------------------------------------------------------\n _stateRcdataEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.RCDATA_END_TAG_NAME;\n this._stateRcdataEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n handleSpecialEndTag(_cp) {\n if (!this.preprocessor.startsWith(this.lastStartTagName, false)) {\n return !this._ensureHibernation();\n }\n this._createEndTagToken();\n const token = this.currentToken;\n token.tagName = this.lastStartTagName;\n const cp = this.preprocessor.peek(this.lastStartTagName.length);\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._advanceBy(this.lastStartTagName.length);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n return false;\n }\n case $.SOLIDUS: {\n this._advanceBy(this.lastStartTagName.length);\n this.state = State.SELF_CLOSING_START_TAG;\n return false;\n }\n case $.GREATER_THAN_SIGN: {\n this._advanceBy(this.lastStartTagName.length);\n this.emitCurrentTagToken();\n this.state = State.DATA;\n return false;\n }\n default: {\n return !this._ensureHibernation();\n }\n }\n }\n // RCDATA end tag name state\n //------------------------------------------------------------------\n _stateRcdataEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n // RAWTEXT less-than sign state\n //------------------------------------------------------------------\n _stateRawtextLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.RAWTEXT_END_TAG_OPEN;\n }\n else {\n this._emitChars('<');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // RAWTEXT end tag open state\n //------------------------------------------------------------------\n _stateRawtextEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.RAWTEXT_END_TAG_NAME;\n this._stateRawtextEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // RAWTEXT end tag name state\n //------------------------------------------------------------------\n _stateRawtextEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // Script data less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataLessThanSign(cp) {\n switch (cp) {\n case $.SOLIDUS: {\n this.state = State.SCRIPT_DATA_END_TAG_OPEN;\n break;\n }\n case $.EXCLAMATION_MARK: {\n this.state = State.SCRIPT_DATA_ESCAPE_START;\n this._emitChars('<!');\n break;\n }\n default: {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n }\n // Script data end tag open state\n //------------------------------------------------------------------\n _stateScriptDataEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.SCRIPT_DATA_END_TAG_NAME;\n this._stateScriptDataEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data end tag name state\n //------------------------------------------------------------------\n _stateScriptDataEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escape start state\n //------------------------------------------------------------------\n _stateScriptDataEscapeStart(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.SCRIPT_DATA_ESCAPE_START_DASH;\n this._emitChars('-');\n }\n else {\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escape start dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapeStartDash(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n this._emitChars('-');\n }\n else {\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escaped state\n //------------------------------------------------------------------\n _stateScriptDataEscaped(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapedDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped dash dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapedDashDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.SCRIPT_DATA;\n this._emitChars('>');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataEscapedLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;\n }\n else if (isAsciiLetter(cp)) {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_START;\n this._stateScriptDataDoubleEscapeStart(cp);\n }\n else {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data escaped end tag open state\n //------------------------------------------------------------------\n _stateScriptDataEscapedEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_NAME;\n this._stateScriptDataEscapedEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data escaped end tag name state\n //------------------------------------------------------------------\n _stateScriptDataEscapedEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data double escape start state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapeStart(cp) {\n if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n this._emitCodePoint(cp);\n for (let i = 0; i < $$.SCRIPT.length; i++) {\n this._emitCodePoint(this._consume());\n }\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n }\n else if (!this._ensureHibernation()) {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data double escaped state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscaped(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped dash state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped dash dash state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedDashDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.SCRIPT_DATA;\n this._emitChars('>');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_END;\n this._emitChars('/');\n }\n else {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._stateScriptDataDoubleEscaped(cp);\n }\n }\n // Script data double escape end state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapeEnd(cp) {\n if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n this._emitCodePoint(cp);\n for (let i = 0; i < $$.SCRIPT.length; i++) {\n this._emitCodePoint(this._consume());\n }\n this.state = State.SCRIPT_DATA_ESCAPED;\n }\n else if (!this._ensureHibernation()) {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._stateScriptDataDoubleEscaped(cp);\n }\n }\n // Before attribute name state\n //------------------------------------------------------------------\n _stateBeforeAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.SOLIDUS:\n case $.GREATER_THAN_SIGN:\n case $.EOF: {\n this.state = State.AFTER_ATTRIBUTE_NAME;\n this._stateAfterAttributeName(cp);\n break;\n }\n case $.EQUALS_SIGN: {\n this._err(ERR.unexpectedEqualsSignBeforeAttributeName);\n this._createAttr('=');\n this.state = State.ATTRIBUTE_NAME;\n break;\n }\n default: {\n this._createAttr('');\n this.state = State.ATTRIBUTE_NAME;\n this._stateAttributeName(cp);\n }\n }\n }\n // Attribute name state\n //------------------------------------------------------------------\n _stateAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED:\n case $.SOLIDUS:\n case $.GREATER_THAN_SIGN:\n case $.EOF: {\n this._leaveAttrName();\n this.state = State.AFTER_ATTRIBUTE_NAME;\n this._stateAfterAttributeName(cp);\n break;\n }\n case $.EQUALS_SIGN: {\n this._leaveAttrName();\n this.state = State.BEFORE_ATTRIBUTE_VALUE;\n break;\n }\n case $.QUOTATION_MARK:\n case $.APOSTROPHE:\n case $.LESS_THAN_SIGN: {\n this._err(ERR.unexpectedCharacterInAttributeName);\n this.currentAttr.name += String.fromCodePoint(cp);\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.name += REPLACEMENT_CHARACTER;\n break;\n }\n default: {\n this.currentAttr.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // After attribute name state\n //------------------------------------------------------------------\n _stateAfterAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.SOLIDUS: {\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.EQUALS_SIGN: {\n this.state = State.BEFORE_ATTRIBUTE_VALUE;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._createAttr('');\n this.state = State.ATTRIBUTE_NAME;\n this._stateAttributeName(cp);\n }\n }\n }\n // Before attribute value state\n //------------------------------------------------------------------\n _stateBeforeAttributeValue(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n this.state = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this.state = State.ATTRIBUTE_VALUE_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingAttributeValue);\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n default: {\n this.state = State.ATTRIBUTE_VALUE_UNQUOTED;\n this._stateAttributeValueUnquoted(cp);\n }\n }\n }\n // Attribute value (double-quoted) state\n //------------------------------------------------------------------\n _stateAttributeValueDoubleQuoted(cp) {\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // Attribute value (single-quoted) state\n //------------------------------------------------------------------\n _stateAttributeValueSingleQuoted(cp) {\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // Attribute value (unquoted) state\n //------------------------------------------------------------------\n _stateAttributeValueUnquoted(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._leaveAttrValue();\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._leaveAttrValue();\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.QUOTATION_MARK:\n case $.APOSTROPHE:\n case $.LESS_THAN_SIGN:\n case $.EQUALS_SIGN:\n case $.GRAVE_ACCENT: {\n this._err(ERR.unexpectedCharacterInUnquotedAttributeValue);\n this.currentAttr.value += String.fromCodePoint(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // After attribute value (quoted) state\n //------------------------------------------------------------------\n _stateAfterAttributeValueQuoted(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._leaveAttrValue();\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.SOLIDUS: {\n this._leaveAttrValue();\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._leaveAttrValue();\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingWhitespaceBetweenAttributes);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n this._stateBeforeAttributeName(cp);\n }\n }\n }\n // Self-closing start tag state\n //------------------------------------------------------------------\n _stateSelfClosingStartTag(cp) {\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n const token = this.currentToken;\n token.selfClosing = true;\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.unexpectedSolidusInTag);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n this._stateBeforeAttributeName(cp);\n }\n }\n }\n // Bogus comment state\n //------------------------------------------------------------------\n _stateBogusComment(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.data += REPLACEMENT_CHARACTER;\n break;\n }\n default: {\n token.data += String.fromCodePoint(cp);\n }\n }\n }\n // Markup declaration open state\n //------------------------------------------------------------------\n _stateMarkupDeclarationOpen(cp) {\n if (this._consumeSequenceIfMatch($$.DASH_DASH, true)) {\n this._createCommentToken($$.DASH_DASH.length + 1);\n this.state = State.COMMENT_START;\n }\n else if (this._consumeSequenceIfMatch($$.DOCTYPE, false)) {\n // NOTE: Doctypes tokens are created without fixed offsets. We keep track of the moment a doctype *might* start here.\n this.currentLocation = this.getCurrentLocation($$.DOCTYPE.length + 1);\n this.state = State.DOCTYPE;\n }\n else if (this._consumeSequenceIfMatch($$.CDATA_START, true)) {\n if (this.inForeignNode) {\n this.state = State.CDATA_SECTION;\n }\n else {\n this._err(ERR.cdataInHtmlContent);\n this._createCommentToken($$.CDATA_START.length + 1);\n this.currentToken.data = '[CDATA[';\n this.state = State.BOGUS_COMMENT;\n }\n }\n //NOTE: Sequence lookups can be abrupted by hibernation. In that case, lookup\n //results are no longer valid and we will need to start over.\n else if (!this._ensureHibernation()) {\n this._err(ERR.incorrectlyOpenedComment);\n this._createCommentToken(2);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n }\n }\n // Comment start state\n //------------------------------------------------------------------\n _stateCommentStart(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_START_DASH;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptClosingOfEmptyComment);\n this.state = State.DATA;\n const token = this.currentToken;\n this.emitCurrentComment(token);\n break;\n }\n default: {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment start dash state\n //------------------------------------------------------------------\n _stateCommentStartDash(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptClosingOfEmptyComment);\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '-';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment state\n //------------------------------------------------------------------\n _stateComment(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END_DASH;\n break;\n }\n case $.LESS_THAN_SIGN: {\n token.data += '<';\n this.state = State.COMMENT_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.data += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += String.fromCodePoint(cp);\n }\n }\n }\n // Comment less-than sign state\n //------------------------------------------------------------------\n _stateCommentLessThanSign(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.EXCLAMATION_MARK: {\n token.data += '!';\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG;\n break;\n }\n case $.LESS_THAN_SIGN: {\n token.data += '<';\n break;\n }\n default: {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment less-than sign bang state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBang(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH;\n }\n else {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n // Comment less-than sign bang dash state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBangDash(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;\n }\n else {\n this.state = State.COMMENT_END_DASH;\n this._stateCommentEndDash(cp);\n }\n }\n // Comment less-than sign bang dash dash state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBangDashDash(cp) {\n if (cp !== $.GREATER_THAN_SIGN && cp !== $.EOF) {\n this._err(ERR.nestedComment);\n }\n this.state = State.COMMENT_END;\n this._stateCommentEnd(cp);\n }\n // Comment end dash state\n //------------------------------------------------------------------\n _stateCommentEndDash(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '-';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment end state\n //------------------------------------------------------------------\n _stateCommentEnd(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EXCLAMATION_MARK: {\n this.state = State.COMMENT_END_BANG;\n break;\n }\n case $.HYPHEN_MINUS: {\n token.data += '-';\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '--';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment end bang state\n //------------------------------------------------------------------\n _stateCommentEndBang(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n token.data += '--!';\n this.state = State.COMMENT_END_DASH;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.incorrectlyClosedComment);\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '--!';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // DOCTYPE state\n //------------------------------------------------------------------\n _stateDoctype(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.BEFORE_DOCTYPE_NAME;\n this._stateBeforeDoctypeName(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingWhitespaceBeforeDoctypeName);\n this.state = State.BEFORE_DOCTYPE_NAME;\n this._stateBeforeDoctypeName(cp);\n }\n }\n }\n // Before DOCTYPE name state\n //------------------------------------------------------------------\n _stateBeforeDoctypeName(cp) {\n if (isAsciiUpper(cp)) {\n this._createDoctypeToken(String.fromCharCode(toAsciiLower(cp)));\n this.state = State.DOCTYPE_NAME;\n }\n else\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._createDoctypeToken(REPLACEMENT_CHARACTER);\n this.state = State.DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeName);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._createDoctypeToken(String.fromCodePoint(cp));\n this.state = State.DOCTYPE_NAME;\n }\n }\n }\n // DOCTYPE name state\n //------------------------------------------------------------------\n _stateDoctypeName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.AFTER_DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.name += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // After DOCTYPE name state\n //------------------------------------------------------------------\n _stateAfterDoctypeName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n if (this._consumeSequenceIfMatch($$.PUBLIC, false)) {\n this.state = State.AFTER_DOCTYPE_PUBLIC_KEYWORD;\n }\n else if (this._consumeSequenceIfMatch($$.SYSTEM, false)) {\n this.state = State.AFTER_DOCTYPE_SYSTEM_KEYWORD;\n }\n //NOTE: sequence lookup can be abrupted by hibernation. In that case lookup\n //results are no longer valid and we will need to start over.\n else if (!this._ensureHibernation()) {\n this._err(ERR.invalidCharacterSequenceAfterDoctypeName);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n }\n // After DOCTYPE public keyword state\n //------------------------------------------------------------------\n _stateAfterDoctypePublicKeyword(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Before DOCTYPE public identifier state\n //------------------------------------------------------------------\n _stateBeforeDoctypePublicIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // DOCTYPE public identifier (double-quoted) state\n //------------------------------------------------------------------\n _stateDoctypePublicIdentifierDoubleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.publicId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.publicId += String.fromCodePoint(cp);\n }\n }\n }\n // DOCTYPE public identifier (single-quoted) state\n //------------------------------------------------------------------\n _stateDoctypePublicIdentifierSingleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.publicId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.publicId += String.fromCodePoint(cp);\n }\n }\n }\n // After DOCTYPE public identifier state\n //------------------------------------------------------------------\n _stateAfterDoctypePublicIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Between DOCTYPE public and system identifiers state\n //------------------------------------------------------------------\n _stateBetweenDoctypePublicAndSystemIdentifiers(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.QUOTATION_MARK: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // After DOCTYPE system keyword state\n //------------------------------------------------------------------\n _stateAfterDoctypeSystemKeyword(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Before DOCTYPE system identifier state\n //------------------------------------------------------------------\n _stateBeforeDoctypeSystemIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // DOCTYPE system identifier (double-quoted) state\n //------------------------------------------------------------------\n _stateDoctypeSystemIdentifierDoubleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.systemId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.systemId += String.fromCodePoint(cp);\n }\n }\n }\n // DOCTYPE system identifier (single-quoted) state\n //------------------------------------------------------------------\n _stateDoctypeSystemIdentifierSingleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.systemId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.systemId += String.fromCodePoint(cp);\n }\n }\n }\n // After DOCTYPE system identifier state\n //------------------------------------------------------------------\n _stateAfterDoctypeSystemIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.unexpectedCharacterAfterDoctypeSystemIdentifier);\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Bogus DOCTYPE state\n //------------------------------------------------------------------\n _stateBogusDoctype(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n break;\n }\n case $.EOF: {\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default:\n // Do nothing\n }\n }\n // CDATA section state\n //------------------------------------------------------------------\n _stateCdataSection(cp) {\n switch (cp) {\n case $.RIGHT_SQUARE_BRACKET: {\n this.state = State.CDATA_SECTION_BRACKET;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInCdata);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // CDATA section bracket state\n //------------------------------------------------------------------\n _stateCdataSectionBracket(cp) {\n if (cp === $.RIGHT_SQUARE_BRACKET) {\n this.state = State.CDATA_SECTION_END;\n }\n else {\n this._emitChars(']');\n this.state = State.CDATA_SECTION;\n this._stateCdataSection(cp);\n }\n }\n // CDATA section end state\n //------------------------------------------------------------------\n _stateCdataSectionEnd(cp) {\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n break;\n }\n case $.RIGHT_SQUARE_BRACKET: {\n this._emitChars(']');\n break;\n }\n default: {\n this._emitChars(']]');\n this.state = State.CDATA_SECTION;\n this._stateCdataSection(cp);\n }\n }\n }\n // Character reference state\n //------------------------------------------------------------------\n _stateCharacterReference() {\n let length = this.entityDecoder.write(this.preprocessor.html, this.preprocessor.pos);\n if (length < 0) {\n if (this.preprocessor.lastChunkWritten) {\n length = this.entityDecoder.end();\n }\n else {\n // Wait for the rest of the entity.\n this.active = false;\n // Mark the entire buffer as read.\n this.preprocessor.pos = this.preprocessor.html.length - 1;\n this.consumedAfterSnapshot = 0;\n this.preprocessor.endOfChunkHit = true;\n return;\n }\n }\n if (length === 0) {\n // This was not a valid entity. Go back to the beginning, and\n // figure out what to do.\n this.preprocessor.pos = this.entityStartPos;\n this._flushCodePointConsumedAsCharacterReference($.AMPERSAND);\n this.state =\n !this._isCharacterReferenceInAttribute() && isAsciiAlphaNumeric(this.preprocessor.peek(1))\n ? State.AMBIGUOUS_AMPERSAND\n : this.returnState;\n }\n else {\n // We successfully parsed an entity. Switch to the return state.\n this.state = this.returnState;\n }\n }\n // Ambiguos ampersand state\n //------------------------------------------------------------------\n _stateAmbiguousAmpersand(cp) {\n if (isAsciiAlphaNumeric(cp)) {\n this._flushCodePointConsumedAsCharacterReference(cp);\n }\n else {\n if (cp === $.SEMICOLON) {\n this._err(ERR.unknownNamedCharacterReference);\n }\n this.state = this.returnState;\n this._callState(cp);\n }\n }\n}\n",
56
- "import { TAG_ID as $, NS, NUMBERED_HEADERS } from '../common/html.js';\n//Element utils\nconst IMPLICIT_END_TAG_REQUIRED = new Set([$.DD, $.DT, $.LI, $.OPTGROUP, $.OPTION, $.P, $.RB, $.RP, $.RT, $.RTC]);\nconst IMPLICIT_END_TAG_REQUIRED_THOROUGHLY = new Set([\n ...IMPLICIT_END_TAG_REQUIRED,\n $.CAPTION,\n $.COLGROUP,\n $.TBODY,\n $.TD,\n $.TFOOT,\n $.TH,\n $.THEAD,\n $.TR,\n]);\nconst SCOPING_ELEMENTS_HTML = new Set([\n $.APPLET,\n $.CAPTION,\n $.HTML,\n $.MARQUEE,\n $.OBJECT,\n $.TABLE,\n $.TD,\n $.TEMPLATE,\n $.TH,\n]);\nconst SCOPING_ELEMENTS_HTML_LIST = new Set([...SCOPING_ELEMENTS_HTML, $.OL, $.UL]);\nconst SCOPING_ELEMENTS_HTML_BUTTON = new Set([...SCOPING_ELEMENTS_HTML, $.BUTTON]);\nconst SCOPING_ELEMENTS_MATHML = new Set([$.ANNOTATION_XML, $.MI, $.MN, $.MO, $.MS, $.MTEXT]);\nconst SCOPING_ELEMENTS_SVG = new Set([$.DESC, $.FOREIGN_OBJECT, $.TITLE]);\nconst TABLE_ROW_CONTEXT = new Set([$.TR, $.TEMPLATE, $.HTML]);\nconst TABLE_BODY_CONTEXT = new Set([$.TBODY, $.TFOOT, $.THEAD, $.TEMPLATE, $.HTML]);\nconst TABLE_CONTEXT = new Set([$.TABLE, $.TEMPLATE, $.HTML]);\nconst TABLE_CELLS = new Set([$.TD, $.TH]);\n//Stack of open elements\nexport class OpenElementStack {\n get currentTmplContentOrNode() {\n return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current;\n }\n constructor(document, treeAdapter, handler) {\n this.treeAdapter = treeAdapter;\n this.handler = handler;\n this.items = [];\n this.tagIDs = [];\n this.stackTop = -1;\n this.tmplCount = 0;\n this.currentTagId = $.UNKNOWN;\n this.current = document;\n }\n //Index of element\n _indexOf(element) {\n return this.items.lastIndexOf(element, this.stackTop);\n }\n //Update current element\n _isInTemplate() {\n return this.currentTagId === $.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === NS.HTML;\n }\n _updateCurrentElement() {\n this.current = this.items[this.stackTop];\n this.currentTagId = this.tagIDs[this.stackTop];\n }\n //Mutations\n push(element, tagID) {\n this.stackTop++;\n this.items[this.stackTop] = element;\n this.current = element;\n this.tagIDs[this.stackTop] = tagID;\n this.currentTagId = tagID;\n if (this._isInTemplate()) {\n this.tmplCount++;\n }\n this.handler.onItemPush(element, tagID, true);\n }\n pop() {\n const popped = this.current;\n if (this.tmplCount > 0 && this._isInTemplate()) {\n this.tmplCount--;\n }\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(popped, true);\n }\n replace(oldElement, newElement) {\n const idx = this._indexOf(oldElement);\n this.items[idx] = newElement;\n if (idx === this.stackTop) {\n this.current = newElement;\n }\n }\n insertAfter(referenceElement, newElement, newElementID) {\n const insertionIdx = this._indexOf(referenceElement) + 1;\n this.items.splice(insertionIdx, 0, newElement);\n this.tagIDs.splice(insertionIdx, 0, newElementID);\n this.stackTop++;\n if (insertionIdx === this.stackTop) {\n this._updateCurrentElement();\n }\n if (this.current && this.currentTagId !== undefined) {\n this.handler.onItemPush(this.current, this.currentTagId, insertionIdx === this.stackTop);\n }\n }\n popUntilTagNamePopped(tagName) {\n let targetIdx = this.stackTop + 1;\n do {\n targetIdx = this.tagIDs.lastIndexOf(tagName, targetIdx - 1);\n } while (targetIdx > 0 && this.treeAdapter.getNamespaceURI(this.items[targetIdx]) !== NS.HTML);\n this.shortenToLength(Math.max(targetIdx, 0));\n }\n shortenToLength(idx) {\n while (this.stackTop >= idx) {\n const popped = this.current;\n if (this.tmplCount > 0 && this._isInTemplate()) {\n this.tmplCount -= 1;\n }\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(popped, this.stackTop < idx);\n }\n }\n popUntilElementPopped(element) {\n const idx = this._indexOf(element);\n this.shortenToLength(Math.max(idx, 0));\n }\n popUntilPopped(tagNames, targetNS) {\n const idx = this._indexOfTagNames(tagNames, targetNS);\n this.shortenToLength(Math.max(idx, 0));\n }\n popUntilNumberedHeaderPopped() {\n this.popUntilPopped(NUMBERED_HEADERS, NS.HTML);\n }\n popUntilTableCellPopped() {\n this.popUntilPopped(TABLE_CELLS, NS.HTML);\n }\n popAllUpToHtmlElement() {\n //NOTE: here we assume that the root <html> element is always first in the open element stack, so\n //we perform this fast stack clean up.\n this.tmplCount = 0;\n this.shortenToLength(1);\n }\n _indexOfTagNames(tagNames, namespace) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (tagNames.has(this.tagIDs[i]) && this.treeAdapter.getNamespaceURI(this.items[i]) === namespace) {\n return i;\n }\n }\n return -1;\n }\n clearBackTo(tagNames, targetNS) {\n const idx = this._indexOfTagNames(tagNames, targetNS);\n this.shortenToLength(idx + 1);\n }\n clearBackToTableContext() {\n this.clearBackTo(TABLE_CONTEXT, NS.HTML);\n }\n clearBackToTableBodyContext() {\n this.clearBackTo(TABLE_BODY_CONTEXT, NS.HTML);\n }\n clearBackToTableRowContext() {\n this.clearBackTo(TABLE_ROW_CONTEXT, NS.HTML);\n }\n remove(element) {\n const idx = this._indexOf(element);\n if (idx >= 0) {\n if (idx === this.stackTop) {\n this.pop();\n }\n else {\n this.items.splice(idx, 1);\n this.tagIDs.splice(idx, 1);\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(element, false);\n }\n }\n }\n //Search\n tryPeekProperlyNestedBodyElement() {\n //Properly nested <body> element (should be second element in stack).\n return this.stackTop >= 1 && this.tagIDs[1] === $.BODY ? this.items[1] : null;\n }\n contains(element) {\n return this._indexOf(element) > -1;\n }\n getCommonAncestor(element) {\n const elementIdx = this._indexOf(element) - 1;\n return elementIdx >= 0 ? this.items[elementIdx] : null;\n }\n isRootHtmlElementCurrent() {\n return this.stackTop === 0 && this.tagIDs[0] === $.HTML;\n }\n //Element in scope\n hasInDynamicScope(tagName, htmlScope) {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n switch (this.treeAdapter.getNamespaceURI(this.items[i])) {\n case NS.HTML: {\n if (tn === tagName)\n return true;\n if (htmlScope.has(tn))\n return false;\n break;\n }\n case NS.SVG: {\n if (SCOPING_ELEMENTS_SVG.has(tn))\n return false;\n break;\n }\n case NS.MATHML: {\n if (SCOPING_ELEMENTS_MATHML.has(tn))\n return false;\n break;\n }\n }\n }\n return true;\n }\n hasInScope(tagName) {\n return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML);\n }\n hasInListItemScope(tagName) {\n return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_LIST);\n }\n hasInButtonScope(tagName) {\n return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_BUTTON);\n }\n hasNumberedHeaderInScope() {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n switch (this.treeAdapter.getNamespaceURI(this.items[i])) {\n case NS.HTML: {\n if (NUMBERED_HEADERS.has(tn))\n return true;\n if (SCOPING_ELEMENTS_HTML.has(tn))\n return false;\n break;\n }\n case NS.SVG: {\n if (SCOPING_ELEMENTS_SVG.has(tn))\n return false;\n break;\n }\n case NS.MATHML: {\n if (SCOPING_ELEMENTS_MATHML.has(tn))\n return false;\n break;\n }\n }\n }\n return true;\n }\n hasInTableScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n continue;\n }\n switch (this.tagIDs[i]) {\n case tagName: {\n return true;\n }\n case $.TABLE:\n case $.HTML: {\n return false;\n }\n }\n }\n return true;\n }\n hasTableBodyContextInTableScope() {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n continue;\n }\n switch (this.tagIDs[i]) {\n case $.TBODY:\n case $.THEAD:\n case $.TFOOT: {\n return true;\n }\n case $.TABLE:\n case $.HTML: {\n return false;\n }\n }\n }\n return true;\n }\n hasInSelectScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n continue;\n }\n switch (this.tagIDs[i]) {\n case tagName: {\n return true;\n }\n case $.OPTION:\n case $.OPTGROUP: {\n break;\n }\n default: {\n return false;\n }\n }\n }\n return true;\n }\n //Implied end tags\n generateImpliedEndTags() {\n while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED.has(this.currentTagId)) {\n this.pop();\n }\n }\n generateImpliedEndTagsThoroughly() {\n while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n this.pop();\n }\n }\n generateImpliedEndTagsWithExclusion(exclusionId) {\n while (this.currentTagId !== undefined &&\n this.currentTagId !== exclusionId &&\n IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n this.pop();\n }\n }\n}\n",
57
- "//Const\nconst NOAH_ARK_CAPACITY = 3;\nexport var EntryType;\n(function (EntryType) {\n EntryType[EntryType[\"Marker\"] = 0] = \"Marker\";\n EntryType[EntryType[\"Element\"] = 1] = \"Element\";\n})(EntryType || (EntryType = {}));\nconst MARKER = { type: EntryType.Marker };\n//List of formatting elements\nexport class FormattingElementList {\n constructor(treeAdapter) {\n this.treeAdapter = treeAdapter;\n this.entries = [];\n this.bookmark = null;\n }\n //Noah Ark's condition\n //OPTIMIZATION: at first we try to find possible candidates for exclusion using\n //lightweight heuristics without thorough attributes check.\n _getNoahArkConditionCandidates(newElement, neAttrs) {\n const candidates = [];\n const neAttrsLength = neAttrs.length;\n const neTagName = this.treeAdapter.getTagName(newElement);\n const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement);\n for (let i = 0; i < this.entries.length; i++) {\n const entry = this.entries[i];\n if (entry.type === EntryType.Marker) {\n break;\n }\n const { element } = entry;\n if (this.treeAdapter.getTagName(element) === neTagName &&\n this.treeAdapter.getNamespaceURI(element) === neNamespaceURI) {\n const elementAttrs = this.treeAdapter.getAttrList(element);\n if (elementAttrs.length === neAttrsLength) {\n candidates.push({ idx: i, attrs: elementAttrs });\n }\n }\n }\n return candidates;\n }\n _ensureNoahArkCondition(newElement) {\n if (this.entries.length < NOAH_ARK_CAPACITY)\n return;\n const neAttrs = this.treeAdapter.getAttrList(newElement);\n const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs);\n if (candidates.length < NOAH_ARK_CAPACITY)\n return;\n //NOTE: build attrs map for the new element, so we can perform fast lookups\n const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value]));\n let validCandidates = 0;\n //NOTE: remove bottommost candidates, until Noah's Ark condition will not be met\n for (let i = 0; i < candidates.length; i++) {\n const candidate = candidates[i];\n // We know that `candidate.attrs.length === neAttrs.length`\n if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) {\n validCandidates += 1;\n if (validCandidates >= NOAH_ARK_CAPACITY) {\n this.entries.splice(candidate.idx, 1);\n }\n }\n }\n }\n //Mutations\n insertMarker() {\n this.entries.unshift(MARKER);\n }\n pushElement(element, token) {\n this._ensureNoahArkCondition(element);\n this.entries.unshift({\n type: EntryType.Element,\n element,\n token,\n });\n }\n insertElementAfterBookmark(element, token) {\n const bookmarkIdx = this.entries.indexOf(this.bookmark);\n this.entries.splice(bookmarkIdx, 0, {\n type: EntryType.Element,\n element,\n token,\n });\n }\n removeEntry(entry) {\n const entryIndex = this.entries.indexOf(entry);\n if (entryIndex !== -1) {\n this.entries.splice(entryIndex, 1);\n }\n }\n /**\n * Clears the list of formatting elements up to the last marker.\n *\n * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker\n */\n clearToLastMarker() {\n const markerIdx = this.entries.indexOf(MARKER);\n if (markerIdx === -1) {\n this.entries.length = 0;\n }\n else {\n this.entries.splice(0, markerIdx + 1);\n }\n }\n //Search\n getElementEntryInScopeWithTagName(tagName) {\n const entry = this.entries.find((entry) => entry.type === EntryType.Marker || this.treeAdapter.getTagName(entry.element) === tagName);\n return entry && entry.type === EntryType.Element ? entry : null;\n }\n getElementEntry(element) {\n return this.entries.find((entry) => entry.type === EntryType.Element && entry.element === element);\n }\n}\n",
58
- "import { DOCUMENT_MODE } from '../common/html.js';\nexport const defaultTreeAdapter = {\n //Node construction\n createDocument() {\n return {\n nodeName: '#document',\n mode: DOCUMENT_MODE.NO_QUIRKS,\n childNodes: [],\n };\n },\n createDocumentFragment() {\n return {\n nodeName: '#document-fragment',\n childNodes: [],\n };\n },\n createElement(tagName, namespaceURI, attrs) {\n return {\n nodeName: tagName,\n tagName,\n attrs,\n namespaceURI,\n childNodes: [],\n parentNode: null,\n };\n },\n createCommentNode(data) {\n return {\n nodeName: '#comment',\n data,\n parentNode: null,\n };\n },\n createTextNode(value) {\n return {\n nodeName: '#text',\n value,\n parentNode: null,\n };\n },\n //Tree mutation\n appendChild(parentNode, newNode) {\n parentNode.childNodes.push(newNode);\n newNode.parentNode = parentNode;\n },\n insertBefore(parentNode, newNode, referenceNode) {\n const insertionIdx = parentNode.childNodes.indexOf(referenceNode);\n parentNode.childNodes.splice(insertionIdx, 0, newNode);\n newNode.parentNode = parentNode;\n },\n setTemplateContent(templateElement, contentElement) {\n templateElement.content = contentElement;\n },\n getTemplateContent(templateElement) {\n return templateElement.content;\n },\n setDocumentType(document, name, publicId, systemId) {\n const doctypeNode = document.childNodes.find((node) => node.nodeName === '#documentType');\n if (doctypeNode) {\n doctypeNode.name = name;\n doctypeNode.publicId = publicId;\n doctypeNode.systemId = systemId;\n }\n else {\n const node = {\n nodeName: '#documentType',\n name,\n publicId,\n systemId,\n parentNode: null,\n };\n defaultTreeAdapter.appendChild(document, node);\n }\n },\n setDocumentMode(document, mode) {\n document.mode = mode;\n },\n getDocumentMode(document) {\n return document.mode;\n },\n detachNode(node) {\n if (node.parentNode) {\n const idx = node.parentNode.childNodes.indexOf(node);\n node.parentNode.childNodes.splice(idx, 1);\n node.parentNode = null;\n }\n },\n insertText(parentNode, text) {\n if (parentNode.childNodes.length > 0) {\n const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1];\n if (defaultTreeAdapter.isTextNode(prevNode)) {\n prevNode.value += text;\n return;\n }\n }\n defaultTreeAdapter.appendChild(parentNode, defaultTreeAdapter.createTextNode(text));\n },\n insertTextBefore(parentNode, text, referenceNode) {\n const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];\n if (prevNode && defaultTreeAdapter.isTextNode(prevNode)) {\n prevNode.value += text;\n }\n else {\n defaultTreeAdapter.insertBefore(parentNode, defaultTreeAdapter.createTextNode(text), referenceNode);\n }\n },\n adoptAttributes(recipient, attrs) {\n const recipientAttrsMap = new Set(recipient.attrs.map((attr) => attr.name));\n for (let j = 0; j < attrs.length; j++) {\n if (!recipientAttrsMap.has(attrs[j].name)) {\n recipient.attrs.push(attrs[j]);\n }\n }\n },\n //Tree traversing\n getFirstChild(node) {\n return node.childNodes[0];\n },\n getChildNodes(node) {\n return node.childNodes;\n },\n getParentNode(node) {\n return node.parentNode;\n },\n getAttrList(element) {\n return element.attrs;\n },\n //Node data\n getTagName(element) {\n return element.tagName;\n },\n getNamespaceURI(element) {\n return element.namespaceURI;\n },\n getTextNodeContent(textNode) {\n return textNode.value;\n },\n getCommentNodeContent(commentNode) {\n return commentNode.data;\n },\n getDocumentTypeNodeName(doctypeNode) {\n return doctypeNode.name;\n },\n getDocumentTypeNodePublicId(doctypeNode) {\n return doctypeNode.publicId;\n },\n getDocumentTypeNodeSystemId(doctypeNode) {\n return doctypeNode.systemId;\n },\n //Node types\n isTextNode(node) {\n return node.nodeName === '#text';\n },\n isCommentNode(node) {\n return node.nodeName === '#comment';\n },\n isDocumentTypeNode(node) {\n return node.nodeName === '#documentType';\n },\n isElementNode(node) {\n return Object.prototype.hasOwnProperty.call(node, 'tagName');\n },\n // Source code location\n setNodeSourceCodeLocation(node, location) {\n node.sourceCodeLocation = location;\n },\n getNodeSourceCodeLocation(node) {\n return node.sourceCodeLocation;\n },\n updateNodeSourceCodeLocation(node, endLocation) {\n node.sourceCodeLocation = { ...node.sourceCodeLocation, ...endLocation };\n },\n};\n",
59
- "import { DOCUMENT_MODE } from './html.js';\n//Const\nconst VALID_DOCTYPE_NAME = 'html';\nconst VALID_SYSTEM_ID = 'about:legacy-compat';\nconst QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd';\nconst QUIRKS_MODE_PUBLIC_ID_PREFIXES = [\n '+//silmaril//dtd html pro v0r11 19970101//',\n '-//as//dtd html 3.0 aswedit + extensions//',\n '-//advasoft ltd//dtd html 3.0 aswedit + extensions//',\n '-//ietf//dtd html 2.0 level 1//',\n '-//ietf//dtd html 2.0 level 2//',\n '-//ietf//dtd html 2.0 strict level 1//',\n '-//ietf//dtd html 2.0 strict level 2//',\n '-//ietf//dtd html 2.0 strict//',\n '-//ietf//dtd html 2.0//',\n '-//ietf//dtd html 2.1e//',\n '-//ietf//dtd html 3.0//',\n '-//ietf//dtd html 3.2 final//',\n '-//ietf//dtd html 3.2//',\n '-//ietf//dtd html 3//',\n '-//ietf//dtd html level 0//',\n '-//ietf//dtd html level 1//',\n '-//ietf//dtd html level 2//',\n '-//ietf//dtd html level 3//',\n '-//ietf//dtd html strict level 0//',\n '-//ietf//dtd html strict level 1//',\n '-//ietf//dtd html strict level 2//',\n '-//ietf//dtd html strict level 3//',\n '-//ietf//dtd html strict//',\n '-//ietf//dtd html//',\n '-//metrius//dtd metrius presentational//',\n '-//microsoft//dtd internet explorer 2.0 html strict//',\n '-//microsoft//dtd internet explorer 2.0 html//',\n '-//microsoft//dtd internet explorer 2.0 tables//',\n '-//microsoft//dtd internet explorer 3.0 html strict//',\n '-//microsoft//dtd internet explorer 3.0 html//',\n '-//microsoft//dtd internet explorer 3.0 tables//',\n '-//netscape comm. corp.//dtd html//',\n '-//netscape comm. corp.//dtd strict html//',\n \"-//o'reilly and associates//dtd html 2.0//\",\n \"-//o'reilly and associates//dtd html extended 1.0//\",\n \"-//o'reilly and associates//dtd html extended relaxed 1.0//\",\n '-//sq//dtd html 2.0 hotmetal + extensions//',\n '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//',\n '-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//',\n '-//spyglass//dtd html 2.0 extended//',\n '-//sun microsystems corp.//dtd hotjava html//',\n '-//sun microsystems corp.//dtd hotjava strict html//',\n '-//w3c//dtd html 3 1995-03-24//',\n '-//w3c//dtd html 3.2 draft//',\n '-//w3c//dtd html 3.2 final//',\n '-//w3c//dtd html 3.2//',\n '-//w3c//dtd html 3.2s draft//',\n '-//w3c//dtd html 4.0 frameset//',\n '-//w3c//dtd html 4.0 transitional//',\n '-//w3c//dtd html experimental 19960712//',\n '-//w3c//dtd html experimental 970421//',\n '-//w3c//dtd w3 html//',\n '-//w3o//dtd w3 html 3.0//',\n '-//webtechs//dtd mozilla html 2.0//',\n '-//webtechs//dtd mozilla html//',\n];\nconst QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n ...QUIRKS_MODE_PUBLIC_ID_PREFIXES,\n '-//w3c//dtd html 4.01 frameset//',\n '-//w3c//dtd html 4.01 transitional//',\n];\nconst QUIRKS_MODE_PUBLIC_IDS = new Set([\n '-//w3o//dtd w3 html strict 3.0//en//',\n '-/w3c/dtd html 4.0 transitional/en',\n 'html',\n]);\nconst LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//w3c//dtd xhtml 1.0 frameset//', '-//w3c//dtd xhtml 1.0 transitional//'];\nconst LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n ...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES,\n '-//w3c//dtd html 4.01 frameset//',\n '-//w3c//dtd html 4.01 transitional//',\n];\n//Utils\nfunction hasPrefix(publicId, prefixes) {\n return prefixes.some((prefix) => publicId.startsWith(prefix));\n}\n//API\nexport function isConforming(token) {\n return (token.name === VALID_DOCTYPE_NAME &&\n token.publicId === null &&\n (token.systemId === null || token.systemId === VALID_SYSTEM_ID));\n}\nexport function getDocumentMode(token) {\n if (token.name !== VALID_DOCTYPE_NAME) {\n return DOCUMENT_MODE.QUIRKS;\n }\n const { systemId } = token;\n if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {\n return DOCUMENT_MODE.QUIRKS;\n }\n let { publicId } = token;\n if (publicId !== null) {\n publicId = publicId.toLowerCase();\n if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) {\n return DOCUMENT_MODE.QUIRKS;\n }\n let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;\n if (hasPrefix(publicId, prefixes)) {\n return DOCUMENT_MODE.QUIRKS;\n }\n prefixes =\n systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;\n if (hasPrefix(publicId, prefixes)) {\n return DOCUMENT_MODE.LIMITED_QUIRKS;\n }\n }\n return DOCUMENT_MODE.NO_QUIRKS;\n}\n",
60
- "import { TAG_ID as $, NS, ATTRS, getTagID } from './html.js';\n//MIME types\nconst MIME_TYPES = {\n TEXT_HTML: 'text/html',\n APPLICATION_XML: 'application/xhtml+xml',\n};\n//Attributes\nconst DEFINITION_URL_ATTR = 'definitionurl';\nconst ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL';\nconst SVG_ATTRS_ADJUSTMENT_MAP = new Map([\n 'attributeName',\n 'attributeType',\n 'baseFrequency',\n 'baseProfile',\n 'calcMode',\n 'clipPathUnits',\n 'diffuseConstant',\n 'edgeMode',\n 'filterUnits',\n 'glyphRef',\n 'gradientTransform',\n 'gradientUnits',\n 'kernelMatrix',\n 'kernelUnitLength',\n 'keyPoints',\n 'keySplines',\n 'keyTimes',\n 'lengthAdjust',\n 'limitingConeAngle',\n 'markerHeight',\n 'markerUnits',\n 'markerWidth',\n 'maskContentUnits',\n 'maskUnits',\n 'numOctaves',\n 'pathLength',\n 'patternContentUnits',\n 'patternTransform',\n 'patternUnits',\n 'pointsAtX',\n 'pointsAtY',\n 'pointsAtZ',\n 'preserveAlpha',\n 'preserveAspectRatio',\n 'primitiveUnits',\n 'refX',\n 'refY',\n 'repeatCount',\n 'repeatDur',\n 'requiredExtensions',\n 'requiredFeatures',\n 'specularConstant',\n 'specularExponent',\n 'spreadMethod',\n 'startOffset',\n 'stdDeviation',\n 'stitchTiles',\n 'surfaceScale',\n 'systemLanguage',\n 'tableValues',\n 'targetX',\n 'targetY',\n 'textLength',\n 'viewBox',\n 'viewTarget',\n 'xChannelSelector',\n 'yChannelSelector',\n 'zoomAndPan',\n].map((attr) => [attr.toLowerCase(), attr]));\nconst XML_ATTRS_ADJUSTMENT_MAP = new Map([\n ['xlink:actuate', { prefix: 'xlink', name: 'actuate', namespace: NS.XLINK }],\n ['xlink:arcrole', { prefix: 'xlink', name: 'arcrole', namespace: NS.XLINK }],\n ['xlink:href', { prefix: 'xlink', name: 'href', namespace: NS.XLINK }],\n ['xlink:role', { prefix: 'xlink', name: 'role', namespace: NS.XLINK }],\n ['xlink:show', { prefix: 'xlink', name: 'show', namespace: NS.XLINK }],\n ['xlink:title', { prefix: 'xlink', name: 'title', namespace: NS.XLINK }],\n ['xlink:type', { prefix: 'xlink', name: 'type', namespace: NS.XLINK }],\n ['xml:lang', { prefix: 'xml', name: 'lang', namespace: NS.XML }],\n ['xml:space', { prefix: 'xml', name: 'space', namespace: NS.XML }],\n ['xmlns', { prefix: '', name: 'xmlns', namespace: NS.XMLNS }],\n ['xmlns:xlink', { prefix: 'xmlns', name: 'xlink', namespace: NS.XMLNS }],\n]);\n//SVG tag names adjustment map\nexport const SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'clipPath',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'foreignObject',\n 'glyphRef',\n 'linearGradient',\n 'radialGradient',\n 'textPath',\n].map((tn) => [tn.toLowerCase(), tn]));\n//Tags that causes exit from foreign content\nconst EXITS_FOREIGN_CONTENT = new Set([\n $.B,\n $.BIG,\n $.BLOCKQUOTE,\n $.BODY,\n $.BR,\n $.CENTER,\n $.CODE,\n $.DD,\n $.DIV,\n $.DL,\n $.DT,\n $.EM,\n $.EMBED,\n $.H1,\n $.H2,\n $.H3,\n $.H4,\n $.H5,\n $.H6,\n $.HEAD,\n $.HR,\n $.I,\n $.IMG,\n $.LI,\n $.LISTING,\n $.MENU,\n $.META,\n $.NOBR,\n $.OL,\n $.P,\n $.PRE,\n $.RUBY,\n $.S,\n $.SMALL,\n $.SPAN,\n $.STRONG,\n $.STRIKE,\n $.SUB,\n $.SUP,\n $.TABLE,\n $.TT,\n $.U,\n $.UL,\n $.VAR,\n]);\n//Check exit from foreign content\nexport function causesExit(startTagToken) {\n const tn = startTagToken.tagID;\n const isFontWithAttrs = tn === $.FONT &&\n startTagToken.attrs.some(({ name }) => name === ATTRS.COLOR || name === ATTRS.SIZE || name === ATTRS.FACE);\n return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn);\n}\n//Token adjustments\nexport function adjustTokenMathMLAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n if (token.attrs[i].name === DEFINITION_URL_ATTR) {\n token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR;\n break;\n }\n }\n}\nexport function adjustTokenSVGAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n if (adjustedAttrName != null) {\n token.attrs[i].name = adjustedAttrName;\n }\n }\n}\nexport function adjustTokenXMLAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n if (adjustedAttrEntry) {\n token.attrs[i].prefix = adjustedAttrEntry.prefix;\n token.attrs[i].name = adjustedAttrEntry.name;\n token.attrs[i].namespace = adjustedAttrEntry.namespace;\n }\n }\n}\nexport function adjustTokenSVGTagName(token) {\n const adjustedTagName = SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName);\n if (adjustedTagName != null) {\n token.tagName = adjustedTagName;\n token.tagID = getTagID(token.tagName);\n }\n}\n//Integration points\nfunction isMathMLTextIntegrationPoint(tn, ns) {\n return ns === NS.MATHML && (tn === $.MI || tn === $.MO || tn === $.MN || tn === $.MS || tn === $.MTEXT);\n}\nfunction isHtmlIntegrationPoint(tn, ns, attrs) {\n if (ns === NS.MATHML && tn === $.ANNOTATION_XML) {\n for (let i = 0; i < attrs.length; i++) {\n if (attrs[i].name === ATTRS.ENCODING) {\n const value = attrs[i].value.toLowerCase();\n return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;\n }\n }\n }\n return ns === NS.SVG && (tn === $.FOREIGN_OBJECT || tn === $.DESC || tn === $.TITLE);\n}\nexport function isIntegrationPoint(tn, ns, attrs, foreignNS) {\n return (((!foreignNS || foreignNS === NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) ||\n ((!foreignNS || foreignNS === NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns)));\n}\n",
61
- "import { Tokenizer, TokenizerMode } from '../tokenizer/index.js';\nimport { OpenElementStack } from './open-element-stack.js';\nimport { FormattingElementList, EntryType } from './formatting-element-list.js';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\nimport * as doctype from '../common/doctype.js';\nimport * as foreignContent from '../common/foreign-content.js';\nimport { ERR } from '../common/error-codes.js';\nimport * as unicode from '../common/unicode.js';\nimport { TAG_ID as $, TAG_NAMES as TN, NS, ATTRS, SPECIAL_ELEMENTS, DOCUMENT_MODE, NUMBERED_HEADERS, getTagID, } from '../common/html.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\n//Misc constants\nconst HIDDEN_INPUT_TYPE = 'hidden';\n//Adoption agency loops iteration count\nconst AA_OUTER_LOOP_ITER = 8;\nconst AA_INNER_LOOP_ITER = 3;\n//Insertion modes\nvar InsertionMode;\n(function (InsertionMode) {\n InsertionMode[InsertionMode[\"INITIAL\"] = 0] = \"INITIAL\";\n InsertionMode[InsertionMode[\"BEFORE_HTML\"] = 1] = \"BEFORE_HTML\";\n InsertionMode[InsertionMode[\"BEFORE_HEAD\"] = 2] = \"BEFORE_HEAD\";\n InsertionMode[InsertionMode[\"IN_HEAD\"] = 3] = \"IN_HEAD\";\n InsertionMode[InsertionMode[\"IN_HEAD_NO_SCRIPT\"] = 4] = \"IN_HEAD_NO_SCRIPT\";\n InsertionMode[InsertionMode[\"AFTER_HEAD\"] = 5] = \"AFTER_HEAD\";\n InsertionMode[InsertionMode[\"IN_BODY\"] = 6] = \"IN_BODY\";\n InsertionMode[InsertionMode[\"TEXT\"] = 7] = \"TEXT\";\n InsertionMode[InsertionMode[\"IN_TABLE\"] = 8] = \"IN_TABLE\";\n InsertionMode[InsertionMode[\"IN_TABLE_TEXT\"] = 9] = \"IN_TABLE_TEXT\";\n InsertionMode[InsertionMode[\"IN_CAPTION\"] = 10] = \"IN_CAPTION\";\n InsertionMode[InsertionMode[\"IN_COLUMN_GROUP\"] = 11] = \"IN_COLUMN_GROUP\";\n InsertionMode[InsertionMode[\"IN_TABLE_BODY\"] = 12] = \"IN_TABLE_BODY\";\n InsertionMode[InsertionMode[\"IN_ROW\"] = 13] = \"IN_ROW\";\n InsertionMode[InsertionMode[\"IN_CELL\"] = 14] = \"IN_CELL\";\n InsertionMode[InsertionMode[\"IN_SELECT\"] = 15] = \"IN_SELECT\";\n InsertionMode[InsertionMode[\"IN_SELECT_IN_TABLE\"] = 16] = \"IN_SELECT_IN_TABLE\";\n InsertionMode[InsertionMode[\"IN_TEMPLATE\"] = 17] = \"IN_TEMPLATE\";\n InsertionMode[InsertionMode[\"AFTER_BODY\"] = 18] = \"AFTER_BODY\";\n InsertionMode[InsertionMode[\"IN_FRAMESET\"] = 19] = \"IN_FRAMESET\";\n InsertionMode[InsertionMode[\"AFTER_FRAMESET\"] = 20] = \"AFTER_FRAMESET\";\n InsertionMode[InsertionMode[\"AFTER_AFTER_BODY\"] = 21] = \"AFTER_AFTER_BODY\";\n InsertionMode[InsertionMode[\"AFTER_AFTER_FRAMESET\"] = 22] = \"AFTER_AFTER_FRAMESET\";\n})(InsertionMode || (InsertionMode = {}));\nconst BASE_LOC = {\n startLine: -1,\n startCol: -1,\n startOffset: -1,\n endLine: -1,\n endCol: -1,\n endOffset: -1,\n};\nconst TABLE_STRUCTURE_TAGS = new Set([$.TABLE, $.TBODY, $.TFOOT, $.THEAD, $.TR]);\nconst defaultParserOptions = {\n scriptingEnabled: true,\n sourceCodeLocationInfo: false,\n treeAdapter: defaultTreeAdapter,\n onParseError: null,\n};\n//Parser\nexport class Parser {\n constructor(options, document, \n /** @internal */\n fragmentContext = null, \n /** @internal */\n scriptHandler = null) {\n this.fragmentContext = fragmentContext;\n this.scriptHandler = scriptHandler;\n this.currentToken = null;\n this.stopped = false;\n /** @internal */\n this.insertionMode = InsertionMode.INITIAL;\n /** @internal */\n this.originalInsertionMode = InsertionMode.INITIAL;\n /** @internal */\n this.headElement = null;\n /** @internal */\n this.formElement = null;\n /** Indicates that the current node is not an element in the HTML namespace */\n this.currentNotInHTML = false;\n /**\n * The template insertion mode stack is maintained from the left.\n * Ie. the topmost element will always have index 0.\n *\n * @internal\n */\n this.tmplInsertionModeStack = [];\n /** @internal */\n this.pendingCharacterTokens = [];\n /** @internal */\n this.hasNonWhitespacePendingCharacterToken = false;\n /** @internal */\n this.framesetOk = true;\n /** @internal */\n this.skipNextNewLine = false;\n /** @internal */\n this.fosterParentingEnabled = false;\n this.options = {\n ...defaultParserOptions,\n ...options,\n };\n this.treeAdapter = this.options.treeAdapter;\n this.onParseError = this.options.onParseError;\n // Always enable location info if we report parse errors.\n if (this.onParseError) {\n this.options.sourceCodeLocationInfo = true;\n }\n this.document = document !== null && document !== void 0 ? document : this.treeAdapter.createDocument();\n this.tokenizer = new Tokenizer(this.options, this);\n this.activeFormattingElements = new FormattingElementList(this.treeAdapter);\n this.fragmentContextID = fragmentContext ? getTagID(this.treeAdapter.getTagName(fragmentContext)) : $.UNKNOWN;\n this._setContextModes(fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : this.document, this.fragmentContextID);\n this.openElements = new OpenElementStack(this.document, this.treeAdapter, this);\n }\n // API\n static parse(html, options) {\n const parser = new this(options);\n parser.tokenizer.write(html, true);\n return parser.document;\n }\n static getFragmentParser(fragmentContext, options) {\n const opts = {\n ...defaultParserOptions,\n ...options,\n };\n //NOTE: use a <template> element as the fragment context if no context element was provided,\n //so we will parse in a \"forgiving\" manner\n fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : (fragmentContext = opts.treeAdapter.createElement(TN.TEMPLATE, NS.HTML, []));\n //NOTE: create a fake element which will be used as the `document` for fragment parsing.\n //This is important for jsdom, where a new `document` cannot be created. This led to\n //fragment parsing messing with the main `document`.\n const documentMock = opts.treeAdapter.createElement('documentmock', NS.HTML, []);\n const parser = new this(opts, documentMock, fragmentContext);\n if (parser.fragmentContextID === $.TEMPLATE) {\n parser.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n }\n parser._initTokenizerForFragmentParsing();\n parser._insertFakeRootElement();\n parser._resetInsertionMode();\n parser._findFormInFragmentContext();\n return parser;\n }\n getFragment() {\n const rootElement = this.treeAdapter.getFirstChild(this.document);\n const fragment = this.treeAdapter.createDocumentFragment();\n this._adoptNodes(rootElement, fragment);\n return fragment;\n }\n //Errors\n /** @internal */\n _err(token, code, beforeToken) {\n var _a;\n if (!this.onParseError)\n return;\n const loc = (_a = token.location) !== null && _a !== void 0 ? _a : BASE_LOC;\n const err = {\n code,\n startLine: loc.startLine,\n startCol: loc.startCol,\n startOffset: loc.startOffset,\n endLine: beforeToken ? loc.startLine : loc.endLine,\n endCol: beforeToken ? loc.startCol : loc.endCol,\n endOffset: beforeToken ? loc.startOffset : loc.endOffset,\n };\n this.onParseError(err);\n }\n //Stack events\n /** @internal */\n onItemPush(node, tid, isTop) {\n var _a, _b;\n (_b = (_a = this.treeAdapter).onItemPush) === null || _b === void 0 ? void 0 : _b.call(_a, node);\n if (isTop && this.openElements.stackTop > 0)\n this._setContextModes(node, tid);\n }\n /** @internal */\n onItemPop(node, isTop) {\n var _a, _b;\n if (this.options.sourceCodeLocationInfo) {\n this._setEndLocation(node, this.currentToken);\n }\n (_b = (_a = this.treeAdapter).onItemPop) === null || _b === void 0 ? void 0 : _b.call(_a, node, this.openElements.current);\n if (isTop) {\n let current;\n let currentTagId;\n if (this.openElements.stackTop === 0 && this.fragmentContext) {\n current = this.fragmentContext;\n currentTagId = this.fragmentContextID;\n }\n else {\n ({ current, currentTagId } = this.openElements);\n }\n this._setContextModes(current, currentTagId);\n }\n }\n _setContextModes(current, tid) {\n const isHTML = current === this.document || (current && this.treeAdapter.getNamespaceURI(current) === NS.HTML);\n this.currentNotInHTML = !isHTML;\n this.tokenizer.inForeignNode =\n !isHTML && current !== undefined && tid !== undefined && !this._isIntegrationPoint(tid, current);\n }\n /** @protected */\n _switchToTextParsing(currentToken, nextTokenizerState) {\n this._insertElement(currentToken, NS.HTML);\n this.tokenizer.state = nextTokenizerState;\n this.originalInsertionMode = this.insertionMode;\n this.insertionMode = InsertionMode.TEXT;\n }\n switchToPlaintextParsing() {\n this.insertionMode = InsertionMode.TEXT;\n this.originalInsertionMode = InsertionMode.IN_BODY;\n this.tokenizer.state = TokenizerMode.PLAINTEXT;\n }\n //Fragment parsing\n /** @protected */\n _getAdjustedCurrentElement() {\n return this.openElements.stackTop === 0 && this.fragmentContext\n ? this.fragmentContext\n : this.openElements.current;\n }\n /** @protected */\n _findFormInFragmentContext() {\n let node = this.fragmentContext;\n while (node) {\n if (this.treeAdapter.getTagName(node) === TN.FORM) {\n this.formElement = node;\n break;\n }\n node = this.treeAdapter.getParentNode(node);\n }\n }\n _initTokenizerForFragmentParsing() {\n if (!this.fragmentContext || this.treeAdapter.getNamespaceURI(this.fragmentContext) !== NS.HTML) {\n return;\n }\n switch (this.fragmentContextID) {\n case $.TITLE:\n case $.TEXTAREA: {\n this.tokenizer.state = TokenizerMode.RCDATA;\n break;\n }\n case $.STYLE:\n case $.XMP:\n case $.IFRAME:\n case $.NOEMBED:\n case $.NOFRAMES:\n case $.NOSCRIPT: {\n this.tokenizer.state = TokenizerMode.RAWTEXT;\n break;\n }\n case $.SCRIPT: {\n this.tokenizer.state = TokenizerMode.SCRIPT_DATA;\n break;\n }\n case $.PLAINTEXT: {\n this.tokenizer.state = TokenizerMode.PLAINTEXT;\n break;\n }\n default:\n // Do nothing\n }\n }\n //Tree mutation\n /** @protected */\n _setDocumentType(token) {\n const name = token.name || '';\n const publicId = token.publicId || '';\n const systemId = token.systemId || '';\n this.treeAdapter.setDocumentType(this.document, name, publicId, systemId);\n if (token.location) {\n const documentChildren = this.treeAdapter.getChildNodes(this.document);\n const docTypeNode = documentChildren.find((node) => this.treeAdapter.isDocumentTypeNode(node));\n if (docTypeNode) {\n this.treeAdapter.setNodeSourceCodeLocation(docTypeNode, token.location);\n }\n }\n }\n /** @protected */\n _attachElementToTree(element, location) {\n if (this.options.sourceCodeLocationInfo) {\n const loc = location && {\n ...location,\n startTag: location,\n };\n this.treeAdapter.setNodeSourceCodeLocation(element, loc);\n }\n if (this._shouldFosterParentOnInsertion()) {\n this._fosterParentElement(element);\n }\n else {\n const parent = this.openElements.currentTmplContentOrNode;\n this.treeAdapter.appendChild(parent !== null && parent !== void 0 ? parent : this.document, element);\n }\n }\n /**\n * For self-closing tags. Add an element to the tree, but skip adding it\n * to the stack.\n */\n /** @protected */\n _appendElement(token, namespaceURI) {\n const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n this._attachElementToTree(element, token.location);\n }\n /** @protected */\n _insertElement(token, namespaceURI) {\n const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n this._attachElementToTree(element, token.location);\n this.openElements.push(element, token.tagID);\n }\n /** @protected */\n _insertFakeElement(tagName, tagID) {\n const element = this.treeAdapter.createElement(tagName, NS.HTML, []);\n this._attachElementToTree(element, null);\n this.openElements.push(element, tagID);\n }\n /** @protected */\n _insertTemplate(token) {\n const tmpl = this.treeAdapter.createElement(token.tagName, NS.HTML, token.attrs);\n const content = this.treeAdapter.createDocumentFragment();\n this.treeAdapter.setTemplateContent(tmpl, content);\n this._attachElementToTree(tmpl, token.location);\n this.openElements.push(tmpl, token.tagID);\n if (this.options.sourceCodeLocationInfo)\n this.treeAdapter.setNodeSourceCodeLocation(content, null);\n }\n /** @protected */\n _insertFakeRootElement() {\n const element = this.treeAdapter.createElement(TN.HTML, NS.HTML, []);\n if (this.options.sourceCodeLocationInfo)\n this.treeAdapter.setNodeSourceCodeLocation(element, null);\n this.treeAdapter.appendChild(this.openElements.current, element);\n this.openElements.push(element, $.HTML);\n }\n /** @protected */\n _appendCommentNode(token, parent) {\n const commentNode = this.treeAdapter.createCommentNode(token.data);\n this.treeAdapter.appendChild(parent, commentNode);\n if (this.options.sourceCodeLocationInfo) {\n this.treeAdapter.setNodeSourceCodeLocation(commentNode, token.location);\n }\n }\n /** @protected */\n _insertCharacters(token) {\n let parent;\n let beforeElement;\n if (this._shouldFosterParentOnInsertion()) {\n ({ parent, beforeElement } = this._findFosterParentingLocation());\n if (beforeElement) {\n this.treeAdapter.insertTextBefore(parent, token.chars, beforeElement);\n }\n else {\n this.treeAdapter.insertText(parent, token.chars);\n }\n }\n else {\n parent = this.openElements.currentTmplContentOrNode;\n this.treeAdapter.insertText(parent, token.chars);\n }\n if (!token.location)\n return;\n const siblings = this.treeAdapter.getChildNodes(parent);\n const textNodeIdx = beforeElement ? siblings.lastIndexOf(beforeElement) : siblings.length;\n const textNode = siblings[textNodeIdx - 1];\n //NOTE: if we have a location assigned by another token, then just update the end position\n const tnLoc = this.treeAdapter.getNodeSourceCodeLocation(textNode);\n if (tnLoc) {\n const { endLine, endCol, endOffset } = token.location;\n this.treeAdapter.updateNodeSourceCodeLocation(textNode, { endLine, endCol, endOffset });\n }\n else if (this.options.sourceCodeLocationInfo) {\n this.treeAdapter.setNodeSourceCodeLocation(textNode, token.location);\n }\n }\n /** @protected */\n _adoptNodes(donor, recipient) {\n for (let child = this.treeAdapter.getFirstChild(donor); child; child = this.treeAdapter.getFirstChild(donor)) {\n this.treeAdapter.detachNode(child);\n this.treeAdapter.appendChild(recipient, child);\n }\n }\n /** @protected */\n _setEndLocation(element, closingToken) {\n if (this.treeAdapter.getNodeSourceCodeLocation(element) && closingToken.location) {\n const ctLoc = closingToken.location;\n const tn = this.treeAdapter.getTagName(element);\n const endLoc = \n // NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing\n // tag and for cases like <td> <p> </td> - 'p' closes without a closing tag.\n closingToken.type === TokenType.END_TAG && tn === closingToken.tagName\n ? {\n endTag: { ...ctLoc },\n endLine: ctLoc.endLine,\n endCol: ctLoc.endCol,\n endOffset: ctLoc.endOffset,\n }\n : {\n endLine: ctLoc.startLine,\n endCol: ctLoc.startCol,\n endOffset: ctLoc.startOffset,\n };\n this.treeAdapter.updateNodeSourceCodeLocation(element, endLoc);\n }\n }\n //Token processing\n shouldProcessStartTagTokenInForeignContent(token) {\n // Check that neither current === document, or ns === NS.HTML\n if (!this.currentNotInHTML)\n return false;\n let current;\n let currentTagId;\n if (this.openElements.stackTop === 0 && this.fragmentContext) {\n current = this.fragmentContext;\n currentTagId = this.fragmentContextID;\n }\n else {\n ({ current, currentTagId } = this.openElements);\n }\n if (token.tagID === $.SVG &&\n this.treeAdapter.getTagName(current) === TN.ANNOTATION_XML &&\n this.treeAdapter.getNamespaceURI(current) === NS.MATHML) {\n return false;\n }\n return (\n // Check that `current` is not an integration point for HTML or MathML elements.\n this.tokenizer.inForeignNode ||\n // If it _is_ an integration point, then we might have to check that it is not an HTML\n // integration point.\n ((token.tagID === $.MGLYPH || token.tagID === $.MALIGNMARK) &&\n currentTagId !== undefined &&\n !this._isIntegrationPoint(currentTagId, current, NS.HTML)));\n }\n /** @protected */\n _processToken(token) {\n switch (token.type) {\n case TokenType.CHARACTER: {\n this.onCharacter(token);\n break;\n }\n case TokenType.NULL_CHARACTER: {\n this.onNullCharacter(token);\n break;\n }\n case TokenType.COMMENT: {\n this.onComment(token);\n break;\n }\n case TokenType.DOCTYPE: {\n this.onDoctype(token);\n break;\n }\n case TokenType.START_TAG: {\n this._processStartTag(token);\n break;\n }\n case TokenType.END_TAG: {\n this.onEndTag(token);\n break;\n }\n case TokenType.EOF: {\n this.onEof(token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n this.onWhitespaceCharacter(token);\n break;\n }\n }\n }\n //Integration points\n /** @protected */\n _isIntegrationPoint(tid, element, foreignNS) {\n const ns = this.treeAdapter.getNamespaceURI(element);\n const attrs = this.treeAdapter.getAttrList(element);\n return foreignContent.isIntegrationPoint(tid, ns, attrs, foreignNS);\n }\n //Active formatting elements reconstruction\n /** @protected */\n _reconstructActiveFormattingElements() {\n const listLength = this.activeFormattingElements.entries.length;\n if (listLength) {\n const endIndex = this.activeFormattingElements.entries.findIndex((entry) => entry.type === EntryType.Marker || this.openElements.contains(entry.element));\n const unopenIdx = endIndex === -1 ? listLength - 1 : endIndex - 1;\n for (let i = unopenIdx; i >= 0; i--) {\n const entry = this.activeFormattingElements.entries[i];\n this._insertElement(entry.token, this.treeAdapter.getNamespaceURI(entry.element));\n entry.element = this.openElements.current;\n }\n }\n }\n //Close elements\n /** @protected */\n _closeTableCell() {\n this.openElements.generateImpliedEndTags();\n this.openElements.popUntilTableCellPopped();\n this.activeFormattingElements.clearToLastMarker();\n this.insertionMode = InsertionMode.IN_ROW;\n }\n /** @protected */\n _closePElement() {\n this.openElements.generateImpliedEndTagsWithExclusion($.P);\n this.openElements.popUntilTagNamePopped($.P);\n }\n //Insertion modes\n /** @protected */\n _resetInsertionMode() {\n for (let i = this.openElements.stackTop; i >= 0; i--) {\n //Insertion mode reset map\n switch (i === 0 && this.fragmentContext ? this.fragmentContextID : this.openElements.tagIDs[i]) {\n case $.TR: {\n this.insertionMode = InsertionMode.IN_ROW;\n return;\n }\n case $.TBODY:\n case $.THEAD:\n case $.TFOOT: {\n this.insertionMode = InsertionMode.IN_TABLE_BODY;\n return;\n }\n case $.CAPTION: {\n this.insertionMode = InsertionMode.IN_CAPTION;\n return;\n }\n case $.COLGROUP: {\n this.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n return;\n }\n case $.TABLE: {\n this.insertionMode = InsertionMode.IN_TABLE;\n return;\n }\n case $.BODY: {\n this.insertionMode = InsertionMode.IN_BODY;\n return;\n }\n case $.FRAMESET: {\n this.insertionMode = InsertionMode.IN_FRAMESET;\n return;\n }\n case $.SELECT: {\n this._resetInsertionModeForSelect(i);\n return;\n }\n case $.TEMPLATE: {\n this.insertionMode = this.tmplInsertionModeStack[0];\n return;\n }\n case $.HTML: {\n this.insertionMode = this.headElement ? InsertionMode.AFTER_HEAD : InsertionMode.BEFORE_HEAD;\n return;\n }\n case $.TD:\n case $.TH: {\n if (i > 0) {\n this.insertionMode = InsertionMode.IN_CELL;\n return;\n }\n break;\n }\n case $.HEAD: {\n if (i > 0) {\n this.insertionMode = InsertionMode.IN_HEAD;\n return;\n }\n break;\n }\n }\n }\n this.insertionMode = InsertionMode.IN_BODY;\n }\n /** @protected */\n _resetInsertionModeForSelect(selectIdx) {\n if (selectIdx > 0) {\n for (let i = selectIdx - 1; i > 0; i--) {\n const tn = this.openElements.tagIDs[i];\n if (tn === $.TEMPLATE) {\n break;\n }\n else if (tn === $.TABLE) {\n this.insertionMode = InsertionMode.IN_SELECT_IN_TABLE;\n return;\n }\n }\n }\n this.insertionMode = InsertionMode.IN_SELECT;\n }\n //Foster parenting\n /** @protected */\n _isElementCausesFosterParenting(tn) {\n return TABLE_STRUCTURE_TAGS.has(tn);\n }\n /** @protected */\n _shouldFosterParentOnInsertion() {\n return (this.fosterParentingEnabled &&\n this.openElements.currentTagId !== undefined &&\n this._isElementCausesFosterParenting(this.openElements.currentTagId));\n }\n /** @protected */\n _findFosterParentingLocation() {\n for (let i = this.openElements.stackTop; i >= 0; i--) {\n const openElement = this.openElements.items[i];\n switch (this.openElements.tagIDs[i]) {\n case $.TEMPLATE: {\n if (this.treeAdapter.getNamespaceURI(openElement) === NS.HTML) {\n return { parent: this.treeAdapter.getTemplateContent(openElement), beforeElement: null };\n }\n break;\n }\n case $.TABLE: {\n const parent = this.treeAdapter.getParentNode(openElement);\n if (parent) {\n return { parent, beforeElement: openElement };\n }\n return { parent: this.openElements.items[i - 1], beforeElement: null };\n }\n default:\n // Do nothing\n }\n }\n return { parent: this.openElements.items[0], beforeElement: null };\n }\n /** @protected */\n _fosterParentElement(element) {\n const location = this._findFosterParentingLocation();\n if (location.beforeElement) {\n this.treeAdapter.insertBefore(location.parent, element, location.beforeElement);\n }\n else {\n this.treeAdapter.appendChild(location.parent, element);\n }\n }\n //Special elements\n /** @protected */\n _isSpecialElement(element, id) {\n const ns = this.treeAdapter.getNamespaceURI(element);\n return SPECIAL_ELEMENTS[ns].has(id);\n }\n /** @internal */\n onCharacter(token) {\n this.skipNextNewLine = false;\n if (this.tokenizer.inForeignNode) {\n characterInForeignContent(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_TEMPLATE: {\n characterInBody(this, token);\n break;\n }\n case InsertionMode.TEXT:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n characterInTableText(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n tokenInColumnGroup(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n tokenAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onNullCharacter(token) {\n this.skipNextNewLine = false;\n if (this.tokenizer.inForeignNode) {\n nullCharacterInForeignContent(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n tokenInColumnGroup(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n tokenAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onComment(token) {\n this.skipNextNewLine = false;\n if (this.currentNotInHTML) {\n appendComment(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL:\n case InsertionMode.BEFORE_HTML:\n case InsertionMode.BEFORE_HEAD:\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD:\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE:\n case InsertionMode.IN_TEMPLATE:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET: {\n appendComment(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n appendCommentToRootHtmlElement(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n appendCommentToDocument(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onDoctype(token) {\n this.skipNextNewLine = false;\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n doctypeInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD:\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD: {\n this._err(token, ERR.misplacedDoctype);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onStartTag(token) {\n this.skipNextNewLine = false;\n this.currentToken = token;\n this._processStartTag(token);\n if (token.selfClosing && !token.ackSelfClosing) {\n this._err(token, ERR.nonVoidHtmlElementStartTagWithTrailingSolidus);\n }\n }\n /**\n * Processes a given start tag.\n *\n * `onStartTag` checks if a self-closing tag was recognized. When a token\n * is moved inbetween multiple insertion modes, this check for self-closing\n * could lead to false positives. To avoid this, `_processStartTag` is used\n * for nested calls.\n *\n * @param token The token to process.\n * @protected\n */\n _processStartTag(token) {\n if (this.shouldProcessStartTagTokenInForeignContent(token)) {\n startTagInForeignContent(this, token);\n }\n else {\n this._startTagOutsideForeignContent(token);\n }\n }\n /** @protected */\n _startTagOutsideForeignContent(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n startTagBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n startTagBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n startTagInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n startTagInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n startTagAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY: {\n startTagInBody(this, token);\n break;\n }\n case InsertionMode.IN_TABLE: {\n startTagInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_CAPTION: {\n startTagInCaption(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n startTagInColumnGroup(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_BODY: {\n startTagInTableBody(this, token);\n break;\n }\n case InsertionMode.IN_ROW: {\n startTagInRow(this, token);\n break;\n }\n case InsertionMode.IN_CELL: {\n startTagInCell(this, token);\n break;\n }\n case InsertionMode.IN_SELECT: {\n startTagInSelect(this, token);\n break;\n }\n case InsertionMode.IN_SELECT_IN_TABLE: {\n startTagInSelectInTable(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n startTagInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n startTagAfterBody(this, token);\n break;\n }\n case InsertionMode.IN_FRAMESET: {\n startTagInFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_FRAMESET: {\n startTagAfterFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n startTagAfterAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n startTagAfterAfterFrameset(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onEndTag(token) {\n this.skipNextNewLine = false;\n this.currentToken = token;\n if (this.currentNotInHTML) {\n endTagInForeignContent(this, token);\n }\n else {\n this._endTagOutsideForeignContent(token);\n }\n }\n /** @protected */\n _endTagOutsideForeignContent(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n endTagBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n endTagBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n endTagInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n endTagInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n endTagAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY: {\n endTagInBody(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n endTagInText(this, token);\n break;\n }\n case InsertionMode.IN_TABLE: {\n endTagInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_CAPTION: {\n endTagInCaption(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n endTagInColumnGroup(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_BODY: {\n endTagInTableBody(this, token);\n break;\n }\n case InsertionMode.IN_ROW: {\n endTagInRow(this, token);\n break;\n }\n case InsertionMode.IN_CELL: {\n endTagInCell(this, token);\n break;\n }\n case InsertionMode.IN_SELECT: {\n endTagInSelect(this, token);\n break;\n }\n case InsertionMode.IN_SELECT_IN_TABLE: {\n endTagInSelectInTable(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n endTagInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n endTagAfterBody(this, token);\n break;\n }\n case InsertionMode.IN_FRAMESET: {\n endTagInFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_FRAMESET: {\n endTagAfterFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onEof(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE: {\n eofInBody(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n eofInText(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n eofInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET:\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n stopParsing(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onWhitespaceCharacter(token) {\n if (this.skipNextNewLine) {\n this.skipNextNewLine = false;\n if (token.chars.charCodeAt(0) === unicode.CODE_POINTS.LINE_FEED) {\n if (token.chars.length === 1) {\n return;\n }\n token.chars = token.chars.substr(1);\n }\n }\n if (this.tokenizer.inForeignNode) {\n this._insertCharacters(token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD:\n case InsertionMode.TEXT:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_TEMPLATE:\n case InsertionMode.AFTER_BODY:\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n whitespaceCharacterInBody(this, token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n whitespaceCharacterInTableText(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n}\n//Adoption agency algorithm\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#adoptionAgency)\n//------------------------------------------------------------------\n//Steps 5-8 of the algorithm\nfunction aaObtainFormattingElementEntry(p, token) {\n let formattingElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(token.tagName);\n if (formattingElementEntry) {\n if (!p.openElements.contains(formattingElementEntry.element)) {\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n formattingElementEntry = null;\n }\n else if (!p.openElements.hasInScope(token.tagID)) {\n formattingElementEntry = null;\n }\n }\n else {\n genericEndTagInBody(p, token);\n }\n return formattingElementEntry;\n}\n//Steps 9 and 10 of the algorithm\nfunction aaObtainFurthestBlock(p, formattingElementEntry) {\n let furthestBlock = null;\n let idx = p.openElements.stackTop;\n for (; idx >= 0; idx--) {\n const element = p.openElements.items[idx];\n if (element === formattingElementEntry.element) {\n break;\n }\n if (p._isSpecialElement(element, p.openElements.tagIDs[idx])) {\n furthestBlock = element;\n }\n }\n if (!furthestBlock) {\n p.openElements.shortenToLength(Math.max(idx, 0));\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n }\n return furthestBlock;\n}\n//Step 13 of the algorithm\nfunction aaInnerLoop(p, furthestBlock, formattingElement) {\n let lastElement = furthestBlock;\n let nextElement = p.openElements.getCommonAncestor(furthestBlock);\n for (let i = 0, element = nextElement; element !== formattingElement; i++, element = nextElement) {\n //NOTE: store the next element for the next loop iteration (it may be deleted from the stack by step 9.5)\n nextElement = p.openElements.getCommonAncestor(element);\n const elementEntry = p.activeFormattingElements.getElementEntry(element);\n const counterOverflow = elementEntry && i >= AA_INNER_LOOP_ITER;\n const shouldRemoveFromOpenElements = !elementEntry || counterOverflow;\n if (shouldRemoveFromOpenElements) {\n if (counterOverflow) {\n p.activeFormattingElements.removeEntry(elementEntry);\n }\n p.openElements.remove(element);\n }\n else {\n element = aaRecreateElementFromEntry(p, elementEntry);\n if (lastElement === furthestBlock) {\n p.activeFormattingElements.bookmark = elementEntry;\n }\n p.treeAdapter.detachNode(lastElement);\n p.treeAdapter.appendChild(element, lastElement);\n lastElement = element;\n }\n }\n return lastElement;\n}\n//Step 13.7 of the algorithm\nfunction aaRecreateElementFromEntry(p, elementEntry) {\n const ns = p.treeAdapter.getNamespaceURI(elementEntry.element);\n const newElement = p.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs);\n p.openElements.replace(elementEntry.element, newElement);\n elementEntry.element = newElement;\n return newElement;\n}\n//Step 14 of the algorithm\nfunction aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement) {\n const tn = p.treeAdapter.getTagName(commonAncestor);\n const tid = getTagID(tn);\n if (p._isElementCausesFosterParenting(tid)) {\n p._fosterParentElement(lastElement);\n }\n else {\n const ns = p.treeAdapter.getNamespaceURI(commonAncestor);\n if (tid === $.TEMPLATE && ns === NS.HTML) {\n commonAncestor = p.treeAdapter.getTemplateContent(commonAncestor);\n }\n p.treeAdapter.appendChild(commonAncestor, lastElement);\n }\n}\n//Steps 15-19 of the algorithm\nfunction aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry) {\n const ns = p.treeAdapter.getNamespaceURI(formattingElementEntry.element);\n const { token } = formattingElementEntry;\n const newElement = p.treeAdapter.createElement(token.tagName, ns, token.attrs);\n p._adoptNodes(furthestBlock, newElement);\n p.treeAdapter.appendChild(furthestBlock, newElement);\n p.activeFormattingElements.insertElementAfterBookmark(newElement, token);\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n p.openElements.remove(formattingElementEntry.element);\n p.openElements.insertAfter(furthestBlock, newElement, token.tagID);\n}\n//Algorithm entry point\nfunction callAdoptionAgency(p, token) {\n for (let i = 0; i < AA_OUTER_LOOP_ITER; i++) {\n const formattingElementEntry = aaObtainFormattingElementEntry(p, token);\n if (!formattingElementEntry) {\n break;\n }\n const furthestBlock = aaObtainFurthestBlock(p, formattingElementEntry);\n if (!furthestBlock) {\n break;\n }\n p.activeFormattingElements.bookmark = formattingElementEntry;\n const lastElement = aaInnerLoop(p, furthestBlock, formattingElementEntry.element);\n const commonAncestor = p.openElements.getCommonAncestor(formattingElementEntry.element);\n p.treeAdapter.detachNode(lastElement);\n if (commonAncestor)\n aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement);\n aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry);\n }\n}\n//Generic token handlers\n//------------------------------------------------------------------\nfunction appendComment(p, token) {\n p._appendCommentNode(token, p.openElements.currentTmplContentOrNode);\n}\nfunction appendCommentToRootHtmlElement(p, token) {\n p._appendCommentNode(token, p.openElements.items[0]);\n}\nfunction appendCommentToDocument(p, token) {\n p._appendCommentNode(token, p.document);\n}\nfunction stopParsing(p, token) {\n p.stopped = true;\n // NOTE: Set end locations for elements that remain on the open element stack.\n if (token.location) {\n // NOTE: If we are not in a fragment, `html` and `body` will stay on the stack.\n // This is a problem, as we might overwrite their end position here.\n const target = p.fragmentContext ? 0 : 2;\n for (let i = p.openElements.stackTop; i >= target; i--) {\n p._setEndLocation(p.openElements.items[i], token);\n }\n // Handle `html` and `body`\n if (!p.fragmentContext && p.openElements.stackTop >= 0) {\n const htmlElement = p.openElements.items[0];\n const htmlLocation = p.treeAdapter.getNodeSourceCodeLocation(htmlElement);\n if (htmlLocation && !htmlLocation.endTag) {\n p._setEndLocation(htmlElement, token);\n if (p.openElements.stackTop >= 1) {\n const bodyElement = p.openElements.items[1];\n const bodyLocation = p.treeAdapter.getNodeSourceCodeLocation(bodyElement);\n if (bodyLocation && !bodyLocation.endTag) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n }\n }\n}\n// The \"initial\" insertion mode\n//------------------------------------------------------------------\nfunction doctypeInInitialMode(p, token) {\n p._setDocumentType(token);\n const mode = token.forceQuirks ? DOCUMENT_MODE.QUIRKS : doctype.getDocumentMode(token);\n if (!doctype.isConforming(token)) {\n p._err(token, ERR.nonConformingDoctype);\n }\n p.treeAdapter.setDocumentMode(p.document, mode);\n p.insertionMode = InsertionMode.BEFORE_HTML;\n}\nfunction tokenInInitialMode(p, token) {\n p._err(token, ERR.missingDoctype, true);\n p.treeAdapter.setDocumentMode(p.document, DOCUMENT_MODE.QUIRKS);\n p.insertionMode = InsertionMode.BEFORE_HTML;\n p._processToken(token);\n}\n// The \"before html\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHtml(p, token) {\n if (token.tagID === $.HTML) {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.BEFORE_HEAD;\n }\n else {\n tokenBeforeHtml(p, token);\n }\n}\nfunction endTagBeforeHtml(p, token) {\n const tn = token.tagID;\n if (tn === $.HTML || tn === $.HEAD || tn === $.BODY || tn === $.BR) {\n tokenBeforeHtml(p, token);\n }\n}\nfunction tokenBeforeHtml(p, token) {\n p._insertFakeRootElement();\n p.insertionMode = InsertionMode.BEFORE_HEAD;\n p._processToken(token);\n}\n// The \"before head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.HEAD: {\n p._insertElement(token, NS.HTML);\n p.headElement = p.openElements.current;\n p.insertionMode = InsertionMode.IN_HEAD;\n break;\n }\n default: {\n tokenBeforeHead(p, token);\n }\n }\n}\nfunction endTagBeforeHead(p, token) {\n const tn = token.tagID;\n if (tn === $.HEAD || tn === $.BODY || tn === $.HTML || tn === $.BR) {\n tokenBeforeHead(p, token);\n }\n else {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n}\nfunction tokenBeforeHead(p, token) {\n p._insertFakeElement(TN.HEAD, $.HEAD);\n p.headElement = p.openElements.current;\n p.insertionMode = InsertionMode.IN_HEAD;\n p._processToken(token);\n}\n// The \"in head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.TITLE: {\n p._switchToTextParsing(token, TokenizerMode.RCDATA);\n break;\n }\n case $.NOSCRIPT: {\n if (p.options.scriptingEnabled) {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n }\n else {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_HEAD_NO_SCRIPT;\n }\n break;\n }\n case $.NOFRAMES:\n case $.STYLE: {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n break;\n }\n case $.SCRIPT: {\n p._switchToTextParsing(token, TokenizerMode.SCRIPT_DATA);\n break;\n }\n case $.TEMPLATE: {\n p._insertTemplate(token);\n p.activeFormattingElements.insertMarker();\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_TEMPLATE;\n p.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n break;\n }\n case $.HEAD: {\n p._err(token, ERR.misplacedStartTagForHeadElement);\n break;\n }\n default: {\n tokenInHead(p, token);\n }\n }\n}\nfunction endTagInHead(p, token) {\n switch (token.tagID) {\n case $.HEAD: {\n p.openElements.pop();\n p.insertionMode = InsertionMode.AFTER_HEAD;\n break;\n }\n case $.BODY:\n case $.BR:\n case $.HTML: {\n tokenInHead(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction templateEndTagInHead(p, token) {\n if (p.openElements.tmplCount > 0) {\n p.openElements.generateImpliedEndTagsThoroughly();\n if (p.openElements.currentTagId !== $.TEMPLATE) {\n p._err(token, ERR.closingOfElementWithOpenChildElements);\n }\n p.openElements.popUntilTagNamePopped($.TEMPLATE);\n p.activeFormattingElements.clearToLastMarker();\n p.tmplInsertionModeStack.shift();\n p._resetInsertionMode();\n }\n else {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n}\nfunction tokenInHead(p, token) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.AFTER_HEAD;\n p._processToken(token);\n}\n// The \"in head no script\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHeadNoScript(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BASEFONT:\n case $.BGSOUND:\n case $.HEAD:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.STYLE: {\n startTagInHead(p, token);\n break;\n }\n case $.NOSCRIPT: {\n p._err(token, ERR.nestedNoscriptInHead);\n break;\n }\n default: {\n tokenInHeadNoScript(p, token);\n }\n }\n}\nfunction endTagInHeadNoScript(p, token) {\n switch (token.tagID) {\n case $.NOSCRIPT: {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_HEAD;\n break;\n }\n case $.BR: {\n tokenInHeadNoScript(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction tokenInHeadNoScript(p, token) {\n const errCode = token.type === TokenType.EOF ? ERR.openElementsLeftAfterEof : ERR.disallowedContentInNoscriptInHead;\n p._err(token, errCode);\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_HEAD;\n p._processToken(token);\n}\n// The \"after head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BODY: {\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_BODY;\n break;\n }\n case $.FRAMESET: {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_FRAMESET;\n break;\n }\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.SCRIPT:\n case $.STYLE:\n case $.TEMPLATE:\n case $.TITLE: {\n p._err(token, ERR.abandonedHeadElementChild);\n p.openElements.push(p.headElement, $.HEAD);\n startTagInHead(p, token);\n p.openElements.remove(p.headElement);\n break;\n }\n case $.HEAD: {\n p._err(token, ERR.misplacedStartTagForHeadElement);\n break;\n }\n default: {\n tokenAfterHead(p, token);\n }\n }\n}\nfunction endTagAfterHead(p, token) {\n switch (token.tagID) {\n case $.BODY:\n case $.HTML:\n case $.BR: {\n tokenAfterHead(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction tokenAfterHead(p, token) {\n p._insertFakeElement(TN.BODY, $.BODY);\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"in body\" insertion mode\n//------------------------------------------------------------------\nfunction modeInBody(p, token) {\n switch (token.type) {\n case TokenType.CHARACTER: {\n characterInBody(p, token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n whitespaceCharacterInBody(p, token);\n break;\n }\n case TokenType.COMMENT: {\n appendComment(p, token);\n break;\n }\n case TokenType.START_TAG: {\n startTagInBody(p, token);\n break;\n }\n case TokenType.END_TAG: {\n endTagInBody(p, token);\n break;\n }\n case TokenType.EOF: {\n eofInBody(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction whitespaceCharacterInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertCharacters(token);\n}\nfunction characterInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertCharacters(token);\n p.framesetOk = false;\n}\nfunction htmlStartTagInBody(p, token) {\n if (p.openElements.tmplCount === 0) {\n p.treeAdapter.adoptAttributes(p.openElements.items[0], token.attrs);\n }\n}\nfunction bodyStartTagInBody(p, token) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (bodyElement && p.openElements.tmplCount === 0) {\n p.framesetOk = false;\n p.treeAdapter.adoptAttributes(bodyElement, token.attrs);\n }\n}\nfunction framesetStartTagInBody(p, token) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (p.framesetOk && bodyElement) {\n p.treeAdapter.detachNode(bodyElement);\n p.openElements.popAllUpToHtmlElement();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_FRAMESET;\n }\n}\nfunction addressStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction numberedHeaderStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n if (p.openElements.currentTagId !== undefined && NUMBERED_HEADERS.has(p.openElements.currentTagId)) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction preStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n //on to the next one. (Newlines at the start of pre blocks are ignored as an authoring convenience.)\n p.skipNextNewLine = true;\n p.framesetOk = false;\n}\nfunction formStartTagInBody(p, token) {\n const inTemplate = p.openElements.tmplCount > 0;\n if (!p.formElement || inTemplate) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n if (!inTemplate) {\n p.formElement = p.openElements.current;\n }\n }\n}\nfunction listItemStartTagInBody(p, token) {\n p.framesetOk = false;\n const tn = token.tagID;\n for (let i = p.openElements.stackTop; i >= 0; i--) {\n const elementId = p.openElements.tagIDs[i];\n if ((tn === $.LI && elementId === $.LI) ||\n ((tn === $.DD || tn === $.DT) && (elementId === $.DD || elementId === $.DT))) {\n p.openElements.generateImpliedEndTagsWithExclusion(elementId);\n p.openElements.popUntilTagNamePopped(elementId);\n break;\n }\n if (elementId !== $.ADDRESS &&\n elementId !== $.DIV &&\n elementId !== $.P &&\n p._isSpecialElement(p.openElements.items[i], elementId)) {\n break;\n }\n }\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction plaintextStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n p.tokenizer.state = TokenizerMode.PLAINTEXT;\n}\nfunction buttonStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.BUTTON)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.BUTTON);\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n}\nfunction aStartTagInBody(p, token) {\n const activeElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(TN.A);\n if (activeElementEntry) {\n callAdoptionAgency(p, token);\n p.openElements.remove(activeElementEntry.element);\n p.activeFormattingElements.removeEntry(activeElementEntry);\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction bStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction nobrStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n if (p.openElements.hasInScope($.NOBR)) {\n callAdoptionAgency(p, token);\n p._reconstructActiveFormattingElements();\n }\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction appletStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.insertMarker();\n p.framesetOk = false;\n}\nfunction tableStartTagInBody(p, token) {\n if (p.treeAdapter.getDocumentMode(p.document) !== DOCUMENT_MODE.QUIRKS && p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_TABLE;\n}\nfunction areaStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._appendElement(token, NS.HTML);\n p.framesetOk = false;\n token.ackSelfClosing = true;\n}\nfunction isHiddenInput(token) {\n const inputType = getTokenAttr(token, ATTRS.TYPE);\n return inputType != null && inputType.toLowerCase() === HIDDEN_INPUT_TYPE;\n}\nfunction inputStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._appendElement(token, NS.HTML);\n if (!isHiddenInput(token)) {\n p.framesetOk = false;\n }\n token.ackSelfClosing = true;\n}\nfunction paramStartTagInBody(p, token) {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n}\nfunction hrStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._appendElement(token, NS.HTML);\n p.framesetOk = false;\n token.ackSelfClosing = true;\n}\nfunction imageStartTagInBody(p, token) {\n token.tagName = TN.IMG;\n token.tagID = $.IMG;\n areaStartTagInBody(p, token);\n}\nfunction textareaStartTagInBody(p, token) {\n p._insertElement(token, NS.HTML);\n //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n //on to the next one. (Newlines at the start of textarea elements are ignored as an authoring convenience.)\n p.skipNextNewLine = true;\n p.tokenizer.state = TokenizerMode.RCDATA;\n p.originalInsertionMode = p.insertionMode;\n p.framesetOk = false;\n p.insertionMode = InsertionMode.TEXT;\n}\nfunction xmpStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._reconstructActiveFormattingElements();\n p.framesetOk = false;\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction iframeStartTagInBody(p, token) {\n p.framesetOk = false;\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\n//NOTE: here we assume that we always act as a user agent with enabled plugins/frames, so we parse\n//<noembed>/<noframes> as rawtext.\nfunction rawTextStartTagInBody(p, token) {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction selectStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode =\n p.insertionMode === InsertionMode.IN_TABLE ||\n p.insertionMode === InsertionMode.IN_CAPTION ||\n p.insertionMode === InsertionMode.IN_TABLE_BODY ||\n p.insertionMode === InsertionMode.IN_ROW ||\n p.insertionMode === InsertionMode.IN_CELL\n ? InsertionMode.IN_SELECT_IN_TABLE\n : InsertionMode.IN_SELECT;\n}\nfunction optgroupStartTagInBody(p, token) {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n}\nfunction rbStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.RUBY)) {\n p.openElements.generateImpliedEndTags();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction rtStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.RUBY)) {\n p.openElements.generateImpliedEndTagsWithExclusion($.RTC);\n }\n p._insertElement(token, NS.HTML);\n}\nfunction mathStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n foreignContent.adjustTokenMathMLAttrs(token);\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, NS.MATHML);\n }\n else {\n p._insertElement(token, NS.MATHML);\n }\n token.ackSelfClosing = true;\n}\nfunction svgStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n foreignContent.adjustTokenSVGAttrs(token);\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, NS.SVG);\n }\n else {\n p._insertElement(token, NS.SVG);\n }\n token.ackSelfClosing = true;\n}\nfunction genericStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n}\nfunction startTagInBody(p, token) {\n switch (token.tagID) {\n case $.I:\n case $.S:\n case $.B:\n case $.U:\n case $.EM:\n case $.TT:\n case $.BIG:\n case $.CODE:\n case $.FONT:\n case $.SMALL:\n case $.STRIKE:\n case $.STRONG: {\n bStartTagInBody(p, token);\n break;\n }\n case $.A: {\n aStartTagInBody(p, token);\n break;\n }\n case $.H1:\n case $.H2:\n case $.H3:\n case $.H4:\n case $.H5:\n case $.H6: {\n numberedHeaderStartTagInBody(p, token);\n break;\n }\n case $.P:\n case $.DL:\n case $.OL:\n case $.UL:\n case $.DIV:\n case $.DIR:\n case $.NAV:\n case $.MAIN:\n case $.MENU:\n case $.ASIDE:\n case $.CENTER:\n case $.FIGURE:\n case $.FOOTER:\n case $.HEADER:\n case $.HGROUP:\n case $.DIALOG:\n case $.DETAILS:\n case $.ADDRESS:\n case $.ARTICLE:\n case $.SEARCH:\n case $.SECTION:\n case $.SUMMARY:\n case $.FIELDSET:\n case $.BLOCKQUOTE:\n case $.FIGCAPTION: {\n addressStartTagInBody(p, token);\n break;\n }\n case $.LI:\n case $.DD:\n case $.DT: {\n listItemStartTagInBody(p, token);\n break;\n }\n case $.BR:\n case $.IMG:\n case $.WBR:\n case $.AREA:\n case $.EMBED:\n case $.KEYGEN: {\n areaStartTagInBody(p, token);\n break;\n }\n case $.HR: {\n hrStartTagInBody(p, token);\n break;\n }\n case $.RB:\n case $.RTC: {\n rbStartTagInBody(p, token);\n break;\n }\n case $.RT:\n case $.RP: {\n rtStartTagInBody(p, token);\n break;\n }\n case $.PRE:\n case $.LISTING: {\n preStartTagInBody(p, token);\n break;\n }\n case $.XMP: {\n xmpStartTagInBody(p, token);\n break;\n }\n case $.SVG: {\n svgStartTagInBody(p, token);\n break;\n }\n case $.HTML: {\n htmlStartTagInBody(p, token);\n break;\n }\n case $.BASE:\n case $.LINK:\n case $.META:\n case $.STYLE:\n case $.TITLE:\n case $.SCRIPT:\n case $.BGSOUND:\n case $.BASEFONT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n case $.BODY: {\n bodyStartTagInBody(p, token);\n break;\n }\n case $.FORM: {\n formStartTagInBody(p, token);\n break;\n }\n case $.NOBR: {\n nobrStartTagInBody(p, token);\n break;\n }\n case $.MATH: {\n mathStartTagInBody(p, token);\n break;\n }\n case $.TABLE: {\n tableStartTagInBody(p, token);\n break;\n }\n case $.INPUT: {\n inputStartTagInBody(p, token);\n break;\n }\n case $.PARAM:\n case $.TRACK:\n case $.SOURCE: {\n paramStartTagInBody(p, token);\n break;\n }\n case $.IMAGE: {\n imageStartTagInBody(p, token);\n break;\n }\n case $.BUTTON: {\n buttonStartTagInBody(p, token);\n break;\n }\n case $.APPLET:\n case $.OBJECT:\n case $.MARQUEE: {\n appletStartTagInBody(p, token);\n break;\n }\n case $.IFRAME: {\n iframeStartTagInBody(p, token);\n break;\n }\n case $.SELECT: {\n selectStartTagInBody(p, token);\n break;\n }\n case $.OPTION:\n case $.OPTGROUP: {\n optgroupStartTagInBody(p, token);\n break;\n }\n case $.NOEMBED:\n case $.NOFRAMES: {\n rawTextStartTagInBody(p, token);\n break;\n }\n case $.FRAMESET: {\n framesetStartTagInBody(p, token);\n break;\n }\n case $.TEXTAREA: {\n textareaStartTagInBody(p, token);\n break;\n }\n case $.NOSCRIPT: {\n if (p.options.scriptingEnabled) {\n rawTextStartTagInBody(p, token);\n }\n else {\n genericStartTagInBody(p, token);\n }\n break;\n }\n case $.PLAINTEXT: {\n plaintextStartTagInBody(p, token);\n break;\n }\n case $.COL:\n case $.TH:\n case $.TD:\n case $.TR:\n case $.HEAD:\n case $.FRAME:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.CAPTION:\n case $.COLGROUP: {\n // Ignore token\n break;\n }\n default: {\n genericStartTagInBody(p, token);\n }\n }\n}\nfunction bodyEndTagInBody(p, token) {\n if (p.openElements.hasInScope($.BODY)) {\n p.insertionMode = InsertionMode.AFTER_BODY;\n //NOTE: <body> is never popped from the stack, so we need to updated\n //the end location explicitly.\n if (p.options.sourceCodeLocationInfo) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (bodyElement) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n}\nfunction htmlEndTagInBody(p, token) {\n if (p.openElements.hasInScope($.BODY)) {\n p.insertionMode = InsertionMode.AFTER_BODY;\n endTagAfterBody(p, token);\n }\n}\nfunction addressEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n }\n}\nfunction formEndTagInBody(p) {\n const inTemplate = p.openElements.tmplCount > 0;\n const { formElement } = p;\n if (!inTemplate) {\n p.formElement = null;\n }\n if ((formElement || inTemplate) && p.openElements.hasInScope($.FORM)) {\n p.openElements.generateImpliedEndTags();\n if (inTemplate) {\n p.openElements.popUntilTagNamePopped($.FORM);\n }\n else if (formElement) {\n p.openElements.remove(formElement);\n }\n }\n}\nfunction pEndTagInBody(p) {\n if (!p.openElements.hasInButtonScope($.P)) {\n p._insertFakeElement(TN.P, $.P);\n }\n p._closePElement();\n}\nfunction liEndTagInBody(p) {\n if (p.openElements.hasInListItemScope($.LI)) {\n p.openElements.generateImpliedEndTagsWithExclusion($.LI);\n p.openElements.popUntilTagNamePopped($.LI);\n }\n}\nfunction ddEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTagsWithExclusion(tn);\n p.openElements.popUntilTagNamePopped(tn);\n }\n}\nfunction numberedHeaderEndTagInBody(p) {\n if (p.openElements.hasNumberedHeaderInScope()) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilNumberedHeaderPopped();\n }\n}\nfunction appletEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n p.activeFormattingElements.clearToLastMarker();\n }\n}\nfunction brEndTagInBody(p) {\n p._reconstructActiveFormattingElements();\n p._insertFakeElement(TN.BR, $.BR);\n p.openElements.pop();\n p.framesetOk = false;\n}\nfunction genericEndTagInBody(p, token) {\n const tn = token.tagName;\n const tid = token.tagID;\n for (let i = p.openElements.stackTop; i > 0; i--) {\n const element = p.openElements.items[i];\n const elementId = p.openElements.tagIDs[i];\n // Compare the tag name here, as the tag might not be a known tag with an ID.\n if (tid === elementId && (tid !== $.UNKNOWN || p.treeAdapter.getTagName(element) === tn)) {\n p.openElements.generateImpliedEndTagsWithExclusion(tid);\n if (p.openElements.stackTop >= i)\n p.openElements.shortenToLength(i);\n break;\n }\n if (p._isSpecialElement(element, elementId)) {\n break;\n }\n }\n}\nfunction endTagInBody(p, token) {\n switch (token.tagID) {\n case $.A:\n case $.B:\n case $.I:\n case $.S:\n case $.U:\n case $.EM:\n case $.TT:\n case $.BIG:\n case $.CODE:\n case $.FONT:\n case $.NOBR:\n case $.SMALL:\n case $.STRIKE:\n case $.STRONG: {\n callAdoptionAgency(p, token);\n break;\n }\n case $.P: {\n pEndTagInBody(p);\n break;\n }\n case $.DL:\n case $.UL:\n case $.OL:\n case $.DIR:\n case $.DIV:\n case $.NAV:\n case $.PRE:\n case $.MAIN:\n case $.MENU:\n case $.ASIDE:\n case $.BUTTON:\n case $.CENTER:\n case $.FIGURE:\n case $.FOOTER:\n case $.HEADER:\n case $.HGROUP:\n case $.DIALOG:\n case $.ADDRESS:\n case $.ARTICLE:\n case $.DETAILS:\n case $.SEARCH:\n case $.SECTION:\n case $.SUMMARY:\n case $.LISTING:\n case $.FIELDSET:\n case $.BLOCKQUOTE:\n case $.FIGCAPTION: {\n addressEndTagInBody(p, token);\n break;\n }\n case $.LI: {\n liEndTagInBody(p);\n break;\n }\n case $.DD:\n case $.DT: {\n ddEndTagInBody(p, token);\n break;\n }\n case $.H1:\n case $.H2:\n case $.H3:\n case $.H4:\n case $.H5:\n case $.H6: {\n numberedHeaderEndTagInBody(p);\n break;\n }\n case $.BR: {\n brEndTagInBody(p);\n break;\n }\n case $.BODY: {\n bodyEndTagInBody(p, token);\n break;\n }\n case $.HTML: {\n htmlEndTagInBody(p, token);\n break;\n }\n case $.FORM: {\n formEndTagInBody(p);\n break;\n }\n case $.APPLET:\n case $.OBJECT:\n case $.MARQUEE: {\n appletEndTagInBody(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n genericEndTagInBody(p, token);\n }\n }\n}\nfunction eofInBody(p, token) {\n if (p.tmplInsertionModeStack.length > 0) {\n eofInTemplate(p, token);\n }\n else {\n stopParsing(p, token);\n }\n}\n// The \"text\" insertion mode\n//------------------------------------------------------------------\nfunction endTagInText(p, token) {\n var _a;\n if (token.tagID === $.SCRIPT) {\n (_a = p.scriptHandler) === null || _a === void 0 ? void 0 : _a.call(p, p.openElements.current);\n }\n p.openElements.pop();\n p.insertionMode = p.originalInsertionMode;\n}\nfunction eofInText(p, token) {\n p._err(token, ERR.eofInElementThatCanContainOnlyText);\n p.openElements.pop();\n p.insertionMode = p.originalInsertionMode;\n p.onEof(token);\n}\n// The \"in table\" insertion mode\n//------------------------------------------------------------------\nfunction characterInTable(p, token) {\n if (p.openElements.currentTagId !== undefined && TABLE_STRUCTURE_TAGS.has(p.openElements.currentTagId)) {\n p.pendingCharacterTokens.length = 0;\n p.hasNonWhitespacePendingCharacterToken = false;\n p.originalInsertionMode = p.insertionMode;\n p.insertionMode = InsertionMode.IN_TABLE_TEXT;\n switch (token.type) {\n case TokenType.CHARACTER: {\n characterInTableText(p, token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n whitespaceCharacterInTableText(p, token);\n break;\n }\n // Ignore null\n }\n }\n else {\n tokenInTable(p, token);\n }\n}\nfunction captionStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p.activeFormattingElements.insertMarker();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_CAPTION;\n}\nfunction colgroupStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n}\nfunction colStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertFakeElement(TN.COLGROUP, $.COLGROUP);\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n startTagInColumnGroup(p, token);\n}\nfunction tbodyStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n}\nfunction tdStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertFakeElement(TN.TBODY, $.TBODY);\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n}\nfunction tableStartTagInTable(p, token) {\n if (p.openElements.hasInTableScope($.TABLE)) {\n p.openElements.popUntilTagNamePopped($.TABLE);\n p._resetInsertionMode();\n p._processStartTag(token);\n }\n}\nfunction inputStartTagInTable(p, token) {\n if (isHiddenInput(token)) {\n p._appendElement(token, NS.HTML);\n }\n else {\n tokenInTable(p, token);\n }\n token.ackSelfClosing = true;\n}\nfunction formStartTagInTable(p, token) {\n if (!p.formElement && p.openElements.tmplCount === 0) {\n p._insertElement(token, NS.HTML);\n p.formElement = p.openElements.current;\n p.openElements.pop();\n }\n}\nfunction startTagInTable(p, token) {\n switch (token.tagID) {\n case $.TD:\n case $.TH:\n case $.TR: {\n tdStartTagInTable(p, token);\n break;\n }\n case $.STYLE:\n case $.SCRIPT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n case $.COL: {\n colStartTagInTable(p, token);\n break;\n }\n case $.FORM: {\n formStartTagInTable(p, token);\n break;\n }\n case $.TABLE: {\n tableStartTagInTable(p, token);\n break;\n }\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n tbodyStartTagInTable(p, token);\n break;\n }\n case $.INPUT: {\n inputStartTagInTable(p, token);\n break;\n }\n case $.CAPTION: {\n captionStartTagInTable(p, token);\n break;\n }\n case $.COLGROUP: {\n colgroupStartTagInTable(p, token);\n break;\n }\n default: {\n tokenInTable(p, token);\n }\n }\n}\nfunction endTagInTable(p, token) {\n switch (token.tagID) {\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.TABLE)) {\n p.openElements.popUntilTagNamePopped($.TABLE);\n p._resetInsertionMode();\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TBODY:\n case $.TD:\n case $.TFOOT:\n case $.TH:\n case $.THEAD:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n tokenInTable(p, token);\n }\n }\n}\nfunction tokenInTable(p, token) {\n const savedFosterParentingState = p.fosterParentingEnabled;\n p.fosterParentingEnabled = true;\n // Process token in `In Body` mode\n modeInBody(p, token);\n p.fosterParentingEnabled = savedFosterParentingState;\n}\n// The \"in table text\" insertion mode\n//------------------------------------------------------------------\nfunction whitespaceCharacterInTableText(p, token) {\n p.pendingCharacterTokens.push(token);\n}\nfunction characterInTableText(p, token) {\n p.pendingCharacterTokens.push(token);\n p.hasNonWhitespacePendingCharacterToken = true;\n}\nfunction tokenInTableText(p, token) {\n let i = 0;\n if (p.hasNonWhitespacePendingCharacterToken) {\n for (; i < p.pendingCharacterTokens.length; i++) {\n tokenInTable(p, p.pendingCharacterTokens[i]);\n }\n }\n else {\n for (; i < p.pendingCharacterTokens.length; i++) {\n p._insertCharacters(p.pendingCharacterTokens[i]);\n }\n }\n p.insertionMode = p.originalInsertionMode;\n p._processToken(token);\n}\n// The \"in caption\" insertion mode\n//------------------------------------------------------------------\nconst TABLE_VOID_ELEMENTS = new Set([$.CAPTION, $.COL, $.COLGROUP, $.TBODY, $.TD, $.TFOOT, $.TH, $.THEAD, $.TR]);\nfunction startTagInCaption(p, token) {\n const tn = token.tagID;\n if (TABLE_VOID_ELEMENTS.has(tn)) {\n if (p.openElements.hasInTableScope($.CAPTION)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.CAPTION);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n }\n }\n else {\n startTagInBody(p, token);\n }\n}\nfunction endTagInCaption(p, token) {\n const tn = token.tagID;\n switch (tn) {\n case $.CAPTION:\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.CAPTION)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.CAPTION);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_TABLE;\n if (tn === $.TABLE) {\n endTagInTable(p, token);\n }\n }\n break;\n }\n case $.BODY:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TBODY:\n case $.TD:\n case $.TFOOT:\n case $.TH:\n case $.THEAD:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n endTagInBody(p, token);\n }\n }\n}\n// The \"in column group\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInColumnGroup(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.COL: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n default: {\n tokenInColumnGroup(p, token);\n }\n }\n}\nfunction endTagInColumnGroup(p, token) {\n switch (token.tagID) {\n case $.COLGROUP: {\n if (p.openElements.currentTagId === $.COLGROUP) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n case $.COL: {\n // Ignore token\n break;\n }\n default: {\n tokenInColumnGroup(p, token);\n }\n }\n}\nfunction tokenInColumnGroup(p, token) {\n if (p.openElements.currentTagId === $.COLGROUP) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n p._processToken(token);\n }\n}\n// The \"in table body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTableBody(p, token) {\n switch (token.tagID) {\n case $.TR: {\n p.openElements.clearBackToTableBodyContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_ROW;\n break;\n }\n case $.TH:\n case $.TD: {\n p.openElements.clearBackToTableBodyContext();\n p._insertFakeElement(TN.TR, $.TR);\n p.insertionMode = InsertionMode.IN_ROW;\n startTagInRow(p, token);\n break;\n }\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasTableBodyContextInTableScope()) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n }\n break;\n }\n default: {\n startTagInTable(p, token);\n }\n }\n}\nfunction endTagInTableBody(p, token) {\n const tn = token.tagID;\n switch (token.tagID) {\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n }\n break;\n }\n case $.TABLE: {\n if (p.openElements.hasTableBodyContextInTableScope()) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n endTagInTable(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TD:\n case $.TH:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n endTagInTable(p, token);\n }\n }\n}\n// The \"in row\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInRow(p, token) {\n switch (token.tagID) {\n case $.TH:\n case $.TD: {\n p.openElements.clearBackToTableRowContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_CELL;\n p.activeFormattingElements.insertMarker();\n break;\n }\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.TR: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n }\n break;\n }\n default: {\n startTagInTable(p, token);\n }\n }\n}\nfunction endTagInRow(p, token) {\n switch (token.tagID) {\n case $.TR: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n }\n break;\n }\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n endTagInTableBody(p, token);\n }\n break;\n }\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasInTableScope(token.tagID) || p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n endTagInTableBody(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TD:\n case $.TH: {\n // Ignore end tag\n break;\n }\n default: {\n endTagInTable(p, token);\n }\n }\n}\n// The \"in cell\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInCell(p, token) {\n const tn = token.tagID;\n if (TABLE_VOID_ELEMENTS.has(tn)) {\n if (p.openElements.hasInTableScope($.TD) || p.openElements.hasInTableScope($.TH)) {\n p._closeTableCell();\n startTagInRow(p, token);\n }\n }\n else {\n startTagInBody(p, token);\n }\n}\nfunction endTagInCell(p, token) {\n const tn = token.tagID;\n switch (tn) {\n case $.TD:\n case $.TH: {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_ROW;\n }\n break;\n }\n case $.TABLE:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.TR: {\n if (p.openElements.hasInTableScope(tn)) {\n p._closeTableCell();\n endTagInRow(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML: {\n // Ignore token\n break;\n }\n default: {\n endTagInBody(p, token);\n }\n }\n}\n// The \"in select\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelect(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.OPTION: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.OPTGROUP: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.HR: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.INPUT:\n case $.KEYGEN:\n case $.TEXTAREA:\n case $.SELECT: {\n if (p.openElements.hasInSelectScope($.SELECT)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n if (token.tagID !== $.SELECT) {\n p._processStartTag(token);\n }\n }\n break;\n }\n case $.SCRIPT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagInSelect(p, token) {\n switch (token.tagID) {\n case $.OPTGROUP: {\n if (p.openElements.stackTop > 0 &&\n p.openElements.currentTagId === $.OPTION &&\n p.openElements.tagIDs[p.openElements.stackTop - 1] === $.OPTGROUP) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n break;\n }\n case $.OPTION: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n break;\n }\n case $.SELECT: {\n if (p.openElements.hasInSelectScope($.SELECT)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\n// The \"in select in table\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelectInTable(p, token) {\n const tn = token.tagID;\n if (tn === $.CAPTION ||\n tn === $.TABLE ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD ||\n tn === $.TR ||\n tn === $.TD ||\n tn === $.TH) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n p._processStartTag(token);\n }\n else {\n startTagInSelect(p, token);\n }\n}\nfunction endTagInSelectInTable(p, token) {\n const tn = token.tagID;\n if (tn === $.CAPTION ||\n tn === $.TABLE ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD ||\n tn === $.TR ||\n tn === $.TD ||\n tn === $.TH) {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n p.onEndTag(token);\n }\n }\n else {\n endTagInSelect(p, token);\n }\n}\n// The \"in template\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTemplate(p, token) {\n switch (token.tagID) {\n // First, handle tags that can start without a mode change\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.SCRIPT:\n case $.STYLE:\n case $.TEMPLATE:\n case $.TITLE: {\n startTagInHead(p, token);\n break;\n }\n // Re-process the token in the appropriate mode\n case $.CAPTION:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE;\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n break;\n }\n case $.COL: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_COLUMN_GROUP;\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n startTagInColumnGroup(p, token);\n break;\n }\n case $.TR: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE_BODY;\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n break;\n }\n case $.TD:\n case $.TH: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_ROW;\n p.insertionMode = InsertionMode.IN_ROW;\n startTagInRow(p, token);\n break;\n }\n default: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_BODY;\n p.insertionMode = InsertionMode.IN_BODY;\n startTagInBody(p, token);\n }\n }\n}\nfunction endTagInTemplate(p, token) {\n if (token.tagID === $.TEMPLATE) {\n templateEndTagInHead(p, token);\n }\n}\nfunction eofInTemplate(p, token) {\n if (p.openElements.tmplCount > 0) {\n p.openElements.popUntilTagNamePopped($.TEMPLATE);\n p.activeFormattingElements.clearToLastMarker();\n p.tmplInsertionModeStack.shift();\n p._resetInsertionMode();\n p.onEof(token);\n }\n else {\n stopParsing(p, token);\n }\n}\n// The \"after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterBody(p, token) {\n if (token.tagID === $.HTML) {\n startTagInBody(p, token);\n }\n else {\n tokenAfterBody(p, token);\n }\n}\nfunction endTagAfterBody(p, token) {\n var _a;\n if (token.tagID === $.HTML) {\n if (!p.fragmentContext) {\n p.insertionMode = InsertionMode.AFTER_AFTER_BODY;\n }\n //NOTE: <html> is never popped from the stack, so we need to updated\n //the end location explicitly.\n if (p.options.sourceCodeLocationInfo && p.openElements.tagIDs[0] === $.HTML) {\n p._setEndLocation(p.openElements.items[0], token);\n // Update the body element, if it doesn't have an end tag\n const bodyElement = p.openElements.items[1];\n if (bodyElement && !((_a = p.treeAdapter.getNodeSourceCodeLocation(bodyElement)) === null || _a === void 0 ? void 0 : _a.endTag)) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n else {\n tokenAfterBody(p, token);\n }\n}\nfunction tokenAfterBody(p, token) {\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"in frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.FRAMESET: {\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.FRAME: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagInFrameset(p, token) {\n if (token.tagID === $.FRAMESET && !p.openElements.isRootHtmlElementCurrent()) {\n p.openElements.pop();\n if (!p.fragmentContext && p.openElements.currentTagId !== $.FRAMESET) {\n p.insertionMode = InsertionMode.AFTER_FRAMESET;\n }\n }\n}\n// The \"after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagAfterFrameset(p, token) {\n if (token.tagID === $.HTML) {\n p.insertionMode = InsertionMode.AFTER_AFTER_FRAMESET;\n }\n}\n// The \"after after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterBody(p, token) {\n if (token.tagID === $.HTML) {\n startTagInBody(p, token);\n }\n else {\n tokenAfterAfterBody(p, token);\n }\n}\nfunction tokenAfterAfterBody(p, token) {\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"after after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\n// The rules for parsing tokens in foreign content\n//------------------------------------------------------------------\nfunction nullCharacterInForeignContent(p, token) {\n token.chars = unicode.REPLACEMENT_CHARACTER;\n p._insertCharacters(token);\n}\nfunction characterInForeignContent(p, token) {\n p._insertCharacters(token);\n p.framesetOk = false;\n}\nfunction popUntilHtmlOrIntegrationPoint(p) {\n while (p.treeAdapter.getNamespaceURI(p.openElements.current) !== NS.HTML &&\n p.openElements.currentTagId !== undefined &&\n !p._isIntegrationPoint(p.openElements.currentTagId, p.openElements.current)) {\n p.openElements.pop();\n }\n}\nfunction startTagInForeignContent(p, token) {\n if (foreignContent.causesExit(token)) {\n popUntilHtmlOrIntegrationPoint(p);\n p._startTagOutsideForeignContent(token);\n }\n else {\n const current = p._getAdjustedCurrentElement();\n const currentNs = p.treeAdapter.getNamespaceURI(current);\n if (currentNs === NS.MATHML) {\n foreignContent.adjustTokenMathMLAttrs(token);\n }\n else if (currentNs === NS.SVG) {\n foreignContent.adjustTokenSVGTagName(token);\n foreignContent.adjustTokenSVGAttrs(token);\n }\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, currentNs);\n }\n else {\n p._insertElement(token, currentNs);\n }\n token.ackSelfClosing = true;\n }\n}\nfunction endTagInForeignContent(p, token) {\n if (token.tagID === $.P || token.tagID === $.BR) {\n popUntilHtmlOrIntegrationPoint(p);\n p._endTagOutsideForeignContent(token);\n return;\n }\n for (let i = p.openElements.stackTop; i > 0; i--) {\n const element = p.openElements.items[i];\n if (p.treeAdapter.getNamespaceURI(element) === NS.HTML) {\n p._endTagOutsideForeignContent(token);\n break;\n }\n const tagName = p.treeAdapter.getTagName(element);\n if (tagName.toLowerCase() === token.tagName) {\n //NOTE: update the token tag name for `_setEndLocation`.\n token.tagName = tagName;\n p.openElements.shortenToLength(i);\n break;\n }\n }\n}\n",
62
- "import { TAG_NAMES as $, NS, hasUnescapedText } from '../common/html.js';\nimport { escapeText, escapeAttribute } from 'entities/escape';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\n// Sets\nconst VOID_ELEMENTS = new Set([\n $.AREA,\n $.BASE,\n $.BASEFONT,\n $.BGSOUND,\n $.BR,\n $.COL,\n $.EMBED,\n $.FRAME,\n $.HR,\n $.IMG,\n $.INPUT,\n $.KEYGEN,\n $.LINK,\n $.META,\n $.PARAM,\n $.SOURCE,\n $.TRACK,\n $.WBR,\n]);\nfunction isVoidElement(node, options) {\n return (options.treeAdapter.isElementNode(node) &&\n options.treeAdapter.getNamespaceURI(node) === NS.HTML &&\n VOID_ELEMENTS.has(options.treeAdapter.getTagName(node)));\n}\nconst defaultOpts = { treeAdapter: defaultTreeAdapter, scriptingEnabled: true };\n/**\n * Serializes an AST node to an HTML string.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');\n *\n * // Serializes a document.\n * const html = parse5.serialize(document);\n *\n * // Serializes the <html> element content.\n * const str = parse5.serialize(document.childNodes[1]);\n *\n * console.log(str); //> '<head></head><body>Hi there!</body>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serialize(node, options) {\n const opts = { ...defaultOpts, ...options };\n if (isVoidElement(node, opts)) {\n return '';\n }\n return serializeChildNodes(node, opts);\n}\n/**\n * Serializes an AST element node to an HTML string, including the element node.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parseFragment('<div>Hello, <b>world</b>!</div>');\n *\n * // Serializes the <div> element.\n * const str = parse5.serializeOuter(document.childNodes[0]);\n *\n * console.log(str); //> '<div>Hello, <b>world</b>!</div>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serializeOuter(node, options) {\n const opts = { ...defaultOpts, ...options };\n return serializeNode(node, opts);\n}\nfunction serializeChildNodes(parentNode, options) {\n let html = '';\n // Get container of the child nodes\n const container = options.treeAdapter.isElementNode(parentNode) &&\n options.treeAdapter.getTagName(parentNode) === $.TEMPLATE &&\n options.treeAdapter.getNamespaceURI(parentNode) === NS.HTML\n ? options.treeAdapter.getTemplateContent(parentNode)\n : parentNode;\n const childNodes = options.treeAdapter.getChildNodes(container);\n if (childNodes) {\n for (const currentNode of childNodes) {\n html += serializeNode(currentNode, options);\n }\n }\n return html;\n}\nfunction serializeNode(node, options) {\n if (options.treeAdapter.isElementNode(node)) {\n return serializeElement(node, options);\n }\n if (options.treeAdapter.isTextNode(node)) {\n return serializeTextNode(node, options);\n }\n if (options.treeAdapter.isCommentNode(node)) {\n return serializeCommentNode(node, options);\n }\n if (options.treeAdapter.isDocumentTypeNode(node)) {\n return serializeDocumentTypeNode(node, options);\n }\n // Return an empty string for unknown nodes\n return '';\n}\nfunction serializeElement(node, options) {\n const tn = options.treeAdapter.getTagName(node);\n return `<${tn}${serializeAttributes(node, options)}>${isVoidElement(node, options) ? '' : `${serializeChildNodes(node, options)}</${tn}>`}`;\n}\nfunction serializeAttributes(node, { treeAdapter }) {\n let html = '';\n for (const attr of treeAdapter.getAttrList(node)) {\n html += ' ';\n if (attr.namespace) {\n switch (attr.namespace) {\n case NS.XML: {\n html += `xml:${attr.name}`;\n break;\n }\n case NS.XMLNS: {\n if (attr.name !== 'xmlns') {\n html += 'xmlns:';\n }\n html += attr.name;\n break;\n }\n case NS.XLINK: {\n html += `xlink:${attr.name}`;\n break;\n }\n default: {\n html += `${attr.prefix}:${attr.name}`;\n }\n }\n }\n else {\n html += attr.name;\n }\n html += `=\"${escapeAttribute(attr.value)}\"`;\n }\n return html;\n}\nfunction serializeTextNode(node, options) {\n const { treeAdapter } = options;\n const content = treeAdapter.getTextNodeContent(node);\n const parent = treeAdapter.getParentNode(node);\n const parentTn = parent && treeAdapter.isElementNode(parent) && treeAdapter.getTagName(parent);\n return parentTn &&\n treeAdapter.getNamespaceURI(parent) === NS.HTML &&\n hasUnescapedText(parentTn, options.scriptingEnabled)\n ? content\n : escapeText(content);\n}\nfunction serializeCommentNode(node, { treeAdapter }) {\n return `<!--${treeAdapter.getCommentNodeContent(node)}-->`;\n}\nfunction serializeDocumentTypeNode(node, { treeAdapter }) {\n return `<!DOCTYPE ${treeAdapter.getDocumentTypeNodeName(node)}>`;\n}\n",
63
- "import { Parser } from './parser/index.js';\nexport { defaultTreeAdapter } from './tree-adapters/default.js';\nexport { /** @internal */ Parser } from './parser/index.js';\nexport { serialize, serializeOuter } from './serializer/index.js';\nexport { ERR as ErrorCodes } from './common/error-codes.js';\n/** @internal */\nexport * as foreignContent from './common/foreign-content.js';\nexport * as html from './common/html.js';\nexport * as Token from './common/token.js';\n/** @internal */\nexport { Tokenizer, TokenizerMode } from './tokenizer/index.js';\n// Shorthands\n/**\n * Parses an HTML string.\n *\n * @param html Input HTML string.\n * @param options Parsing options.\n * @returns Document\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');\n *\n * console.log(document.childNodes[1].tagName); //> 'html'\n *```\n */\nexport function parse(html, options) {\n return Parser.parse(html, options);\n}\nexport function parseFragment(fragmentContext, html, options) {\n if (typeof fragmentContext === 'string') {\n options = html;\n html = fragmentContext;\n fragmentContext = null;\n }\n const parser = Parser.getFragmentParser(fragmentContext, options);\n parser.tokenizer.write(html, true);\n return parser.getFragment();\n}\n",
64
- "/**\n * @typedef ErrorInfo\n * Info on a `parse5` error.\n * @property {string} reason\n * Reason of error.\n * @property {string} description\n * More info on error.\n * @property {false} [url]\n * Turn off if this is not documented in the html5 spec (optional).\n */\n\nexport const errors = {\n /** @type {ErrorInfo} */\n abandonedHeadElementChild: {\n reason: 'Unexpected metadata element after head',\n description:\n 'Unexpected element after head. Expected the element before `</head>`',\n url: false\n },\n /** @type {ErrorInfo} */\n abruptClosingOfEmptyComment: {\n reason: 'Unexpected abruptly closed empty comment',\n description: 'Unexpected `>` or `->`. Expected `-->` to close comments'\n },\n /** @type {ErrorInfo} */\n abruptDoctypePublicIdentifier: {\n reason: 'Unexpected abruptly closed public identifier',\n description:\n 'Unexpected `>`. Expected a closing `\"` or `\\'` after the public identifier'\n },\n /** @type {ErrorInfo} */\n abruptDoctypeSystemIdentifier: {\n reason: 'Unexpected abruptly closed system identifier',\n description:\n 'Unexpected `>`. Expected a closing `\"` or `\\'` after the identifier identifier'\n },\n /** @type {ErrorInfo} */\n absenceOfDigitsInNumericCharacterReference: {\n reason: 'Unexpected non-digit at start of numeric character reference',\n description:\n 'Unexpected `%c`. Expected `[0-9]` for decimal references or `[0-9a-fA-F]` for hexadecimal references'\n },\n /** @type {ErrorInfo} */\n cdataInHtmlContent: {\n reason: 'Unexpected CDATA section in HTML',\n description:\n 'Unexpected `<![CDATA[` in HTML. Remove it, use a comment, or encode special characters instead'\n },\n /** @type {ErrorInfo} */\n characterReferenceOutsideUnicodeRange: {\n reason: 'Unexpected too big numeric character reference',\n description:\n 'Unexpectedly high character reference. Expected character references to be at most hexadecimal 10ffff (or decimal 1114111)'\n },\n /** @type {ErrorInfo} */\n closingOfElementWithOpenChildElements: {\n reason: 'Unexpected closing tag with open child elements',\n description:\n 'Unexpectedly closing tag. Expected other tags to be closed first',\n url: false\n },\n /** @type {ErrorInfo} */\n controlCharacterInInputStream: {\n reason: 'Unexpected control character',\n description:\n 'Unexpected control character `%x`. Expected a non-control code point, 0x00, or ASCII whitespace'\n },\n /** @type {ErrorInfo} */\n controlCharacterReference: {\n reason: 'Unexpected control character reference',\n description:\n 'Unexpectedly control character in reference. Expected a non-control code point, 0x00, or ASCII whitespace'\n },\n /** @type {ErrorInfo} */\n disallowedContentInNoscriptInHead: {\n reason: 'Disallowed content inside `<noscript>` in `<head>`',\n description:\n 'Unexpected text character `%c`. Only use text in `<noscript>`s in `<body>`',\n url: false\n },\n /** @type {ErrorInfo} */\n duplicateAttribute: {\n reason: 'Unexpected duplicate attribute',\n description:\n 'Unexpectedly double attribute. Expected attributes to occur only once'\n },\n /** @type {ErrorInfo} */\n endTagWithAttributes: {\n reason: 'Unexpected attribute on closing tag',\n description: 'Unexpected attribute. Expected `>` instead'\n },\n /** @type {ErrorInfo} */\n endTagWithTrailingSolidus: {\n reason: 'Unexpected slash at end of closing tag',\n description: 'Unexpected `%c-1`. Expected `>` instead'\n },\n /** @type {ErrorInfo} */\n endTagWithoutMatchingOpenElement: {\n reason: 'Unexpected unopened end tag',\n description: 'Unexpected end tag. Expected no end tag or another end tag',\n url: false\n },\n /** @type {ErrorInfo} */\n eofBeforeTagName: {\n reason: 'Unexpected end of file',\n description: 'Unexpected end of file. Expected tag name instead'\n },\n /** @type {ErrorInfo} */\n eofInCdata: {\n reason: 'Unexpected end of file in CDATA',\n description: 'Unexpected end of file. Expected `]]>` to close the CDATA'\n },\n /** @type {ErrorInfo} */\n eofInComment: {\n reason: 'Unexpected end of file in comment',\n description: 'Unexpected end of file. Expected `-->` to close the comment'\n },\n /** @type {ErrorInfo} */\n eofInDoctype: {\n reason: 'Unexpected end of file in doctype',\n description:\n 'Unexpected end of file. Expected a valid doctype (such as `<!doctype html>`)'\n },\n /** @type {ErrorInfo} */\n eofInElementThatCanContainOnlyText: {\n reason: 'Unexpected end of file in element that can only contain text',\n description: 'Unexpected end of file. Expected text or a closing tag',\n url: false\n },\n /** @type {ErrorInfo} */\n eofInScriptHtmlCommentLikeText: {\n reason: 'Unexpected end of file in comment inside script',\n description: 'Unexpected end of file. Expected `-->` to close the comment'\n },\n /** @type {ErrorInfo} */\n eofInTag: {\n reason: 'Unexpected end of file in tag',\n description: 'Unexpected end of file. Expected `>` to close the tag'\n },\n /** @type {ErrorInfo} */\n incorrectlyClosedComment: {\n reason: 'Incorrectly closed comment',\n description: 'Unexpected `%c-1`. Expected `-->` to close the comment'\n },\n /** @type {ErrorInfo} */\n incorrectlyOpenedComment: {\n reason: 'Incorrectly opened comment',\n description: 'Unexpected `%c`. Expected `<!--` to open the comment'\n },\n /** @type {ErrorInfo} */\n invalidCharacterSequenceAfterDoctypeName: {\n reason: 'Invalid sequence after doctype name',\n description: 'Unexpected sequence at `%c`. Expected `public` or `system`'\n },\n /** @type {ErrorInfo} */\n invalidFirstCharacterOfTagName: {\n reason: 'Invalid first character in tag name',\n description: 'Unexpected `%c`. Expected an ASCII letter instead'\n },\n /** @type {ErrorInfo} */\n misplacedDoctype: {\n reason: 'Misplaced doctype',\n description: 'Unexpected doctype. Expected doctype before head',\n url: false\n },\n /** @type {ErrorInfo} */\n misplacedStartTagForHeadElement: {\n reason: 'Misplaced `<head>` start tag',\n description:\n 'Unexpected start tag `<head>`. Expected `<head>` directly after doctype',\n url: false\n },\n /** @type {ErrorInfo} */\n missingAttributeValue: {\n reason: 'Missing attribute value',\n description:\n 'Unexpected `%c-1`. Expected an attribute value or no `%c-1` instead'\n },\n /** @type {ErrorInfo} */\n missingDoctype: {\n reason: 'Missing doctype before other content',\n description: 'Expected a `<!doctype html>` before anything else',\n url: false\n },\n /** @type {ErrorInfo} */\n missingDoctypeName: {\n reason: 'Missing doctype name',\n description: 'Unexpected doctype end at `%c`. Expected `html` instead'\n },\n /** @type {ErrorInfo} */\n missingDoctypePublicIdentifier: {\n reason: 'Missing public identifier in doctype',\n description: 'Unexpected `%c`. Expected identifier for `public` instead'\n },\n /** @type {ErrorInfo} */\n missingDoctypeSystemIdentifier: {\n reason: 'Missing system identifier in doctype',\n description:\n 'Unexpected `%c`. Expected identifier for `system` instead (suggested: `\"about:legacy-compat\"`)'\n },\n /** @type {ErrorInfo} */\n missingEndTagName: {\n reason: 'Missing name in end tag',\n description: 'Unexpected `%c`. Expected an ASCII letter instead'\n },\n /** @type {ErrorInfo} */\n missingQuoteBeforeDoctypePublicIdentifier: {\n reason: 'Missing quote before public identifier in doctype',\n description: 'Unexpected `%c`. Expected `\"` or `\\'` instead'\n },\n /** @type {ErrorInfo} */\n missingQuoteBeforeDoctypeSystemIdentifier: {\n reason: 'Missing quote before system identifier in doctype',\n description: 'Unexpected `%c`. Expected `\"` or `\\'` instead'\n },\n /** @type {ErrorInfo} */\n missingSemicolonAfterCharacterReference: {\n reason: 'Missing semicolon after character reference',\n description: 'Unexpected `%c`. Expected `;` instead'\n },\n /** @type {ErrorInfo} */\n missingWhitespaceAfterDoctypePublicKeyword: {\n reason: 'Missing whitespace after public identifier in doctype',\n description: 'Unexpected `%c`. Expected ASCII whitespace instead'\n },\n /** @type {ErrorInfo} */\n missingWhitespaceAfterDoctypeSystemKeyword: {\n reason: 'Missing whitespace after system identifier in doctype',\n description: 'Unexpected `%c`. Expected ASCII whitespace instead'\n },\n /** @type {ErrorInfo} */\n missingWhitespaceBeforeDoctypeName: {\n reason: 'Missing whitespace before doctype name',\n description: 'Unexpected `%c`. Expected ASCII whitespace instead'\n },\n /** @type {ErrorInfo} */\n missingWhitespaceBetweenAttributes: {\n reason: 'Missing whitespace between attributes',\n description: 'Unexpected `%c`. Expected ASCII whitespace instead'\n },\n /** @type {ErrorInfo} */\n missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers: {\n reason:\n 'Missing whitespace between public and system identifiers in doctype',\n description: 'Unexpected `%c`. Expected ASCII whitespace instead'\n },\n /** @type {ErrorInfo} */\n nestedComment: {\n reason: 'Unexpected nested comment',\n description: 'Unexpected `<!--`. Expected `-->`'\n },\n /** @type {ErrorInfo} */\n nestedNoscriptInHead: {\n reason: 'Unexpected nested `<noscript>` in `<head>`',\n description:\n 'Unexpected `<noscript>`. Expected a closing tag or a meta element',\n url: false\n },\n /** @type {ErrorInfo} */\n nonConformingDoctype: {\n reason: 'Unexpected non-conforming doctype declaration',\n description:\n 'Expected `<!doctype html>` or `<!doctype html system \"about:legacy-compat\">`',\n url: false\n },\n /** @type {ErrorInfo} */\n nonVoidHtmlElementStartTagWithTrailingSolidus: {\n reason: 'Unexpected trailing slash on start tag of non-void element',\n description: 'Unexpected `/`. Expected `>` instead'\n },\n /** @type {ErrorInfo} */\n noncharacterCharacterReference: {\n reason:\n 'Unexpected noncharacter code point referenced by character reference',\n description: 'Unexpected code point. Do not use noncharacters in HTML'\n },\n /** @type {ErrorInfo} */\n noncharacterInInputStream: {\n reason: 'Unexpected noncharacter character',\n description: 'Unexpected code point `%x`. Do not use noncharacters in HTML'\n },\n /** @type {ErrorInfo} */\n nullCharacterReference: {\n reason: 'Unexpected NULL character referenced by character reference',\n description: 'Unexpected code point. Do not use NULL characters in HTML'\n },\n /** @type {ErrorInfo} */\n openElementsLeftAfterEof: {\n reason: 'Unexpected end of file',\n description: 'Unexpected end of file. Expected closing tag instead',\n url: false\n },\n /** @type {ErrorInfo} */\n surrogateCharacterReference: {\n reason: 'Unexpected surrogate character referenced by character reference',\n description:\n 'Unexpected code point. Do not use lone surrogate characters in HTML'\n },\n /** @type {ErrorInfo} */\n surrogateInInputStream: {\n reason: 'Unexpected surrogate character',\n description:\n 'Unexpected code point `%x`. Do not use lone surrogate characters in HTML'\n },\n /** @type {ErrorInfo} */\n unexpectedCharacterAfterDoctypeSystemIdentifier: {\n reason: 'Invalid character after system identifier in doctype',\n description: 'Unexpected character at `%c`. Expected `>`'\n },\n /** @type {ErrorInfo} */\n unexpectedCharacterInAttributeName: {\n reason: 'Unexpected character in attribute name',\n description:\n 'Unexpected `%c`. Expected whitespace, `/`, `>`, `=`, or probably an ASCII letter'\n },\n /** @type {ErrorInfo} */\n unexpectedCharacterInUnquotedAttributeValue: {\n reason: 'Unexpected character in unquoted attribute value',\n description: 'Unexpected `%c`. Quote the attribute value to include it'\n },\n /** @type {ErrorInfo} */\n unexpectedEqualsSignBeforeAttributeName: {\n reason: 'Unexpected equals sign before attribute name',\n description: 'Unexpected `%c`. Add an attribute name before it'\n },\n /** @type {ErrorInfo} */\n unexpectedNullCharacter: {\n reason: 'Unexpected NULL character',\n description:\n 'Unexpected code point `%x`. Do not use NULL characters in HTML'\n },\n /** @type {ErrorInfo} */\n unexpectedQuestionMarkInsteadOfTagName: {\n reason: 'Unexpected question mark instead of tag name',\n description: 'Unexpected `%c`. Expected an ASCII letter instead'\n },\n /** @type {ErrorInfo} */\n unexpectedSolidusInTag: {\n reason: 'Unexpected slash in tag',\n description:\n 'Unexpected `%c-1`. Expected it followed by `>` or in a quoted attribute value'\n },\n /** @type {ErrorInfo} */\n unknownNamedCharacterReference: {\n reason: 'Unexpected unknown named character reference',\n description:\n 'Unexpected character reference. Expected known named character references'\n }\n}\n",
65
- "/**\n * @import {Root} from 'hast'\n * @import {ParserError} from 'parse5'\n * @import {Value} from 'vfile'\n * @import {ErrorCode, Options} from './types.js'\n */\n\nimport {ok as assert} from 'devlop'\nimport {fromParse5} from 'hast-util-from-parse5'\nimport {parse, parseFragment} from 'parse5'\nimport {VFile} from 'vfile'\nimport {VFileMessage} from 'vfile-message'\nimport {errors} from './errors.js'\n\nconst base = 'https://html.spec.whatwg.org/multipage/parsing.html#parse-error-'\n\nconst dashToCamelRe = /-[a-z]/g\nconst formatCRe = /%c(?:([-+])(\\d+))?/g\nconst formatXRe = /%x/g\n\nconst fatalities = {2: true, 1: false, 0: null}\n\n/** @type {Readonly<Options>} */\nconst emptyOptions = {}\n\n/**\n * Turn serialized HTML into a hast tree.\n *\n * @param {VFile | Value} value\n * Serialized HTML to parse.\n * @param {Readonly<Options> | null | undefined} [options]\n * Configuration (optional).\n * @returns {Root}\n * Tree.\n */\nexport function fromHtml(value, options) {\n const settings = options || emptyOptions\n const onerror = settings.onerror\n const file = value instanceof VFile ? value : new VFile(value)\n const parseFunction = settings.fragment ? parseFragment : parse\n const document = String(file)\n const p5Document = parseFunction(document, {\n sourceCodeLocationInfo: true,\n // Note `parse5` types currently do not allow `undefined`.\n onParseError: settings.onerror ? internalOnerror : null,\n scriptingEnabled: false\n })\n\n // `parse5` returns document which are always mapped to roots.\n return /** @type {Root} */ (\n fromParse5(p5Document, {\n file,\n space: settings.space,\n verbose: settings.verbose\n })\n )\n\n /**\n * Handle a parse error.\n *\n * @param {ParserError} error\n * Parse5 error.\n * @returns {undefined}\n * Nothing.\n */\n function internalOnerror(error) {\n const code = error.code\n const name = camelcase(code)\n const setting = settings[name]\n const config = setting === null || setting === undefined ? true : setting\n const level = typeof config === 'number' ? config : config ? 1 : 0\n\n if (level) {\n const info = errors[name]\n assert(info, 'expected known error from `parse5`')\n\n const message = new VFileMessage(format(info.reason), {\n place: {\n start: {\n line: error.startLine,\n column: error.startCol,\n offset: error.startOffset\n },\n end: {\n line: error.endLine,\n column: error.endCol,\n offset: error.endOffset\n }\n },\n ruleId: code,\n source: 'hast-util-from-html'\n })\n\n if (file.path) {\n message.file = file.path\n message.name = file.path + ':' + message.name\n }\n\n message.fatal = fatalities[level]\n message.note = format(info.description)\n message.url = info.url === false ? undefined : base + code\n\n assert(onerror, '`internalOnerror` is not passed if `onerror` is not set')\n onerror(message)\n }\n\n /**\n * Format a human readable string about an error.\n *\n * @param {string} value\n * Value to format.\n * @returns {string}\n * Formatted.\n */\n function format(value) {\n return value.replace(formatCRe, formatC).replace(formatXRe, formatX)\n\n /**\n * Format the character.\n *\n * @param {string} _\n * Match.\n * @param {string} $1\n * Sign (`-` or `+`, optional).\n * @param {string} $2\n * Offset.\n * @returns {string}\n * Formatted.\n */\n function formatC(_, $1, $2) {\n const offset =\n ($2 ? Number.parseInt($2, 10) : 0) * ($1 === '-' ? -1 : 1)\n const char = document.charAt(error.startOffset + offset)\n return visualizeCharacter(char)\n }\n\n /**\n * Format the character code.\n *\n * @returns {string}\n * Formatted.\n */\n function formatX() {\n return visualizeCharacterCode(document.charCodeAt(error.startOffset))\n }\n }\n }\n}\n\n/**\n * @param {string} value\n * Error code in dash case.\n * @returns {ErrorCode}\n * Error code in camelcase.\n */\nfunction camelcase(value) {\n // This should match an error code.\n return /** @type {ErrorCode} */ (value.replace(dashToCamelRe, dashToCamel))\n}\n\n/**\n * @param {string} $0\n * Match.\n * @returns {string}\n * Camelcased.\n */\nfunction dashToCamel($0) {\n return $0.charAt(1).toUpperCase()\n}\n\n/**\n * @param {string} char\n * Character.\n * @returns {string}\n * Formatted.\n */\nfunction visualizeCharacter(char) {\n return char === '`' ? '` ` `' : char\n}\n\n/**\n * @param {number} charCode\n * Character code.\n * @returns {string}\n * Formatted.\n */\nfunction visualizeCharacterCode(charCode) {\n return '0x' + charCode.toString(16).toUpperCase()\n}\n",
66
- "/**\n * @import {Schema as SchemaType, Space} from 'property-information'\n */\n\n/** @type {SchemaType} */\nexport class Schema {\n /**\n * @param {SchemaType['property']} property\n * Property.\n * @param {SchemaType['normal']} normal\n * Normal.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Schema.\n */\n constructor(property, normal, space) {\n this.normal = normal\n this.property = property\n\n if (space) {\n this.space = space\n }\n }\n}\n\nSchema.prototype.normal = {}\nSchema.prototype.property = {}\nSchema.prototype.space = undefined\n",
67
- "/**\n * @import {Info, Space} from 'property-information'\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {ReadonlyArray<Schema>} definitions\n * Definitions.\n * @param {Space | undefined} [space]\n * Space.\n * @returns {Schema}\n * Schema.\n */\nexport function merge(definitions, space) {\n /** @type {Record<string, Info>} */\n const property = {}\n /** @type {Record<string, string>} */\n const normal = {}\n\n for (const definition of definitions) {\n Object.assign(property, definition.property)\n Object.assign(normal, definition.normal)\n }\n\n return new Schema(property, normal, space)\n}\n",
68
- "/**\n * Get the cleaned case insensitive form of an attribute or property.\n *\n * @param {string} value\n * An attribute-like or property-like name.\n * @returns {string}\n * Value that can be used to look up the properly cased property on a\n * `Schema`.\n */\nexport function normalize(value) {\n return value.toLowerCase()\n}\n",
69
- "/**\n * @import {Info as InfoType} from 'property-information'\n */\n\n/** @type {InfoType} */\nexport class Info {\n /**\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @returns\n * Info.\n */\n constructor(property, attribute) {\n this.attribute = attribute\n this.property = property\n }\n}\n\nInfo.prototype.attribute = ''\nInfo.prototype.booleanish = false\nInfo.prototype.boolean = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.defined = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.number = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.property = ''\nInfo.prototype.spaceSeparated = false\nInfo.prototype.space = undefined\n",
70
- "let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n return 2 ** ++powers\n}\n",
71
- "/**\n * @import {Space} from 'property-information'\n */\n\nimport {Info} from './info.js'\nimport * as types from './types.js'\n\nconst checks = /** @type {ReadonlyArray<keyof typeof types>} */ (\n Object.keys(types)\n)\n\nexport class DefinedInfo extends Info {\n /**\n * @constructor\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @param {number | null | undefined} [mask]\n * Mask.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Info.\n */\n constructor(property, attribute, mask, space) {\n let index = -1\n\n super(property, attribute)\n\n mark(this, 'space', space)\n\n if (typeof mask === 'number') {\n while (++index < checks.length) {\n const check = checks[index]\n mark(this, checks[index], (mask & types[check]) === types[check])\n }\n }\n }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @template {keyof DefinedInfo} Key\n * Key type.\n * @param {DefinedInfo} values\n * Info.\n * @param {Key} key\n * Key.\n * @param {DefinedInfo[Key]} value\n * Value.\n * @returns {undefined}\n * Nothing.\n */\nfunction mark(values, key, value) {\n if (value) {\n values[key] = value\n }\n}\n",
72
- "/**\n * @import {Info, Space} from 'property-information'\n */\n\n/**\n * @typedef Definition\n * Definition of a schema.\n * @property {Record<string, string> | undefined} [attributes]\n * Normalzed names to special attribute case.\n * @property {ReadonlyArray<string> | undefined} [mustUseProperty]\n * Normalized names that must be set as properties.\n * @property {Record<string, number | null>} properties\n * Property names to their types.\n * @property {Space | undefined} [space]\n * Space.\n * @property {Transform} transform\n * Transform a property name.\n */\n\n/**\n * @callback Transform\n * Transform.\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Attribute.\n */\n\nimport {normalize} from '../normalize.js'\nimport {DefinedInfo} from './defined-info.js'\nimport {Schema} from './schema.js'\n\n/**\n * @param {Definition} definition\n * Definition.\n * @returns {Schema}\n * Schema.\n */\nexport function create(definition) {\n /** @type {Record<string, Info>} */\n const properties = {}\n /** @type {Record<string, string>} */\n const normals = {}\n\n for (const [property, value] of Object.entries(definition.properties)) {\n const info = new DefinedInfo(\n property,\n definition.transform(definition.attributes || {}, property),\n value,\n definition.space\n )\n\n if (\n definition.mustUseProperty &&\n definition.mustUseProperty.includes(property)\n ) {\n info.mustUseProperty = true\n }\n\n properties[property] = info\n\n normals[normalize(property)] = property\n normals[normalize(info.attribute)] = property\n }\n\n return new Schema(properties, normals, definition.space)\n}\n",
73
- "import {create} from './util/create.js'\nimport {booleanish, number, spaceSeparated} from './util/types.js'\n\nexport const aria = create({\n properties: {\n ariaActiveDescendant: null,\n ariaAtomic: booleanish,\n ariaAutoComplete: null,\n ariaBusy: booleanish,\n ariaChecked: booleanish,\n ariaColCount: number,\n ariaColIndex: number,\n ariaColSpan: number,\n ariaControls: spaceSeparated,\n ariaCurrent: null,\n ariaDescribedBy: spaceSeparated,\n ariaDetails: null,\n ariaDisabled: booleanish,\n ariaDropEffect: spaceSeparated,\n ariaErrorMessage: null,\n ariaExpanded: booleanish,\n ariaFlowTo: spaceSeparated,\n ariaGrabbed: booleanish,\n ariaHasPopup: null,\n ariaHidden: booleanish,\n ariaInvalid: null,\n ariaKeyShortcuts: null,\n ariaLabel: null,\n ariaLabelledBy: spaceSeparated,\n ariaLevel: number,\n ariaLive: null,\n ariaModal: booleanish,\n ariaMultiLine: booleanish,\n ariaMultiSelectable: booleanish,\n ariaOrientation: null,\n ariaOwns: spaceSeparated,\n ariaPlaceholder: null,\n ariaPosInSet: number,\n ariaPressed: booleanish,\n ariaReadOnly: booleanish,\n ariaRelevant: null,\n ariaRequired: booleanish,\n ariaRoleDescription: spaceSeparated,\n ariaRowCount: number,\n ariaRowIndex: number,\n ariaRowSpan: number,\n ariaSelected: booleanish,\n ariaSetSize: number,\n ariaSort: null,\n ariaValueMax: number,\n ariaValueMin: number,\n ariaValueNow: number,\n ariaValueText: null,\n role: null\n },\n transform(_, property) {\n return property === 'role'\n ? property\n : 'aria-' + property.slice(4).toLowerCase()\n }\n})\n",
74
- "/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} attribute\n * Attribute.\n * @returns {string}\n * Transformed attribute.\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n return attribute in attributes ? attributes[attribute] : attribute\n}\n",
75
- "import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Transformed property.\n */\nexport function caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n",
76
- "import {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n booleanish,\n boolean,\n commaSeparated,\n number,\n overloadedBoolean,\n spaceSeparated\n} from './util/types.js'\n\nexport const html = create({\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\n mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n properties: {\n // Standard Properties.\n abbr: null,\n accept: commaSeparated,\n acceptCharset: spaceSeparated,\n accessKey: spaceSeparated,\n action: null,\n allow: null,\n allowFullScreen: boolean,\n allowPaymentRequest: boolean,\n allowUserMedia: boolean,\n alpha: boolean,\n alt: null,\n as: null,\n async: boolean,\n autoCapitalize: null,\n autoComplete: spaceSeparated,\n autoFocus: boolean,\n autoPlay: boolean,\n blocking: spaceSeparated,\n capture: null,\n charSet: null,\n checked: boolean,\n cite: null,\n className: spaceSeparated,\n closedBy: null,\n colorSpace: null,\n cols: number,\n colSpan: number,\n command: null,\n commandFor: null,\n content: null,\n contentEditable: booleanish,\n controls: boolean,\n controlsList: spaceSeparated,\n coords: number | commaSeparated,\n crossOrigin: null,\n data: null,\n dateTime: null,\n decoding: null,\n default: boolean,\n defer: boolean,\n dir: null,\n dirName: null,\n disabled: boolean,\n download: overloadedBoolean,\n draggable: booleanish,\n encType: null,\n enterKeyHint: null,\n fetchPriority: null,\n form: null,\n formAction: null,\n formEncType: null,\n formMethod: null,\n formNoValidate: boolean,\n formTarget: null,\n headers: spaceSeparated,\n height: number,\n hidden: overloadedBoolean,\n high: number,\n href: null,\n hrefLang: null,\n htmlFor: spaceSeparated,\n httpEquiv: spaceSeparated,\n id: null,\n imageSizes: null,\n imageSrcSet: null,\n inert: boolean,\n inputMode: null,\n integrity: null,\n is: null,\n isMap: boolean,\n itemId: null,\n itemProp: spaceSeparated,\n itemRef: spaceSeparated,\n itemScope: boolean,\n itemType: spaceSeparated,\n kind: null,\n label: null,\n lang: null,\n language: null,\n list: null,\n loading: null,\n loop: boolean,\n low: number,\n manifest: null,\n max: null,\n maxLength: number,\n media: null,\n method: null,\n min: null,\n minLength: number,\n multiple: boolean,\n muted: boolean,\n name: null,\n nonce: null,\n noModule: boolean,\n noValidate: boolean,\n onAbort: null,\n onAfterPrint: null,\n onAuxClick: null,\n onBeforeMatch: null,\n onBeforePrint: null,\n onBeforeToggle: null,\n onBeforeUnload: null,\n onBlur: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onContextLost: null,\n onContextMenu: null,\n onContextRestored: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFormData: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLanguageChange: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadEnd: null,\n onLoadStart: null,\n onMessage: null,\n onMessageError: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRejectionHandled: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onScrollEnd: null,\n onSecurityPolicyViolation: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onSlotChange: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnhandledRejection: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onWheel: null,\n open: boolean,\n optimum: number,\n pattern: null,\n ping: spaceSeparated,\n placeholder: null,\n playsInline: boolean,\n popover: null,\n popoverTarget: null,\n popoverTargetAction: null,\n poster: null,\n preload: null,\n readOnly: boolean,\n referrerPolicy: null,\n rel: spaceSeparated,\n required: boolean,\n reversed: boolean,\n rows: number,\n rowSpan: number,\n sandbox: spaceSeparated,\n scope: null,\n scoped: boolean,\n seamless: boolean,\n selected: boolean,\n shadowRootClonable: boolean,\n shadowRootCustomElementRegistry: boolean,\n shadowRootDelegatesFocus: boolean,\n shadowRootMode: null,\n shadowRootSerializable: boolean,\n shape: null,\n size: number,\n sizes: null,\n slot: null,\n span: number,\n spellCheck: booleanish,\n src: null,\n srcDoc: null,\n srcLang: null,\n srcSet: null,\n start: number,\n step: null,\n style: null,\n tabIndex: number,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: boolean,\n useMap: null,\n value: booleanish,\n width: number,\n wrap: null,\n writingSuggestions: null,\n\n // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null, // Several. Use CSS `text-align` instead,\n aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n archive: spaceSeparated, // `<object>`. List of URIs to archives\n axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n background: null, // `<body>`. Use CSS `background-image` instead\n bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n border: number, // `<table>`. Use CSS `border-width` instead,\n borderColor: null, // `<table>`. Use CSS `border-color` instead,\n bottomMargin: number, // `<body>`\n cellPadding: null, // `<table>`\n cellSpacing: null, // `<table>`\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // `<object>`\n clear: null, // `<br>`. Use CSS `clear` instead\n code: null, // `<object>`\n codeBase: null, // `<object>`\n codeType: null, // `<object>`\n color: null, // `<font>` and `<hr>`. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // `<object>`\n event: null, // `<script>`\n face: null, // `<font>`. Use CSS instead\n frame: null, // `<table>`\n frameBorder: null, // `<iframe>`. Use CSS `border` instead\n hSpace: number, // `<img>` and `<object>`\n leftMargin: number, // `<body>`\n link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n lowSrc: null, // `<img>`. Use a `<picture>`\n marginHeight: number, // `<body>`\n marginWidth: number, // `<body>`\n noResize: boolean, // `<frame>`\n noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n noWrap: boolean, // `<td>` and `<th>`\n object: null, // `<applet>`\n profile: null, // `<head>`\n prompt: null, // `<isindex>`\n rev: null, // `<link>`\n rightMargin: number, // `<body>`\n rules: null, // `<table>`\n scheme: null, // `<meta>`\n scrolling: booleanish, // `<frame>`. Use overflow in the child context\n standby: null, // `<object>`\n summary: null, // `<table>`\n text: null, // `<body>`. Use CSS `color` instead\n topMargin: number, // `<body>`\n valueType: null, // `<param>`\n version: null, // `<html>`. Use a doctype.\n vAlign: null, // Several. Use CSS `vertical-align` instead\n vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n vSpace: number, // `<img>` and `<object>`\n\n // Non-standard Properties.\n allowTransparency: null,\n autoCorrect: null,\n autoSave: null,\n credentialless: boolean,\n disablePictureInPicture: boolean,\n disableRemotePlayback: boolean,\n exportParts: commaSeparated,\n part: spaceSeparated,\n prefix: null,\n property: null,\n results: number,\n security: null,\n unselectable: null\n },\n space: 'html',\n transform: caseInsensitiveTransform\n})\n",
77
- "import {caseSensitiveTransform} from './util/case-sensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n boolean,\n commaOrSpaceSeparated,\n commaSeparated,\n number,\n spaceSeparated\n} from './util/types.js'\n\nexport const svg = create({\n attributes: {\n accentHeight: 'accent-height',\n alignmentBaseline: 'alignment-baseline',\n arabicForm: 'arabic-form',\n baselineShift: 'baseline-shift',\n capHeight: 'cap-height',\n className: 'class',\n clipPath: 'clip-path',\n clipRule: 'clip-rule',\n colorInterpolation: 'color-interpolation',\n colorInterpolationFilters: 'color-interpolation-filters',\n colorProfile: 'color-profile',\n colorRendering: 'color-rendering',\n crossOrigin: 'crossorigin',\n dataType: 'datatype',\n dominantBaseline: 'dominant-baseline',\n enableBackground: 'enable-background',\n fillOpacity: 'fill-opacity',\n fillRule: 'fill-rule',\n floodColor: 'flood-color',\n floodOpacity: 'flood-opacity',\n fontFamily: 'font-family',\n fontSize: 'font-size',\n fontSizeAdjust: 'font-size-adjust',\n fontStretch: 'font-stretch',\n fontStyle: 'font-style',\n fontVariant: 'font-variant',\n fontWeight: 'font-weight',\n glyphName: 'glyph-name',\n glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n glyphOrientationVertical: 'glyph-orientation-vertical',\n hrefLang: 'hreflang',\n horizAdvX: 'horiz-adv-x',\n horizOriginX: 'horiz-origin-x',\n horizOriginY: 'horiz-origin-y',\n imageRendering: 'image-rendering',\n letterSpacing: 'letter-spacing',\n lightingColor: 'lighting-color',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n maskType: 'mask-type',\n navDown: 'nav-down',\n navDownLeft: 'nav-down-left',\n navDownRight: 'nav-down-right',\n navLeft: 'nav-left',\n navNext: 'nav-next',\n navPrev: 'nav-prev',\n navRight: 'nav-right',\n navUp: 'nav-up',\n navUpLeft: 'nav-up-left',\n navUpRight: 'nav-up-right',\n onAbort: 'onabort',\n onActivate: 'onactivate',\n onAfterPrint: 'onafterprint',\n onBeforePrint: 'onbeforeprint',\n onBegin: 'onbegin',\n onCancel: 'oncancel',\n onCanPlay: 'oncanplay',\n onCanPlayThrough: 'oncanplaythrough',\n onChange: 'onchange',\n onClick: 'onclick',\n onClose: 'onclose',\n onCopy: 'oncopy',\n onCueChange: 'oncuechange',\n onCut: 'oncut',\n onDblClick: 'ondblclick',\n onDrag: 'ondrag',\n onDragEnd: 'ondragend',\n onDragEnter: 'ondragenter',\n onDragExit: 'ondragexit',\n onDragLeave: 'ondragleave',\n onDragOver: 'ondragover',\n onDragStart: 'ondragstart',\n onDrop: 'ondrop',\n onDurationChange: 'ondurationchange',\n onEmptied: 'onemptied',\n onEnd: 'onend',\n onEnded: 'onended',\n onError: 'onerror',\n onFocus: 'onfocus',\n onFocusIn: 'onfocusin',\n onFocusOut: 'onfocusout',\n onHashChange: 'onhashchange',\n onInput: 'oninput',\n onInvalid: 'oninvalid',\n onKeyDown: 'onkeydown',\n onKeyPress: 'onkeypress',\n onKeyUp: 'onkeyup',\n onLoad: 'onload',\n onLoadedData: 'onloadeddata',\n onLoadedMetadata: 'onloadedmetadata',\n onLoadStart: 'onloadstart',\n onMessage: 'onmessage',\n onMouseDown: 'onmousedown',\n onMouseEnter: 'onmouseenter',\n onMouseLeave: 'onmouseleave',\n onMouseMove: 'onmousemove',\n onMouseOut: 'onmouseout',\n onMouseOver: 'onmouseover',\n onMouseUp: 'onmouseup',\n onMouseWheel: 'onmousewheel',\n onOffline: 'onoffline',\n onOnline: 'ononline',\n onPageHide: 'onpagehide',\n onPageShow: 'onpageshow',\n onPaste: 'onpaste',\n onPause: 'onpause',\n onPlay: 'onplay',\n onPlaying: 'onplaying',\n onPopState: 'onpopstate',\n onProgress: 'onprogress',\n onRateChange: 'onratechange',\n onRepeat: 'onrepeat',\n onReset: 'onreset',\n onResize: 'onresize',\n onScroll: 'onscroll',\n onSeeked: 'onseeked',\n onSeeking: 'onseeking',\n onSelect: 'onselect',\n onShow: 'onshow',\n onStalled: 'onstalled',\n onStorage: 'onstorage',\n onSubmit: 'onsubmit',\n onSuspend: 'onsuspend',\n onTimeUpdate: 'ontimeupdate',\n onToggle: 'ontoggle',\n onUnload: 'onunload',\n onVolumeChange: 'onvolumechange',\n onWaiting: 'onwaiting',\n onZoom: 'onzoom',\n overlinePosition: 'overline-position',\n overlineThickness: 'overline-thickness',\n paintOrder: 'paint-order',\n panose1: 'panose-1',\n pointerEvents: 'pointer-events',\n referrerPolicy: 'referrerpolicy',\n renderingIntent: 'rendering-intent',\n shapeRendering: 'shape-rendering',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strikethroughPosition: 'strikethrough-position',\n strikethroughThickness: 'strikethrough-thickness',\n strokeDashArray: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeLineCap: 'stroke-linecap',\n strokeLineJoin: 'stroke-linejoin',\n strokeMiterLimit: 'stroke-miterlimit',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n tabIndex: 'tabindex',\n textAnchor: 'text-anchor',\n textDecoration: 'text-decoration',\n textRendering: 'text-rendering',\n transformOrigin: 'transform-origin',\n typeOf: 'typeof',\n underlinePosition: 'underline-position',\n underlineThickness: 'underline-thickness',\n unicodeBidi: 'unicode-bidi',\n unicodeRange: 'unicode-range',\n unitsPerEm: 'units-per-em',\n vAlphabetic: 'v-alphabetic',\n vHanging: 'v-hanging',\n vIdeographic: 'v-ideographic',\n vMathematical: 'v-mathematical',\n vectorEffect: 'vector-effect',\n vertAdvY: 'vert-adv-y',\n vertOriginX: 'vert-origin-x',\n vertOriginY: 'vert-origin-y',\n wordSpacing: 'word-spacing',\n writingMode: 'writing-mode',\n xHeight: 'x-height',\n // These were camelcased in Tiny. Now lowercased in SVG 2\n playbackOrder: 'playbackorder',\n timelineBegin: 'timelinebegin'\n },\n properties: {\n about: commaOrSpaceSeparated,\n accentHeight: number,\n accumulate: null,\n additive: null,\n alignmentBaseline: null,\n alphabetic: number,\n amplitude: number,\n arabicForm: null,\n ascent: number,\n attributeName: null,\n attributeType: null,\n azimuth: number,\n bandwidth: null,\n baselineShift: null,\n baseFrequency: null,\n baseProfile: null,\n bbox: null,\n begin: null,\n bias: number,\n by: null,\n calcMode: null,\n capHeight: number,\n className: spaceSeparated,\n clip: null,\n clipPath: null,\n clipPathUnits: null,\n clipRule: null,\n color: null,\n colorInterpolation: null,\n colorInterpolationFilters: null,\n colorProfile: null,\n colorRendering: null,\n content: null,\n contentScriptType: null,\n contentStyleType: null,\n crossOrigin: null,\n cursor: null,\n cx: null,\n cy: null,\n d: null,\n dataType: null,\n defaultAction: null,\n descent: number,\n diffuseConstant: number,\n direction: null,\n display: null,\n dur: null,\n divisor: number,\n dominantBaseline: null,\n download: boolean,\n dx: null,\n dy: null,\n edgeMode: null,\n editable: null,\n elevation: number,\n enableBackground: null,\n end: null,\n event: null,\n exponent: number,\n externalResourcesRequired: null,\n fill: null,\n fillOpacity: number,\n fillRule: null,\n filter: null,\n filterRes: null,\n filterUnits: null,\n floodColor: null,\n floodOpacity: null,\n focusable: null,\n focusHighlight: null,\n fontFamily: null,\n fontSize: null,\n fontSizeAdjust: null,\n fontStretch: null,\n fontStyle: null,\n fontVariant: null,\n fontWeight: null,\n format: null,\n fr: null,\n from: null,\n fx: null,\n fy: null,\n g1: commaSeparated,\n g2: commaSeparated,\n glyphName: commaSeparated,\n glyphOrientationHorizontal: null,\n glyphOrientationVertical: null,\n glyphRef: null,\n gradientTransform: null,\n gradientUnits: null,\n handler: null,\n hanging: number,\n hatchContentUnits: null,\n hatchUnits: null,\n height: null,\n href: null,\n hrefLang: null,\n horizAdvX: number,\n horizOriginX: number,\n horizOriginY: number,\n id: null,\n ideographic: number,\n imageRendering: null,\n initialVisibility: null,\n in: null,\n in2: null,\n intercept: number,\n k: number,\n k1: number,\n k2: number,\n k3: number,\n k4: number,\n kernelMatrix: commaOrSpaceSeparated,\n kernelUnitLength: null,\n keyPoints: null, // SEMI_COLON_SEPARATED\n keySplines: null, // SEMI_COLON_SEPARATED\n keyTimes: null, // SEMI_COLON_SEPARATED\n kerning: null,\n lang: null,\n lengthAdjust: null,\n letterSpacing: null,\n lightingColor: null,\n limitingConeAngle: number,\n local: null,\n markerEnd: null,\n markerMid: null,\n markerStart: null,\n markerHeight: null,\n markerUnits: null,\n markerWidth: null,\n mask: null,\n maskContentUnits: null,\n maskType: null,\n maskUnits: null,\n mathematical: null,\n max: null,\n media: null,\n mediaCharacterEncoding: null,\n mediaContentEncodings: null,\n mediaSize: number,\n mediaTime: null,\n method: null,\n min: null,\n mode: null,\n name: null,\n navDown: null,\n navDownLeft: null,\n navDownRight: null,\n navLeft: null,\n navNext: null,\n navPrev: null,\n navRight: null,\n navUp: null,\n navUpLeft: null,\n navUpRight: null,\n numOctaves: null,\n observer: null,\n offset: null,\n onAbort: null,\n onActivate: null,\n onAfterPrint: null,\n onBeforePrint: null,\n onBegin: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnd: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFocusIn: null,\n onFocusOut: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadStart: null,\n onMessage: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onMouseWheel: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRepeat: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onShow: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onZoom: null,\n opacity: null,\n operator: null,\n order: null,\n orient: null,\n orientation: null,\n origin: null,\n overflow: null,\n overlay: null,\n overlinePosition: number,\n overlineThickness: number,\n paintOrder: null,\n panose1: null,\n path: null,\n pathLength: number,\n patternContentUnits: null,\n patternTransform: null,\n patternUnits: null,\n phase: null,\n ping: spaceSeparated,\n pitch: null,\n playbackOrder: null,\n pointerEvents: null,\n points: null,\n pointsAtX: number,\n pointsAtY: number,\n pointsAtZ: number,\n preserveAlpha: null,\n preserveAspectRatio: null,\n primitiveUnits: null,\n propagate: null,\n property: commaOrSpaceSeparated,\n r: null,\n radius: null,\n referrerPolicy: null,\n refX: null,\n refY: null,\n rel: commaOrSpaceSeparated,\n rev: commaOrSpaceSeparated,\n renderingIntent: null,\n repeatCount: null,\n repeatDur: null,\n requiredExtensions: commaOrSpaceSeparated,\n requiredFeatures: commaOrSpaceSeparated,\n requiredFonts: commaOrSpaceSeparated,\n requiredFormats: commaOrSpaceSeparated,\n resource: null,\n restart: null,\n result: null,\n rotate: null,\n rx: null,\n ry: null,\n scale: null,\n seed: null,\n shapeRendering: null,\n side: null,\n slope: null,\n snapshotTime: null,\n specularConstant: number,\n specularExponent: number,\n spreadMethod: null,\n spacing: null,\n startOffset: null,\n stdDeviation: null,\n stemh: null,\n stemv: null,\n stitchTiles: null,\n stopColor: null,\n stopOpacity: null,\n strikethroughPosition: number,\n strikethroughThickness: number,\n string: null,\n stroke: null,\n strokeDashArray: commaOrSpaceSeparated,\n strokeDashOffset: null,\n strokeLineCap: null,\n strokeLineJoin: null,\n strokeMiterLimit: number,\n strokeOpacity: number,\n strokeWidth: null,\n style: null,\n surfaceScale: number,\n syncBehavior: null,\n syncBehaviorDefault: null,\n syncMaster: null,\n syncTolerance: null,\n syncToleranceDefault: null,\n systemLanguage: commaOrSpaceSeparated,\n tabIndex: number,\n tableValues: null,\n target: null,\n targetX: number,\n targetY: number,\n textAnchor: null,\n textDecoration: null,\n textRendering: null,\n textLength: null,\n timelineBegin: null,\n title: null,\n transformBehavior: null,\n type: null,\n typeOf: commaOrSpaceSeparated,\n to: null,\n transform: null,\n transformOrigin: null,\n u1: null,\n u2: null,\n underlinePosition: number,\n underlineThickness: number,\n unicode: null,\n unicodeBidi: null,\n unicodeRange: null,\n unitsPerEm: number,\n values: null,\n vAlphabetic: number,\n vMathematical: number,\n vectorEffect: null,\n vHanging: number,\n vIdeographic: number,\n version: null,\n vertAdvY: number,\n vertOriginX: number,\n vertOriginY: number,\n viewBox: null,\n viewTarget: null,\n visibility: null,\n width: null,\n widths: null,\n wordSpacing: null,\n writingMode: null,\n x: null,\n x1: null,\n x2: null,\n xChannelSelector: null,\n xHeight: number,\n y: null,\n y1: null,\n y2: null,\n yChannelSelector: null,\n z: null,\n zoomAndPan: null\n },\n space: 'svg',\n transform: caseSensitiveTransform\n})\n",
78
- "import {create} from './util/create.js'\n\nexport const xlink = create({\n properties: {\n xLinkActuate: null,\n xLinkArcRole: null,\n xLinkHref: null,\n xLinkRole: null,\n xLinkShow: null,\n xLinkTitle: null,\n xLinkType: null\n },\n space: 'xlink',\n transform(_, property) {\n return 'xlink:' + property.slice(5).toLowerCase()\n }\n})\n",
79
- "import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n attributes: {xmlnsxlink: 'xmlns:xlink'},\n properties: {xmlnsXLink: null, xmlns: null},\n space: 'xmlns',\n transform: caseInsensitiveTransform\n})\n",
80
- "import {create} from './util/create.js'\n\nexport const xml = create({\n properties: {xmlBase: null, xmlLang: null, xmlSpace: null},\n space: 'xml',\n transform(_, property) {\n return 'xml:' + property.slice(3).toLowerCase()\n }\n})\n",
81
- "/**\n * @import {Schema} from 'property-information'\n */\n\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\nimport {normalize} from './normalize.js'\n\nconst cap = /[A-Z]/g\nconst dash = /-[a-z]/g\nconst valid = /^data[-\\w.:]+$/i\n\n/**\n * Look up info on a property.\n *\n * In most cases the given `schema` contains info on the property.\n * All standard,\n * most legacy,\n * and some non-standard properties are supported.\n * For these cases,\n * the returned `Info` has hints about the value of the property.\n *\n * `name` can also be a valid data attribute or property,\n * in which case an `Info` object with the correctly cased `attribute` and\n * `property` is returned.\n *\n * `name` can be an unknown attribute,\n * in which case an `Info` object with `attribute` and `property` set to the\n * given name is returned.\n * It is not recommended to provide unsupported legacy or recently specced\n * properties.\n *\n *\n * @param {Schema} schema\n * Schema;\n * either the `html` or `svg` export.\n * @param {string} value\n * An attribute-like or property-like name;\n * it will be passed through `normalize` to hopefully find the correct info.\n * @returns {Info}\n * Info.\n */\nexport function find(schema, value) {\n const normal = normalize(value)\n let property = value\n let Type = Info\n\n if (normal in schema.normal) {\n return schema.property[schema.normal[normal]]\n }\n\n if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n // Attribute or property.\n if (value.charAt(4) === '-') {\n // Turn it into a property.\n const rest = value.slice(5).replace(dash, camelcase)\n property = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n } else {\n // Turn it into an attribute.\n const rest = value.slice(4)\n\n if (!dash.test(rest)) {\n let dashes = rest.replace(cap, kebab)\n\n if (dashes.charAt(0) !== '-') {\n dashes = '-' + dashes\n }\n\n value = 'data' + dashes\n }\n }\n\n Type = DefinedInfo\n }\n\n return new Type(property, value)\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Kebab.\n */\nfunction kebab($0) {\n return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Camel.\n */\nfunction camelcase($0) {\n return $0.charAt(1).toUpperCase()\n}\n",
82
- "// Note: types exposed from `index.d.ts`.\nimport {merge} from './lib/util/merge.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\nimport {xlink} from './lib/xlink.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {xml} from './lib/xml.js'\n\nexport {hastToReact} from './lib/hast-to-react.js'\n\nexport const html = merge([aria, htmlBase, xlink, xmlns, xml], 'html')\n\nexport {find} from './lib/find.js'\nexport {normalize} from './lib/normalize.js'\n\nexport const svg = merge([aria, svgBase, xlink, xmlns, xml], 'svg')\n",
83
- "import { fromHtml } from \"hast-util-from-html\";\nimport { whitespace } from \"hast-util-whitespace\";\nimport { find, html as htmlInfo } from \"property-information\";\n\nimport type { Nodes as HastNode } from \"hast\";\nimport type { JxElement } from \"@jxsuite/schema/types\";\n\n/**\n * Convert an HTML string into an array of Jx tree nodes.\n *\n * @param {string} htmlString\n * @returns {(JxElement | string)[]}\n */\nexport function htmlToJx(htmlString: string) {\n const hast = fromHtml(htmlString, { fragment: true });\n return convertHastChildren(hast.children as HastNode[]);\n}\n\n/**\n * @param {HastNode[]} children\n * @returns {(JxElement | string)[]}\n */\nfunction convertHastChildren(children: HastNode[]) {\n const result: (JxElement | string)[] = [];\n for (const child of children) {\n const converted = convertHastNode(child);\n if (converted != null) {\n result.push(converted);\n }\n }\n return result;\n}\n\n/**\n * @param {HastNode} node\n * @returns {JxElement | string | null}\n */\nfunction convertHastNode(node: HastNode) {\n if (node.type === \"text\") {\n if (whitespace(node as Parameters<typeof whitespace>[0])) {\n return null;\n }\n return node.value ?? null;\n }\n\n if (node.type === \"element\") {\n const el: JxElement = { tagName: node.tagName };\n\n if (node.properties && Object.keys(node.properties).length > 0) {\n const { style, attrs } = hastPropsToJx(node.properties);\n if (Object.keys(attrs).length > 0) {\n el.attributes = attrs;\n }\n if (Object.keys(style).length > 0) {\n el.style = style;\n }\n }\n\n const kids = node.children ? convertHastChildren(node.children) : [];\n\n if (kids.length === 1 && typeof kids[0] === \"string\") {\n [el.textContent] = kids;\n } else if (kids.length > 0) {\n el.children = kids as JxElement[];\n }\n\n return el;\n }\n\n return null;\n}\n\n/**\n * @param {Record<string, unknown>} properties\n * @returns {{ style: Record<string, string>; attrs: Record<string, string> }}\n */\nfunction hastPropsToJx(properties: Record<string, unknown>) {\n const attrs: Record<string, string> = {};\n const style: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(properties)) {\n if (value === false || value === undefined || value === null) {\n continue;\n }\n\n const info = find(htmlInfo, key);\n const name = info.attribute;\n\n if (name === \"style\" && typeof value === \"string\") {\n parseInlineStyle(value, style);\n continue;\n }\n\n if (value === true) {\n attrs[name] = \"\";\n } else if (Array.isArray(value)) {\n attrs[name] = value.join(info.commaSeparated ? \", \" : \" \");\n } else {\n attrs[name] = String(value);\n }\n }\n return { attrs, style };\n}\n\n/**\n * @param {string} styleStr\n * @param {Record<string, string>} out\n */\nfunction parseInlineStyle(styleStr: string, out: Record<string, string>) {\n for (const decl of styleStr.split(\";\")) {\n const colon = decl.indexOf(\":\");\n if (colon === -1) {\n continue;\n }\n const prop = decl.slice(0, colon).trim();\n const val = decl.slice(colon + 1).trim();\n if (prop && val) {\n out[prop] = val;\n }\n }\n}\n",
84
- "/**\n * Keymap.ts — chords in, command ids out.\n *\n * Three jobs, deliberately in one file because they must agree on one canonical chord string:\n *\n * 1. **Normalisation.** `\"Cmd+Shift+P\"`, `\"meta+shift+p\"` and `\"mod+shift+P\"` are the same chord.\n * Everything is stored as `\"mod+shift+p\"` — modifiers in a fixed order, key lowercase.\n * 2. **Formatting.** ONE function turns a chord into what the user reads: `⌘⇧P` on mac, `Ctrl+Shift+P`\n * everywhere else. Today `toolbar.ts:301` and `:555` hardcode `⌘P` and show it to Windows and\n * Linux users; `formatChord` is what kills that everywhere at once.\n * 3. **Resolution through a scope stack.** `caret > grid/code engine > focused dock > global`. A chord\n * bound in a narrower scope shadows the same chord in a wider one — that is the mechanism, not\n * an accident, and it is why `keyScope` exists as a field separate from `level`.\n * {@link overlappingScopes} is the same fact read the other way round: which scopes can be live\n * at one instant, and therefore which pairs cannot both answer one chord.\n *\n * Conflicts fail loudly at registration: two commands claiming one chord in ONE scope throws. That\n * is the class of bug that let ⌘W (`editor/shortcuts.ts:192`, refuses to close the last tab) and\n * the tab strip's × (`panels/tab-strip.ts:182`, closes it happily) disagree for a year.\n *\n * 4. **The user's layer.** A rebinding is an OVERRIDE (`setOverrides`), never an edit to a record:\n * `declaredFor(id)` keeps answering what the registry declared, which is what a reset restores\n * and what `specs/studio.md` §15 rule 2 means by the Keyboard sheet being a projection. The two\n * layers meet by one rule — **an override outranks a default, and a default never evicts an\n * override** — so the outcome does not depend on registration order, and a stored override that\n * a later release's new default happens to collide with cannot throw the bootstrap. Two defaults\n * colliding still throws, because that one is a bug in the app and nobody's preference.\n */\n\nimport { KEY_SCOPES } from \"./levels\";\nimport type { KeyScope } from \"./levels\";\n\n/** Canonical modifier order. `mod` is ⌘ on mac and Ctrl elsewhere — one token, one meaning. */\nconst MODIFIER_ORDER = [\"mod\", \"ctrl\", \"alt\", \"shift\"] as const;\n\ntype Modifier = (typeof MODIFIER_ORDER)[number];\n\n/** Spellings people actually write, mapped onto the canonical four. */\nconst MODIFIER_ALIASES: Readonly<Record<string, Modifier>> = {\n mod: \"mod\",\n cmd: \"mod\",\n command: \"mod\",\n meta: \"mod\",\n super: \"mod\",\n ctrl: \"ctrl\",\n control: \"ctrl\",\n alt: \"alt\",\n opt: \"alt\",\n option: \"alt\",\n shift: \"shift\",\n};\n\n/** Key aliases — arrow/space spellings and the `KeyboardEvent.key` values that differ. */\nconst KEY_ALIASES: Readonly<Record<string, string>> = {\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\",\n esc: \"escape\",\n space: \" \",\n spacebar: \" \",\n del: \"delete\",\n plus: \"=\",\n return: \"enter\",\n};\n\n/** How each modifier prints, per platform. */\nconst MAC_GLYPHS: Readonly<Record<Modifier, string>> = {\n mod: \"⌘\",\n ctrl: \"⌃\",\n alt: \"⌥\",\n shift: \"⇧\",\n};\n\nconst PC_LABELS: Readonly<Record<Modifier, string>> = {\n mod: \"Ctrl\",\n ctrl: \"Ctrl\",\n alt: \"Alt\",\n shift: \"Shift\",\n};\n\n/** Keys whose printed name is not just the uppercased token. */\nconst KEY_LABELS: Readonly<Record<string, string>> = {\n arrowup: \"↑\",\n arrowdown: \"↓\",\n arrowleft: \"←\",\n arrowright: \"→\",\n \" \": \"Space\",\n escape: \"Esc\",\n enter: \"Enter\",\n tab: \"Tab\",\n delete: \"Delete\",\n backspace: \"Backspace\",\n};\n\n/**\n * The five fields the keymap reads off a keyboard event.\n *\n * Declared structurally rather than as `KeyboardEvent` so this module — and the registry that\n * imports it — type without the DOM lib. That is what lets `scripts/check-command-levels.ts` load\n * the command set in a bare Bun process, and it costs nothing: a real `KeyboardEvent` satisfies\n * it.\n */\nexport interface KeyChordEvent {\n key: string;\n /**\n * The physical key, when the event carries one.\n *\n * Optional, and read for exactly one purpose: with ⇧ held, `key` is the SHIFTED glyph, so ⌘⇧2\n * arrives as `\"@\"` on a US layout, `\"\\\"\"` on a UK one and `\"é\"` on a French one. A chord table\n * that spelled `mod+shift+2` would then never fire — which is precisely the run of chords ⌘⇧1–4\n * (the Inspector tabs) needs. `code` is `\"Digit2\"` on all three, so the digit row resolves by\n * position, the way a user counting tabs means it.\n */\n code?: string;\n metaKey: boolean;\n ctrlKey: boolean;\n altKey: boolean;\n shiftKey: boolean;\n}\n\n/** Enough of `navigator` to tell a mac from everything else. */\nexport interface PlatformInfo {\n platform?: string;\n userAgent?: string;\n}\n\n/** A chord broken into its parts. */\nexport interface ParsedChord {\n mod: boolean;\n ctrl: boolean;\n alt: boolean;\n shift: boolean;\n /** Lowercased key token, e.g. \"p\", \"arrowup\", \",\" or a lone space for Space. */\n key: string;\n}\n\n/** The subset of a command record the keymap indexes. */\nexport interface BindableRecord {\n id: string;\n keybinding?: string | readonly string[] | undefined;\n keyScope?: KeyScope | undefined;\n}\n\n/** Parse `\"Cmd+Shift+P\"` into its parts. Throws on an empty or modifier-only chord. */\nexport function parseChord(chord: string): ParsedChord {\n const parsed: ParsedChord = { mod: false, ctrl: false, alt: false, shift: false, key: \"\" };\n const tokens = chord.split(\"+\");\n for (const [index, token] of tokens.entries()) {\n if (token === \"\") {\n // \"mod++\".split(\"+\") is [\"mod\", \"\", \"\"] — a pair of empty tokens is a literal \"+\" key, and\n // A lone empty token is just the slack in \"mod + s\".\n if (index > 0 && tokens[index - 1] === \"\") {\n parsed.key = \"+\";\n }\n continue;\n }\n // A whitespace-only token is the Space key; everything else is trimmed so \"Cmd + Shift + P\"\n // Parses the same as \"Cmd+Shift+P\".\n const trimmed = token.trim();\n const lower = trimmed === \"\" ? \" \" : trimmed.toLowerCase();\n const modifier = MODIFIER_ALIASES[lower];\n if (modifier) {\n parsed[modifier] = true;\n continue;\n }\n parsed.key = KEY_ALIASES[lower] ?? lower;\n }\n if (!parsed.key) {\n throw new Error(`keybinding \"${chord}\" has no key — a chord needs more than modifiers`);\n }\n return parsed;\n}\n\n/** Render a parsed chord back to its canonical string. */\nexport function serializeChord(parsed: ParsedChord): string {\n const parts = MODIFIER_ORDER.filter((modifier) => parsed[modifier]);\n return [...parts, parsed.key].join(\"+\");\n}\n\n/** `\"Cmd+Shift+P\"` → `\"mod+shift+p\"`. Idempotent; the storage form for every binding. */\nexport function normalizeChord(chord: string): string {\n return serializeChord(parseChord(chord));\n}\n\n/** Whether the current platform is a mac. `navigator` is injectable so tests never touch globals. */\nexport function isMacPlatform(\n nav: PlatformInfo = (globalThis as { navigator?: PlatformInfo }).navigator ?? {},\n): boolean {\n return /mac/i.test(nav.platform ?? nav.userAgent ?? \"\");\n}\n\n/**\n * The chord a keyboard event represents, in canonical form — or `\"\"` for a bare modifier press.\n *\n * `mod` is the platform's primary modifier: ⌘ on mac (where a separate ⌃ can still be held and\n * reads as `ctrl`), Ctrl elsewhere (where Ctrl is `mod` and never also `ctrl`).\n */\n/** `\"Digit4\"` → `\"4\"`; anything else → `undefined`. See {@link KeyChordEvent.code}. */\nfunction digitFromCode(code: string | undefined): string | undefined {\n const match = /^Digit(\\d)$/.exec(code ?? \"\");\n return match?.[1];\n}\n\nexport function chordFromEvent(event: KeyChordEvent, mac: boolean): string {\n const key = digitFromCode(event.code) ?? event.key.toLowerCase();\n /* A modifier ALONE is not a chord, and holding one is how every chord starts. Serializing the\n keydown for a lone Ctrl produced \"mod+control\", which `parseChord` refuses by contract (\"a\n chord needs more than modifiers\") — so every bare modifier press threw out of `resolveEvent`,\n into the keydown listener, and onto the console. `\"\"` is the honest answer, and\n {@link Keymap.resolveEvent} reads it as \"no chord yet\". */\n if (MODIFIER_ALIASES[key]) {\n return \"\";\n }\n const parsed: ParsedChord = {\n mod: mac ? event.metaKey : event.ctrlKey,\n ctrl: mac ? event.ctrlKey : false,\n alt: event.altKey,\n // Shift is implied by an uppercase letter but a chord table cannot rely on that: with ⇧ held\n // `e.key` is \"Z\" for ⌘⇧Z and \"?\" for ⇧/, so the flag is the only stable signal.\n shift: event.shiftKey,\n key: KEY_ALIASES[key] ?? key,\n };\n return serializeChord(parsed);\n}\n\n/** `\"mod+shift+p\"` → `⌘⇧P` on mac, `Ctrl+Shift+P` elsewhere. The only place a chord is styled. */\nexport function formatChord(chord: string, mac: boolean): string {\n const parsed = parseChord(chord);\n const held = MODIFIER_ORDER.filter((modifier) => parsed[modifier]);\n const key =\n KEY_LABELS[parsed.key] ??\n (parsed.key.length === 1\n ? parsed.key.toUpperCase()\n : parsed.key.charAt(0).toUpperCase() + parsed.key.slice(1));\n return mac\n ? held.map((modifier) => MAC_GLYPHS[modifier]).join(\"\") + key\n : [...held.map((modifier) => PC_LABELS[modifier]), key].join(\"+\");\n}\n\n/** Raised when two commands claim one chord in one scope. Carries both ids for the message. */\nexport class KeybindingConflictError extends Error {\n readonly chord: string;\n readonly scope: KeyScope;\n readonly existingId: string;\n readonly incomingId: string;\n\n constructor(chord: string, scope: KeyScope, existingId: string, incomingId: string) {\n super(\n `keybinding conflict: \"${chord}\" in scope \"${scope}\" is already bound to \"${existingId}\"; ` +\n `\"${incomingId}\" cannot claim it. Rebind one, or move one to a narrower keyScope.`,\n );\n this.name = \"KeybindingConflictError\";\n this.chord = chord;\n this.scope = scope;\n this.existingId = existingId;\n this.incomingId = incomingId;\n }\n}\n\n/** The overlay's stack, and the only one `palette` appears in. */\nconst PALETTE_SCOPES: readonly KeyScope[] = [\"palette\"];\n\n/** Every scope a dispatch stack can reach outside an overlay, `global` last-resort but named first. */\nconst DISPATCHABLE_SCOPES: readonly KeyScope[] = [\n \"global\",\n ...KEY_SCOPES.filter((scope) => scope !== \"global\" && scope !== \"palette\"),\n];\n\n/**\n * Every scope that can be live at the same instant as `scope` — including `scope` itself.\n *\n * Scopes are NOT independent namespaces, and treating them as one is how a rebinding steals a\n * chord. Dispatch walks a stack (`commands/context.ts` `keyScopeStack`), and every stack Studio can\n * be in is either the overlay's `[\"palette\"]` or `[<one engine scope>, \"global\"]`. So:\n *\n * - **`global` overlaps every engine scope.** Binding a canvas command to ⌘S does not \"also\" bind ⌘S\n * — it SHADOWS Save for as long as the canvas has focus, and Save stops responding with no trace.\n * Whichever of the two is the newcomer, the pair cannot both answer that chord.\n * - **Two engine scopes never overlap.** `caret` and `grid` are never on one stack, so one chord may\n * mean two things there for ever; refusing that would forbid the shadowing ladder's whole point.\n * - **`palette` overlaps nothing but itself.** An overlay owns the keyboard outright: nothing else\n * resolves while one is up, and a palette binding resolves nowhere else.\n *\n * Ordered so that {@link Keymap.resolveChord} over the result names the most direct holder first:\n * the same scope, then the wider one.\n */\nexport function overlappingScopes(scope: KeyScope): readonly KeyScope[] {\n if (scope === \"palette\") {\n return PALETTE_SCOPES;\n }\n if (scope === \"global\") {\n return DISPATCHABLE_SCOPES;\n }\n return [scope, \"global\"];\n}\n\n/** One resolved chord. */\nexport interface KeymapMatch {\n commandId: string;\n chord: string;\n scope: KeyScope;\n}\n\n/**\n * The user's keybinding layer: command id → the chords it holds INSTEAD of the ones it declared.\n *\n * An entry with an empty list is a command the user unbound. An id with no entry is a command that\n * still has whatever the registry declared — absence is what makes a default a default.\n */\nexport type KeybindingOverrides = ReadonlyMap<string, readonly string[]>;\n\nexport interface Keymap {\n /**\n * Whether chords print with mac glyphs.\n *\n * Exposed because the platform decision is made ONCE, here, and every surface that prints a chord\n * reads it rather than re-detecting: the hardcoded `⌘P` that `toolbar.ts` showed Windows and\n * Linux users existed because there was nowhere else to ask.\n */\n readonly mac: boolean;\n /** Format an arbitrary chord for this platform. {@link formatBinding} is this over a command's. */\n format: (chord: string) => string;\n /** Index a record's bindings. Throws {@link KeybindingConflictError} on a same-scope clash. */\n add: (record: BindableRecord) => void;\n /** Drop a record's bindings — used when a registry is rebuilt, not in normal operation. */\n remove: (id: string) => void;\n /** Canonical chords LIVE for `id` — the user's, when they have overridden it. */\n bindingsFor: (id: string) => readonly string[];\n /**\n * Canonical chords `id` DECLARED, whatever the user layer says.\n *\n * This is what a reset restores, and it is why a rebinding is a layer rather than an edit: the\n * registry stays the one place a default chord is written down.\n */\n declaredFor: (id: string) => readonly string[];\n /** Replace the user's layer and re-index every record against it. */\n setOverrides: (overrides: KeybindingOverrides) => void;\n /** The user's layer, as applied. A copy: the layer is replaced, never mutated in place. */\n overrides: () => KeybindingOverrides;\n /** The first binding of `id`, formatted for this platform, or `undefined` if unbound. */\n formatBinding: (id: string) => string | undefined;\n /** Walk `scopeStack` narrowest-first and return the first scope that binds `chord`. */\n resolveChord: (chord: string, scopeStack: readonly KeyScope[]) => KeymapMatch | undefined;\n /** {@link resolveChord} over a live keyboard event. */\n resolveEvent: (event: KeyChordEvent, scopeStack: readonly KeyScope[]) => KeymapMatch | undefined;\n /** Every (scope, chord, id) triple — the generated shortcut sheet reads this. */\n entries: () => readonly KeymapMatch[];\n /**\n * Subscribe to \"the live bindings changed\". Returns an unsubscribe.\n *\n * One listener exists today and it is the reason this hook does: the canvas iframe holds a COPY\n * of the chord table (`canvas/iframe-keys.ts`), and a copy with no invalidation is a second\n * authority that drifts the moment someone rebinds a key. Fired by {@link setOverrides}, which is\n * the only operation that changes what is live after boot.\n */\n onChange: (listener: () => void) => () => void;\n}\n\n/**\n * Build an empty keymap.\n *\n * @param options.mac Whether to format chords with mac glyphs. Defaults to platform detection.\n */\n/** Which layer a live claim came from — the whole of the precedence rule is this one field. */\ninterface Claim {\n id: string;\n source: \"default\" | \"override\";\n}\n\nexport function createKeymap(options: { mac?: boolean } = {}): Keymap {\n const mac = options.mac ?? isMacPlatform();\n /** Scope → chord → who holds it. */\n const byScope = new Map<KeyScope, Map<string, Claim>>();\n /** Command id → the chords it holds LIVE, in declaration order. */\n const byId = new Map<string, string[]>();\n /** Command id → what it declared. Never written by a rebinding. */\n const declared = new Map<string, { chords: string[]; scope: KeyScope }>();\n /** The user's layer. Replaced wholesale by `setOverrides`; empty until one is applied. */\n let userLayer = new Map<string, readonly string[]>();\n /** Who to tell when the live bindings change. */\n const listeners = new Set<() => void>();\n\n function chordsOf(record: BindableRecord): string[] {\n const raw = record.keybinding;\n if (!raw) {\n return [];\n }\n return (typeof raw === \"string\" ? [raw] : [...raw]).map((chord) => normalizeChord(chord));\n }\n\n function tableFor(scope: KeyScope): Map<string, Claim> {\n let table = byScope.get(scope);\n if (!table) {\n table = new Map<string, Claim>();\n byScope.set(scope, table);\n }\n return table;\n }\n\n /**\n * Index one record's LIVE chords.\n *\n * `strict` is registration: two defaults colliding is an app bug and throws, and the throw\n * happens before anything is written so a rejected record leaves nothing behind. A rebuild is not\n * strict — by then every collision involves the user's layer, which has an answer.\n */\n function claim(id: string, strict: boolean): void {\n const record = declared.get(id);\n if (!record) {\n return;\n }\n const override = userLayer.get(id);\n const source: Claim[\"source\"] = override === undefined ? \"default\" : \"override\";\n const chords = override ?? record.chords;\n const table = tableFor(record.scope);\n if (strict) {\n for (const chord of chords) {\n const held = table.get(chord);\n if (held && held.id !== id && held.source === \"default\" && source === \"default\") {\n throw new KeybindingConflictError(chord, record.scope, held.id, id);\n }\n }\n }\n const taken: string[] = [];\n for (const chord of chords) {\n const held = table.get(chord);\n if (held && held.id !== id) {\n if (source === \"default\") {\n // A default never evicts an override: the user asked for this chord by name, and a\n // Command that ships with it later is the one that goes unbound.\n continue;\n }\n // An override always evicts. (Two overrides on one chord can only come from a hand-edited\n // Store — `rebindCommand` refuses it — and then the later record wins, deterministically.)\n byId.set(\n held.id,\n (byId.get(held.id) ?? []).filter((bound) => bound !== chord),\n );\n }\n table.set(chord, { id, source });\n taken.push(chord);\n }\n byId.set(id, taken);\n }\n\n /** Re-index everything: overridden records first, so their claims are the ones that survive. */\n function rebuild(): void {\n byScope.clear();\n byId.clear();\n for (const id of declared.keys()) {\n if (userLayer.has(id)) {\n claim(id, false);\n }\n }\n for (const id of declared.keys()) {\n if (!userLayer.has(id)) {\n claim(id, false);\n }\n }\n }\n\n return {\n mac,\n format(chord) {\n return formatChord(chord, mac);\n },\n add(record) {\n const scope: KeyScope = record.keyScope ?? \"global\";\n declared.set(record.id, { chords: chordsOf(record), scope });\n try {\n claim(record.id, true);\n } catch (error) {\n declared.delete(record.id);\n throw error;\n }\n },\n remove(id) {\n declared.delete(id);\n // A rebuild rather than a targeted delete, so anything this record was displacing gets its\n // Chord back — the same reason `setOverrides` rebuilds.\n rebuild();\n },\n bindingsFor(id) {\n return byId.get(id) ?? [];\n },\n declaredFor(id) {\n return declared.get(id)?.chords ?? [];\n },\n setOverrides(overrides) {\n userLayer = new Map(\n [...overrides].map(([id, chords]) => [id, chords.map((chord) => normalizeChord(chord))]),\n );\n rebuild();\n for (const listener of listeners) {\n listener();\n }\n },\n onChange(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n overrides() {\n return new Map(userLayer);\n },\n formatBinding(id) {\n const first = byId.get(id)?.[0];\n return first === undefined ? undefined : formatChord(first, mac);\n },\n resolveChord(chord, scopeStack) {\n const normalized = normalizeChord(chord);\n // Narrowest scope first: the stack IS the precedence order, so the first hit wins and a\n // Caret binding shadows the same chord bound globally.\n const scope = scopeStack.find((candidate) => byScope.get(candidate)?.has(normalized));\n const held = scope === undefined ? undefined : byScope.get(scope)?.get(normalized);\n return scope === undefined || held === undefined\n ? undefined\n : { chord: normalized, commandId: held.id, scope };\n },\n resolveEvent(event, scopeStack) {\n const chord = chordFromEvent(event, mac);\n // A bare modifier press resolves to nothing rather than throwing on a keyless chord.\n return chord === \"\" ? undefined : this.resolveChord(chord, scopeStack);\n },\n entries() {\n const all: KeymapMatch[] = [];\n for (const [scope, table] of byScope) {\n for (const [chord, held] of table) {\n all.push({ chord, commandId: held.id, scope });\n }\n }\n return all;\n },\n };\n}\n\n/**\n * Every live (chord, scope) pair in `scopes`, deduplicated — the table a second realm can resolve\n * against.\n *\n * Written for the canvas iframe, which cannot see the registry at all: it is handed this and\n * forwards a keystroke iff some scope on its own stack claims the chord (`canvas/iframe-keys.ts`).\n * The command id is deliberately dropped — the frame decides whether to forward, never what runs —\n * and the projection is a pure function of the keymap so the host can recompute and repost it\n * whenever a rebinding lands.\n */\nexport function chordsInScopes<S extends KeyScope>(\n keymap: Keymap,\n scopes: readonly S[],\n): { chord: string; scope: S }[] {\n const seen = new Set<string>();\n const out: { chord: string; scope: S }[] = [];\n for (const entry of keymap.entries()) {\n /* `find` rather than a `Set.has` test: the narrowed member is what makes the result carry the\n CALLER's scope union. The canvas frame's table is three scopes wide (`FRAME_KEY_SCOPES`) and\n has to stay that way across the bridge, where `SyncedChord` declares exactly those three —\n widening back to every `KeyScope` here would push a `grid` chord into a message that cannot\n hold one. */\n const scope = scopes.find((candidate) => candidate === entry.scope);\n if (scope === undefined) {\n continue;\n }\n const key = `${scope} ${entry.chord}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n out.push({ chord: entry.chord, scope });\n }\n return out;\n}\n",
85
- "/**\n * Registry.ts — one definition site per action.\n *\n * A {@link Command} is the whole record of a capability: its name, its containment level, the\n * predicate that decides whether it is available, the one sentence that says why it is not, its\n * default chord, and the surfaces it belongs in. Every surface — Command Bar, palette, rail,\n * context menus, the block action bar, the keymap, `__jxAutomation` and the assistant's tools —\n * becomes a RENDERING of these records. A surface may choose whether to show a command; it may\n * never decide what it is called, when it is available, or what it does (plan §2, principle 1).\n *\n * Three things fail loudly at registration rather than degrading into a surface disagreement:\n *\n * - A duplicate id — the second definition site the whole design exists to prevent;\n * - A chord already claimed in the same `keyScope` (see `keymap.ts`) — this is exactly how ⌘W came to\n * disagree with the tab strip's × button;\n * - A `menus` placement the level × placement matrix does not admit (see `levels.ts`), so a\n * selection-level verb cannot appear in the Command Bar even in a hand-written test app.\n *\n * `when` / `enablement` are `(ctx) => boolean` closures, modelled on the shipped\n * `services/gated-registry.ts` `ToolAvailability`, and `requires` is ONE string with three\n * consumers: the disabled control's tooltip, the palette row's grey subtitle and the agent's\n * refusal message. Plan §13 rejects a serialisable string DSL; do not add one.\n *\n * The registry takes its context by injection (`getContext`), so nothing here imports a state\n * module. That is what lets the CI checks import the command set in a bare Bun process and lets\n * every test build the exact state it wants to assert against.\n */\n\nimport { createKeymap } from \"./keymap\";\nimport type { KeyChordEvent, Keymap, KeymapMatch } from \"./keymap\";\nimport { checkRecordPlacements } from \"./levels\";\nimport type { Category, KeyScope, Level, Placement } from \"./levels\";\nimport type { CommandContext } from \"./context\";\n\n/** Arguments as they arrive from a palette prompt, an automation manifest step or an AI tool call. */\nexport type CommandArgs = Record<string, unknown>;\n\n/** How an action's effect is undone — surfaced to the user before an agent runs it. */\nexport type UndoScope = \"document\" | \"project\" | \"none\";\n\n/**\n * One capability, defined once.\n *\n * @template A The argument record `run` receives. Defaults to `void` for the (common) case of a\n * command that takes none.\n */\nexport interface Command<A = void> {\n /** `\"<category>.<verb>\"` — the same namespace `scripts/screenshots/manifest.json` addresses. */\n id: string;\n /** Imperative human name. The ONLY place this action is named. */\n title: string;\n category: Category;\n /** REQUIRED containment level, checked against every declared placement. */\n level: Level;\n /** Keyboard dispatch scope. Deliberately separate from {@link Command.level}. */\n keyScope?: KeyScope;\n /** Icon key, resolved through the activity bar's existing icon map. */\n icon?: string;\n /** Hide entirely. Default: always visible. */\n when?: (ctx: CommandContext) => boolean;\n /** Show but disable. Defaults to {@link Command.when}. */\n enablement?: (ctx: CommandContext) => boolean;\n /** The human reason, e.g. \"an element selection\". Tooltip, palette subtitle, agent refusal. */\n requires?: string;\n /** Default chord(s), e.g. `\"mod+shift+p\"`. User overrides layer on top. */\n keybinding?: string | readonly string[];\n /** JSON Schema for {@link Command.run}'s args — the palette's prompt AND the AI tool's params. */\n args?: object;\n /** Surfaces this command renders in. Defaults to `[\"palette\"]`. */\n menus?: readonly Placement[];\n /** Menu ordering key: \"1_clipboard\", \"3_structure\", \"9_danger\". */\n group?: string;\n undo?: UndoScope;\n destructive?: boolean;\n /** Opt-in projection to the assistant. The human's gate and the agent's gate stay one predicate. */\n aiTool?: { name: string; description: string };\n run: (ctx: CommandContext, args: A) => void | Promise<void>;\n}\n\n/**\n * A command of unknown argument type, as stored.\n *\n * `never` (not `unknown`) is what makes an arbitrary `Command<A>` assignable: `run` is\n * contravariant in its argument, so a handler taking `{ path }` satisfies one taking `never`.\n */\nexport type AnyCommand = Command<never>;\n\n/** `<namespace>.<verb>`, lowercase namespace, at least two dot-separated segments. */\nconst ID_PATTERN = /^[a-z][a-z\\d]*(\\.[a-zA-Z\\d]+)+$/;\n\n/** Thrown when a command is invoked while its own predicate refuses it. */\nexport class CommandUnavailableError extends Error {\n readonly commandId: string;\n /** The `requires` sentence, or a generic fallback when the record did not supply one. */\n readonly requires: string;\n\n constructor(commandId: string, requires: string) {\n super(refusalSentence(commandId, requires));\n this.name = \"CommandUnavailableError\";\n this.commandId = commandId;\n this.requires = requires;\n }\n}\n\n/** Wording shared by the disabled tooltip, the palette subtitle and the agent's refusal. */\nconst GENERIC_REQUIREMENT = \"a different studio state\";\n\n/** The one refusal sentence. `CommandUnavailableError` and `refusalMessage` must not diverge. */\nfunction refusalSentence(commandId: string, requires: string): string {\n return `Command \"${commandId}\" is not available right now — it requires ${requires}.`;\n}\n\nexport interface CommandRegistry {\n /** Define a command. Throws on a duplicate id, a chord conflict or a misplacement. */\n register: <A>(command: Command<A>) => void;\n /** Define many, in order. Not transactional: the throwing record is the one that failed. */\n registerAll: (commands: readonly AnyCommand[]) => void;\n get: (id: string) => AnyCommand | undefined;\n /** Every command, in registration order. */\n list: () => readonly AnyCommand[];\n /** Commands whose `when` holds right now — what a surface iterates. */\n visible: () => readonly AnyCommand[];\n /** Commands declaring `placement`, visible right now, sorted by `group` then title. */\n forPlacement: (placement: Placement) => readonly AnyCommand[];\n isVisible: (id: string) => boolean;\n isEnabled: (id: string) => boolean;\n /** The `requires` sentence when a visible command is disabled; `undefined` when it is usable. */\n disabledReason: (id: string) => string | undefined;\n /** The full refusal sentence, for an agent or a tooltip. `undefined` when the command is usable. */\n refusalMessage: (id: string) => string | undefined;\n /** Run a command. Throws on an unknown id, or {@link CommandUnavailableError} when refused. */\n run: (id: string, args?: CommandArgs) => void | Promise<void>;\n /** The chord index, conflict-checked at registration. */\n keymap: Keymap;\n /** Resolve a keyboard event through a scope stack and run what it hits. */\n handleKeyEvent: (event: KeyChordEvent, scopeStack: readonly KeyScope[]) => string | undefined;\n /** The context the predicates are currently reading — exposed for surfaces that need a snapshot. */\n context: () => CommandContext;\n}\n\nexport interface CommandRegistryOptions {\n /** The live context. Called per predicate evaluation; a reactive record makes this free. */\n getContext: () => CommandContext;\n /** Format chords with mac glyphs. Defaults to platform detection inside the keymap. */\n mac?: boolean;\n}\n\n/**\n * Build an empty registry.\n *\n * There is deliberately no module-level singleton here: the app creates one in its bootstrap and\n * passes it down, so tests, the CI checks and a future second window each get their own.\n */\nexport function createCommandRegistry(options: CommandRegistryOptions): CommandRegistry {\n const commands = new Map<string, AnyCommand>();\n const keymap = createKeymap(options.mac === undefined ? {} : { mac: options.mac });\n\n function mustGet(id: string): AnyCommand {\n const command = commands.get(id);\n if (!command) {\n throw new Error(`unknown command \"${id}\"`);\n }\n return command;\n }\n\n function visibleWith(command: AnyCommand, ctx: CommandContext): boolean {\n return command.when?.(ctx) ?? true;\n }\n\n function enabledWith(command: AnyCommand, ctx: CommandContext): boolean {\n if (!visibleWith(command, ctx)) {\n return false;\n }\n // `enablement` defaults to `when`: a command that only declared `when` is enabled exactly when\n // It is shown, which is the behaviour every existing hand-wired control already has.\n return command.enablement?.(ctx) ?? true;\n }\n\n const registry: CommandRegistry = {\n register(command) {\n if (!ID_PATTERN.test(command.id)) {\n throw new Error(\n `invalid command id \"${command.id}\" — ids are \"<category>.<verb>\", ` +\n `e.g. \"selection.duplicate\" or \"view.toggleDock.right\"`,\n );\n }\n if (commands.has(command.id)) {\n throw new Error(\n `duplicate command id \"${command.id}\" — a capability has exactly one definition site`,\n );\n }\n if (!command.title) {\n throw new Error(\n `command \"${command.id}\" has no title — the record is where actions are named`,\n );\n }\n const violations = checkRecordPlacements(command);\n if (violations.length > 0) {\n throw new Error(`command \"${command.id}\" ${violations[0]!.message}`);\n }\n // Chord conflicts throw from the keymap; do this LAST so a rejected record leaves the\n // Registry untouched in every failure mode.\n keymap.add(command);\n commands.set(command.id, command as AnyCommand);\n },\n registerAll(list) {\n for (const command of list) {\n registry.register(command);\n }\n },\n get(id) {\n return commands.get(id);\n },\n list() {\n return [...commands.values()];\n },\n visible() {\n const ctx = options.getContext();\n return [...commands.values()].filter((command) => visibleWith(command, ctx));\n },\n forPlacement(placement) {\n const ctx = options.getContext();\n return [...commands.values()]\n .filter(\n (command) =>\n (command.menus ?? [\"palette\"]).includes(placement) && visibleWith(command, ctx),\n )\n .toSorted(\n (a, b) => (a.group ?? \"\").localeCompare(b.group ?? \"\") || a.title.localeCompare(b.title),\n );\n },\n isVisible(id) {\n return visibleWith(mustGet(id), options.getContext());\n },\n isEnabled(id) {\n return enabledWith(mustGet(id), options.getContext());\n },\n disabledReason(id) {\n const command = mustGet(id);\n const ctx = options.getContext();\n return enabledWith(command, ctx) ? undefined : (command.requires ?? GENERIC_REQUIREMENT);\n },\n refusalMessage(id) {\n const reason = registry.disabledReason(id);\n return reason === undefined ? undefined : refusalSentence(id, reason);\n },\n run(id, args = {}) {\n const command = mustGet(id);\n const ctx = options.getContext();\n if (!enabledWith(command, ctx)) {\n throw new CommandUnavailableError(id, command.requires ?? GENERIC_REQUIREMENT);\n }\n return command.run(ctx, args as never);\n },\n keymap,\n handleKeyEvent(event, scopeStack) {\n /* NARROWEST AVAILABLE wins, not narrowest.\n A chord bound to a command whose `when` is false is not a hit — the key falls through to\n the browser rather than being swallowed by an action that is not there. It used to fall\n through to the browser and NOWHERE ELSE: `resolveEvent` answers with the first scope that\n binds the chord, so a hidden narrow binding also hid every wider one behind it. That is a\n defect the caret scope was about to make real. `format.link` binds ⌘K at `caret`, and the\n caret stack is live in every parent-realm text field too (`caret.active` folds both, by\n design — see `commands/context.ts`); its `when` is false there, so ⌘K would have resolved\n to a hidden record and stopped reaching `palette.open`, and the omnibox would have gone\n quiet in every panel field with nothing to show for it.\n Walking the stack one scope at a time and taking the first VISIBLE claimant is what\n \"shadowing\" has to mean: a command shadows a wider one while it is THERE. */\n let hit: KeymapMatch | undefined;\n for (const scope of scopeStack) {\n const match = keymap.resolveEvent(event, [scope]);\n if (match && registry.isVisible(match.commandId)) {\n hit = match;\n break;\n }\n }\n if (!hit) {\n return;\n }\n // Visible but disabled — ⌘Z with no history, Delete on the root. The chord IS claimed (the\n // Action exists here, it just cannot act right now, and letting the browser have it would be\n // Worse), but running it would throw CommandUnavailableError straight out of the keydown\n // Listener. Claim it silently instead of making every caller wrap dispatch in a try/catch.\n if (!registry.isEnabled(hit.commandId)) {\n return hit.commandId;\n }\n void registry.run(hit.commandId);\n return hit.commandId;\n },\n context: options.getContext,\n };\n return registry;\n}\n",
86
- "/**\n * Merge tags — enumerate insertable `${…}` template tokens from the document's state.\n *\n * Powers the inline-edit \"Insert data\" menu (Mailchimp-style merge tags). Given the document's\n * state definitions plus the live resolved scope, produces a flat list of accessor paths the author\n * can drop into editable text: top-level `state.*` names, nested object paths, array `.length`, and\n * — when editing inside a repeater — `item`, `item.*`, and `index`.\n *\n * Pure and DOM-free: callers pass the data in, this returns plain descriptors.\n */\n\nimport { defCategory } from \"../panels/signals-panel\";\nimport { dataTypeLabel, unwrapSignal } from \"../panels/data-explorer\";\n\nexport interface MergeTag {\n /** Insertion token placed between `${` and `}`, e.g. `state.user.name`, `item.title`, `index`. */\n token: string;\n /** Display path shown in the menu (currently identical to `token`). */\n label: string;\n /** Type + short value preview, e.g. `string · \"Alice\"`, `Array(4)`, `{3}`. */\n hint: string;\n /** Source category — `defCategory` of the root def, or `\"repeater\"` for item/index entries. */\n category: string;\n}\n\n/** Levels of nesting walked beneath each root name. */\nconst DEPTH_CAP = 3;\n/** Maximum object keys enumerated per level (mirrors the data-explorer tree cap). */\nconst BREADTH_CAP = 30;\n\n/** Type label plus a short value preview for primitives. */\nfunction previewHint(value: unknown): string {\n const v = unwrapSignal(value);\n const typeLabel = dataTypeLabel(v);\n if (v === null || v === undefined || typeof v === \"object\") {\n return typeLabel; // Null / pending / Array(n) / {n}\n }\n const text =\n typeof v === \"string\" ? (v.length > 24 ? `\"${v.slice(0, 24)}…\"` : `\"${v}\"`) : String(v);\n return `${typeLabel} · ${text}`;\n}\n\n/**\n * Walk a resolved value, appending nested-path tags to `out`. Arrays contribute a `.length` tag and\n * stop (index access is context-dependent); plain objects recurse up to the depth/breadth caps.\n */\nfunction walk(value: unknown, prefix: string, category: string, depth: number, out: MergeTag[]) {\n if (depth >= DEPTH_CAP) {\n return;\n }\n const v = unwrapSignal(value);\n if (v === null || v === undefined || typeof v !== \"object\") {\n return;\n }\n if (Array.isArray(v)) {\n const token = `${prefix}.length`;\n out.push({ category, hint: `number · ${v.length}`, label: token, token });\n return;\n }\n const keys = Object.keys(v).slice(0, BREADTH_CAP);\n for (const key of keys) {\n if (key.startsWith(\"$\")) {\n continue; // Internal keys ($children, $ref, reactive plumbing) are not author-facing\n }\n const childVal = (v as Record<string, unknown>)[key];\n const childPrefix = `${prefix}.${key}`;\n out.push({ category, hint: previewHint(childVal), label: childPrefix, token: childPrefix });\n walk(childVal, childPrefix, category, depth + 1, out);\n }\n}\n\n/**\n * Build the list of insertable merge tags for the current editing context.\n *\n * @param state - The document's `state` definitions (`tab.doc.document.state`), used for names and\n * classification (functions are skipped — they are not text-insertable values).\n * @param scope - The live resolved scope for type/preview hints and the nested-property walk. May\n * be null (the iframe canvas holds the render scope, so the parent passes null).\n * @param localScope - The editing element's recorded render scope (`elToScope.get(el)`). When it\n * carries a `$map` (repeater) context, `item` / `item.*` / `index` tags are appended.\n */\nexport function buildMergeTags(\n state: Record<string, unknown> | null | undefined,\n scope: Record<string, unknown> | null | undefined,\n localScope: Record<string, unknown> | null = null,\n): MergeTag[] {\n const out: MergeTag[] = [];\n const defs = state ?? {};\n const scp = scope ?? {};\n\n for (const [name, def] of Object.entries(defs)) {\n if (name.startsWith(\"$\")) {\n continue;\n }\n const category = defCategory(def);\n if (category === \"function\") {\n continue; // Handlers/functions aren't insertable as text values\n }\n const value = scp[name];\n const token = `state.${name}`;\n out.push({ category, hint: previewHint(value), label: token, token });\n walk(value, token, category, 0, out);\n }\n\n if (localScope) {\n const map = unwrapSignal(localScope.$map) as { item?: unknown; index?: unknown } | undefined;\n if (map && typeof map === \"object\") {\n out.push({ category: \"repeater\", hint: previewHint(map.item), label: \"item\", token: \"item\" });\n walk(map.item, \"item\", \"repeater\", 0, out);\n out.push({\n category: \"repeater\",\n hint: previewHint(map.index),\n label: \"index\",\n token: \"index\",\n });\n }\n }\n\n return out;\n}\n\n/**\n * Build repeater-scope merge tags from a flat list of pre-resolved tokens (e.g. `item`, `index`,\n * `item.data.title`). Unlike {@link buildMergeTags}'s live-scope branch, these carry no live value —\n * in edit mode the iframe holds no `$map`, so fields are resolved parent-side from schema and the\n * hint is empty. `item` and `index` are guaranteed first; the list is deduped preserving order.\n *\n * @param tokens - Insertion tokens (see `resolveRepeaterItemFields`); typically leads\n * `item`/`index`.\n * @returns One {@link MergeTag} per unique token, `category: \"repeater\"`, `label === token`.\n */\nexport function buildRepeaterTagsFromFields(tokens: string[]): MergeTag[] {\n const ordered = [\"item\", \"index\", ...tokens];\n const seen = new Set<string>();\n const out: MergeTag[] = [];\n for (const token of ordered) {\n if (!token || seen.has(token)) {\n continue;\n }\n seen.add(token);\n out.push({ category: \"repeater\", hint: \"\", label: token, token });\n }\n return out;\n}\n",
87
- "/**\n * Repeater scope resolution — enumerate the local `item` / `index` / field tokens available when\n * the author inline-edits text INSIDE a repeater (`$prototype: \"Array\"`) on the design canvas.\n *\n * There is no live `$map` in edit mode: `prepareForEditMode` renders a mapped array as a\n * `repeater-perimeter` wrapping one glyph-ified template instance, so `renderMappedArrayInto`\n * (which sets `child.$map`) never runs. Instead we resolve field names PARENT-SIDE from the\n * repeater's binding + the project's content-type / state schema, keyed off the selected element's\n * document path (which carries a real `\"map\"` segment — see canvas/path-mapping.ts\n * `classifyRenderNode`).\n *\n * Pure and DOM-free: deps limited to `@jxsuite/schema` guards/types + {@link getNodeAtPath}.\n */\n\nimport { isRef } from \"@jxsuite/schema/guards\";\nimport { getNodeAtPath } from \"../state\";\n\nimport type { JxPath } from \"../state\";\nimport type { ContentSectionEntry } from \"../types\";\nimport type { JxMappedArray, JxMutableNode, ProjectConfig } from \"@jxsuite/schema/types\";\n\n/** Cap on how many inferred/declared fields we enumerate (mirrors merge-tags BREADTH_CAP breadth). */\nconst FIELD_CAP = 50;\n\n/**\n * Find the repeater (`$prototype: \"Array\"`) that encloses the node at `path`. The stamper rewrites\n * an edit-mode perimeter render path back to `[...P, \"map\", …]` where `P` is the repeater's own doc\n * path, so an element inside a repeater carries a real-doc path containing a `\"map\"` segment. We\n * take the LAST `\"map\"` (innermost repeater wins for nesting) and resolve the node at the prefix\n * before it.\n *\n * @param doc - The tab's document root (`tab.doc.document`).\n * @param path - The selected element's document path.\n * @returns The enclosing `JxMappedArray` node, or `null` when the path is not inside a repeater.\n */\nexport function findEnclosingRepeater(\n doc: JxMutableNode,\n path: JxPath | null | undefined,\n): JxMappedArray | null {\n if (!Array.isArray(path) || path.length === 0) {\n return null;\n }\n const mapIdx = path.lastIndexOf(\"map\");\n if (mapIdx <= 0) {\n return null;\n }\n const node = getNodeAtPath(doc, path.slice(0, mapIdx)) as\n | (Record<string, unknown> & JxMappedArray)\n | undefined;\n return node && node.$prototype === \"Array\" ? (node as JxMappedArray) : null;\n}\n\n/** Strip a `#/state/<name>` JSON-Pointer ref to its bare state name (null when it is not one). */\nfunction refToStateName(ref: unknown): string | null {\n if (!isRef(ref)) {\n return null;\n }\n const { $ref: target } = ref;\n return target.startsWith(\"#/state/\") ? target.slice(\"#/state/\".length) : null;\n}\n\n/** Cap + $-filter a field-name list to a stable, author-facing subset. */\nfunction safeFields(names: string[]): string[] {\n return names.filter((k) => !k.startsWith(\"$\")).slice(0, FIELD_CAP);\n}\n\n/**\n * Resolve the local scope tokens for text edited inside `arrayNode`. Always leads with `item` and\n * `index`; appends field tokens resolved from the repeater's binding:\n *\n * - **Content collection** — `items` refs a `{ contentType }` state def. Item shape is `{ id, data: {\n * …fields }, body }`, so fields come from `projectConfig.content[contentType].schema.properties`\n * and emit as `item.data.<f>` (the `.data.` nesting is LOAD-BEARING — runtime templates use\n * `${item.data.title}`), plus `item.id` / `item.body`.\n * - **State array** — `items` refs a state def that is an array of objects. Fields come from a\n * declared `items.properties`, else are inferred from a sample `default[0]`. Emitted FLAT\n * (`item.<f>`, no `.data.`).\n * - **Inline array** — `items` is a literal array; fields inferred from `items[0]` object keys.\n * - **Fallback** — anything unresolvable yields exactly `[\"item\", \"index\"]`.\n *\n * @param arrayNode - The repeater node from {@link findEnclosingRepeater}.\n * @param state - The document's `state` definitions (`tab.doc.document.state`).\n * @param projectConfig - Parsed `project.json` (`projectState?.projectConfig`).\n * @returns Token strings, e.g. `[\"item\", \"index\", \"item.id\", \"item.body\", \"item.data.title\"]`.\n */\nexport function resolveRepeaterItemFields(\n arrayNode: JxMappedArray,\n state: Record<string, unknown> | null | undefined,\n projectConfig: ProjectConfig | null | undefined,\n): string[] {\n const base = [\"item\", \"index\"];\n const { items } = arrayNode as { items?: unknown };\n const defs = state ?? {};\n\n const stateName = refToStateName(items);\n if (stateName) {\n const def = defs[stateName] as Record<string, unknown> | undefined;\n if (def && typeof def === \"object\") {\n // (a) Content collection — `{ contentType: \"<name>\" }`. Import-aliased `$prototype` still\n // Matches because we detect on the `contentType` string, not the prototype name.\n if (typeof def.contentType === \"string\") {\n const content = (projectConfig?.content ?? {}) as Record<string, ContentSectionEntry>;\n const ct = content[def.contentType];\n const props = ct?.schema?.properties;\n const out = [...base, \"item.id\", \"item.body\"];\n if (props && typeof props === \"object\") {\n for (const f of safeFields(Object.keys(props))) {\n out.push(`item.data.${f}`);\n }\n }\n return out;\n }\n\n // (b) State array — declared object item-schema, or inferred from a sample default[0].\n const itemsSchema = def.items as Record<string, unknown> | undefined;\n const declared = itemsSchema?.properties as Record<string, unknown> | undefined;\n if (declared && typeof declared === \"object\") {\n return [...base, ...safeFields(Object.keys(declared)).map((f) => `item.${f}`)];\n }\n const defaults = def.default as unknown[] | undefined;\n const sample: unknown = Array.isArray(defaults) ? defaults[0] : undefined;\n if (sample && typeof sample === \"object\" && !Array.isArray(sample)) {\n return [...base, ...safeFields(Object.keys(sample)).map((f) => `item.${f}`)];\n }\n }\n return base;\n }\n\n // (c) Inline literal array — infer fields from the first object element.\n if (Array.isArray(items)) {\n const [first] = items as unknown[];\n if (first && typeof first === \"object\" && !Array.isArray(first)) {\n return [...base, ...safeFields(Object.keys(first)).map((f) => `item.${f}`)];\n }\n }\n\n // (d) Fallback — unresolvable binding, primitive/empty items, or missing schema.\n return base;\n}\n",
88
- "/// <reference lib=\"dom\" />\n// ─── Convert to Component ─────────────────────────────────────────────────────\nimport { html, render as litRender } from \"lit-html\";\nimport { displayTagName } from \"@jxsuite/schema/guards\";\nimport { errorMessage } from \"@jxsuite/schema/parse\";\nimport { ref } from \"lit-html/directives/ref.js\";\nimport { childIndex, getNodeAtPath, parentElementPath } from \"../store\";\nimport { primarySelection } from \"../tabs/selection\";\nimport { activeTab } from \"../workspace/workspace\";\nimport { transact } from \"../tabs/transact\";\nimport { componentRegistry, computeRelativePath, loadComponentRegistry } from \"../files/components\";\nimport { getPlatform } from \"../platform\";\nimport { jsonClone } from \"../utils/studio-utils\";\nimport { notify } from \"../services/notify\";\nimport { showDialog } from \"../ui/layers\";\nimport { validateComponentSlots } from \"../services/cem-export\";\n\nimport type { JxMutableNode } from \"@jxsuite/schema/types\";\n\nconst VALID_NAME = /^[a-z][a-z0-9]*(-[a-z0-9]+)+$/;\n\n/** Convert the currently selected element into a reusable component. */\nexport async function convertToComponent() {\n const tab = activeTab.value;\n const selected = primarySelection(tab?.session.selection);\n if (!tab || !selected || selected.length < 2) {\n return;\n }\n\n const node = getNodeAtPath(tab.doc.document, selected);\n if (!node || !node.tagName) {\n return;\n }\n\n const defaultName = deriveDefaultName(node);\n const name = await promptComponentName(defaultName);\n if (!name) {\n return;\n }\n\n // Extract component definition\n const componentDef = extractComponentDef(node);\n componentDef.tagName = name;\n\n // Compute paths\n const componentFile = `components/${name}.json`;\n const refPath = computeRelativePath(tab.documentPath, componentFile);\n\n // Single atomic mutation: replace node + add $elements ref\n const selectionPath = selected;\n const converted = transact(tab, (doc) => {\n // Navigate to parent's children array and replace the node\n const pp = parentElementPath(selectionPath) ?? [];\n const idx = childIndex(selectionPath) as number;\n let parent = doc;\n // Paths address nodes by construction (same contract as getNodeAtPath).\n for (const seg of pp) {\n parent = parent[seg] as JxMutableNode;\n }\n if (!Array.isArray(parent.children)) {\n parent.children = [];\n }\n parent.children[idx] = { tagName: name };\n\n // Ensure $elements exists and add the $ref\n if (!doc.$elements) {\n doc.$elements = [];\n }\n const alreadyReferenced = doc.$elements.some(\n (/** @type {JxMutableNode | string | { $ref: string }} */ el) =>\n el && typeof el === \"object\" && \"$ref\" in el && el.$ref === refPath,\n );\n if (!alreadyReferenced) {\n doc.$elements.push({ $ref: refPath });\n }\n });\n /* THE FILE IS WRITTEN ONLY IF THE DOCUMENT TOOK THE REFERENCE.\n `transact` consults the collab gate, which pauses structural editing while source is canonical.\n A refusal used to be invisible here: the extraction still wrote `components/<name>.json` to\n disk and still said \"Converted to <name>\" — leaving a component file nothing references, in a\n document the author was told had been changed. The gate raises its own toast saying why the\n edit is paused; the honest thing to add to it is nothing at all. */\n if (!converted) {\n return;\n }\n\n // Write component file and refresh registry\n try {\n const platform = getPlatform();\n await platform.writeFile(componentFile, JSON.stringify(componentDef, null, 2));\n await loadComponentRegistry();\n const warning = validateComponentSlots(componentDef);\n notify.success(`Converted to <${name}>`);\n if (warning) {\n // A slot warning is a thing to FIX, not a thing to read once: the component is written and\n // Usable, and the defect stays listed until somebody edits it.\n notify.warn(`<${name}> has a slot problem: ${warning}`, {\n path: componentFile,\n source: \"Components\",\n tier: \"problem\",\n });\n }\n } catch (error) {\n notify.error(`Could not save the <${name}> component.`, {\n detail: errorMessage(error),\n path: componentFile,\n source: \"Components\",\n });\n }\n}\n\n/**\n * Derive a default tag name from a node.\n *\n * @param {JxMutableNode} node\n * @returns {string}\n */\nfunction deriveDefaultName(node: JxMutableNode) {\n if (node.$id && node.$id.includes(\"-\")) {\n return node.$id.toLowerCase();\n }\n const tag = (displayTagName(node.tagName) || \"div\").toLowerCase();\n return tag.includes(\"-\") ? tag : `jx-${tag}`;\n}\n\n/**\n * Deep clone a node and strip page-specific keys.\n *\n * @param {JxMutableNode} node\n * @returns {JxMutableNode}\n */\nfunction extractComponentDef(node: JxMutableNode) {\n // JsonClone, not structuredClone: the selected node is a @vue/reactivity proxy,\n // Which structuredClone rejects with DataCloneError.\n const clone = jsonClone(node);\n delete clone.$id;\n delete clone.$layout;\n delete clone.$paths;\n return clone;\n}\n\n/**\n * Validate a component name against naming rules and existing registry.\n *\n * @param {string} val\n * @returns {{ valid: boolean; error: string }}\n */\nfunction validateName(val: string) {\n const name = val.trim().toLowerCase();\n if (!name.includes(\"-\")) {\n return {\n error: \"Name must contain a hyphen (e.g. my-component)\",\n valid: false,\n };\n }\n if (!VALID_NAME.test(name)) {\n return {\n error: \"Lowercase letters, digits, and hyphens only\",\n valid: false,\n };\n }\n const exists = componentRegistry.some((c) => c.tagName === name);\n if (exists) {\n return { error: `Component <${name}> already exists`, valid: false };\n }\n return { error: \"\", valid: true };\n}\n\n/**\n * Show a naming dialog using Lit-rendered sp-dialog-wrapper.\n *\n * @param {string} defaultName\n * @returns {Promise<string | null>}\n */\nfunction promptComponentName(defaultName: string) {\n let value = defaultName;\n let error = \"\";\n\n return showDialog<string | null>((done) => {\n function confirm() {\n const result = validateName(value);\n if (!result.valid) {\n ({ error } = result);\n rerender();\n return;\n }\n done(value.trim().toLowerCase());\n }\n\n function onInput(e: Event) {\n value = (e.target as HTMLInputElement).value || \"\";\n const result = validateName(value);\n error = result.valid ? \"\" : result.error;\n rerender();\n }\n\n function onKeydown(e: KeyboardEvent) {\n if (e.key === \"Enter\") {\n confirm();\n }\n }\n\n function rerender() {\n const layer = document.querySelector(\"#layer-dialog\");\n const slot = layer?.lastElementChild;\n if (slot) {\n litRender(buildTpl(), slot as HTMLElement);\n }\n }\n\n function buildTpl() {\n return html`\n <sp-dialog-wrapper\n open\n underlay\n headline=\"Convert to Component\"\n confirm-label=\"Convert\"\n cancel-label=\"Cancel\"\n size=\"s\"\n @confirm=${confirm}\n @cancel=${() => done(null)}\n @close=${() => done(null)}\n >\n <p>Enter a hyphenated tag name for the new component.</p>\n <sp-textfield\n placeholder=\"my-component\"\n value=${value}\n ?invalid=${Boolean(error)}\n @input=${onInput}\n @keydown=${onKeydown}\n ${ref((el) => {\n if (el) {\n requestAnimationFrame(() => {\n (el as HTMLElement).focus();\n const input = (el as HTMLElement).shadowRoot?.querySelector(\"input\");\n if (input) {\n input.select();\n }\n });\n }\n })}\n >\n <sp-help-text slot=\"negative-help-text\">${error}</sp-help-text>\n </sp-textfield>\n </sp-dialog-wrapper>\n `;\n }\n\n return buildTpl();\n });\n}\n",
89
- "/// <reference lib=\"dom\" />\n/**\n * Slash-menu.js — Shared slash command menu for element insertion\n *\n * A single implementation used by both inline-edit (Edit/Content modes) and component inline\n * editing (Design mode). Renders a Spectrum-styled popover with keyboard navigation. Uses a\n * document-level capturing keydown listener so it intercepts Enter/Arrow/Escape before any\n * element-level handlers.\n */\n\nimport { html, render as litRender, nothing } from \"lit-html\";\nimport { ref } from \"lit-html/directives/ref.js\";\nimport { getLayerSlot } from \"../ui/layers\";\nimport { rectOf } from \"../utils/geometry\";\n\ninterface SlashCommand {\n label: string;\n tag: string;\n description: string;\n}\n\n// ─── Commands ─────────────────────────────────────────────────────────────────\n\nconst SLASH_COMMANDS = [\n { description: \"Large heading\", label: \"Heading 1\", tag: \"h1\" },\n { description: \"Medium heading\", label: \"Heading 2\", tag: \"h2\" },\n { description: \"Small heading\", label: \"Heading 3\", tag: \"h3\" },\n { description: \"Plain text\", label: \"Paragraph\", tag: \"p\" },\n { description: \"Unordered list\", label: \"Bulleted List\", tag: \"ul\" },\n { description: \"Numbered list\", label: \"Numbered List\", tag: \"ol\" },\n { description: \"Quote block\", label: \"Blockquote\", tag: \"blockquote\" },\n { description: \"Insert image\", label: \"Image\", tag: \"img\" },\n { description: \"Divider line\", label: \"Horizontal Rule\", tag: \"hr\" },\n { description: \"Button element\", label: \"Button\", tag: \"button\" },\n { description: \"Anchor link\", label: \"Link\", tag: \"a\" },\n { description: \"Preformatted code\", label: \"Code Block\", tag: \"pre\" },\n { description: \"Insert table\", label: \"Table\", tag: \"table\" },\n { description: \"Container\", label: \"Div\", tag: \"div\" },\n { description: \"Section container\", label: \"Section\", tag: \"section\" },\n];\n\n// ─── State ────────────────────────────────────────────────────────────────────\n\n/** Callbacks a caller passes to {@link showSlashMenu}/{@link showSlashMenuAtRect}. */\nexport interface SlashMenuCallbacks {\n onSelect: (cmd: SlashCommand) => void;\n /** Fired whenever the menu closes (outside click, Escape, no matches, and just before select). */\n onDismiss?: () => void;\n showFilter?: boolean;\n commands?: SlashCommand[];\n}\n\n/** The anchor geometry the menu positions from (a DOMRect satisfies this). */\nexport interface SlashMenuAnchorRect {\n left: number;\n bottom: number;\n}\n\nlet callbacks: SlashMenuCallbacks | null = null;\nlet activeIdx = 0;\nlet filteredItems: SlashCommand[] = [];\nlet open = false;\nlet _anchorRect: SlashMenuAnchorRect | null = null;\nlet _filterEl: HTMLInputElement | null = null;\nlet _popoverEl: HTMLElement | null = null;\n\n/** @returns {HTMLElement} */\nfunction getHost() {\n return getLayerSlot(\"popover\", \"slash-menu\");\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\n/** @returns {boolean} */\nexport function isSlashMenuOpen() {\n return open;\n}\n\n/**\n * Show (or update) the slash menu anchored below `anchorEl`.\n *\n * @param {HTMLElement} anchorEl — the element being edited (for positioning)\n * @param {string} filter — current typed filter text (after the \"/\")\n * @param {SlashMenuCallbacks} cbs\n */\nexport function showSlashMenu(anchorEl: HTMLElement, filter: string, cbs: SlashMenuCallbacks) {\n showAt(rectOf(anchorEl), filter, cbs);\n}\n\n/**\n * Show (or update) the slash menu anchored below a PARENT-VIEWPORT rect — for callers with no\n * anchor element in this realm (the canvas iframe posts the edited element's rect across the bridge\n * and the host converts it).\n *\n * @param {SlashMenuAnchorRect} rect\n * @param {string} filter\n * @param {SlashMenuCallbacks} cbs\n */\nexport function showSlashMenuAtRect(\n rect: SlashMenuAnchorRect,\n filter: string,\n cbs: SlashMenuCallbacks,\n) {\n showAt(rect, filter, cbs);\n}\n\n/** Shared body of the two show entry points. */\nfunction showAt(rect: SlashMenuAnchorRect, filter: string, cbs: SlashMenuCallbacks) {\n callbacks = cbs;\n _anchorRect = rect;\n\n const source = cbs.commands || SLASH_COMMANDS;\n filteredItems = filter\n ? source.filter(\n (c) => c.label.toLowerCase().includes(filter) || c.tag.toLowerCase().includes(filter),\n )\n : source;\n\n if (filteredItems.length === 0 && !cbs.showFilter) {\n dismissSlashMenu();\n return;\n }\n\n activeIdx = 0;\n\n render(cbs.showFilter || false);\n\n if (!open) {\n open = true;\n document.addEventListener(\"keydown\", onKeydown, true); // Capture phase\n requestAnimationFrame(() => {\n document.addEventListener(\"mousedown\", onOutsideClick, true);\n });\n }\n\n if (cbs.showFilter) {\n requestAnimationFrame(() => {\n if (_filterEl) {\n _filterEl.focus();\n }\n });\n }\n}\n\nexport function dismissSlashMenu() {\n if (!open) {\n return;\n }\n const cbs = callbacks;\n open = false;\n callbacks = null;\n _anchorRect = null;\n _filterEl = null;\n _popoverEl = null;\n filteredItems = [];\n document.removeEventListener(\"keydown\", onKeydown, true);\n document.removeEventListener(\"mousedown\", onOutsideClick, true);\n litRender(nothing, getHost());\n // After teardown so a re-entrant show from the callback sees a closed menu. select() relies on\n // This ordering too: dismiss (→ onDismiss) fires BEFORE onSelect.\n cbs?.onDismiss?.();\n}\n\n// ─── Internal ─────────────────────────────────────────────────────────────────\n\n/** @param {boolean} showFilter */\nfunction render(showFilter: boolean) {\n const rect = _anchorRect;\n if (!rect) {\n return;\n }\n\n litRender(\n html`\n <sp-popover\n open\n data-jx-region=\"overlay.menu:slash-menu\"\n ${ref((el) => {\n _popoverEl = (el as HTMLElement | undefined) || null;\n })}\n style=\"position:fixed;left:${rect.left}px;top:${\n rect.bottom + 4\n }px;z-index:9999;max-height:320px;overflow-y:auto\"\n >\n ${\n showFilter\n ? html`<input\n class=\"slash-filter\"\n type=\"text\"\n placeholder=\"Filter…\"\n autocomplete=\"off\"\n style=\"display:block;width:100%;box-sizing:border-box;padding:6px 10px;border:none;border-bottom:1px solid var(--border, #444);outline:none;font-size:13px;background:transparent;color:inherit\"\n ${ref((el) => {\n _filterEl = (el as HTMLInputElement | undefined) || null;\n })}\n @input=${onFilterInput}\n />`\n : nothing\n }\n <sp-menu style=\"min-width:220px\">\n ${\n filteredItems.length > 0\n ? filteredItems.map(\n (cmd, i) => html`\n <sp-menu-item\n ?focused=${i === 0}\n @click=${(e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n select(cmd);\n }}\n >\n ${cmd.label}\n ${\n cmd.description\n ? html`<span slot=\"description\">${cmd.description}</span>`\n : nothing\n }\n </sp-menu-item>\n `,\n )\n : html`<sp-menu-item disabled>No matches</sp-menu-item>`\n }\n </sp-menu>\n </sp-popover>\n `,\n getHost(),\n );\n}\n\n/** @param {MouseEvent} e */\nfunction onOutsideClick(e: MouseEvent) {\n if (_popoverEl && !_popoverEl.contains(e.target as Node)) {\n dismissSlashMenu();\n }\n}\n\n/** @param {SlashCommand} cmd */\nfunction select(cmd: SlashCommand) {\n const cbs = callbacks;\n dismissSlashMenu();\n cbs?.onSelect(cmd);\n}\n\n/** @param {Event} e */\nfunction onFilterInput(e: Event) {\n const input = e.target as HTMLInputElement;\n const filter = input.value.toLowerCase();\n\n const source = callbacks?.commands || SLASH_COMMANDS;\n filteredItems = filter\n ? source.filter(\n (c) => c.label.toLowerCase().includes(filter) || c.tag.toLowerCase().includes(filter),\n )\n : source;\n\n activeIdx = 0;\n render(true);\n\n // Re-focus input after re-render\n requestAnimationFrame(() => {\n if (_filterEl && _filterEl !== document.activeElement) {\n _filterEl.focus();\n _filterEl.selectionStart = _filterEl.value.length;\n _filterEl.selectionEnd = _filterEl.value.length;\n }\n });\n}\n\n/**\n * Drive the open menu with a navigation key. The canvas-iframe bridge calls this DIRECTLY (the key\n * was pressed in the iframe realm — a synthetic keydown redispatch on this document would lose the\n * capture-first + stopPropagation semantics the menu relies on to shield other handlers).\n *\n * @param {string} key — \"ArrowDown\" | \"ArrowUp\" | \"Enter\" | \"Escape\"\n */\nexport function handleSlashMenuKey(key: string): void {\n if (!open) {\n return;\n }\n\n const items = getHost().querySelectorAll(\"sp-menu-item:not([disabled])\") as NodeListOf<Element>;\n\n if (key === \"ArrowDown\") {\n if (items.length === 0) {\n return;\n }\n items[activeIdx]?.removeAttribute(\"focused\");\n activeIdx = (activeIdx + 1) % items.length;\n items[activeIdx]?.setAttribute(\"focused\", \"\");\n items[activeIdx]?.scrollIntoView({ block: \"nearest\" });\n } else if (key === \"ArrowUp\") {\n if (items.length === 0) {\n return;\n }\n items[activeIdx]?.removeAttribute(\"focused\");\n activeIdx = (activeIdx - 1 + items.length) % items.length;\n items[activeIdx]?.setAttribute(\"focused\", \"\");\n items[activeIdx]?.scrollIntoView({ block: \"nearest\" });\n } else if (key === \"Enter\") {\n const cmd = filteredItems[activeIdx];\n if (cmd) {\n select(cmd);\n }\n } else if (key === \"Escape\") {\n dismissSlashMenu();\n }\n}\n\n/** @param {KeyboardEvent} e */\nfunction onKeydown(e: KeyboardEvent) {\n if (!open) {\n return;\n }\n if ([\"ArrowDown\", \"ArrowUp\", \"Enter\", \"Escape\"].includes(e.key)) {\n e.preventDefault();\n e.stopPropagation();\n handleSlashMenuKey(e.key);\n }\n}\n",
90
- "import elementsMeta from \"../../data/elements-meta.json\";\n\nexport interface SlashCommand {\n label: string;\n tag: string;\n description: string;\n}\n\nconst TAG_LABELS = {\n article: \"Article\",\n aside: \"Aside\",\n blockquote: \"Blockquote\",\n div: \"Div\",\n footer: \"Footer\",\n h1: \"Heading 1\",\n h2: \"Heading 2\",\n h3: \"Heading 3\",\n h4: \"Heading 4\",\n h5: \"Heading 5\",\n h6: \"Heading 6\",\n header: \"Header\",\n main: \"Main\",\n nav: \"Nav\",\n ol: \"Numbered List\",\n p: \"Paragraph\",\n search: \"Search\",\n section: \"Section\",\n ul: \"Bulleted List\",\n} as Record<string, string>;\n\nconst groups = (elementsMeta.$convertGroups || {}) as Record<string, string[]>;\n\n/**\n * Get the list of tags the current element can be converted to.\n *\n * @param {string} currentTag\n * @param {boolean} isEmpty\n * @returns {SlashCommand[]}\n */\nexport function getConvertTargets(currentTag: string, isEmpty: boolean) {\n const def = (elementsMeta.$defs as Record<string, Record<string, unknown>>)?.[currentTag] as\n | Record<string, unknown>\n | undefined;\n if (!def?.$convertTo) {\n return [];\n }\n\n const groupNames =\n isEmpty && def.$convertToWhenEmpty\n ? (def.$convertToWhenEmpty as string[])\n : [def.$convertTo as string];\n\n const tags = new Set<string>();\n for (const name of groupNames) {\n for (const tag of groups[name] || []) {\n if (tag !== currentTag) {\n tags.add(tag);\n }\n }\n }\n\n return [...tags].map((tag) => ({\n description: \"\",\n label: TAG_LABELS[tag] || tag.charAt(0).toUpperCase() + tag.slice(1),\n tag,\n }));\n}\n",
91
- "/// <reference lib=\"dom\" />\n/**\n * Block action bar — the floating toolbar above the selected element.\n *\n * The bar is a RENDERING of the command registry (plan §3.2 region ⑩, §5.5): its verb cluster is\n * `registry.forPlacement(\"blockbar\")`, sliced at {@link BLOCKBAR_MAX_ITEMS} with the remainder\n * behind a `⋮` overflow menu. Every button's accessible name is its record's `title` and its\n * tooltip carries `keymap.formatBinding(id)`, so no action is named twice.\n *\n * `studio-ui-guidelines.md` §8.6 is normative about the shape: **ONE shape.** The bar does not\n * rearrange itself when the author starts typing, and a control that cannot act is DISABLED, not\n * removed — a toolbar whose buttons move under the cursor is worse than one with a greyed button.\n * That is why the parent selector, the drag handle and every verb render unconditionally and take\n * their disabled state (and its one-sentence reason) from the record's own `enablement`.\n *\n * This module is also the single definition site for the structural selection verbs — move\n * up/down/in/out and the component pair — because their implementations live here.\n * {@link registerSelectionCommands} is what a host bootstrap calls to put them in the app-wide\n * registry; until one exists, {@link selectionCommandRegistry} builds the surface's own.\n */\n\nimport { html, render as litRender, nothing } from \"lit-html\";\nimport { displayTagName } from \"@jxsuite/schema/guards\";\nimport { styleMap } from \"lit-html/directives/style-map.js\";\nimport { ref } from \"lit-html/directives/ref.js\";\nimport { draggable } from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\nimport { disableNativeDragPreview } from \"@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview\";\n\nimport {\n VOID_ELEMENTS,\n childIndex,\n childList,\n getNodeAtPath,\n nodeLabel,\n parentElementPath,\n} from \"../store\";\nimport { activeTab } from \"../workspace/workspace\";\nimport { activeCanvasSurface, stageContaining } from \"../canvas/canvas-surface\";\nimport { primarySelection, structuralBatch } from \"../tabs/selection\";\nimport {\n mutateDuplicateNodes,\n mutateMoveNode,\n mutateRemoveNodes,\n mutateUpdateProperty,\n transactDoc,\n} from \"../tabs/transact\";\nimport { view } from \"../view\";\nimport { getInlineActions, isInlineElement } from \"../editor/inline-edit\";\nimport { buildMergeTags, buildRepeaterTagsFromFields } from \"../editor/merge-tags\";\nimport { findEnclosingRepeater, resolveRepeaterItemFields } from \"../editor/repeater-scope\";\nimport { projectState } from \"../state\";\nimport { componentRegistry } from \"../files/components\";\nimport { convertToComponent } from \"../editor/convert-to-component\";\nimport { getEditBarAnchorRect, getEditSnapshot, postApplyFormat } from \"../canvas/iframe-host\";\nimport { getLayerSlot, isModalOpen, renderPopover } from \"../ui/layers\";\nimport { showSlashMenu } from \"../editor/slash-menu\";\nimport { getConvertTargets } from \"../editor/convert-targets\";\nimport { rectOf } from \"../utils/geometry\";\nimport { createCommandRegistry } from \"../commands/registry\";\nimport { editorKindForMode, makeContext } from \"../commands/context\";\nimport { defaultCommands, noopCommandDeps } from \"../commands/defaults\";\n\nimport type { AnyCommand, CommandRegistry } from \"../commands/registry\";\nimport type { CommandContext } from \"../commands/context\";\nimport type { CommandDeps } from \"../commands/defaults\";\nimport type { ApplyFormatIntent } from \"../canvas/iframe-protocol\";\nimport type { JxPath } from \"../state\";\nimport type { JxMutableNode } from \"@jxsuite/schema/types\";\nimport type { TemplateResult } from \"lit-html\";\nimport type { SlashCommand } from \"../editor/convert-targets.js\";\n\n/**\n * The plain format commands — everything an action button posts except link/insertData.\n *\n * This read `Extract<ApplyFormatIntent, { command: \"bold\" }>[\"command\"]`, which resolves to\n * `never`: `Extract` distributes, and the intent member whose `command` is `\"bold\" | \"italic\" | …`\n * is not assignable to `{ command: \"bold\" }`. Every use of the alias was therefore an unchecked\n * cast, and the compiler agreed to all of them. Subtracting the two members that carry extra fields\n * is the shape that actually names the seven.\n */\ntype FormatCommand = Exclude<\n Extract<ApplyFormatIntent, { command: string }>[\"command\"],\n \"link\" | \"insertData\"\n>;\n\n/**\n * @type {{\n * getCanvasMode: () => string;\n * navigateToComponent: (path: string) => void;\n * } | null}\n */\nlet _ctx: {\n getCanvasMode: () => string;\n navigateToComponent: (path: string) => void;\n} | null = null;\n\n/**\n * Initialize the block action bar module.\n *\n * @param {{\n * getCanvasMode: () => string;\n * navigateToComponent: (path: string) => void;\n * }} ctx\n */\nexport function initBlockActionBar(ctx: {\n getCanvasMode: () => string;\n navigateToComponent: (path: string) => void;\n}) {\n _ctx = ctx;\n if (!_formatShortcutBound) {\n /* The format chords are gone from here. They were a `keydown` switch on ⌘B/⌘I/⌘`/⌘K that ran\n BESIDE the registry's dispatcher on the same document, with its own modal check and its own\n early return — a second keyboard authority for four verbs that now hold their chords as\n records ({@link formatCommands}). Leaving it in place would fire ⌘K twice, and the second\n call re-mounts the link popover over the URL field the first one opened. */\n // ⌥↑ is the keyboard way INTO the bar. The audit found it unreachable without a mouse.\n document.addEventListener(\"keydown\", handleBlockBarEntryKey);\n // `scroll` doesn't bubble but IS deliverable capture-phase at the document — one app-lifetime\n // Listener covers .content-edit-canvas (edit mode), window scrolls, and any future scroll\n // Container, keeping the position:fixed bar tracking its (scrolling) anchor.\n document.addEventListener(\"scroll\", onCanvasScroll, { capture: true, passive: true });\n _formatShortcutBound = true;\n }\n}\n\n/** Register the parent-document format-shortcut + scroll handlers exactly once. */\nlet _formatShortcutBound = false;\n\n/** One reposition per frame, no matter how many scroll events land in it. */\nlet _scrollRafPending = false;\n\n/**\n * Reposition the bar on a canvas-area scroll — rAF-throttled and via the style fast path ({@link\n * repositionBlockActionBar}), NOT a full lit re-render (which would tear down and re-create the\n * drag-handle's pragmatic-dnd registration every frame). Exported for tests.\n *\n * @param {Event} e\n */\nexport function onCanvasScroll(e: Event): void {\n if (!_ctx || _linkPopoverOpen) {\n return;\n }\n if (activeTab.value?.session.selection.length === 0) {\n return;\n }\n const mode = _ctx.getCanvasMode();\n if (mode !== \"design\" && mode !== \"edit\") {\n return;\n }\n // Only canvas-area scrolls (or the window itself) move the anchor; left/right panel scrolling\n // Never does.\n const isCanvasScroll =\n e.target === document || (e.target instanceof Node && stageContaining(e.target) !== null);\n if (!isCanvasScroll || _scrollRafPending) {\n return;\n }\n _scrollRafPending = true;\n requestAnimationFrame(() => {\n _scrollRafPending = false;\n repositionBlockActionBar();\n });\n}\n\n/**\n * Style-only fast path: move the existing bar to the anchor's current position (fresh\n * {@link getEditBarAnchorRect} — the iframe's GBCR moves with the scroll). Hides via `visibility`\n * when the anchor left the canvas area so the lit tree (and the drag handle's dnd registration)\n * survives; a bar hidden by the full render path (`nothing`) is resurrected with a full render.\n */\nfunction repositionBlockActionBar(): void {\n const bar = view.blockActionBarEl?.firstElementChild as HTMLElement | null;\n if (!bar) {\n renderBlockActionBar();\n return;\n }\n const anchor = getEditBarAnchorRect();\n const pos = anchor ? barPosition(anchor) : null;\n if (!pos) {\n bar.style.visibility = \"hidden\";\n return;\n }\n bar.style.visibility = \"\";\n bar.style.left = `${pos.left}px`;\n bar.style.top = `${pos.top}px`;\n clampBarToWindow(bar);\n}\n\n/**\n * The bar's position for `anchor` (flipping below the element near the top edge), or null when the\n * anchor's vertical extent has left the canvas area — the popover layer has no clipping, so a\n * clamped bar would float detached over the app toolbar / panel headers.\n *\n * @param {{ left: number; top: number; height: number }} anchor\n */\nfunction barPosition(anchor: {\n left: number;\n top: number;\n height: number;\n}): { left: number; top: number } | null {\n /* Clipped against the stage the CARET is on. The bar anchors to one selection in one document,\n and the bar is one element, so \"is the anchor still on screen\" is a question about ONE pane's\n stage — and the pane is the FOCUSED one, because that is where the caret is. This asked\n \"the stage showing the active tab\", which was the same answer only while a tab could be on\n screen in one place; with a document displayed in two panes it picked whichever came first in\n the grid, and clipped the bar against a stage the author is not typing in. */\n const stage = activeCanvasSurface().wrap;\n if (stage) {\n const wrap = rectOf(stage);\n if (anchor.top + anchor.height < wrap.top || anchor.top > wrap.bottom) {\n return null;\n }\n }\n return {\n left: anchor.left,\n top: anchor.top < 80 ? anchor.top + anchor.height + 4 : anchor.top - 38,\n };\n}\n\n/**\n * Pull the bar back inside the window's right edge.\n *\n * @param {HTMLElement} bar\n */\nfunction clampBarToWindow(bar: HTMLElement): void {\n const barRect = rectOf(bar);\n if (barRect.right > window.innerWidth) {\n bar.style.left = `${Math.max(0, window.innerWidth - barRect.width)}px`;\n }\n}\n\n/**\n * The inline-format vocabulary, as records.\n *\n * **What this replaces, and what it revives.** Bold, Italic, Code and Link had chords printed in\n * three places — a tooltip, a spec table, a data file's `shortcut: \"Cmd+B\"` string that is wrong on\n * every Windows machine — and lived in a hand-written `keydown` switch that returned early whenever\n * focus was inside the canvas iframe, which is exactly when a caret exists. Inside the frame\n * `iframe-keys.ts` refused to forward them \"because the engine handles them\", and the engine did\n * not: the parent's `editor/inline-edit.ts` keydown listener is attached to the BLOCK while the\n * editing host is the canvas container, and `canvas/editable-actions.ts` rejects the browser's own\n * `formatBold` because Jx owns its markup. So ⌘B in the canvas did nothing at all, in an app whose\n * toolbar advertised it.\n *\n * They are the case UX-REDESIGN-PLAN §5.1 uses to justify two fields, so they are written the way\n * it says: `level: \"selection\"` — a range inside the selected node is still the selection, and a\n * fifth `range` level would demand a fifth region — with `keyScope: \"caret\"`, which is what makes\n * the chord live only where a caret is. They were, until this change, the only capability in Studio\n * with a chord and no record.\n *\n * **The set is the schema's, the verbs are the registry's.** `data/elements-meta.json` says which\n * of the eight a given tag accepts (`$inlineActions`), so the bar draws four on an `<h1>` and eight\n * on a `<p>`; what each one is CALLED, which chord it holds and what it does are on the record.\n * That is the same division P5.3 made for value sources — caps derive from the schema, behaviour\n * does not.\n *\n * `when` is {@link CommandContext.caret.inCanvas} and not `caret.active`: the caret stack is live\n * in every parent-realm text field too, and ⌘K firing there would re-mount the link popover over\n * the URL the author is typing into it.\n */\nexport function formatCommands(): AnyCommand[] {\n const record = (\n command: FormatCommand,\n title: string,\n icon: string,\n keybinding?: string,\n ): AnyCommand => ({\n category: \"Edit\",\n group: \"6_format\",\n icon,\n id: `format.${command}`,\n ...(keybinding === undefined ? {} : { keybinding }),\n keyScope: \"caret\",\n level: \"selection\",\n menus: [\"blockbar/format\", \"palette\"],\n requires: \"a text caret in the canvas\",\n run: () => {\n postApplyFormat({ command });\n },\n title,\n undo: \"document\",\n when: (ctx: CommandContext) => ctx.caret.inCanvas,\n });\n\n return [\n record(\"bold\", \"Bold\", \"sp-icon-text-bold\", \"mod+b\"),\n record(\"italic\", \"Italic\", \"sp-icon-text-italic\", \"mod+i\"),\n record(\"underline\", \"Underline\", \"sp-icon-text-underline\", \"mod+u\"),\n record(\"strikethrough\", \"Strikethrough\", \"sp-icon-text-strikethrough\"),\n record(\"superscript\", \"Superscript\", \"sp-icon-text-superscript\"),\n record(\"subscript\", \"Subscript\", \"sp-icon-text-subscript\"),\n record(\"code\", \"Code\", \"sp-icon-code\", \"mod+`\"),\n {\n category: \"Edit\",\n group: \"6_format\",\n icon: \"sp-icon-link\",\n id: \"format.link\",\n /* ⌘K, at `caret` scope, beside `palette.open`'s global ⌘K. Two scopes may hold one chord —\n that is what a shadowing ladder is — and the caret's wins only while a caret is in the\n page. `commands/registry.ts`'s dispatcher takes the narrowest AVAILABLE claimant, so with\n focus in a panel field (where this record's `when` is false) ⌘K still opens the palette. */\n keybinding: \"mod+k\",\n keyScope: \"caret\",\n level: \"selection\",\n menus: [\"blockbar/format\", \"palette\"],\n requires: \"a text caret in the canvas\",\n run: () => {\n openLinkPopoverFromShortcut();\n },\n title: \"Link…\",\n undo: \"document\",\n when: (ctx: CommandContext) => ctx.caret.inCanvas,\n },\n ];\n}\n\n// ─── The selection command layer ─────────────────────────────────────────────\n\n/** Enough of a tab for the structural verbs. Mirrors `activeTab.value`'s non-null type. */\ntype ActiveTab = NonNullable<typeof activeTab.value>;\n\n/**\n * The node the selection verbs act on, when it is not simply the selection.\n *\n * The block action bar's target IS the selection. An Outline row's target is the ROW'S node —\n * `PLACEMENT_MATRIX[\"outline/row\"]` says so (\"row actions act on the row's node\"), and a hovered\n * row is not the selected one. Rather than teach every record a second argument, the surface\n * declares the target for the duration of one synchronous render or one click\n * ({@link withCommandTarget}); the records keep reading one function.\n */\nlet _commandTarget: JxPath | null = null;\n\n/** The path the selection verbs currently address: an explicit target, else the selection. */\nexport function commandTargetPath(): JxPath | null {\n return _commandTarget ?? primarySelection(activeTab.value?.session.selection);\n}\n\n/**\n * The paths a BATCH verb addresses — Delete and Duplicate, the two that are meaningful on a set.\n *\n * An explicit target wins outright and is always exactly one path:\n * `PLACEMENT_MATRIX[\"outline/row\"]` says a row action acts on the row's node, and a hovered row is\n * not the selection. With no explicit target this is the whole selection, so `length === 1` hands\n * back the single path the verbs have always received.\n *\n * The move verbs deliberately do NOT use this. \"Move six nodes up one slot\" has no single answer\n * when they are not siblings, and every one of them is `childIndex` arithmetic against a parent\n * that the previous move just renumbered.\n *\n * @returns {JxPath[]}\n */\nexport function commandTargetPaths(): JxPath[] {\n if (_commandTarget) {\n return [_commandTarget];\n }\n return activeTab.value?.session.selection ?? [];\n}\n\n/** Run `fn` with `path` as the command target. Synchronous — the target never outlives the call. */\nexport function withCommandTarget<T>(path: JxPath, fn: () => T): T {\n const previous = _commandTarget;\n _commandTarget = path;\n try {\n return fn();\n } finally {\n _commandTarget = previous;\n }\n}\n\n/** Whether `node` is an instance of a registered project component. */\nfunction isComponentInstanceNode(node: JxMutableNode | null | undefined): boolean {\n const tag = node?.tagName;\n const literal = displayTagName(tag);\n return Boolean(literal.includes(\"-\") && componentRegistry.some((c) => c.tagName === literal));\n}\n\n/**\n * The {@link CommandContext} the selection verbs are evaluated against.\n *\n * Only the groups these records read are populated; everything else keeps `emptyContext`'s honest\n * cold-start value. `isRoot` is `parentElementPath(path) === null`, which is the same test in both\n * document modes: a content root sits at `[]`, an element root at `[]` too, and every movable node\n * has a `[…, \"children\", i]` tail.\n */\nexport function selectionCommandContext(): CommandContext {\n const tab = activeTab.value;\n const path = commandTargetPath();\n const node = tab && path ? getNodeAtPath(tab.doc.document, path) : null;\n return makeContext({\n /* The caret, as this surface knows it. `getEditSnapshot().editing` IS \"a caret session is live\n in the canvas\" — the same fact `commands/live-context.ts` derives from the bridge for the\n app-wide registry — and the format records are gated on it, so without this line the bar\n would draw its own format cluster permanently hidden. `active` and `inCanvas` are the same\n answer here because this surface has no parent-realm text field to confuse it with. */\n caret: { active: getEditSnapshot().editing, inCanvas: getEditSnapshot().editing },\n // The editor kind is part of the answer, not a default: `makeContext` fills it with \"none\",\n // Which now reads as \"not a canvas\" and would hide the bar's own verbs from itself.\n editor: { kind: tab ? editorKindForMode(tab.session.ui.canvasMode) : \"none\" },\n document: { open: Boolean(tab) },\n selection: {\n count: path ? 1 : 0,\n isComponentInstance: isComponentInstanceNode(node),\n isRoot: path ? parentElementPath(path) === null : false,\n kind: displayTagName(node?.tagName),\n },\n });\n}\n\n/** The structural facts a move verb needs. `null` when the target cannot be moved at all. */\ninterface StructuralTarget {\n tab: ActiveTab;\n path: JxPath;\n index: number;\n parentPath: JxPath;\n siblings: (JxMutableNode | string)[];\n}\n\n/** Resolve the current command target to its parent/index/siblings, or `null` if it has none. */\nfunction structuralTarget(path: JxPath | null = commandTargetPath()): StructuralTarget | null {\n const tab = activeTab.value;\n if (!tab || !path) {\n return null;\n }\n /* THE SAME CONJUNCT `hasSelection` CARRIES, and for the same reason it gives. Four movers gate on\n this function and none of them asked what editor is open, while their peers Delete and\n Duplicate did — so with Project Settings focused the Outline row menu dropped Delete and\n Duplicate and still rendered Move Up / Move Down / Move Into Previous / Move Out of Parent.\n Those four `transactDoc` element splices straight into `project.json` through the transaction\n log and then rewrite `session.selection`; the write lands and is saved. One surface, two rules,\n and the loose ones were the mutating majority. Asked once, here, because all four share it. */\n if (editorKindForMode(tab.session.ui.canvasMode) !== \"canvas\") {\n return null;\n }\n const index = childIndex(path);\n const parentPath = parentElementPath(path);\n if (typeof index !== \"number\" || !parentPath) {\n return null;\n }\n const parentNode = getNodeAtPath(tab.doc.document, parentPath);\n if (!parentNode) {\n return null;\n }\n return { index, parentPath, path, siblings: childList(parentNode), tab };\n}\n\n/**\n * Whether `node` can accept a dropped-in sibling — the precondition for \"move into previous\".\n *\n * A void element cannot; an element whose only children are inline (a paragraph's `<em>`) is a text\n * block, not a container, and nesting a block inside it produces invalid markup.\n */\nfunction isContainerNode(node: JxMutableNode | string | null | undefined): boolean {\n if (!node || typeof node !== \"object\") {\n return false;\n }\n if (VOID_ELEMENTS.has((displayTagName(node.tagName) || \"div\").toLowerCase())) {\n return false;\n }\n const { children } = node;\n if (!children) {\n return false;\n }\n if (!Array.isArray(children)) {\n return (children as unknown as Record<string, unknown>).$prototype === \"Array\";\n }\n return (\n children.length === 0 ||\n children.some((c) => typeof c === \"object\" && c !== null && !isInlineElement(c, node))\n );\n}\n\nfunction canMoveUp(): boolean {\n const target = structuralTarget();\n return target !== null && target.index > 0;\n}\n\nfunction canMoveDown(): boolean {\n const target = structuralTarget();\n return target !== null && target.index < target.siblings.length - 1;\n}\n\nfunction canMoveIn(): boolean {\n const target = structuralTarget();\n return target !== null && target.index > 0 && isContainerNode(target.siblings[target.index - 1]);\n}\n\nfunction canMoveOut(): boolean {\n const target = structuralTarget();\n return (\n target !== null &&\n parentElementPath(target.parentPath) !== null &&\n typeof childIndex(target.parentPath) === \"number\"\n );\n}\n\n/** Move the target up one slot among its siblings, keeping it selected. */\nfunction moveTargetUp(): void {\n const target = structuralTarget();\n if (!target || target.index === 0) {\n return;\n }\n const { index, parentPath, path, tab } = target;\n transactDoc(tab, (t) => mutateMoveNode(t, path, parentPath, index - 1));\n tab.session.selection = [[...parentPath, \"children\", index - 1]];\n}\n\n/** Move the target down one slot among its siblings, keeping it selected. */\nfunction moveTargetDown(): void {\n const target = structuralTarget();\n if (!target || target.index >= target.siblings.length - 1) {\n return;\n }\n const { index, parentPath, path, tab } = target;\n // `index + 2`: mutateMoveNode removes before it inserts, so a same-parent move down needs the\n // Post-removal index of the slot AFTER the next sibling.\n transactDoc(tab, (t) => mutateMoveNode(t, path, parentPath, index + 2));\n tab.session.selection = [[...parentPath, \"children\", index + 1]];\n}\n\n/** Append the target to its previous sibling, making it that element's last child. */\nfunction moveTargetIn(): void {\n const target = structuralTarget();\n if (!canMoveIn() || !target) {\n return;\n }\n const { index, parentPath, path, tab } = target;\n const prevPath = [...parentPath, \"children\", index - 1];\n const { length } = childList(getNodeAtPath(tab.doc.document, prevPath));\n transactDoc(tab, (t) => mutateMoveNode(t, path, prevPath, length));\n tab.session.selection = [[...prevPath, \"children\", length]];\n}\n\n/** Lift the target out of its parent, landing it directly after that parent. */\nfunction moveTargetOut(): void {\n const target = structuralTarget();\n if (!target) {\n return;\n }\n const grandparent = parentElementPath(target.parentPath);\n const parentIndex = childIndex(target.parentPath);\n if (!grandparent || typeof parentIndex !== \"number\") {\n return;\n }\n transactDoc(target.tab, (t) => mutateMoveNode(t, target.path, grandparent, parentIndex + 1));\n target.tab.session.selection = [[...grandparent, \"children\", parentIndex + 1]];\n}\n\n/**\n * Delete every targeted node, leaving the primary's parent selected (never a dangling path).\n *\n * One transaction, therefore one undo step — a six-node delete that produced six history entries\n * would make ⌘Z a rebuild rather than a reversal.\n *\n * **A delete that removes nothing moves nothing.** The selection jump is the visible half of this\n * verb, and running it over an unchanged document is the app telling the author something happened\n * when nothing did. There are two ways to remove nothing, and each is checked on its own side of\n * the transaction:\n *\n * - `mutateRemoveNodes` removes exactly {@link structuralBatch}, which drops every path that names no\n * splice coordinate — the document element, a repeater's map template, a `$switch` case. A target\n * made only of those filters out entirely, and calling `transactDoc` anyway would ALSO mark the\n * tab dirty and push an undo step that reverses nothing. So an empty batch returns before the\n * transaction rather than after it.\n * - `transactDoc` itself declines while a peer holds source-canonical, and says so by leaving the\n * document root reference — which it otherwise always replaces — exactly as it found it.\n */\nfunction deleteTarget(): void {\n const tab = activeTab.value;\n const paths = commandTargetPaths();\n const path = commandTargetPath();\n // An empty target and a target of nothing-spliceable are the same answer: `structuralBatch([])`\n // Is `[]`, so one test covers both.\n if (!tab || !path || structuralBatch(paths).length === 0) {\n return;\n }\n const documentBefore = tab.doc.document;\n transactDoc(tab, (t) => mutateRemoveNodes(t, paths));\n if (tab.doc.document === documentBefore) {\n return;\n }\n const parentPath = parentElementPath(path);\n tab.session.selection = parentPath ? [parentPath] : [];\n}\n\n/** Duplicate every targeted node in one transaction, selecting the copies. */\nfunction duplicateTarget(): void {\n const tab = activeTab.value;\n const paths = commandTargetPaths();\n if (!tab || paths.length === 0) {\n return;\n }\n transactDoc(tab, (t) => mutateDuplicateNodes(t, paths));\n}\n\n/** Select the target's parent element. */\nfunction selectParentOfTarget(): void {\n const tab = activeTab.value;\n const path = commandTargetPath();\n const parentPath = path ? parentElementPath(path) : null;\n if (tab && parentPath) {\n tab.session.selection = [parentPath];\n }\n}\n\n/** What the structural selection verbs need that this module does not own. */\nexport interface SelectionCommandDeps {\n /** Open the component definition behind the selected instance. */\n navigateToComponent: (path: string) => void;\n /** Lift the selection into a new component file. */\n convertToComponent: () => void;\n}\n\n/** A target exists at all — the `when` every selection verb shares. */\nconst hasTarget = (ctx: CommandContext) => ctx.selection.count > 0;\n\n/**\n * The structural selection verbs, defined once.\n *\n * `group` keys are ordering keys, not categories: the four moves sort ahead of `3_structure`\n * (Duplicate, from `commands/defaults.ts`) and `9_danger` (Delete, likewise), which is the order\n * the bar and the Outline rows both render in.\n *\n * No `keybinding` is claimed here on purpose. The chord table is `editor/shortcuts.ts`'s port (plan\n * P2 workstream 4); claiming chords from a panel would decide that port's outcome by accident. The\n * buttons still print the chords of the records that DO carry them.\n */\nexport function registerSelectionCommands(\n registry: CommandRegistry,\n deps: SelectionCommandDeps,\n): void {\n registry.registerAll([\n {\n category: \"Selection\",\n enablement: canMoveUp,\n group: \"1_move_1\",\n icon: \"sp-icon-arrow-up\",\n id: \"selection.moveUp\",\n keyScope: \"canvas\",\n level: \"selection\",\n menus: [\"blockbar\", \"outline/row\"],\n requires: \"an element with a sibling above it\",\n run: () => moveTargetUp(),\n title: \"Move Up\",\n undo: \"document\",\n when: hasTarget,\n },\n {\n category: \"Selection\",\n enablement: canMoveDown,\n group: \"1_move_2\",\n icon: \"sp-icon-arrow-down\",\n id: \"selection.moveDown\",\n keyScope: \"canvas\",\n level: \"selection\",\n menus: [\"blockbar\", \"outline/row\"],\n requires: \"an element with a sibling below it\",\n run: () => moveTargetDown(),\n title: \"Move Down\",\n undo: \"document\",\n when: hasTarget,\n },\n {\n category: \"Selection\",\n enablement: canMoveIn,\n group: \"1_move_3\",\n icon: \"sp-icon-arrow-right\",\n id: \"selection.moveIn\",\n keyScope: \"canvas\",\n level: \"selection\",\n menus: [\"outline/row\"],\n requires: \"a container directly above the element\",\n run: () => moveTargetIn(),\n title: \"Move Into Previous\",\n undo: \"document\",\n when: hasTarget,\n },\n {\n category: \"Selection\",\n enablement: canMoveOut,\n group: \"1_move_4\",\n icon: \"sp-icon-arrow-left\",\n id: \"selection.moveOut\",\n keyScope: \"canvas\",\n level: \"selection\",\n menus: [\"outline/row\"],\n requires: \"an element nested inside another\",\n run: () => moveTargetOut(),\n title: \"Move Out of Parent\",\n undo: \"document\",\n when: hasTarget,\n },\n // Convert / Edit are one slot with two states, not two optional buttons: `when` splits them on\n // \"is this a component instance\", so exactly one of the pair renders for any selection and the\n // Bar keeps its shape.\n {\n category: \"Selection\",\n // …and the same conjunct here: Convert to Component starts a project-level flow, so it must\n // Not be reachable from a config node drawn as a layer tree.\n enablement: (ctx) =>\n Boolean(ctx.selection.kind) && !ctx.selection.isRoot && ctx.editor.kind === \"canvas\",\n group: \"4_component\",\n icon: \"sp-icon-box\",\n id: \"selection.convertToComponent\",\n level: \"selection\",\n // Three surfaces, ONE record. `editor/context-menu.ts` carried a second `convertToComponent`\n // With the same title and a different `when`, invisible to every registry but its own popover.\n menus: [\"blockbar\", \"context/element\", \"palette\"],\n requires: \"an element that is not the document root\",\n // Deliberately NOT awaited: `convertToComponent()` resolves when the human answers the name\n // Dialog, and a command whose promise waits on a person is a command nothing automated can\n // Call. `run()` means \"start this flow\", the same as `settings.open` and `project.new`.\n run: () => {\n void deps.convertToComponent();\n },\n title: \"Convert to Component\",\n undo: \"project\",\n when: (ctx) => ctx.selection.count > 0 && !ctx.selection.isComponentInstance,\n },\n {\n category: \"Selection\",\n group: \"4_component\",\n icon: \"sp-icon-edit\",\n id: \"selection.editComponent\",\n level: \"selection\",\n menus: [\"blockbar\", \"context/element\", \"palette\"],\n requires: \"a component instance\",\n run: () => {\n const node = componentOfTarget();\n if (node) {\n deps.navigateToComponent(node);\n }\n },\n title: \"Edit Component\",\n undo: \"none\",\n when: (ctx) => ctx.selection.isComponentInstance,\n },\n ] satisfies AnyCommand[]);\n}\n\n/** The component file behind the current target, when it is an instance. */\nfunction componentOfTarget(): string | null {\n const tab = activeTab.value;\n const path = commandTargetPath();\n const node = tab && path ? getNodeAtPath(tab.doc.document, path) : null;\n const entry = componentRegistry.find((c) => c.tagName === node?.tagName);\n return entry?.path ?? null;\n}\n\n/** The registry the two selection surfaces render. Injected by a host, or built on first use. */\nlet _registry: CommandRegistry | null = null;\n\n/**\n * Hand the surfaces the app-wide registry (or `null` to drop back to the surface's own).\n *\n * A host that injects one is responsible for two things: registering\n * {@link registerSelectionCommands}, and building its `getContext` so it honours\n * {@link commandTargetPath} — otherwise an Outline row's buttons report the SELECTION's enablement\n * rather than the row's.\n */\nexport function useCommandRegistry(registry: CommandRegistry | null): void {\n _registry = registry;\n}\n\n/**\n * The registry the block action bar and the Outline rows render.\n *\n * Until a host bootstrap injects one there is no app-wide registry, so this builds the surface's\n * own: the SELECTION-level slice of `commands/defaults.ts` (which is where Delete, Duplicate and\n * Select Parent are defined, with `blockbar` / `outline/row` already declared) plus the structural\n * verbs above. The other levels are filtered out rather than stubbed — Save is not this surface's\n * to own, and a registry holding a no-op `file.save` would be a lie.\n */\nexport function selectionCommandRegistry(): CommandRegistry {\n if (_registry) {\n return _registry;\n }\n const registry = createCommandRegistry({ getContext: selectionCommandContext });\n const deps: CommandDeps = {\n ...noopCommandDeps(),\n deleteSelection: deleteTarget,\n duplicateSelection: duplicateTarget,\n selectParent: selectParentOfTarget,\n };\n registry.registerAll(defaultCommands(deps).filter((command) => command.level === \"selection\"));\n registerSelectionCommands(registry, {\n convertToComponent: () => convertToComponent(),\n navigateToComponent: (path) => _ctx?.navigateToComponent(path),\n });\n // The format cluster renders from records like every other button on this bar, so the surface's\n // Own registry has to hold them — otherwise `keymap.formatBinding(\"format.bold\")` has nothing to\n // Format and the tooltip goes back to the hardcoded `Cmd+B` this change deleted.\n registry.registerAll(formatCommands());\n _registry = registry;\n return registry;\n}\n\n/** How many verb buttons the bar renders before the rest fold into `⋮` (plan §3.2 ⑩). */\nexport const BLOCKBAR_MAX_ITEMS = 5;\n\n/**\n * Icons for command records, keyed by the record's own `icon`.\n *\n * A record with no icon renders its title as text rather than an unlabelled blank: the surface is\n * allowed to choose how a name is drawn, never what it is.\n */\nconst commandIconMap: Record<string, TemplateResult> = {\n \"sp-icon-arrow-down\": html`<sp-icon-arrow-down slot=\"icon\"></sp-icon-arrow-down>`,\n \"sp-icon-arrow-left\": html`<sp-icon-arrow-left slot=\"icon\"></sp-icon-arrow-left>`,\n \"sp-icon-arrow-right\": html`<sp-icon-arrow-right slot=\"icon\"></sp-icon-arrow-right>`,\n \"sp-icon-arrow-up\": html`<sp-icon-arrow-up slot=\"icon\"></sp-icon-arrow-up>`,\n \"sp-icon-box\": html`<sp-icon-box slot=\"icon\" size=\"xs\"></sp-icon-box>`,\n \"sp-icon-code\": html`<sp-icon-code slot=\"icon\"></sp-icon-code>`,\n \"sp-icon-delete\": html`<sp-icon-delete slot=\"icon\"></sp-icon-delete>`,\n \"sp-icon-duplicate\": html`<sp-icon-duplicate slot=\"icon\"></sp-icon-duplicate>`,\n \"sp-icon-edit\": html`<sp-icon-edit slot=\"icon\" size=\"xs\"></sp-icon-edit>`,\n \"sp-icon-link\": html`<sp-icon-link slot=\"icon\"></sp-icon-link>`,\n \"sp-icon-text-bold\": html`<sp-icon-text-bold slot=\"icon\"></sp-icon-text-bold>`,\n \"sp-icon-text-italic\": html`<sp-icon-text-italic slot=\"icon\"></sp-icon-text-italic>`,\n \"sp-icon-text-strikethrough\": html`<sp-icon-text-strikethrough\n slot=\"icon\"\n ></sp-icon-text-strikethrough>`,\n \"sp-icon-text-subscript\": html`<sp-icon-text-subscript slot=\"icon\"></sp-icon-text-subscript>`,\n \"sp-icon-text-superscript\": html`<sp-icon-text-superscript\n slot=\"icon\"\n ></sp-icon-text-superscript>`,\n \"sp-icon-text-underline\": html`<sp-icon-text-underline slot=\"icon\"></sp-icon-text-underline>`,\n};\n\n/** The record's icon, or its title drawn as a compact label. */\nexport function commandIcon(command: AnyCommand): TemplateResult {\n return (\n (command.icon ? commandIconMap[command.icon] : undefined) ??\n html`<span class=\"cmd-label\">${command.title}</span>`\n );\n}\n\n/**\n * The tooltip: the chord when the control can act, the `requires` sentence when it cannot.\n *\n * Both strings come from the record. The accessible name stays the bare `title` either way, so a\n * screen reader announces \"Delete\", not \"Delete, requires an element selection\".\n */\nexport function commandTooltip(registry: CommandRegistry, command: AnyCommand): string {\n const reason = registry.disabledReason(command.id);\n if (reason !== undefined) {\n return `${command.title} — requires ${reason}`;\n }\n const chord = registry.keymap.formatBinding(command.id);\n return chord ? `${command.title} (${chord})` : command.title;\n}\n\n/** Run a command, swallowing the refusal a disabled control should never have produced. */\nexport function runCommand(registry: CommandRegistry, id: string, target?: JxPath | null): void {\n const invoke = () => {\n if (registry.isEnabled(id)) {\n void registry.run(id);\n }\n };\n if (target) {\n withCommandTarget(target, invoke);\n } else {\n invoke();\n }\n}\n\n/**\n * Prevent the bar from stealing focus from contenteditable\n *\n * @param {MouseEvent} e\n */\nfunction onBarMousedown(e: MouseEvent) {\n if ((e.target as HTMLElement).closest(\"sp-textfield\")) {\n return;\n }\n if ((e.target as HTMLElement).closest(\".bar-drag-handle\")) {\n return;\n }\n if ((e.target as HTMLElement).closest(\".bar-tag--interactive\")) {\n return;\n }\n e.preventDefault();\n}\n\n/**\n * @param {MouseEvent} e\n * @param {import(\"../editor/convert-targets.js\").SlashCommand[]} targets\n * @param {JxPath} selection\n */\nfunction onTagBadgeClick(e: MouseEvent, targets: SlashCommand[], selection: JxPath) {\n e.stopPropagation();\n const anchorEl = e.currentTarget as HTMLElement;\n showSlashMenu(anchorEl, \"\", {\n commands: targets,\n onSelect: (cmd) => {\n transactDoc(activeTab.value, (t) => {\n mutateUpdateProperty(t, selection, \"tagName\", cmd.tag);\n });\n },\n showFilter: targets.length > 6,\n });\n}\n\n/**\n * The parent selector.\n *\n * It renders the `selection.selectParent` record — its name, its chord and its handler — but as\n * fixed chrome rather than from `forPlacement(\"blockbar\")`, because that record does not declare\n * the placement. Its disabled state is \"the selection has no parent\", which the record's own\n * `enablement` (a bare \"there is a selection\") cannot express yet.\n */\nfunction renderParentButton(registry: CommandRegistry) {\n const tab = activeTab.value;\n const selection = primarySelection(tab?.session.selection);\n const parentPath = selection ? parentElementPath(selection) : null;\n const parentNode = tab && parentPath ? getNodeAtPath(tab.doc.document, parentPath) : null;\n const command = registry.get(\"selection.selectParent\");\n const name = command?.title ?? \"Select Parent\";\n const chord = command ? registry.keymap.formatBinding(command.id) : undefined;\n const label = parentNode ? `Select parent: ${nodeLabel(parentNode)}` : name;\n return html`\n <sp-action-button\n size=\"xs\"\n quiet\n data-toolbar-item\n tabindex=\"-1\"\n aria-label=${label}\n title=${chord ? `${label} (${chord})` : label}\n ?disabled=${!parentPath}\n @click=${(e: MouseEvent) => {\n e.stopPropagation();\n runCommand(registry, \"selection.selectParent\");\n }}\n >\n <sp-icon-back slot=\"icon\"></sp-icon-back>\n </sp-action-button>\n `;\n}\n\n/** One verb, rendered from its record. */\nfunction renderCommandButton(registry: CommandRegistry, command: AnyCommand) {\n const disabled = registry.disabledReason(command.id) !== undefined;\n return html`<sp-action-button\n size=\"xs\"\n quiet\n class=${command.destructive ? \"bar-cmd bar-cmd--danger\" : \"bar-cmd\"}\n data-toolbar-item\n data-command=${command.id}\n tabindex=\"-1\"\n aria-label=${command.title}\n title=${commandTooltip(registry, command)}\n ?disabled=${disabled}\n @mousedown=${(e: MouseEvent) => e.preventDefault()}\n @click=${(e: MouseEvent) => {\n e.stopPropagation();\n runCommand(registry, command.id);\n }}\n >${commandIcon(command)}</sp-action-button\n >`;\n}\n\n/** The `⋮` button and the menu of everything past {@link BLOCKBAR_MAX_ITEMS}. */\nfunction renderOverflowButton(registry: CommandRegistry, commands: readonly AnyCommand[]) {\n return html`<sp-action-button\n size=\"xs\"\n quiet\n class=\"bar-overflow\"\n data-toolbar-item\n tabindex=\"-1\"\n aria-label=\"More block actions\"\n aria-haspopup=\"menu\"\n title=\"More block actions\"\n @mousedown=${(e: MouseEvent) => e.preventDefault()}\n @click=${(e: MouseEvent) => {\n e.stopPropagation();\n showCommandOverflow(e.currentTarget as HTMLElement, registry, commands);\n }}\n >\n <sp-icon-more slot=\"icon\"></sp-icon-more>\n </sp-action-button>`;\n}\n\n/** The open overflow menu, so a second press (or a re-render) closes rather than stacks it. */\nlet _overflowHandle: { dismiss: () => void; host: HTMLElement } | null = null;\n\n/** Close the block action bar's `⋮` menu if it is open. */\nexport function dismissBlockBarOverflow(): void {\n _overflowHandle?.dismiss();\n _overflowHandle = null;\n}\n\n/**\n * Show the `⋮` menu under `anchor`. Rows carry the same names, chords and refusals as the buttons.\n *\n * Shared by the block action bar and the Outline rows — one menu is open at a time, so `target`\n * (the Outline row's node) is captured per row and re-applied when a row is chosen.\n */\nexport function showCommandOverflow(\n anchor: HTMLElement,\n registry: CommandRegistry,\n commands: readonly AnyCommand[],\n target: JxPath | null = null,\n): void {\n dismissBlockBarOverflow();\n const rect = rectOf(anchor);\n // Resolve every row's name / chord / refusal against the TARGET, not the selection, before the\n // Template is built — lit evaluates these eagerly, so the wrap has to cover the whole projection.\n const project = () =>\n commands.map((command) => ({\n chord: registry.keymap.formatBinding(command.id),\n destructive: command.destructive === true,\n disabled: registry.disabledReason(command.id) !== undefined,\n id: command.id,\n title: command.title,\n tooltip: commandTooltip(registry, command),\n }));\n const rows = target ? withCommandTarget(target, project) : project();\n _overflowHandle = renderPopover(\n html`<sp-popover\n open\n class=\"bar-overflow-menu\"\n style=${styleMap({\n left: `${rect.left}px`,\n position: \"fixed\",\n top: `${rect.bottom + 4}px`,\n zIndex: \"101\",\n })}\n >\n <sp-menu>\n ${rows.map(\n (row) => html`<sp-menu-item\n ?disabled=${row.disabled}\n data-command=${row.id}\n title=${row.tooltip}\n style=${row.destructive ? \"color: var(--danger)\" : nothing}\n @click=${() => {\n dismissBlockBarOverflow();\n runCommand(registry, row.id, target);\n }}\n >${row.title}${\n row.chord ? html`<kbd slot=\"value\" class=\"cmd-chord\">${row.chord}</kbd>` : nothing\n }</sp-menu-item\n >`,\n )}\n </sp-menu>\n </sp-popover>`,\n {\n dismissOnOutsideClick: true,\n onDismiss: () => {\n _overflowHandle = null;\n },\n },\n );\n}\n\n// ─── Toolbar keyboard model ──────────────────────────────────────────────────\n\n/** The bar's focusable items, in DOM order, skipping the ones that cannot act. */\nfunction toolbarItems(bar: HTMLElement): HTMLElement[] {\n return [...bar.querySelectorAll<HTMLElement>(\"[data-toolbar-item]\")].filter(\n (el) => !el.hasAttribute(\"disabled\") && el.getAttribute(\"aria-disabled\") !== \"true\",\n );\n}\n\n/**\n * Apply the roving tabindex: exactly one item is in the tab order at a time.\n *\n * Called after every render, so the survivor is whichever item still holds focus and otherwise the\n * first — a toolbar that resets to its first control on every keystroke is not navigable.\n */\nexport function applyRovingTabindex(bar: HTMLElement): void {\n const items = toolbarItems(bar);\n const focused = items.findIndex(\n (el) => el === document.activeElement || el.contains(document.activeElement),\n );\n const active = focused === -1 ? 0 : focused;\n for (const [index, el] of items.entries()) {\n el.tabIndex = index === active ? 0 : -1;\n }\n}\n\n/** Move focus to item `index` (wrapping), and make it the one in the tab order. */\nfunction focusToolbarItem(bar: HTMLElement, index: number): void {\n const items = toolbarItems(bar);\n if (items.length === 0) {\n return;\n }\n const wrapped = ((index % items.length) + items.length) % items.length;\n for (const [i, el] of items.entries()) {\n el.tabIndex = i === wrapped ? 0 : -1;\n }\n items[wrapped]!.focus();\n}\n\n/** Put the keyboard back where it came from — the canvas iframe, else its wrapper. */\nfunction returnFocusToCanvas(): void {\n // The FOCUSED pane's stage: the keyboard came from there and is going back there. Resolving it\n // From the active tab answered with whichever pane displays that document first.\n const stage = activeCanvasSurface().wrap;\n const iframe = stage?.querySelector<HTMLElement>(\"iframe.jx-canvas-iframe\");\n (iframe ?? stage)?.focus();\n}\n\n/** `role=\"toolbar\"` navigation: ←/→ between items, Home/End to the ends, Esc back to the canvas. */\nexport function onToolbarKeydown(e: KeyboardEvent): void {\n const bar = e.currentTarget as HTMLElement;\n const items = toolbarItems(bar);\n const current = items.findIndex(\n (el) => el === document.activeElement || el.contains(document.activeElement),\n );\n if (e.key === \"ArrowRight\") {\n e.preventDefault();\n focusToolbarItem(bar, current + 1);\n } else if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n focusToolbarItem(bar, current - 1);\n } else if (e.key === \"Home\") {\n e.preventDefault();\n focusToolbarItem(bar, 0);\n } else if (e.key === \"End\") {\n e.preventDefault();\n focusToolbarItem(bar, items.length - 1);\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n dismissBlockBarOverflow();\n returnFocusToCanvas();\n }\n}\n\n/**\n * ⌥↑ enters the bar from the canvas.\n *\n * Bound on the PARENT document, so it fires whenever the parent chrome owns focus. A press from\n * inside the canvas iframe does not arrive: `canvas/iframe-keys.ts` forwards bare navigation keys\n * only when the target is not editable, and the canvas root is permanently `contenteditable`.\n * Exported so a test can dispatch it directly.\n */\nexport function handleBlockBarEntryKey(e: KeyboardEvent): void {\n if (e.key !== \"ArrowUp\" || !e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {\n return;\n }\n if (isModalOpen()) {\n return;\n }\n const bar = view.blockActionBarEl?.querySelector<HTMLElement>(\".block-action-bar\");\n if (!bar) {\n return;\n }\n e.preventDefault();\n focusToolbarItem(bar, 0);\n}\n\n/**\n * Open the merge-tag menu — a searchable list of `${…}` template tokens for the data available in\n * the current state. Reuses the shared slash-menu popover (filter + keyboard nav + dismiss).\n * Selecting a token posts an `insertData` intent the iframe applies at its caret.\n *\n * @param {MouseEvent} e\n */\nfunction onMergeTagClick(e: MouseEvent) {\n e.stopPropagation();\n const anchorEl = e.currentTarget as HTMLElement;\n const tab = activeTab.value;\n const state = (tab?.doc.document.state ?? {}) as Record<string, unknown>;\n // The live resolved scope lives inside the iframe realm and is not threaded out, so the parent\n // Offers only top-level `state.*` tokens (buildMergeTags tolerates the null scopes).\n const tags = buildMergeTags(state, null, null);\n\n // When the caret sits inside a repeater, offer its local scope (item/index + item fields). There is\n // No live `$map` in edit mode — the perimeter renders one glyph template — so fields resolve\n // Parent-side from schema, keyed off the selected element's doc path (which carries a `map` segment).\n const selPath = getEditSnapshot().snapshot?.path ?? primarySelection(tab?.session.selection);\n const arrayNode = tab && selPath ? findEnclosingRepeater(tab.doc.document, selPath) : null;\n if (arrayNode) {\n const tokens = resolveRepeaterItemFields(\n arrayNode,\n tab!.doc.document.state as Record<string, unknown>,\n projectState?.projectConfig,\n );\n tags.push(...buildRepeaterTagsFromFields(tokens));\n }\n\n const commands = tags.map((t) => ({\n description: t.hint,\n label: t.label,\n tag: t.token,\n }));\n\n showSlashMenu(anchorEl, \"\", {\n commands,\n onSelect: (cmd) => postApplyFormat({ command: \"insertData\", token: cmd.tag }),\n showFilter: true,\n });\n}\n\n/** Dismiss the link popover if open. */\nexport function dismissLinkPopover() {\n _linkPopoverOpen = false;\n const host = getLayerSlot(\"popover\", \"link-popover\");\n litRender(nothing, host);\n}\n\n/** Dismiss the block action bar. */\nexport function dismissBlockActionBar() {\n /* A dismiss is the bar's STRUCTURAL teardown — `canvas/canvas-render.ts` calls it when a stage is\n torn down and again on a mode transition — so it also drops any suppression. The bar it would\n otherwise be holding down does not exist any more; what comes back is a different one. */\n _suppressedFor = null;\n dismissBlockBarOverflow();\n if (view.blockActionBarEl) {\n litRender(nothing, view.blockActionBarEl);\n }\n}\n\n/**\n * The document + selection the bar is currently suppressed FOR, or null while it is free to draw.\n *\n * **Why a key and not a boolean.** The bar is `position: fixed` and clamped into the window, so it\n * can sit over the Document Header card, the pane context bar and the docks; an author working in\n * the Inspector's Logic tab reported it \"blocking a part of the interface that the user needs to\n * utilize\". Hiding it on a chrome pointerdown is half an answer — {@link dismissBlockActionBar}\n * alone would flash back on the very next repaint, because the bar is re-rendered from the\n * `toolbarRefresh` seam on every selection snapshot and from `renderOnly(\"overlays\")` on zoom/pan.\n * The key is what makes the state end by itself: a render for a DIFFERENT selection is the click\n * that hid the bar having also chosen a new target (an Outline row, a Navigator entry), and the bar\n * belongs over the new one. {@link releaseBlockActionBar} is the other door, for the click that\n * chose the same target again.\n *\n * Nothing outside this module reads it. \"Is the bar suppressed\" is not a fact any other surface may\n * branch on — it is one panel declining to draw itself, and a second reader would make it a mode.\n */\nlet _suppressedFor: { key: string } | null = null;\n\n/**\n * What the bar is suppressed FOR: a path, in a document.\n *\n * The tab is half the key because `[\"children\",0]` names a node in every document there has ever\n * been. Keyed on the path alone, an author who suppressed the bar and then switched tabs — itself a\n * chrome click — would find it hidden over the new document's first block, which they never clicked\n * away from. `JSON.stringify` rather than `join` for the same reason one level down: the document\n * root is `[]` and \"nothing selected\" is `null`, and those two must not compare equal.\n */\nfunction suppressionKey(tab: ActiveTab | null, path: JxPath | null): string {\n return JSON.stringify([tab?.id ?? null, path]);\n}\n\n/**\n * Hide the bar until the canvas is in play again — the author pressed a pointer down in parent\n * chrome, which is a surface the bar may be sitting on top of.\n *\n * **The selection is deliberately untouched.** The Inspector edits the selected node, so a click\n * into it is how the author edits the thing they selected; clearing the selection here would make\n * the panel they just reached for go blank. Only the bar's own rendering is suspended.\n *\n * The `⋮` menu and the link popover go with it, because both are ANCHORED to the bar — the overflow\n * under its `⋮` button, the popover under its Link button. Left open they would float over the\n * chrome with nothing under them to belong to, which is the same defect one level down. Neither can\n * be the cause of this call: {@link isEditChromeTarget} exempts both.\n */\nexport function suppressBlockActionBar(): void {\n // Clears any earlier key as its first act; this selection's replaces it below.\n dismissBlockActionBar();\n if (_linkPopoverOpen) {\n dismissLinkPopover();\n }\n const tab = activeTab.value;\n _suppressedFor = { key: suppressionKey(tab, primarySelection(tab?.session.selection)) };\n}\n\n/**\n * Let the bar draw again — a pointer went down in a canvas frame, so the canvas is the surface the\n * author is working on.\n *\n * This is the door the SELECTION cannot open: clicking the already-selected element posts the same\n * path back, so the key comparison in {@link renderBlockActionBar} still matches and the bar would\n * stay hidden for as long as the author kept clicking the block they are editing.\n *\n * A no-op when nothing is suppressed, so the common case — every canvas pointerdown, suppressed or\n * not — costs a null check rather than a render.\n */\nexport function releaseBlockActionBar(): void {\n if (!_suppressedFor) {\n return;\n }\n _suppressedFor = null;\n renderBlockActionBar();\n}\n\n/**\n * Whether the link popover is open. A snapshot-driven {@link renderBlockActionBar} must NOT\n * re-render (and so re-mount) the open popover — typing the URL would re-create the field and lose\n * focus/caret. Guarded around the toolbar re-render.\n */\nlet _linkPopoverOpen = false;\n\n/** True while the link URL popover is open (so the toolbar refresh skips a disruptive re-render). */\nexport function isLinkPopoverOpen(): boolean {\n return _linkPopoverOpen;\n}\n\n/**\n * Whether `target` sits inside the edit-session chrome — the block action bar, its link popover, or\n * the slash menu. The parent's pointerdown commit-guard must NOT end the inline-edit session for\n * clicks on these (they operate ON the session); any other parent-chrome press commits it. This\n * module owns those popover roots, hence the helper lives here.\n *\n * @param {EventTarget | null} target\n */\nexport function isEditChromeTarget(target: EventTarget | null): boolean {\n if (!(target instanceof Node)) {\n return false;\n }\n const roots = [\n view.blockActionBarEl,\n _overflowHandle?.host ?? null,\n getLayerSlot(\"popover\", \"link-popover\"),\n getLayerSlot(\"popover\", \"slash-menu\"),\n ];\n return roots.some((root) => root != null && root.contains(target));\n}\n\n/**\n * Show the link URL popover. The iframe owns the Selection, so the existing-link state comes from\n * the latest selection snapshot; Apply/Remove post `applyFormat` link intents the iframe applies.\n *\n * @param {HTMLElement} anchorBtn\n */\nfunction showLinkPopover(anchorBtn: HTMLElement) {\n const host = getLayerSlot(\"popover\", \"link-popover\");\n litRender(nothing, host);\n\n const link = getEditSnapshot().snapshot?.link ?? { active: false, href: null };\n const existing = link.active;\n\n const rect = rectOf(anchorBtn);\n\n let _linkField: HTMLInputElement | null = null;\n\n const close = () => {\n _linkPopoverOpen = false;\n litRender(nothing, host);\n };\n\n const onApply = () => {\n const url = _linkField?.value || \"\";\n // Apply then let the popover close itself (do not steal focus back into the iframe here).\n postApplyFormat({ command: \"link\", href: url || \"\" });\n close();\n };\n\n const onRemove = () => {\n postApplyFormat({ command: \"link\", href: null });\n close();\n };\n\n const onKeydown = (e: KeyboardEvent) => {\n if (e.key === \"Enter\") {\n onApply();\n } else if (e.key === \"Escape\") {\n close();\n }\n };\n\n _linkPopoverOpen = true;\n litRender(\n html`\n <sp-popover\n class=\"link-popover\"\n open\n style=${styleMap({\n left: `${rect.left}px`,\n position: \"fixed\",\n top: `${rect.bottom + 4}px`,\n zIndex: \"30\",\n })}\n >\n <sp-textfield\n placeholder=\"https://...\"\n size=\"s\"\n style=\"width:200px\"\n value=${link.href || \"\"}\n @keydown=${onKeydown}\n ${ref((el) => {\n _linkField = (el as HTMLInputElement | null) || null;\n if (el) {\n requestAnimationFrame(() => (el as HTMLElement).focus());\n }\n })}\n ></sp-textfield>\n <sp-action-button size=\"xs\" @click=${onApply}>\n ${existing ? \"Update\" : \"Apply\"}\n </sp-action-button>\n ${\n existing\n ? html` <sp-action-button size=\"xs\" @click=${onRemove}>Remove</sp-action-button> `\n : nothing\n }\n </sp-popover>\n `,\n host,\n );\n}\n\n/**\n * Open the link popover from the Ctrl/Cmd+K shortcut (anchored to the toolbar's Link button if it\n * is on screen, else the bar itself). Used by the parent-focus format-shortcut handler.\n */\nexport function openLinkPopoverFromShortcut(): void {\n const bar = view.blockActionBarEl?.querySelector(\".block-action-bar\") as HTMLElement | null;\n /* By RECORD ID, not by rendered text. This queried `sp-action-button[title^=\"Link\"]`, which is\n the addressing §13's first rule bans in the screenshot manifest — a match on a title the app\n DERIVES (it now reads \"Link… (⌘K)\", and on Windows it reads something else again). The id is\n the input the app accepts. */\n const linkBtn =\n (bar?.querySelector('[data-command-id=\"format.link\"]') as HTMLElement | null) ?? bar;\n if (linkBtn) {\n showLinkPopover(linkBtn);\n }\n}\n\n/** Render the unified block action bar above the selected element. */\nexport function renderBlockActionBar() {\n if (!_ctx) {\n return;\n }\n if (!view.blockActionBarEl) {\n view.blockActionBarEl = getLayerSlot(\"popover\", \"block-action-bar\");\n }\n\n /* A snapshot-driven refresh must not re-mount an open link popover — it would re-create the URL\n field and lose the caret — so this pass is skipped entirely.\n\n It sits AHEAD of the drag release below, because it is the one early return that LEAVES THE BAR\n UP. Releasing and then returning without re-rendering left the ⠿ handle on screen and inert, and\n nothing re-installs it: `dismissLinkPopover` does not re-render the bar. Any repaint reaches\n here — `applyTransform` → `renderOnly(\"overlays\")` → this — so a pan, a zoom or a pane resize\n with the Link popover open silently killed dragging until the next selection change. Every\n other early return draws `nothing`, so releasing before them is right. */\n if (_linkPopoverOpen) {\n return;\n }\n\n if (view.selDragCleanup) {\n view.selDragCleanup();\n view.selDragCleanup = null;\n }\n\n const tab = activeTab.value;\n const canvasMode = _ctx.getCanvasMode();\n\n const selection = primarySelection(tab?.session.selection);\n\n /* Suppressed by a chrome pointerdown, and this pass is the first of the two doors out of it (see\n {@link _suppressedFor}). A different selection means the click that hid the bar also chose a new\n target, so the suppression is over; the same selection keeps it, which is what stops the next\n snapshot- or overlay-driven repaint from flashing the bar back under the author's cursor. */\n if (_suppressedFor) {\n if (_suppressedFor.key === suppressionKey(tab, selection)) {\n litRender(nothing, view.blockActionBarEl);\n return;\n }\n _suppressedFor = null;\n }\n\n if (!tab || !selection || (canvasMode !== \"design\" && canvasMode !== \"edit\")) {\n litRender(nothing, view.blockActionBarEl);\n return;\n }\n\n const node = getNodeAtPath(tab.doc.document, selection);\n if (!node) {\n litRender(nothing, view.blockActionBarEl);\n return;\n }\n\n // Position from the iframe-host's viewport-space anchor (the bar is position:fixed). The parent\n // Never reads the iframe DOM, so geometry crosses the bridge as the selection snapshot's rect.\n const anchor = getEditBarAnchorRect();\n const pos = anchor ? barPosition(anchor) : null;\n if (!pos) {\n litRender(nothing, view.blockActionBarEl);\n return;\n }\n\n const tag = (displayTagName(node.tagName) || \"div\").toLowerCase();\n\n // Inline format state, sourced from the iframe's selection snapshot.\n const { editingProp, snapshot } = getEditSnapshot();\n const actions = getInlineActions(tag) || [];\n // ONE bar, one shape. The format group used to appear only during an \"inline edit session\", so\n // The toolbar rearranged itself under the author's cursor the moment they started typing. With a\n // Document-wide caret there is no session to be in or out of: the group is shown whenever the\n // Selected block can carry inline markup, and the buttons enable when there is a range to apply\n // Them to.\n //\n // A prop-bound block still suppresses it — it edits a single plain string (belt and braces:\n // Component tags have no $inlineActions, so `actions` is empty there anyway).\n const showFormat = !editingProp && actions.length > 0;\n const activeValues =\n showFormat && snapshot\n ? actions.filter((a) => snapshot.activeTags.includes(a.tag)).map((a) => a.tag)\n : [];\n // Formatting applies to a RANGE: disabled for a collapsed caret, and for a block selected without\n // One at all (from the layers panel, or by a structural edit moving the selection).\n const formatDisabled = snapshot?.collapsed ?? true;\n\n // Conversion targets for badge click\n const isComponent =\n displayTagName(node.tagName).includes(\"-\") &&\n componentRegistry.some((/** @type {{ tagName: string }} */ c) => c.tagName === node.tagName);\n const children = childList(node);\n const isEmpty =\n !node.textContent &&\n (children.length === 0 ||\n (children.length === 1 && typeof children[0] === \"object\" && children[0]?.tagName === \"br\"));\n // Repeater ($prototype:\"Array\") pseudo-elements have no tagName — show the \"Repeater → items\" label\n // (not a bare \"div\") and don't offer tag-conversion targets, which are meaningless for a repeater.\n const isRepeater = node.$prototype === \"Array\";\n const convertTargets = !isComponent && !isRepeater ? getConvertTargets(tag, isEmpty) : [];\n const badgeInteractive = convertTargets.length > 0;\n\n // The verb cluster, sliced at the cap. `forPlacement` already dropped the records whose `when` is\n // False and sorted the rest by group; everything past the cap keeps its name and its chord in the\n // `⋮` menu rather than being silently unavailable.\n const registry = selectionCommandRegistry();\n /* The SET is the schema's, the VERBS are the registry's (see {@link formatCommands}).\n `$inlineActions` says which of the eight this tag accepts and in what order — four on an `<h1>`,\n eight on a `<p>` — and each one's name, icon, chord and behaviour come off its record. An action\n the registry has no record for is dropped rather than drawn as a button that runs nothing, so\n adding a ninth verb to the data file without a record shows up as a missing button and as a red\n `tests/block-action-bar.test.ts`, not as a silent no-op. */\n const formatButtons = actions.flatMap((action) => {\n const command = registry.get(`format.${action.command}`);\n return command ? [{ action, command }] : [];\n });\n const placed = registry.forPlacement(\"blockbar\");\n const shown = placed.slice(0, BLOCKBAR_MAX_ITEMS);\n const overflow = placed.slice(BLOCKBAR_MAX_ITEMS);\n // The handle is chrome, not a verb, so it renders on every selection; only a node that actually\n // Sits at a child index can be dragged, and at the root it is a disabled affordance rather than a\n // Missing one (§8.6: ONE shape).\n const canDragSelection = structuralTarget(selection) !== null;\n\n litRender(\n html`\n <div\n class=\"block-action-bar\"\n data-jx-region=\"overlay.menu:block-action-bar\"\n role=\"toolbar\"\n aria-label=\"Block actions\"\n aria-orientation=\"horizontal\"\n style=${styleMap({ left: `${pos.left}px`, top: `${pos.top}px` })}\n @mousedown=${onBarMousedown}\n @keydown=${onToolbarKeydown}\n >\n ${renderParentButton(registry)}\n\n <span\n class=\"bar-tag${badgeInteractive ? \" bar-tag--interactive\" : \"\"}\"\n role=${badgeInteractive ? \"button\" : nothing}\n data-toolbar-item=${badgeInteractive ? \"\" : nothing}\n tabindex=${badgeInteractive ? \"-1\" : nothing}\n title=${badgeInteractive ? \"Change element type\" : nothing}\n @click=${\n badgeInteractive\n ? (e: MouseEvent) => onTagBadgeClick(e, convertTargets, selection)\n : nothing\n }\n >${isRepeater ? nodeLabel(node) : node.$id || displayTagName(node.tagName) || \"div\"}${\n editingProp ? ` · ${editingProp}` : \"\"\n }</span\n >\n\n <span\n class=\"bar-drag-handle${canDragSelection ? \"\" : \" bar-drag-handle--disabled\"}\"\n title=${canDragSelection ? \"Drag to reorder\" : \"Drag to reorder — the document root cannot move\"}\n aria-disabled=${canDragSelection ? nothing : \"true\"}\n data-toolbar-item\n tabindex=\"-1\"\n ${ref((handleEl) => {\n if (!handleEl || !canDragSelection) {\n return;\n }\n /* No release here: {@link renderBlockActionBar} already released at the top of this\n pass, and that one — not this — is the load-bearing copy, because it also runs on\n the passes that return before `litRender` and never reach this ref at all. A second\n release here could only ever see null, which is why it was dead. */\n view.selDragCleanup = draggable({\n element: handleEl as HTMLElement,\n getInitialData: () => ({\n // Snapshot the selection: the live array is a Vue reactive proxy, which\n // Structured clone rejects when the src crosses postMessage (DataCloneError\n // Killed the whole handle drag), and a live reference would also mutate the\n // Retained srcData if the selection changed mid-drag.\n path: [...(primarySelection(activeTab.value?.session.selection) ?? [])],\n type: \"tree-node\",\n }),\n onGenerateDragPreview: ({\n nativeSetDragImage,\n }: {\n nativeSetDragImage: ((image: Element, x: number, y: number) => void) | null;\n }) => {\n // Suppress the native drag image; the cross-frame ghost is the drag affordance.\n disableNativeDragPreview({ nativeSetDragImage });\n },\n });\n })}\n >⠿</span\n >\n\n <sp-divider size=\"s\" vertical></sp-divider>\n ${shown.map((command) => renderCommandButton(registry, command))}\n ${overflow.length > 0 ? renderOverflowButton(registry, overflow) : nothing}\n ${\n showFormat\n ? html`\n <sp-divider size=\"s\" vertical></sp-divider>\n <sp-action-group\n size=\"xs\"\n compact\n emphasized\n selects=\"multiple\"\n selected=${activeValues.length > 0 ? JSON.stringify(activeValues) : nothing}\n >\n ${formatButtons.map(\n ({ action, command }) => html`\n <sp-action-button\n size=\"xs\"\n value=${action.tag}\n data-command-id=${command.id}\n data-toolbar-item\n tabindex=\"-1\"\n aria-label=${command.title}\n title=${commandTooltip(registry, command)}\n ?disabled=${formatDisabled && action.command !== \"link\"}\n @mousedown=${(e: MouseEvent) => e.preventDefault()}\n @click=${(e: MouseEvent) => {\n e.stopPropagation();\n runCommand(registry, command.id);\n }}\n >\n ${commandIcon(command)}\n </sp-action-button>\n `,\n )}\n </sp-action-group>\n <sp-action-button\n size=\"xs\"\n quiet\n data-toolbar-item\n data-jx-region=\"overlay.menu:block-action-bar/insertData\"\n tabindex=\"-1\"\n aria-label=\"Insert data\"\n title=\"Insert data\"\n @mousedown=${(e: MouseEvent) => e.preventDefault()}\n @click=${onMergeTagClick}\n >\n <sp-icon-data slot=\"icon\"></sp-icon-data>\n </sp-action-button>\n `\n : nothing\n }\n </div>\n `,\n view.blockActionBarEl,\n );\n\n const rendered = view.blockActionBarEl.querySelector<HTMLElement>(\".block-action-bar\");\n if (rendered) {\n applyRovingTabindex(rendered);\n }\n\n // Post-render side effects\n requestAnimationFrame(() => {\n const bar = view.blockActionBarEl?.firstElementChild as HTMLElement | null;\n if (!bar) {\n return;\n }\n clampBarToWindow(bar);\n });\n}\n",
92
- "/// <reference lib=\"dom\" />\n// ─── Clipboard & Context Menu ─────────────────────────────────────────────────\n/**\n * The element context menu is a RENDERING of the command registry (UX-REDESIGN-PLAN §5.5).\n *\n * This file used to hold an 18-item literal of `{ label, action, danger }` records — a fourth\n * hand-maintained copy of verbs that also exist in the toolbar, the block action bar and the\n * keymap, with bare labels that taught no chords and hand-set danger styling. It now holds the\n * command RECORDS (next to their implementations, which have always lived here) and a renderer that\n * asks `registry.forPlacement(\"context/element\")` what to draw.\n *\n * Everything a row prints is derived:\n *\n * - The `title` — the record is the only place the action is named;\n * - The chord, via `keymap.formatBinding(id)`, so ⌘C is finally taught where it is used;\n * - `destructive` styling, from the record rather than a per-row `danger: true`;\n * - `disabledReason(id)` as a greyed subtitle, so an inapplicable verb explains itself instead of\n * vanishing and leaving the author to guess the menu is state-dependent at all.\n *\n * Group ordering and `when` filtering are the registry's; dividers fall where `group` changes. What\n * is left here is positioning, popover rendering, and the menu keyboard contract.\n */\nimport { html, nothing } from \"lit-html\";\nimport { displayTagName } from \"@jxsuite/schema/guards\";\nimport { jsonClone } from \"../utils/studio-utils\";\nimport { ref } from \"lit-html/directives/ref.js\";\nimport { htmlToJx } from \"@jxsuite/markup/html-to-jx\";\nimport { childIndex, getNodeAtPath, parentElementPath } from \"../store\";\nimport { activeTab, workspace } from \"../workspace/workspace\";\nimport { isSelected, isSpliceablePath, primarySelection } from \"../tabs/selection\";\nimport {\n mutateDuplicateNode,\n mutateInsertNode,\n mutateRemoveNode,\n mutateRemoveNodes,\n mutateReplaceStyle,\n mutateWrapNode,\n transactDoc,\n} from \"../tabs/transact\";\nimport { notify } from \"../services/notify\";\nimport { componentRegistry } from \"../files/components\";\nimport { renderPopover } from \"../ui/layers\";\nimport { rectOf } from \"../utils/geometry\";\nimport { createCommandRegistry } from \"../commands/registry\";\nimport { registerSelectionCommands } from \"../panels/block-action-bar\";\nimport { convertToComponent } from \"./convert-to-component\";\nimport { activeRegistry } from \"../commands/active-registry\";\nimport { defaultCommands, noopCommandDeps } from \"../commands/defaults\";\nimport { inspectorCommands } from \"../panels/properties-panel\";\nimport { usagesSupported } from \"../services/references\";\nimport {\n editorKindForMode,\n hasElementSelection,\n hasSelection,\n makeContext,\n} from \"../commands/context\";\n\nimport type { AnyCommand, CommandRegistry } from \"../commands/registry\";\nimport type { CommandContext } from \"../commands/context\";\nimport type { Placement } from \"../commands/levels\";\nimport type { JxPath } from \"../state\";\nimport type { JxMutableNode, JxStyle } from \"@jxsuite/schema/types\";\n\ntype JxNode = JxMutableNode;\n\n// ─── Clipboard helpers ───────────────────────────────────────────────────────\n\nconst JX_MIME = \"web application/jx+json\";\n\n/** @param {JxNode | string} node */\nfunction nodeToHtml(node: JxNode | string): string {\n if (typeof node === \"string\") {\n return node;\n }\n /* A chosen tag cannot be serialised to one HTML string, so the copy takes the branch the\n candidates list first — clipboard HTML is a lossy export by nature (it drops bindings too),\n and emitting `<[object Object]>` would be worse than lossy. */\n const tag = displayTagName(node.tagName).split(\"|\")[0] || \"div\";\n let attrs = \"\";\n if (node.attributes) {\n for (const [k, v] of Object.entries(node.attributes)) {\n // Bound ($ref) attribute values have no static HTML representation — skip.\n if (typeof v === \"object\") {\n continue;\n }\n attrs += v === \"\" ? ` ${k}` : ` ${k}=\"${String(v).replaceAll('\"', \"&quot;\")}\"`;\n }\n }\n if (node.style) {\n const css = Object.entries(node.style)\n .map(([k, v]) => `${k}:${v}`)\n .join(\";\");\n if (css) {\n attrs += ` style=\"${css.replaceAll('\"', \"&quot;\")}\"`;\n }\n }\n let inner = \"\";\n if (typeof node.textContent === \"string\") {\n inner = node.textContent;\n } else if (Array.isArray(node.children)) {\n inner = node.children.map((c) => nodeToHtml(c)).join(\"\");\n }\n return `<${tag}${attrs}>${inner}</${tag}>`;\n}\n\n/**\n * Write a Jx node to the system clipboard with both jx+json and text/html types.\n *\n * @param {object} json\n */\nasync function writeToClipboard(json: Record<string, unknown>) {\n workspace.clipboard = json;\n try {\n const jxBlob = new Blob([JSON.stringify(json)], { type: JX_MIME });\n const htmlBlob = new Blob([nodeToHtml(json)], { type: \"text/html\" });\n await navigator.clipboard.write([\n new ClipboardItem({\n [JX_MIME]: jxBlob,\n \"text/html\": htmlBlob,\n }),\n ]);\n } catch {\n // Fallback: write as plain text if custom MIME not supported\n try {\n await navigator.clipboard.writeText(JSON.stringify(json));\n } catch {\n // Clipboard API unavailable — workspace.clipboard is the fallback\n }\n }\n}\n\n/**\n * Read from the system clipboard. Returns Jx node(s) or null.\n *\n * @returns {Promise<JxNode[] | null>}\n */\nasync function readFromClipboard() {\n try {\n const items = await navigator.clipboard.read();\n for (const item of items) {\n if (item.types.includes(JX_MIME)) {\n const blob = await item.getType(JX_MIME);\n const json = JSON.parse(await blob.text()) as JxNode;\n return [json];\n }\n if (item.types.includes(\"text/html\")) {\n const blob = await item.getType(\"text/html\");\n const htmlStr = await blob.text();\n const nodes = htmlToJx(htmlStr);\n const jxNodes = nodes.map((n) =>\n typeof n === \"string\" ? { tagName: \"p\", textContent: n } : n,\n ) as JxNode[];\n if (jxNodes.length > 0) {\n return jxNodes;\n }\n }\n if (item.types.includes(\"text/plain\")) {\n const blob = await item.getType(\"text/plain\");\n const text = await blob.text();\n // Try parsing as Jx JSON\n try {\n const parsed = JSON.parse(text) as JxNode;\n if (parsed && parsed.tagName) {\n return [parsed];\n }\n } catch {\n // Plain text → paragraph node\n }\n if (text.trim()) {\n return [{ tagName: \"p\", textContent: text.trim() }];\n }\n }\n }\n } catch {\n // Clipboard API unavailable — use workspace fallback\n if (workspace.clipboard) {\n return [jsonClone(workspace.clipboard)];\n }\n }\n return null;\n}\n\n// ─── Clipboard actions ───────────────────────────────────────────────────────\n\nexport async function copyNode() {\n const tab = activeTab.value;\n const selected = primarySelection(tab?.session.selection);\n if (!tab || !selected) {\n return;\n }\n const node = getNodeAtPath(tab.doc.document, selected);\n if (!node) {\n return;\n }\n const json = jsonClone(node);\n await writeToClipboard(json);\n notify.success(\"Copied\", { key: \"clipboard\" });\n}\n\nexport async function cutNode() {\n const tab = activeTab.value;\n const sel = primarySelection(tab?.session.selection);\n if (!tab || !sel || sel.length < 2) {\n return;\n }\n const node = getNodeAtPath(tab.doc.document, sel);\n if (!node) {\n return;\n }\n const json = jsonClone(node);\n await writeToClipboard(json);\n // The clipboard holds the primary node; the cut removes everything selected, in one undo step.\n const cutting = tab.session.selection.filter((path) => path.length >= 2);\n /* AND THE REMOVAL CAN BE REFUSED, which makes this a copy rather than a cut.\n `transactDoc` consults the collab gate, which pauses structural editing for the whole room\n while source is canonical. Reporting \"Cut\" anyway claims a removal that did not happen — and\n the toast's action is `edit.undo`, so the one recovery it offered was aimed at whatever edit\n came BEFORE this one. The gate raises its own keyed toast saying why; this one stays silent\n rather than adding a false claim beside it. */\n if (!transactDoc(tab, (t) => mutateRemoveNodes(t, cutting))) {\n return;\n }\n notify.success(\"Cut\", { action: \"edit.undo\", key: \"clipboard\" });\n}\n\nexport async function pasteNode() {\n const tab = activeTab.value;\n if (!tab) {\n return;\n }\n\n const nodes = await readFromClipboard();\n if (!nodes || nodes.length === 0) {\n return;\n }\n\n const selected = primarySelection(tab.session.selection);\n const pPath = selected ?? [];\n const parent = getNodeAtPath(tab.doc.document, pPath);\n if (!parent) {\n return;\n }\n\n if (selected && selected.length >= 2) {\n const pp = parentElementPath(selected) as JxPath;\n const idx = childIndex(selected) as number;\n transactDoc(tab, (t) => {\n for (let i = 0; i < nodes.length; i++) {\n mutateInsertNode(t, pp, idx + 1 + i, nodes[i]!);\n }\n });\n } else {\n const idx = Array.isArray(parent.children) ? parent.children.length : 0;\n transactDoc(tab, (t) => {\n for (let i = 0; i < nodes.length; i++) {\n mutateInsertNode(t, pPath, idx + i, nodes[i]!);\n }\n });\n }\n notify.success(\"Pasted\", { action: \"edit.undo\", key: \"clipboard\" });\n}\n\nexport function copyStyles() {\n const tab = activeTab.value;\n const selected = primarySelection(tab?.session.selection);\n if (!tab || !selected) {\n return;\n }\n const node = getNodeAtPath(tab.doc.document, selected);\n if (!node?.style) {\n return;\n }\n workspace.styleClipboard = jsonClone(node.style);\n notify.success(\"Styles copied\", { key: \"clipboard\" });\n}\n\nexport function pasteStyles() {\n if (!workspace.styleClipboard) {\n return;\n }\n const tab = activeTab.value;\n const targets = tab?.session.selection ?? [];\n if (!tab || targets.length === 0) {\n return;\n }\n const style = jsonClone(workspace.styleClipboard);\n // Pasting one style onto six cards is the §6.5 example, and it is one undo step: `transactDoc`\n // Records everything its callback mutates as a single history entry.\n transactDoc(tab, (t) => {\n for (const sel of targets) {\n mutateReplaceStyle(t, sel, jsonClone(style));\n }\n });\n notify.success(\n targets.length === 1 ? \"Styles pasted\" : `Styles pasted to ${targets.length} elements`,\n { action: \"edit.undo\", key: \"clipboard\" },\n );\n}\n\n// ─── The menu target ─────────────────────────────────────────────────────────\n\n/**\n * The node an open element menu addresses, plus the per-invocation hooks its rows need.\n *\n * The registry is module-level and long-lived; the target is per-right-click. Every record's `when`\n * / `enablement` / `run` reaches the node through {@link ElementCommandDeps.target}, which is what\n * lets one set of records serve every right-click without being rebuilt.\n */\nexport interface ElementMenuTarget {\n path: JxPath;\n node: JxMutableNode;\n /* `onEditComponent` was here, read only by this file's own `selection.editComponent`. That verb\n is `block-action-bar.ts`'s now, and it navigates through the same `navigateToComponent` both\n hosts were already passing in — so the per-target hook was one more way to say one thing. */\n /** Re-render the surface that opened the menu — the outline's inline title editor needs it. */\n rerender?: (() => void) | undefined;\n}\n\n/** What the element command records read from the rest of Studio. */\nexport interface ElementCommandDeps {\n /** The node the open menu addresses, or `null` when no menu is open. */\n target: () => ElementMenuTarget | null;\n /** The style payload available to paste, or `null` when nothing has been copied. */\n styleClipboard: () => JxStyle | null;\n /** The component document's path when `tagName` names a registered component, else `null`. */\n componentPathFor: (tagName: string) => string | null;\n}\n\n/** Whether the node is a repeater (an `Array` prototype node), whose one child is its template. */\nfunction isArrayNode(node: JxMutableNode): boolean {\n return node.$prototype === \"Array\";\n}\n\n// ─── The element command records ─────────────────────────────────────────────\n\n/**\n * The commands the element context menu contributes.\n *\n * `selection.duplicate`, `selection.delete` and `selection.repeat` are deliberately NOT here: they\n * are defined in `commands/defaults.ts` and already declare `context/element`, and a second\n * definition site is the exact failure the registry exists to prevent.\n *\n * `selection.repeat` was here, in this file's PRIVATE registry, which is why the two\n * `repeat-dialog` shots were quarantined: the app registry never held it, so the palette could not\n * list it, no chord could reach it, the AI could not call it, and\n * `__jxAutomation.run(\"selection.repeat\")` answered \"unknown command\" — the Repeat dialog was\n * reachable by right-click and by nothing else.\n */\nexport function elementCommands(deps: ElementCommandDeps): AnyCommand[] {\n /** A menu is open over some node — the precondition every row in this file shares. */\n const hasTarget = () => deps.target() !== null;\n /**\n * The document under the menu is one whose ELEMENT TREE may be restructured.\n *\n * `liveContext` below already computes the honest editor kind, and its own comment says a verb\n * reading it \"would have been dead in this menu and live over a settings document, which is\n * exactly backwards\" — but no record here read it, so the menu got the backwards half. The menu\n * opens from the canvas AND from the Outline, and the Outline renders whatever the active tab's\n * document is: with Project Settings open that is `project.json` drawn as a layer tree. Delete\n * and Duplicate, inherited from `commands/defaults.ts`, carry `editor.kind === \"canvas\"` and were\n * correctly filtered out there — while Cut, Paste after, Paste inside, Insert before, Insert\n * after, Wrap, Set Title and Convert to Component all rendered and ran, each transacting an\n * element splice into the file that defines the project. One menu, one target, two rules, and the\n * loose ones were the mutating majority.\n */\n const structurallyEditable = () => {\n const tab = activeTab.value;\n return Boolean(tab) && editorKindForMode(tab!.session.ui.canvasMode) === \"canvas\";\n };\n /** The target sits in a splice coordinate, so structural verbs can address it. */\n const spliceable = () => {\n const target = deps.target();\n return target !== null && isSpliceablePath(target.path) && structurallyEditable();\n };\n /** Not the repeater itself: its content is the single `map` template, not a child list. */\n const notRepeater = () => {\n const target = deps.target();\n return target !== null && !isArrayNode(target.node);\n };\n const NOT_STRUCTURAL =\n \"an element with a sibling position — not the page root or a repeater item\";\n\n return [\n /* COPY AND CUT LIVE IN `editor/shortcuts.ts`, which owns the chord table.\n Two records with this id existed — same title, same `mod+c`, both calling the `copyNode()`\n exported from THIS file — because the menu's registry and the app's never met. They meet now,\n and the menu inherits them by `menus: [\"context/element\"]` like Duplicate and Delete. */\n {\n id: \"edit.pasteAfter\",\n title: \"Paste after\",\n category: \"Edit\",\n level: \"selection\",\n keyScope: \"canvas\",\n /* NO CHORD. ⌘V is `edit.paste`'s (`editor/shortcuts.ts`), and `pasteNode()` — the function it\n runs — already inserts after the selection when there is one. This record claimed the same\n chord in the same scope, which the keymap refuses; the two registries never met, so the\n conflict was latent until the element family joined the app's. The row is kept because it\n is the specific verb with the specific refusal sentence, but the key belongs to the general\n one, and printing a chord this record does not own would be a lie in the menu. */\n menus: [\"context/element\", \"palette\"],\n group: \"1_clipboard\",\n undo: \"document\",\n when: () => hasTarget() && structurallyEditable(),\n enablement: () => spliceable() && notRepeater(),\n requires: NOT_STRUCTURAL,\n run: async () => {\n const target = deps.target();\n const nodes = await readFromClipboard();\n if (!target || !nodes || nodes.length === 0) {\n return;\n }\n const parent = parentElementPath(target.path) as JxPath;\n const idx = childIndex(target.path) as number;\n transactDoc(activeTab.value, (t) => {\n for (const [offset, node] of nodes.entries()) {\n mutateInsertNode(t, parent, idx + 1 + offset, node);\n }\n });\n notify.success(\"Pasted\", { action: \"edit.undo\", key: \"clipboard\" });\n },\n },\n {\n id: \"edit.pasteInside\",\n title: \"Paste inside\",\n category: \"Edit\",\n level: \"selection\",\n menus: [\"context/element\", \"palette\"],\n group: \"1_clipboard\",\n undo: \"document\",\n when: () => hasTarget() && structurallyEditable(),\n // A repeater has no child list to paste into, and the document root is addressed by the\n // Canvas itself rather than by an element menu.\n enablement: () => {\n const target = deps.target();\n return target !== null && target.path.length >= 2 && notRepeater();\n },\n requires: \"a container element that is not a repeater\",\n run: async () => {\n const target = deps.target();\n const nodes = await readFromClipboard();\n if (!target || !nodes || nodes.length === 0) {\n return;\n }\n const idx = Array.isArray(target.node.children) ? target.node.children.length : 0;\n transactDoc(activeTab.value, (t) => {\n for (const [offset, node] of nodes.entries()) {\n mutateInsertNode(t, target.path, idx + offset, node);\n }\n });\n notify.success(\"Pasted\", { action: \"edit.undo\", key: \"clipboard\" });\n },\n },\n\n // ── Styles ──\n {\n id: \"edit.copyStyles\",\n title: \"Copy styles\",\n category: \"Edit\",\n level: \"selection\",\n menus: [\"context/element\", \"palette\"],\n group: \"2_styles\",\n undo: \"none\",\n when: hasTarget,\n enablement: () => Boolean(deps.target()?.node.style),\n requires: \"styles on the selected element\",\n run: () => {\n const style = deps.target()?.node.style;\n if (!style) {\n return;\n }\n workspace.styleClipboard = jsonClone(style);\n notify.success(\"Styles copied\", { key: \"clipboard\" });\n },\n },\n {\n id: \"edit.pasteStyles\",\n title: \"Paste styles\",\n category: \"Edit\",\n level: \"selection\",\n menus: [\"context/element\", \"palette\"],\n group: \"2_styles\",\n undo: \"document\",\n when: () => hasTarget() && structurallyEditable(),\n enablement: () => deps.styleClipboard() !== null,\n requires: \"a copied style set\",\n run: () => {\n const target = deps.target();\n const style = deps.styleClipboard();\n if (!target || !style) {\n return;\n }\n const clone = jsonClone(style);\n transactDoc(activeTab.value, (t) => mutateReplaceStyle(t, target.path, clone));\n notify.success(\"Styles pasted\", { action: \"edit.undo\", key: \"clipboard\" });\n },\n },\n\n // ── Structure ── (shares \"3_structure\" with the default set's Duplicate)\n {\n id: \"selection.insertBefore\",\n title: \"Insert before\",\n category: \"Insert\",\n level: \"selection\",\n menus: [\"context/element\", \"palette\"],\n group: \"3_structure\",\n undo: \"document\",\n when: hasTarget,\n enablement: spliceable,\n requires: NOT_STRUCTURAL,\n run: () => insertSiblingParagraph(deps.target(), 0),\n },\n {\n id: \"selection.insertAfter\",\n title: \"Insert after\",\n category: \"Insert\",\n level: \"selection\",\n menus: [\"context/element\", \"palette\"],\n group: \"3_structure\",\n undo: \"document\",\n when: hasTarget,\n enablement: spliceable,\n requires: NOT_STRUCTURAL,\n run: () => insertSiblingParagraph(deps.target(), 1),\n },\n {\n id: \"selection.wrap\",\n title: \"Wrap in Div\",\n category: \"Selection\",\n level: \"selection\",\n menus: [\"context/element\", \"palette\"],\n group: \"3_structure\",\n undo: \"document\",\n when: hasTarget,\n enablement: spliceable,\n requires: NOT_STRUCTURAL,\n run: () => {\n const target = deps.target();\n if (target) {\n transactDoc(activeTab.value, (t) => mutateWrapNode(t, target.path));\n }\n },\n },\n\n // ── Identity ──\n {\n id: \"selection.setTitle\",\n title: \"Set Title\",\n category: \"Selection\",\n level: \"selection\",\n menus: [\"context/element\", \"palette\"],\n group: \"4_identity\",\n undo: \"document\",\n // The inline title editor lives in the surface that opened the menu; with no `rerender` hook\n // There is nothing to edit into, and the row used to render as a silent no-op.\n when: () => Boolean(deps.target()?.rerender),\n enablement: spliceable,\n requires: NOT_STRUCTURAL,\n run: async () => {\n const target = deps.target();\n if (!target?.rerender) {\n return;\n }\n // Lazy import breaks the context-menu ↔ layers-panel module cycle\n const { startLayerTitleEdit } = await import(\"../panels/layers-panel\");\n startLayerTitleEdit(target.path, target.rerender);\n },\n },\n /* EDIT COMPONENT AND CONVERT TO COMPONENT LIVE IN `panels/block-action-bar.ts`, beside the\n block bar's other selection verbs, and are inherited here by `menus`. Both were defined twice\n with different `when` predicates, so the menu row and the block-bar button could disagree\n about whether the same selection was a component instance. */\n ];\n}\n\n/** Insert an empty paragraph `offset` positions from the target (0 = before, 1 = after). */\nfunction insertSiblingParagraph(target: ElementMenuTarget | null, offset: number): void {\n if (!target) {\n return;\n }\n const parent = parentElementPath(target.path) as JxPath;\n const idx = childIndex(target.path) as number;\n transactDoc(activeTab.value, (t) =>\n mutateInsertNode(t, parent, idx + offset, { children: [], tagName: \"p\" }),\n );\n}\n\n/**\n * Copy and Cut — the two clipboard verbs, defined ONCE, beside the functions they call.\n *\n * They were defined twice: here, as part of the element menu's family, and in\n * `editor/shortcuts.ts`'s chord table — same ids, same chords, both calling the `copyNode()` and\n * `cutNode()` exported from this file. The two registries never met, so the duplicate ids were a\n * debt rather than a crash; composing the element family into the app registry collected it.\n *\n * `edit.cut` is VISIBLE on the document root and disabled there with its `requires` sentence,\n * rather than hidden — a greyed row that explains itself teaches, an absent one does not.\n */\nexport function clipboardCommands(): AnyCommand[] {\n return [\n {\n category: \"Edit\",\n group: \"1_clipboard\",\n id: \"edit.copy\",\n keybinding: \"mod+c\",\n keyScope: \"canvas\",\n level: \"selection\",\n menus: [\"context/element\", \"palette\"],\n requires: \"an element selection\",\n run: () => {\n void copyNode();\n },\n title: \"Copy\",\n undo: \"none\",\n when: hasSelection,\n },\n {\n category: \"Edit\",\n destructive: true,\n enablement: hasElementSelection,\n group: \"1_clipboard\",\n id: \"edit.cut\",\n keybinding: \"mod+x\",\n keyScope: \"canvas\",\n level: \"selection\",\n menus: [\"context/element\", \"palette\"],\n requires: \"an element selection that is not the document root\",\n run: () => {\n void cutNode();\n },\n title: \"Cut\",\n undo: \"document\",\n when: hasSelection,\n },\n ];\n}\n\n/** Define the element menu's commands on `registry`. Throws on a duplicate id or chord clash. */\nexport function registerElementCommands(registry: CommandRegistry, deps: ElementCommandDeps): void {\n registry.registerAll(elementCommands(deps));\n}\n\n// ─── The live registry ───────────────────────────────────────────────────────\n\n/** The node the currently open menu addresses. */\nlet _target: ElementMenuTarget | null = null;\n\n/**\n * How the FALLBACK registry opens a component document.\n *\n * Set by `setContextMenuNavigate` from the bootstrap. In the running app `contextMenuRegistry()`\n * returns the app's registry and this is never read; it exists so the fallback the tests and the\n * pre-bootstrap window use is not a registry with a lying no-op in it.\n */\nlet _navigate: ((path: string) => void | Promise<void>) | null = null;\n\n/** Publish how the fallback registry opens a component document. */\nexport function setContextMenuNavigate(\n navigate: ((path: string) => void | Promise<void>) | null,\n): void {\n _navigate = navigate;\n}\n\n/**\n * The node these verbs act on: the open menu's target, or — when no menu is open — the SELECTION.\n *\n * The fallback is what makes these eight records reachable from anywhere but a right-click. Every\n * one of them declares `menus: [\"context/element\", \"palette\"]` and the palette never listed one,\n * because `target()` returned `null` outside the menu and each record's `when` reads it. \"Paste\n * Style\" and \"Convert to Component\" were pointer-only verbs advertising themselves as palette\n * entries, in a plan whose first principle is that a capability has exactly one definition site and\n * every surface projects it.\n *\n * A right-click already writes the selection it targets (see `openElementMenu`), so the two agree\n * by construction rather than by coincidence.\n */\nfunction commandTarget(): ElementMenuTarget | null {\n if (_target) {\n return _target;\n }\n const tab = activeTab.value;\n const path = primarySelection(tab?.session.selection);\n if (!tab || !path) {\n return null;\n }\n const node = getNodeAtPath(tab.doc.document, path) as JxMutableNode | undefined;\n return node ? { node, path } : null;\n}\n\n/** Deps bound to the live modules. */\nconst liveDeps: ElementCommandDeps = {\n componentPathFor: (tagName) =>\n // A custom-element tag is the only thing that CAN name a component; the registry lookup is\n // What decides whether it does.\n (tagName.includes(\"-\") && componentRegistry.find((c) => c.tagName === tagName)?.path) || null,\n styleClipboard: () => workspace.styleClipboard,\n target: commandTarget,\n};\n\n/**\n * The eight element records, bound to the live modules, for the APP registry.\n *\n * `contextMenuRegistry()` below still builds its own — the menu needs a context whose selection\n * facts describe the right-clicked node rather than the app's ambient one — but the records are\n * these, so the palette row and the menu row are one definition rather than two that drift.\n */\nexport function liveElementCommands(): AnyCommand[] {\n return elementCommands(liveDeps);\n}\n\n/**\n * The facts the predicates read, derived from the open menu's target.\n *\n * `selection.isRoot` is the context's \"this selection has no removable position\" flag — it is what\n * `selection.delete` gates on — so it reports true for a repeater template as well as for the\n * document root. Both are unspliceable, and treating only the literal root as root would let Delete\n * splice a template at NaN (see {@link isSpliceablePath}).\n */\nfunction liveContext(): CommandContext {\n const target = commandTarget();\n const tab = activeTab.value;\n // One read, two consumers — a chosen tag reads as `a|div`, which matches no component id.\n const targetTag = displayTagName(target?.node.tagName);\n\n return makeContext({\n // The menu's context has to carry capabilities too, now that it renders a record gated on one:\n // `makeContext` defaults every capability to false, which would hide Find Usages on every host.\n capability: { findReferences: usagesSupported() },\n document: { dirty: Boolean(tab?.doc.dirty), open: Boolean(tab) },\n /* The editor the menu was opened over. `makeContext` defaults this to \"none\", which was a\n falsehood the records here got away with only because every one of them gates on the menu's\n own target instead: a verb that reads `editor.kind` — as the canvas verbs in `shortcuts.ts`\n now do — would have been dead in this menu and live over a settings document, which is\n exactly backwards. The menu opens from the canvas AND from the Outline, so the kind comes\n from the tab rather than being asserted. */\n editor: { kind: tab ? editorKindForMode(tab.session.ui.canvasMode) : \"none\" },\n selection: {\n count: target ? 1 : 0,\n isComponentInstance: Boolean(target && liveDeps.componentPathFor(targetTag)),\n isRepeater: target ? isArrayNode(target.node) : false,\n isRoot: target ? !isSpliceablePath(target.path) : false,\n kind: targetTag,\n },\n });\n}\n\nlet _registry: CommandRegistry | null = null;\n\n/**\n * The registry the menu renders.\n *\n * It carries this file's records PLUS every `context/element` record from `commands/defaults.ts`\n * (Duplicate and Delete). Those two have their one definition site there; until a bootstrap\n * composes every contribution point into a single app-wide registry, the menu builds its own and\n * supplies real implementations for exactly the verbs it renders.\n */\nexport function contextMenuRegistry(): CommandRegistry {\n /*\n * THE APP'S REGISTRY, when there is one — §5.5's \"the file keeps positioning and popover\n * rendering only\".\n *\n * The private registry below existed because the menu's context had to describe the RIGHT-CLICKED\n * node while the app's described the ambient selection. Those are the same node now:\n * `openElementMenu` writes the selection it targets before opening, and `commandTarget()` reads\n * the selection when no menu is open. So the divergence the second registry was built to survive\n * no longer exists, and keeping it meant the menu rendered a different `edit.copy` from the one\n * ⌘C runs.\n *\n * It also means the menu renders every `context/element` record in the app — including ones\n * contributed after this file loads — instead of the four families it happened to import.\n */\n const app = activeRegistry();\n if (app) {\n return app;\n }\n if (_registry) {\n return _registry;\n }\n const registry = createCommandRegistry({ getContext: liveContext });\n const inherited = defaultCommands({\n ...noopCommandDeps(),\n // Neither implementation re-checks spliceability. `selection.delete` and `selection.duplicate`\n // Both declare `enablement: structurallyEditable`, which reads `selection.isRoot` — and\n // {@link liveContext} sets that from the very predicate a hand-guard here would repeat.\n // `registry.run` throws `CommandUnavailableError` before a disabled record's `run` is reached,\n // So the guard was unreachable, and a second copy of the invariant is how the two come to\n // Disagree.\n deleteSelection: () => {\n const target = _target;\n if (target) {\n transactDoc(activeTab.value, (t) => mutateRemoveNode(t, target.path));\n }\n },\n duplicateSelection: () => {\n const target = _target;\n if (target) {\n transactDoc(activeTab.value, (t) => mutateDuplicateNode(t, target.path));\n }\n },\n }).filter((command) => (command.menus ?? []).includes(\"context/element\"));\n registry.registerAll(inherited);\n // Find Usages has its one definition site in `panels/properties-panel.ts`, beside the section it\n // Opens. Pulling its `context/element` records in here — the same move `defaultCommands` gets\n // Above — is what keeps the menu row and the palette entry a single record rather than two that\n // Drift.\n registry.registerAll(\n inspectorCommands().filter((command) => (command.menus ?? []).includes(\"context/element\")),\n );\n /* The clipboard pair and the two component verbs, from the modules that own them. Each was\n DEFINED a second time in this file until composing the element family into the app registry\n turned the duplicate ids into a hard failure — which is what a \"debt with a name\" becomes when\n the thing it was waiting for arrives. */\n registry.registerAll(clipboardCommands());\n registerSelectionCommands(registry, {\n convertToComponent: () => convertToComponent(),\n // The same seam `panels/block-action-bar.ts`'s own fallback uses: the host that opened the menu\n // Supplies navigation, and in the real app this whole registry is bypassed for the app's.\n navigateToComponent: (path) => {\n void _navigate?.(path);\n },\n });\n registerElementCommands(registry, liveDeps);\n _registry = registry;\n return registry;\n}\n\n// ─── Context menu ─────────────────────────────────────────────────────────────\n\n/** One rendered row: a record plus everything the registry says about it right now. */\ninterface MenuRow {\n command: AnyCommand;\n enabled: boolean;\n /** The `requires` sentence, printed as a greyed subtitle when the row is disabled. */\n reason: string | undefined;\n chord: string | undefined;\n /** Whether a divider opens this row's group. */\n dividerAbove: boolean;\n}\n\nlet _ctxHandle: ReturnType<typeof renderPopover> | null = null;\nlet _rows: MenuRow[] = [];\nlet _activeIdx = 0;\n/** Whatever owned the keyboard before the menu took it, so it can be handed back. */\nlet _opener: HTMLElement | null = null;\n\n/** The rendered `sp-menu-item` elements, in row order. */\nfunction itemElements(): HTMLElement[] {\n return _ctxHandle\n ? [..._ctxHandle.host.querySelectorAll<HTMLElement>(\"sp-menu-item[data-command-id]\")]\n : [];\n}\n\n/** Move the roving tabindex (and the caret) to `index`, wrapping at both ends. */\nfunction focusItem(index: number): void {\n const items = itemElements();\n if (items.length === 0) {\n return;\n }\n const next = ((index % items.length) + items.length) % items.length;\n for (const [at, item] of items.entries()) {\n item.tabIndex = at === next ? 0 : -1;\n item.toggleAttribute(\"focused\", at === next);\n }\n _activeIdx = next;\n items[next]?.focus();\n}\n\n/** Run the row's command, then close. Disabled rows explain themselves and do nothing. */\nfunction activateRow(index: number): void {\n const row = _rows[index];\n if (!row?.enabled) {\n return;\n }\n // Run BEFORE dismissing: every `run` reads `deps.target()` synchronously on entry, and dismissal\n // Clears the target.\n const result = contextMenuRegistry().run(row.command.id);\n dismissContextMenu();\n void result;\n}\n\n/**\n * The menu keyboard contract: Up/Down/Home/End move, Enter/Space activate, Escape and Tab dismiss.\n *\n * Bound on `document` in the CAPTURE phase, the same shape `editor/slash-menu.ts` uses: the app's\n * own Escape (which walks the selection ladder) and the canvas arrow-key nudges must not also fire,\n * and a bubble-phase handler on the popover would race Spectrum's own menu key handling.\n */\nfunction onMenuKeydown(e: KeyboardEvent): void {\n if (!_ctxHandle) {\n return;\n }\n switch (e.key) {\n case \"ArrowDown\": {\n focusItem(_activeIdx + 1);\n break;\n }\n case \"ArrowUp\": {\n focusItem(_activeIdx - 1);\n break;\n }\n case \"Home\": {\n focusItem(0);\n break;\n }\n case \"End\": {\n focusItem(_rows.length - 1);\n break;\n }\n case \"Enter\":\n case \" \": {\n activateRow(_activeIdx);\n break;\n }\n case \"Escape\":\n case \"Tab\": {\n dismissContextMenu();\n break;\n }\n default: {\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n}\n\n/** Drop the menu's global state and hand the keyboard back to whatever opened it. */\nfunction teardownMenu(): void {\n document.removeEventListener(\"keydown\", onMenuKeydown, true);\n const opener = _opener;\n _target = null;\n _rows = [];\n _activeIdx = 0;\n _opener = null;\n // Only when the menu still held the keyboard: an outside CLICK has already moved focus somewhere\n // The author chose, and yanking it back to the opener would fight them.\n const active = document.activeElement;\n if (opener?.isConnected && (!active || active === document.body)) {\n opener.focus();\n }\n}\n\n/** Dismiss the context menu if open. */\nexport function dismissContextMenu() {\n if (!_ctxHandle) {\n return;\n }\n const handle = _ctxHandle;\n _ctxHandle = null;\n handle.dismiss();\n teardownMenu();\n}\n\n/** Ask the registry what belongs in `placement` right now and decorate each record for rendering. */\nfunction buildRows(placement: Placement): MenuRow[] {\n const registry = contextMenuRegistry();\n let group: string | undefined;\n return registry.forPlacement(placement).map((command, index) => {\n const dividerAbove = index > 0 && command.group !== group;\n ({ group } = command);\n const enabled = registry.isEnabled(command.id);\n const chord = registry.keymap.formatBinding(command.id);\n return {\n // A chord that just restates the row's own name (\"Delete\" bound to Delete) teaches nothing\n // And reads as a stutter, so it is not printed.\n chord: chord?.toLowerCase() === command.title.toLowerCase() ? undefined : chord,\n command,\n dividerAbove,\n enabled,\n reason: enabled ? undefined : registry.disabledReason(command.id),\n };\n });\n}\n\n/** One row. Everything it prints comes off the record — nothing is passed in per call site. */\nfunction rowTemplate(row: MenuRow, index: number) {\n return html`${\n row.dividerAbove ? html`<sp-menu-divider role=\"separator\"></sp-menu-divider>` : nothing\n }<sp-menu-item\n role=\"menuitem\"\n data-command-id=${row.command.id}\n tabindex=${index === 0 ? 0 : -1}\n ?disabled=${!row.enabled}\n aria-disabled=${row.enabled ? \"false\" : \"true\"}\n style=${row.command.destructive && row.enabled ? \"color: var(--danger)\" : \"\"}\n @click=${() => activateRow(index)}\n >${row.command.title}${\n row.chord\n ? html`<kbd slot=\"value\" style=\"color: var(--fg-dim)\">${row.chord}</kbd>`\n : nothing\n }${\n row.reason ? html`<span slot=\"description\">Needs ${row.reason}</span>` : nothing\n }</sp-menu-item\n >`;\n}\n\n/**\n * @param {MouseEvent} e\n * @param {JxPath} path\n * @param {{\n * rerender?: () => void;\n * placement?: Placement;\n * }} [opts]\n */\nexport function showContextMenu(\n e: MouseEvent,\n path: JxPath,\n opts: {\n rerender?: () => void;\n /** Which registry placement to render. The canvas and the outline are both element menus. */\n placement?: Placement;\n } = {},\n) {\n e.preventDefault();\n dismissContextMenu();\n\n const tab = activeTab.value;\n if (!tab) {\n return;\n }\n const node = getNodeAtPath(tab.doc.document, path);\n if (!node) {\n return;\n }\n\n // Select the node — the menu addresses it, and so does everything the commands read. A\n // Right-click INSIDE an existing multi-selection keeps that selection, the way every list does:\n // Collapsing six selected cards to one because the user aimed at one of them would silently\n // Retarget the very batch commands the menu is about to offer.\n if (!isSelected(tab.session.selection, path)) {\n tab.session.selection = [path];\n }\n _target = { node, path, rerender: opts.rerender };\n _rows = buildRows(opts.placement ?? \"context/element\");\n if (_rows.length === 0) {\n _target = null;\n return;\n }\n _activeIdx = 0;\n _opener = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n\n let x = e.clientX;\n let y = e.clientY;\n\n _ctxHandle = renderPopover(\n html`<sp-popover\n open\n style=\"position:fixed;z-index:10000;left:${x}px;top:${y}px\"\n ${ref((el) => {\n if (!el) {\n return;\n }\n requestAnimationFrame(() => {\n const popover = el as HTMLElement;\n const menuRect = rectOf(popover);\n if (x + menuRect.width > window.innerWidth) {\n x = window.innerWidth - menuRect.width - 4;\n }\n if (y + menuRect.height > window.innerHeight) {\n y = window.innerHeight - menuRect.height - 4;\n }\n popover.style.left = `${x}px`;\n popover.style.top = `${y}px`;\n });\n })}\n >\n <sp-menu role=\"menu\" aria-label=\"Element actions\">\n ${_rows.map((row, index) => rowTemplate(row, index))}\n </sp-menu>\n </sp-popover>`,\n {\n dismissOnOutsideClick: true,\n onDismiss: () => {\n _ctxHandle = null;\n teardownMenu();\n },\n },\n );\n\n document.addEventListener(\"keydown\", onMenuKeydown, true);\n // A frame later: lit has committed the items, and focusing the first row is what makes the whole\n // Keyboard contract reachable at all (the menu used to open with focus left behind it).\n requestAnimationFrame(() => focusItem(0));\n}\n",
93
- "/// <reference lib=\"dom\" />\n/**\n * Layers panel — the Outline: the document tree, with collapse, selection, drag-and-drop\n * reordering, and per-row actions that are RENDERINGS of the command registry.\n *\n * Three things this file is deliberate about.\n *\n * **Rows are `registry.forPlacement(\"outline/row\")`.** Every row used to carry five hand-built\n * action buttons, always visible, on every row — five custom elements with shadow roots per visible\n * row. They now collapse to the selected row plus the hovered one, which is Gutenberg's rule and\n * the one plan §3.2 ⑩ codifies: the floating bar owns selection-scoped verbs, the inspector owns\n * values. The verbs, their names, their chords and their disabled reasons all come from the records\n * in `block-action-bar.ts` — the surface renders, it does not decide.\n *\n * The hovered row's cluster is mounted imperatively ({@link mountHoverActions}) rather than by a\n * `display: none` CSS rule, because a hidden `sp-action-button` is still an upgraded custom element\n * with a shadow root: CSS reveal would have kept the whole cost the collapse exists to remove. At\n * most two clusters exist at any moment — the selected row's, and the one under the pointer.\n *\n * **A row says something.** On a real page the tree was a wall of rows all reading \"div\": only\n * text-bearing nodes got a preview and containers got the tag they already wear as a coloured\n * badge. {@link outlineLabel} derives an identity instead — a title, an `$id`, a class, a landmark\n * name, the first text inside — and returns \"\" rather than repeat the badge.\n *\n * **It is a tree, and it is reachable.** `role=\"tree\"` / `role=\"treeitem\"` with a roving tabindex\n * and the arrow-key model ARIA specifies: ↑↓ walk the visible rows, → expands then descends, ←\n * collapses then ascends, Enter/F2 renames.\n *\n * **The rows are a MODEL, and the DOM holds a window onto it** ({@link OutlineRow}, `ui/\n * virtual-window.ts`). A 5 000-node page drew 5 000 rows, each carrying an `sp-icon` custom\n * element, on every repaint. It now draws the viewport plus three rows of overscan — and because\n * the DOM is no longer the whole list, nothing may ASK the DOM what the whole list is. Every\n * question about \"which rows exist, and in what order\" — the shift-range, the arrow walk, Home/End,\n * ←'s climb to the parent, the reveal that follows the selection — is answered from the array\n * {@link buildOutlineRows} produces. A shift-range read off the DOM would silently select the wrong\n * set the moment either end of it scrolled out of the window: a correctness bug wearing a\n * performance change's clothes.\n */\n\nimport { html, render as litRender, nothing } from \"lit-html\";\nimport { displayTagName, isTagExpression, tagNameCandidates } from \"@jxsuite/schema/guards\";\nimport { classMap } from \"lit-html/directives/class-map.js\";\nimport { ifDefined } from \"lit-html/directives/if-defined.js\";\nimport { ref } from \"lit-html/directives/ref.js\";\nimport { repeat } from \"lit-html/directives/repeat.js\";\nimport {\n VOID_ELEMENTS,\n childIndex,\n flattenTree,\n getNodeAtPath,\n nodeLabel,\n parentElementPath,\n pathKey,\n pathsEqual,\n} from \"../store\";\nimport { activeTab } from \"../workspace/workspace\";\nimport {\n isSelected as isPathSelected,\n primarySelection,\n rangeSelection,\n selectionAnchor,\n toggleSelected,\n} from \"../tabs/selection\";\nimport type { JxPath } from \"../state\";\nimport type { JxMutableNode } from \"@jxsuite/schema/types\";\nimport { mutateUpdateProperty, transactDoc } from \"../tabs/transact\";\nimport { view } from \"../view\";\nimport { setActivityTab } from \"../shell\";\nimport { renderEmptyState } from \"./empty-state\";\nimport { registerPanel } from \"./panel-registry\";\nimport { renderStylebookLayersTemplate } from \"./stylebook-layers-panel\";\nimport { selectStylebookTag, stylebookMeta } from \"./stylebook-panel\";\nimport { isInlineElement } from \"../editor/inline-edit\";\nimport { showContextMenu } from \"../editor/context-menu\";\nimport { panToElement } from \"../canvas/canvas-utils\";\nimport {\n commandIcon,\n commandTooltip,\n runCommand,\n selectionCommandRegistry,\n showCommandOverflow,\n withCommandTarget,\n} from \"./block-action-bar\";\nimport {\n listWindow,\n measuredRowHeight,\n revealListRow,\n watchListWindow,\n} from \"../ui/virtual-window\";\nimport type { CommandRegistry } from \"../commands/registry\";\nimport type { ListWindowWatch } from \"../ui/virtual-window\";\nimport type { TemplateResult } from \"lit-html\";\n\n// ─── What a row says ─────────────────────────────────────────────────────────\n\n/** How much of a text preview a 240px column can carry before it is just noise. */\nconst LABEL_MAX = 32;\n\n/**\n * Tags whose human name is worth more than the tag itself.\n *\n * Deliberately short. `section`, `ul` and `table` are omitted: \"Section\" next to a `section` badge\n * is the repetition this function exists to remove.\n */\nconst LANDMARK_NAMES: Readonly<Record<string, string>> = {\n article: \"Article\",\n aside: \"Sidebar\",\n dialog: \"Dialog\",\n figure: \"Figure\",\n footer: \"Footer\",\n form: \"Form\",\n header: \"Header\",\n main: \"Main\",\n nav: \"Navigation\",\n};\n\n/** Trim and ellipsize to {@link LABEL_MAX}. */\nfunction truncate(text: string): string {\n const clean = text.replaceAll(/\\s+/gu, \" \").trim();\n return clean.length > LABEL_MAX ? `${clean.slice(0, LABEL_MAX)}…` : clean;\n}\n\n/**\n * The first text anywhere under `node`, or \"\".\n *\n * Bounded at three levels and short-circuited on the first hit: a container's identity is usually\n * its heading or its first line, and walking a whole subtree per row would cost the render what the\n * five-buttons-per-row build already cost it.\n */\nfunction firstText(node: JxMutableNode, depth = 0): string {\n if (typeof node.textContent === \"string\" && node.textContent.trim()) {\n return node.textContent.trim();\n }\n if (depth >= 3 || !Array.isArray(node.children)) {\n return \"\";\n }\n for (const child of node.children) {\n if (typeof child === \"string\" && child.trim()) {\n return child.trim();\n }\n if (child && typeof child === \"object\") {\n const found = firstText(child, depth + 1);\n if (found) {\n return found;\n }\n }\n }\n return \"\";\n}\n\n/** The node's first class name, when it has a plain (unbound) `class` attribute. */\nfunction firstClass(node: JxMutableNode): string {\n const value = node.attributes?.class;\n return typeof value === \"string\" ? (value.trim().split(/\\s+/u)[0] ?? \"\") : \"\";\n}\n\n/**\n * What an Outline row says about `node`, beyond the tag its badge already shows.\n *\n * Returns \"\" when the node has no identity of its own — the badge is then the whole answer, which\n * is honest, and quieter than a column of \"div\".\n *\n * This is NOT `nodeLabel()`. `nodeLabel` answers \"name this node anywhere\" and prefixes the tag (`p\n * — Hello`), which is right for the canvas overlay and the status bar and wrong here, where the tag\n * is already a coloured badge two pixels to the left. Those surfaces are unchanged.\n */\nexport function outlineLabel(node: JxMutableNode): string {\n if (node.$title) {\n return truncate(node.$title);\n }\n // Repeaters and slots have a real name of their own; nodeLabel already composes it.\n if (node.$prototype === \"Array\" || node.tagName === \"slot\") {\n return nodeLabel(node);\n }\n if (node.$id) {\n return `#${truncate(node.$id)}`;\n }\n if (typeof node.textContent === \"string\" && node.textContent.trim()) {\n return truncate(node.textContent);\n }\n const cls = firstClass(node);\n if (cls) {\n return `.${truncate(cls)}`;\n }\n const landmark = LANDMARK_NAMES[displayTagName(node.tagName).toLowerCase()];\n if (landmark) {\n return landmark;\n }\n const inner = firstText(node);\n if (inner) {\n return `“${truncate(inner)}”`;\n }\n const count = Array.isArray(node.children) ? node.children.length : 0;\n return count > 0 ? `${count} item${count === 1 ? \"\" : \"s\"}` : \"\";\n}\n\n// ─── Row actions, from the registry ──────────────────────────────────────────\n\n/**\n * Verbs shown inline on a row before the rest fold into `⋮`. A 240px column is the budget.\n *\n * Four is what the Outline's own verbs cost: the moves (up, down, into previous, out of parent),\n * which are the reason a document tree has rows you can grab at all. Duplicate and Delete sort\n * after them (`3_structure`, `9_danger`) and so ride in the `⋮` menu with their names and chords\n * intact — they are also on the block action bar, in the row's context menu, and on ⌘D / Delete.\n * The four moves are on none of those.\n */\nexport const OUTLINE_ROW_MAX_ITEMS = 4;\n\n/**\n * The row's action cluster.\n *\n * Wrapped in {@link withCommandTarget} so every record is evaluated against THIS ROW'S node rather\n * than the selection — `PLACEMENT_MATRIX[\"outline/row\"]` says row actions act on the row's node,\n * and the hovered row is not the selected one.\n */\nexport function renderRowCommands(registry: CommandRegistry, path: JxPath) {\n return withCommandTarget(path, () => {\n const placed = registry.forPlacement(\"outline/row\");\n const shown = placed.slice(0, OUTLINE_ROW_MAX_ITEMS);\n const overflow = placed.slice(OUTLINE_ROW_MAX_ITEMS);\n return html`${shown.map(\n (command) => html`<sp-action-button\n quiet\n size=\"xs\"\n class=${command.destructive ? \"layer-action layer-delete\" : \"layer-action\"}\n data-command=${command.id}\n aria-label=${command.title}\n title=${commandTooltip(registry, command)}\n ?disabled=${registry.disabledReason(command.id) !== undefined}\n @click=${(e: MouseEvent) => {\n e.stopPropagation();\n (e.currentTarget as HTMLElement).blur();\n runCommand(registry, command.id, path);\n }}\n >${commandIcon(command)}</sp-action-button\n >`,\n )}\n ${\n overflow.length === 0\n ? nothing\n : html`<sp-action-button\n quiet\n size=\"xs\"\n class=\"layer-action layer-overflow\"\n aria-label=\"More actions\"\n aria-haspopup=\"menu\"\n title=\"More actions\"\n @click=${(e: MouseEvent) => {\n e.stopPropagation();\n showCommandOverflow(e.currentTarget as HTMLElement, registry, overflow, path);\n }}\n >\n <sp-icon-more slot=\"icon\"></sp-icon-more>\n </sp-action-button>`\n }`;\n });\n}\n\n// ─── The hovered row's cluster ───────────────────────────────────────────────\n\n/**\n * The row whose cluster this module mounted on hover, so it can be taken down again.\n *\n * One at a time: the pointer is in one place. The SELECTED row's cluster is lit's (it is in the row\n * template), and is never touched from here.\n */\nlet _hoverActionsRow: HTMLElement | null = null;\n\n/** The empty span a non-selected row keeps for {@link mountHoverActions} to render into. */\nfunction actionSlot(row: HTMLElement): HTMLElement | null {\n return row.classList.contains(\"selected\")\n ? null\n : row.querySelector<HTMLElement>(\".layer-actions\");\n}\n\n/** Take down the hover cluster, if one is up. */\nexport function clearHoverActions(): void {\n const slot = _hoverActionsRow ? actionSlot(_hoverActionsRow) : null;\n if (slot) {\n litRender(nothing, slot);\n }\n _hoverActionsRow = null;\n}\n\n/** Build `row`'s cluster into its slot, replacing whatever was there. */\nfunction mountHoverActions(row: HTMLElement): void {\n const slot = actionSlot(row);\n const key = row.dataset.path;\n if (!slot || key === undefined) {\n return;\n }\n _hoverActionsRow = row;\n litRender(renderRowCommands(selectionCommandRegistry(), pathFromKey(key)), slot);\n}\n\n/**\n * Delegated `mouseover` (which bubbles; `mouseenter` does not): reveal the cluster on the row under\n * the pointer, and only that row.\n */\nexport function onTreeHover(e: Event): void {\n const row = (e.target as HTMLElement | null)?.closest<HTMLElement>('.layer-row[role=\"treeitem\"]');\n if (!row || row === _hoverActionsRow) {\n return;\n }\n clearHoverActions();\n mountHoverActions(row);\n}\n\n/**\n * The two things that can only be decided once the rows are in the document.\n *\n * Deferred by a microtask on purpose. A `ref` on the tree element commits BEFORE the child part\n * holding the rows, so on a first render the callback sees an empty tree; and the template this\n * module returns is rendered by its caller, so a microtask is the first tick at which the new DOM\n * exists either way.\n *\n * - The roving tabindex needs to know which rows survived their collapsed ancestors.\n * - The hover cluster needs re-mounting: rows are keyed by path, so a document edit can leave the\n * pointer on a DOM row that now stands for a different node, with different disabled reasons.\n */\nexport function afterTreeRender(tree: HTMLElement): void {\n const row = _hoverActionsRow;\n queueMicrotask(() => {\n adoptOutlineTree(tree);\n applyTreeRovingTabindex(tree);\n // A keyboard jump that had to scroll first left its target here, for the render it provoked.\n const wanted = _pendingFocusKey;\n if (wanted !== null) {\n _pendingFocusKey = null;\n focusRow(tree, rowElementFor(tree, wanted) ?? undefined);\n }\n if (!row || _hoverActionsRow !== row) {\n return;\n }\n if (row.isConnected && !row.classList.contains(\"selected\")) {\n mountHoverActions(row);\n } else {\n _hoverActionsRow = null;\n }\n });\n}\n\n// ─── The tree, as a keyboard surface ─────────────────────────────────────────\n\n/** Pixels of indent per level, and the depth past which the column stops paying for more. */\nconst INDENT_STEP = 16;\nconst INDENT_MAX_DEPTH = 6;\n\n/**\n * The indent for `depth`, capped.\n *\n * Uncapped, a depth-12 row pushed 192px of empty space in front of a badge and a label inside a\n * 240px column, which is what made the panel scroll sideways instead of reading as a tree.\n */\nexport function indentWidth(depth: number): number {\n return Math.min(depth, INDENT_MAX_DEPTH) * INDENT_STEP;\n}\n\n/** The inverse of {@link pathKey}: numeric segments come back as numbers, as the doc stores them. */\nfunction pathFromKey(key: string): JxPath {\n return key ? (key.split(\"/\").map((s) => (/^\\d+$/u.test(s) ? Number(s) : s)) as JxPath) : [];\n}\n\n// ─── The row model, and the window onto it ───────────────────────────────────\n\n/**\n * One row the Outline WOULD draw, whether or not it is currently in the window.\n *\n * Built in a first pass that decides visibility (collapsed ancestors, inline elements, the content\n * root) and costs nothing but the decision; the templates are built in a second pass, for the\n * window only. Splitting the two is the whole saving — the expensive half is the `sp-icon` and\n * `sp-action-button` custom elements a row template mounts, not the walk that finds it.\n */\ninterface OutlineRow {\n /** `pathKey(path)` — the drag-and-drop and roving-tabindex key, and lit's `repeat` key. */\n key: string;\n path: JxPath;\n depth: number;\n /** Index of this row's parent in the model, or -1 at the top level. Feeds ← and `aria-setsize`. */\n parent: number;\n /**\n * Whether this row is a `role=\"treeitem\"`.\n *\n * Text-node rows are drawn but are not tree items, and were never part of the keyboard walk or a\n * shift-range: `treeRows()` selected on the role, so moving those questions to the model has to\n * carry the same distinction rather than quietly start selecting text nodes.\n */\n item: boolean;\n node: JxMutableNode | string | number | boolean;\n nodeType: string;\n /** 1-based position among the row's `role=\"treeitem\"` siblings — see {@link numberOutlineSets}. */\n posInSet: number;\n /** How many `role=\"treeitem\"` siblings the row has, itself included. */\n setSize: number;\n}\n\n/**\n * The declared height of one row — `styles/panels.css` `.layer-row { block-size: 24px }`.\n *\n * A window needs a row height BEFORE the first row exists, so this constant is what the first paint\n * windows by; {@link outlineRowHeight} measures a real row afterwards and believes the measurement.\n * The stylesheet declares the height explicitly so the two cannot drift apart in silence.\n */\nexport const OUTLINE_ROW_HEIGHT = 24;\n\n/** The rows the Outline last built, in display order. */\nlet _outlineRows: OutlineRow[] = [];\n/** The `.layers-tree` element, kept between renders so a window can be computed for the next one. */\nlet _outlineList: HTMLElement | null = null;\n/** The scroll watch that repaints the Outline as its scroller moves. */\nlet _outlineWatch: ListWindowWatch | null = null;\n/** The Navigator repaint, captured per render so the scroll watch never holds a stale one. */\nlet _outlineRerender: (() => void) | null = null;\n\n/** The height one row actually has; the declared constant until a row has been laid out. */\nfunction outlineRowHeight(): number {\n return measuredRowHeight(_outlineList, \".layer-row\", OUTLINE_ROW_HEIGHT);\n}\n\n/** The model index of the row keyed `key`, or -1. */\nfunction outlineIndexOfKey(key: string | undefined): number {\n return key === undefined ? -1 : _outlineRows.findIndex((row) => row.key === key);\n}\n\n/** The model index of `path`, or -1. Used by the reveal, which is given a path and not a row. */\nfunction outlineIndexOfPath(path: JxPath | null): number {\n return path === null ? -1 : _outlineRows.findIndex((row) => pathsEqual(row.path, path));\n}\n\n/**\n * The next `role=\"treeitem\"` row from `index`, walking by `step`; -1 at the ends.\n *\n * The step is over the MODEL, so ↓ at the bottom of the window moves to the row below the window\n * rather than stopping dead — which is what a DOM-indexed walk did the moment the tree windowed.\n */\nfunction outlineStep(index: number, step: 1 | -1): number {\n for (let i = index + step; i >= 0 && i < _outlineRows.length; i += step) {\n if (_outlineRows[i]!.item) {\n return i;\n }\n }\n return -1;\n}\n\n/**\n * The visible rows' paths, in display order — the list a shift-range is a range OF.\n *\n * Read from the MODEL, not from the DOM. It used to walk `data-jx-path` off the rendered rows,\n * which was exact while every row was rendered and became a silent lie the moment the tree\n * windowed: `rangeSelection` degenerates to `[target]` when the anchor is absent from the list it\n * is given (`tabs/selection.ts`), so shift-clicking with a scrolled-past anchor would have selected\n * one row and said nothing. \"Visible\" still means what it always meant — a collapsed ancestor\n * removes its descendants from the model too — it just no longer means \"painted\".\n */\nfunction visibleRowPaths(): JxPath[] {\n const paths: JxPath[] = [];\n for (const row of _outlineRows) {\n if (row.item) {\n paths.push(row.path);\n }\n }\n return paths;\n}\n\n/**\n * Scroll the model row at `index` into the window, and say whether the scroller moved.\n *\n * The repaint is the scroll watch's, not this function's — see `revealListRow`.\n */\nfunction revealOutlineRow(index: number): boolean {\n return revealListRow(_outlineList, index, outlineRowHeight());\n}\n\n/**\n * Repaint the Outline because its window changed.\n *\n * Deferred to a microtask so a scroll that arrives while lit is committing cannot re-enter the\n * render that is producing the rows.\n *\n * **Never during a drag.** `panels/dnd.ts` holds the drop targets it registered on the rendered\n * rows and shifts the rows either side of the pointer by a transform; re-rendering underneath it\n * would drop both. A wheel-scroll mid-drag therefore keeps the window the drag started with, and\n * the drop's own repaint restores it.\n *\n * **Never for a tree that is gone.** The stylebook draws a different panel into the same dock,\n * whose scroller is the one this watch is still listening to.\n */\nfunction outlineWindowChanged(): void {\n if (_outlineList?.isConnected !== true || _outlineList.querySelector(\".layer-row.dragging\")) {\n return;\n }\n queueMicrotask(() => _outlineRerender?.());\n}\n\n/**\n * Adopt the rendered tree: remember it, and keep it watching its scroller.\n *\n * Called from {@link afterTreeRender}, one microtask after the rows are committed — the first moment\n * they exist AND the element can be resolved to whatever scrolls it (`#left-panel`, or the bottom\n * dock). The first paint of a session therefore draws every row, because nothing can be measured\n * before it; the watch's opening measurement is what asks for the second, windowed one.\n *\n * Idempotent by construction: `watchListWindow` hands back the same watch for the same element and\n * scroller, so calling this after every render costs a comparison.\n */\nfunction adoptOutlineTree(tree: HTMLElement): void {\n _outlineList = tree;\n _outlineWatch = watchListWindow(_outlineWatch, tree, {\n count: () => _outlineRows.length,\n onChange: outlineWindowChanged,\n rowHeight: outlineRowHeight,\n });\n}\n\n/**\n * The node an Outline row stands for, read back off the row.\n *\n * Rows carry their `JxPath` verbatim, as JSON, in `data-jx-path` — node IDENTITY in the DOM. That\n * is a different thing from the neighbouring `data-path`, which is `pathKey`'s lossy `join(\"/\")`\n * string and exists as the drag-and-drop and roving-tabindex Map key; `[\"children\", \"0\"]` and\n * `[\"children\", 0]` share a key and are different nodes, and a segment containing a slash has no\n * key at all.\n *\n * Everything that has to point at a node from outside the render — shift-range multi-select,\n * drag-reorder, canvas to Outline sync, a collaborator's cursor, a jump from Problems — needs the\n * unambiguous one.\n */\nexport function outlineRowPath(el: Element | null): JxPath | null {\n const row = el?.closest<HTMLElement>(\"[data-jx-path]\");\n if (!row?.dataset.jxPath) {\n return null;\n }\n try {\n const parsed: unknown = JSON.parse(row.dataset.jxPath);\n return Array.isArray(parsed) ? (parsed as JxPath) : null;\n } catch {\n return null;\n }\n}\n\n/** Every row currently on screen, in visual order. */\nfunction treeRows(tree: HTMLElement): HTMLElement[] {\n return [...tree.querySelectorAll<HTMLElement>('.layer-row[role=\"treeitem\"]')];\n}\n\n/**\n * Roving tabindex over the rows: the selected row is the tab stop, else the first.\n *\n * Applied after every render ({@link afterTreeRender}) rather than baked into each row's template,\n * because \"is the selected row actually on screen\" is only known once the collapsed ancestors have\n * been skipped — a selection inside a collapsed branch would otherwise leave the tree with no tab\n * stop at all.\n */\nexport function applyTreeRovingTabindex(tree: HTMLElement): void {\n const rows = treeRows(tree);\n if (rows.length === 0) {\n return;\n }\n // The PRIMARY row is the tab stop, not merely the first selected one: a multi-selection has one\n // Keyboard position, and it is the row the author last pointed at. `data-primary` is stamped by\n // The row template, so the two never have to re-derive the same answer.\n const primary = rows.find((row) => row.dataset.primary !== undefined);\n const selected = primary ?? rows.find((row) => row.getAttribute(\"aria-selected\") === \"true\");\n const stop = selected ?? rows[0]!;\n for (const row of rows) {\n row.tabIndex = row === stop ? 0 : -1;\n }\n}\n\n/** Focus `row`, and make it the tree's single tab stop. */\nfunction focusRow(tree: HTMLElement, row: HTMLElement | undefined): void {\n if (!row) {\n return;\n }\n for (const other of treeRows(tree)) {\n other.tabIndex = other === row ? 0 : -1;\n }\n row.focus();\n}\n\n/** The rendered row for a model key, or null when the window does not currently hold it. */\nfunction rowElementFor(tree: HTMLElement, key: string): HTMLElement | null {\n return tree.querySelector<HTMLElement>(`.layer-row[data-path=\"${CSS.escape(key)}\"]`);\n}\n\n/**\n * The row a repaint should hand the keyboard to, once it exists.\n *\n * A keyboard jump can name a row the window does not hold — End on a 5 000-row page, or ← climbing\n * to a parent far above the viewport. Scrolling to it is immediate; DRAWING it is the Navigator\n * scheduler's business, and `ctx.rerender` is explicitly \"not a synchronous re-render\". So the\n * request outlives the keystroke by exactly one render: {@link afterTreeRender} spends it, and\n * spends it once — a focus request that survived its own repaint is stale, and stealing the\n * keyboard later is worse than not having moved it.\n */\nlet _pendingFocusKey: string | null = null;\n\n/** Move the keyboard to the model row at `index`, bringing it into the window if it is outside one. */\nfunction focusModelRow(tree: HTMLElement, index: number): void {\n const row = _outlineRows[index];\n if (!row) {\n return;\n }\n const el = rowElementFor(tree, row.key);\n if (el) {\n focusRow(tree, el);\n return;\n }\n if (revealOutlineRow(index)) {\n _pendingFocusKey = row.key;\n _outlineRerender?.();\n }\n}\n\n/** Select the model row at `index`, so the canvas and the inspector follow the keyboard. */\nfunction selectModelRow(index: number, gesture: { range?: boolean } = {}): void {\n const row = _outlineRows[index];\n if (row) {\n applyRowSelection(row.path, gesture);\n }\n}\n\n/**\n * Apply one row activation to the selection, honouring the two accumulate gestures (§6.5).\n *\n * - Plain: replace the selection with this path. **This is the only branch a keyboard walk or an\n * unmodified click can reach, and it is byte-identical to what the Outline always did.**\n * - Ctrl/Cmd: toggle this path in or out, leaving the rest alone.\n * - Shift: the contiguous run of VISIBLE rows from the anchor to here.\n *\n * It took the tree element as its first parameter while a range was resolved by reading the rows\n * out of the DOM. It no longer is ({@link visibleRowPaths}), and the parameter went with the read —\n * a signature that still asked for the tree would suggest the answer depends on what is painted.\n *\n * @param {JxPath} path\n * @param {{ additive?: boolean; range?: boolean }} gesture\n */\nexport function applyRowSelection(\n path: JxPath,\n gesture: { additive?: boolean; range?: boolean } = {},\n): void {\n const tab = activeTab.value;\n if (!tab) {\n return;\n }\n if (gesture.range) {\n tab.session.selection = rangeSelection(\n visibleRowPaths(),\n selectionAnchor(tab.session.selection),\n path,\n );\n return;\n }\n if (gesture.additive) {\n tab.session.selection = toggleSelected(tab.session.selection, path);\n return;\n }\n tab.session.selection = [path];\n}\n\n/**\n * The ARIA tree keyboard model.\n *\n * ↑ / ↓ walk the visible rows and take the selection with them — in an outline, \"focus follows\n * selection\" is what an author means by pressing Down. → expands a collapsed row and otherwise\n * descends into it; ← collapses an expanded one and otherwise climbs to its parent. Enter and F2\n * rename. Delete is deliberately absent: it is `selection.delete`'s chord, and the registry owns\n * it.\n *\n * Every one of those moves is an index into {@link outlineRows}, not into the rendered rows. The DOM\n * answer and the model answer agreed exactly while the tree drew everything; now the DOM holds a\n * window, and asking it for \"the row after this one\" would stop the walk at the window's edge and\n * make ← climb to whichever ancestor happened to be painted.\n */\nexport function onTreeKeydown(\n e: KeyboardEvent,\n collapsed: Set<string>,\n rerender: () => void,\n): void {\n const tree = e.currentTarget as HTMLElement;\n const row = (e.target as HTMLElement).closest<HTMLElement>('.layer-row[role=\"treeitem\"]');\n if (!row) {\n return;\n }\n const key = row.dataset.path ?? \"\";\n const index = outlineIndexOfKey(row.dataset.path);\n const expanded = row.getAttribute(\"aria-expanded\");\n\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n const next = outlineStep(index, e.key === \"ArrowDown\" ? 1 : -1);\n if (next >= 0) {\n // Shift+Arrow extends the range, the same gesture shift-click makes and through the same\n // Function. Without Shift the walk replaces the selection, exactly as it always has.\n selectModelRow(next, { range: e.shiftKey });\n focusModelRow(tree, next);\n }\n } else if (e.key === \"ArrowRight\") {\n e.preventDefault();\n if (expanded === \"false\") {\n collapsed.delete(key);\n rerender();\n } else if (expanded === \"true\") {\n focusModelRow(tree, outlineStep(index, 1));\n }\n } else if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n if (expanded === \"true\") {\n collapsed.add(key);\n rerender();\n } else {\n // The model records each row's parent as it builds them, so the climb is exact rather than a\n // Backwards scan for a smaller `aria-level` — which could only ever see painted rows.\n const parent = _outlineRows[index]?.parent ?? -1;\n if (parent >= 0) {\n selectModelRow(parent);\n focusModelRow(tree, parent);\n }\n }\n } else if (e.key === \"Home\" || e.key === \"End\") {\n e.preventDefault();\n const target = e.key === \"Home\" ? outlineStep(-1, 1) : outlineStep(_outlineRows.length, -1);\n if (target >= 0) {\n selectModelRow(target);\n focusModelRow(tree, target);\n }\n } else if (e.key === \"Enter\" || e.key === \"F2\") {\n e.preventDefault();\n selectModelRow(index);\n if (row.dataset.path !== undefined) {\n startLayerTitleEdit(pathFromKey(row.dataset.path), rerender);\n }\n }\n}\n\n/**\n * Start inline title editing on a layer row.\n *\n * @param {JxPath} path\n * @param {() => void} rerender\n */\nexport function startLayerTitleEdit(path: JxPath, rerender: () => void) {\n const key = pathKey(path);\n const row = document.querySelector(`.layer-row[data-path=\"${key}\"]`);\n if (!row) {\n // Renaming through a command (⌘↵, the palette, the block bar) can name a row the window does\n // Not hold. Scroll to it and repaint; the row exists on the next pass, and the caller's own\n // Chord is the one gesture in the app where re-pressing it is obvious.\n const index = outlineIndexOfPath(path);\n if (index >= 0 && revealOutlineRow(index)) {\n rerender();\n }\n return;\n }\n const label = row.querySelector(\".layer-label\") as HTMLElement | null;\n if (!label) {\n return;\n }\n\n const tab = activeTab.value;\n if (!tab) {\n return;\n }\n const node = getNodeAtPath(tab.doc.document, path);\n if (!node) {\n return;\n }\n\n label.style.display = \"none\";\n const input = document.createElement(\"input\");\n input.className = \"layer-title-input\";\n input.value = node.$title || \"\";\n const { $title: _, ...nodeWithoutTitle } = node;\n input.placeholder = outlineLabel(nodeWithoutTitle) || displayTagName(node.tagName) || \"div\";\n label.after(input);\n input.focus();\n input.select();\n\n let committed = false;\n const cleanup = () => {\n input.remove();\n label.style.display = \"\";\n };\n const commit = () => {\n if (committed) {\n return;\n }\n committed = true;\n cleanup();\n const val = input.value.trim();\n transactDoc(tab, (t) => mutateUpdateProperty(t, path, \"$title\", val || undefined));\n rerender();\n };\n const cancel = () => {\n if (committed) {\n return;\n }\n committed = true;\n cleanup();\n rerender();\n };\n input.addEventListener(\"blur\", commit);\n input.addEventListener(\"keydown\", (e: KeyboardEvent) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n input.blur();\n }\n if (e.key === \"Escape\") {\n e.preventDefault();\n cancel();\n }\n });\n}\n\n/**\n * Pass one: the rows the Outline WOULD draw, in display order.\n *\n * Every line here is a decision about VISIBILITY — a collapsed ancestor, an inline element the\n * canvas edits as text rather than as a block, the root the content mode does not own — and no line\n * here builds a template. That split is the whole saving: the walk is O(nodes) and costs a few\n * comparisons per node, while the half it defers mounts an `sp-icon` per row and an action cluster\n * on the selected one. Only the rows in the window ever pay it.\n *\n * @param {JxMutableNode} doc @param {string} mode @param {Set<string>} collapsed\n */\nfunction buildOutlineRows(doc: JxMutableNode, mode: string, collapsed: Set<string>): OutlineRow[] {\n const rows: OutlineRow[] = [];\n /** Indices of the rows still open above the row being decided; the last of them is its parent. */\n const ancestors: number[] = [];\n // Rows arrive in pre-order, so \"is any ancestor collapsed?\" is a running depth comparison rather\n // Than a per-row walk back up the path. The old form did `path.slice(0, d)` + `pathKey(sub)` for\n // Every ancestor of every row — O(depth) array copies and string joins per row, on every render.\n let collapsedAtDepth: number | null = null;\n for (const { node, path, depth, nodeType } of flattenTree(doc)) {\n if (collapsedAtDepth !== null && depth > collapsedAtDepth) {\n continue;\n }\n // Back at or above the collapsed ancestor's depth: it no longer covers this row.\n collapsedAtDepth = null;\n const key = pathKey(path);\n if (collapsed.has(key)) {\n collapsedAtDepth = depth;\n }\n\n if (mode === \"content\" && path.length === 0) {\n continue;\n }\n\n const isText = nodeType === \"text\";\n if (!isText) {\n // After the text-node branch, a row's node is a JxMutableNode or it is not a row at all.\n if (typeof node !== \"object\" || node === null) {\n continue;\n }\n if (path.length >= 2 && nodeType === \"element\") {\n const parentPath = parentElementPath(path);\n const parentNode = parentPath ? getNodeAtPath(doc, parentPath) : null;\n if (parentNode && isInlineElement(node, parentNode)) {\n continue;\n }\n }\n }\n\n while (ancestors.length > 0 && rows[ancestors.at(-1)!]!.depth >= depth) {\n ancestors.pop();\n }\n rows.push({\n depth,\n item: !isText,\n key,\n node,\n nodeType,\n parent: ancestors.at(-1) ?? -1,\n path,\n posInSet: 0,\n setSize: 0,\n });\n ancestors.push(rows.length - 1);\n }\n return numberOutlineSets(rows);\n}\n\n/**\n * Stamp each row's position among its siblings — the two attributes a WINDOWED tree cannot omit.\n *\n * A tree that draws every row lets the assistive technology count them itself. A windowed one hands\n * it eleven rows out of five thousand, and without `aria-posinset`/`aria-setsize` it will read\n * \"item 3 of 11\" for a document with hundreds of sections: not a missing nicety, a false statement.\n * Only `role=\"treeitem\"` rows are counted — a text-node row is drawn, but it is not in the set.\n */\nfunction numberOutlineSets(rows: OutlineRow[]): OutlineRow[] {\n const totals = new Map<number, number>();\n for (const row of rows) {\n if (row.item) {\n totals.set(row.parent, (totals.get(row.parent) ?? 0) + 1);\n }\n }\n const seen = new Map<number, number>();\n for (const row of rows) {\n if (!row.item) {\n continue;\n }\n const position = (seen.get(row.parent) ?? 0) + 1;\n seen.set(row.parent, position);\n row.posInSet = position;\n row.setSize = totals.get(row.parent) ?? position;\n }\n return rows;\n}\n\n/** A text node's row: drawn, and deliberately not a tree item — there is nothing to do to it. */\nfunction textRowTemplate(row: OutlineRow): TemplateResult {\n const text = String(row.node);\n const preview = text.length > 40 ? `${text.slice(0, 40)}…` : text;\n return html`\n <div\n class=\"layer-row\"\n data-jx-path=${JSON.stringify(row.path)}\n style=\"padding-left:${indentWidth(row.depth) + 8}px; opacity: 0.6; font-style: italic;\"\n >\n <span\n class=\"layer-tag\"\n style=\"background: var(--spectrum-gray-500, #64748b); font-size: 0.65rem;\"\n >text</span\n >\n <span class=\"layer-label\">${preview}</span>\n </div>\n `;\n}\n\n/**\n * Pass two: one row, drawn.\n *\n * Called for the rows in the window and for no others, which is why it takes the document facts it\n * needs (`selection`, `mode`) as arguments instead of reading `activeTab` for each row.\n */\nfunction outlineRowTemplate(\n row: OutlineRow,\n doc: { selection: JxPath[]; mode: string },\n collapsed: Set<string>,\n registry: CommandRegistry,\n ctx: { rerender: () => void },\n): TemplateResult {\n if (!row.item) {\n return textRowTemplate(row);\n }\n const { depth, key, nodeType, path } = row;\n const jxNode = row.node as JxMutableNode;\n\n // Every member of the set draws selected; the PRIMARY additionally carries the roving tab stop,\n // So a batch has one keyboard position rather than six.\n const isSelected = isPathSelected(doc.selection, path);\n const isPrimary = pathsEqual(path, primarySelection(doc.selection));\n const hasChildren = Array.isArray(jxNode.children) && jxNode.children.length > 0;\n const hasMapChildren =\n jxNode.children &&\n typeof jxNode.children === \"object\" &&\n (jxNode.children as unknown as Record<string, unknown>).$prototype === \"Array\";\n const hasCases =\n jxNode.$switch &&\n jxNode.cases &&\n typeof jxNode.cases === \"object\" &&\n Object.keys(jxNode.cases).length > 0;\n const isExpandable =\n hasChildren || hasMapChildren || hasCases || (nodeType === \"map\" && jxNode.map);\n // Array nodes can't accept dropped children (their content is the single map template), so they\n // Block the make-child drop instruction like void elements do.\n const isVoidEl =\n VOID_ELEMENTS.has((displayTagName(jxNode.tagName) || \"div\").toLowerCase()) ||\n nodeType === \"map\";\n\n /** @type {string} */\n let badgeClass;\n /** @type {string | number} */\n let badgeText;\n /** @type {string | undefined} */\n let badgeTitle;\n if (nodeType === \"map\") {\n badgeClass = \"layer-tag map-tag\";\n badgeText = \"↻\";\n badgeTitle = \"Repeating list — one copy per item\";\n } else if (nodeType === \"case\" || nodeType === \"case-ref\") {\n badgeClass = \"layer-tag case-tag\";\n badgeText = path.at(-1);\n badgeTitle = `Condition case: ${path.at(-1)}`;\n } else if (jxNode.$switch) {\n badgeClass = \"layer-tag switch-tag\";\n badgeText = \"⇄\";\n badgeTitle = \"Condition\";\n } else if (jxNode.tagName === \"slot\") {\n const slotName = jxNode.attributes?.name;\n badgeClass = \"layer-tag slot-tag\";\n badgeText = \"▣\";\n badgeTitle =\n typeof slotName === \"string\" && slotName.trim()\n ? `Slot \"${slotName.trim()}\"`\n : \"Default slot\";\n } else {\n badgeClass = \"layer-tag\";\n /* The ROW BADGE, which is the one place the tag is shown as itself rather than folded into a\n label — so it is the one that rendered `[object Object]` for a chosen tag after the other\n reads were fixed. `outlineLabel` never returns a tag (it prefers a title, an id, text, a\n class, a landmark), which is why fixing `nodeLabel` did not reach here. */\n badgeText = displayTagName(jxNode.tagName) || \"div\";\n badgeTitle = isTagExpression(jxNode.tagName)\n ? `Tag chosen when the element is created: ${tagNameCandidates(jxNode.tagName).join(\" or \")}`\n : undefined;\n }\n\n /** @type {string} */\n let labelText;\n /** @type {boolean} */\n let labelItalic;\n if (nodeType === \"case-ref\") {\n labelText = jxNode.$ref || \"external\";\n labelItalic = true;\n } else {\n labelText = outlineLabel(jxNode);\n labelItalic = false;\n }\n\n // Array (repeater) nodes are first-class structural nodes — movable/draggable/deletable like\n // Elements. Both sit at a numeric child index; templates (path tail \"map\") and case nodes do\n // Not, so they stay selectable/editable but not structurally manipulable.\n const isStructural =\n (nodeType === \"element\" || nodeType === \"map\") && typeof childIndex(path) === \"number\";\n const isRoot = doc.mode === \"content\" ? path.length === 0 : path.length < 2;\n\n return html`\n <div\n class=${classMap({ \"layer-row\": true, selected: isSelected })}\n role=\"treeitem\"\n aria-level=${depth + 1}\n aria-posinset=${row.posInSet}\n aria-setsize=${row.setSize}\n aria-selected=${isSelected ? \"true\" : \"false\"}\n aria-expanded=${isExpandable ? (collapsed.has(key) ? \"false\" : \"true\") : nothing}\n tabindex=${isPrimary ? \"0\" : \"-1\"}\n data-primary=${isPrimary ? \"\" : nothing}\n data-jx-path=${JSON.stringify(path)}\n data-path=${key}\n data-dnd-row=${isStructural ? key : nothing}\n data-dnd-depth=${isStructural ? depth : nothing}\n data-dnd-void=${isStructural && isVoidEl ? \"\" : nothing}\n data-dnd-expanded=${isStructural && isExpandable && !collapsed.has(key) ? \"\" : nothing}\n @click=${(e: MouseEvent) => {\n applyRowSelection(path, { additive: e.ctrlKey || e.metaKey, range: e.shiftKey });\n panToElement(path);\n }}\n @dblclick=${\n isStructural\n ? (e: MouseEvent) => {\n e.stopPropagation();\n startLayerTitleEdit(path, ctx.rerender);\n }\n : nothing\n }\n @contextmenu=${\n isStructural\n ? (e: MouseEvent) =>\n showContextMenu(e, path, {\n rerender: ctx.rerender,\n })\n : nothing\n }\n >\n <span class=\"layer-indent\" style=\"width:${indentWidth(depth)}px\"></span>\n <span class=\"layer-toggle\"\n >${\n isExpandable\n ? html`\n ${\n collapsed.has(key)\n ? html`<sp-icon-chevron-right></sp-icon-chevron-right>`\n : html`<sp-icon-chevron-down></sp-icon-chevron-down>`\n }\n `\n : nothing\n }</span\n >\n <span class=${badgeClass} title=${ifDefined(badgeTitle ?? undefined)}>${badgeText}</span>\n <span class=\"layer-label\" style=${labelItalic ? \"font-style:italic\" : nothing}\n >${labelText}</span\n >\n ${\n isStructural && !isRoot\n ? html`<span class=\"layer-drag-handle\" title=\"Drag to reorder\">⠿</span>`\n : nothing\n }\n ${\n // The selected row's cluster is declared here so it survives every re-render; every\n // Other structural row keeps an EMPTY slot, which the pointer fills (mountHoverActions)\n // And empties again. The two branches are different templates, so lit swaps the DOM\n // Between them and a hover cluster can never outlive the row becoming selected.\n isStructural && !isRoot\n ? isSelected\n ? html`<span class=\"layer-actions\">${renderRowCommands(registry, path)}</span>`\n : html`<span class=\"layer-actions\"></span>`\n : nothing\n }\n </div>\n `;\n}\n\n/**\n * @param {{ navigateToComponent: (path: string) => void; rerender: () => void }} ctx\n * @returns {import(\"lit-html\").TemplateResult}\n */\nexport function renderLayersTemplate(ctx: {\n navigateToComponent: (path: string) => void;\n rerender: () => void;\n}) {\n const tab = activeTab.value;\n // The scroll watch outlives this call and must never repaint through a closure from an earlier\n // One — the Navigator's scheduler is the only thing that knows how to draw the Outline.\n _outlineRerender = ctx.rerender;\n\n for (const fn of view.dndCleanups) {\n fn();\n }\n view.dndCleanups = [];\n\n view._layersCollapsed ||= new Set();\n const collapsed = view._layersCollapsed;\n const registry = selectionCommandRegistry();\n\n _outlineRows = buildOutlineRows(tab!.doc.document, tab?.doc.mode ?? \"\", collapsed);\n // The window is computed from the PREVIOUS render's tree element, because that is the only one\n // That exists while this template is being built. On the first paint of a session there is none\n // And `listWindow` answers \"all of them\" — which is exactly what the Outline did before it\n // Windowed, and what the panel's `afterRender` then measures in order to ask for a second pass.\n const range = listWindow(_outlineList, {\n count: _outlineRows.length,\n rowHeight: outlineRowHeight(),\n });\n const doc = { mode: tab?.doc.mode ?? \"\", selection: tab!.session.selection };\n const layerRows = _outlineRows\n .slice(range.start, range.end)\n .map((row) => ({ key: row.key, tpl: outlineRowTemplate(row, doc, collapsed, registry, ctx) }));\n\n return html`\n <div class=\"layers-container\" style=\"position:relative\">\n <div\n class=\"layers-tree\"\n role=\"tree\"\n aria-label=\"Document outline\"\n ${ref((el) => {\n if (el) {\n afterTreeRender(el as HTMLElement);\n }\n })}\n @keydown=${(e: KeyboardEvent) => onTreeKeydown(e, collapsed, ctx.rerender)}\n @mouseover=${onTreeHover}\n @mouseleave=${clearHoverActions}\n @click=${(e: MouseEvent) => {\n const toggle = (e.target as HTMLElement).closest(\".layer-toggle\");\n if (!toggle) {\n return;\n }\n e.stopPropagation();\n const row = toggle.closest(\".layer-row\");\n if (!row) {\n return;\n }\n const key = (row as HTMLElement).dataset.path;\n if (!key) {\n return;\n }\n if (collapsed.has(key)) {\n collapsed.delete(key);\n } else {\n collapsed.add(key);\n }\n ctx.rerender();\n }}\n >\n ${\n _outlineRows.length === 0\n ? renderEmptyState({\n actions: [\n {\n label: \"Add an element\",\n run: () => {\n // `\"insert\"`, not `\"blocks\"`. The panel was renamed in P3.1 and this call\n // Kept the old id for three phases, so the one action an empty page offers\n // Landed the Navigator on \"No Navigator panel is registered as blocks\".\n // `setActivityTab` takes a `NavigatorPanelId` now, so this cannot recur.\n setActivityTab(\"insert\");\n },\n },\n ],\n message: \"This page is empty. Everything you add to it is listed here, in order.\",\n })\n : html`\n <!-- The rows the window left above and below, as the height they would have\n occupied: the scrollbar stays the length of the whole document, and\n aria-hidden keeps two empty spacers out of a tree that owns treeitems. -->\n <div style=\"height:${range.padTop}px\" aria-hidden=\"true\"></div>\n ${repeat(\n layerRows,\n (r) => r.key,\n (r) => r.tpl,\n )}\n <div style=\"height:${range.padBottom}px\" aria-hidden=\"true\"></div>\n `\n }\n </div>\n </div>\n `;\n}\n\n/**\n * Keep the selected row on screen after a repaint.\n *\n * Two cases now, where there used to be one. If the row is drawn, it scrolls itself into view, as\n * it always has. If it is NOT — the canvas selected a node three thousand rows down, a jump from\n * Problems, a collaborator's edit — then the row the author is meant to see is precisely the one\n * with no element to call `scrollIntoView` on, and the reveal has to be arithmetic: scroll to where\n * the model says the row is, and let the scroll watch draw it. Silently doing nothing would be the\n * windowing bug that looks like a selection bug.\n */\nfunction revealSelectedRow(host: HTMLElement): void {\n const drawn = host.querySelector(\".layer-row.selected\");\n if (drawn) {\n drawn.scrollIntoView({ behavior: \"smooth\", block: \"nearest\" });\n return;\n }\n revealOutlineRow(outlineIndexOfPath(primarySelection(activeTab.value?.session.selection)));\n}\n\n/**\n * Contribute the Outline panel.\n *\n * `level: \"document\"` — it writes the open document's tree (reorder, rename, delete, duplicate).\n * \"Outline\" rather than \"Layers\" is §3.2 ③'s name for it; the id stays `layers` because that is\n * what `view.setActivity` and 26 screenshot steps address it by, and an id is not a label.\n */\nexport function registerLayersPanel(): void {\n registerPanel({\n id: \"layers\",\n title: \"Outline\",\n level: \"document\",\n dock: \"navigator\",\n icon: \"sp-icon-layers\",\n requiresDocument: \"Open a page to see the elements it is built from.\",\n render: (ctx) =>\n ctx.deps.getCanvasMode() === \"stylebook\"\n ? renderStylebookLayersTemplate({\n selectStylebookTag,\n stylebookMeta,\n } as Parameters<typeof renderStylebookLayersTemplate>[0])\n : renderLayersTemplate({\n navigateToComponent: ctx.deps.navigateToComponent,\n rerender: ctx.rerender,\n }),\n afterRender: (ctx, host) => {\n if (ctx.deps.getCanvasMode() !== \"stylebook\") {\n ctx.deps.registerLayersDnD();\n }\n revealSelectedRow(host);\n },\n });\n}\n"
94
- ],
95
- "mappings": "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",
96
- "debugId": "0A72A5F10EA65EFD64756E2164756E21",
97
- "names": []
98
- }