@wordpress/dom 3.38.0 → 3.40.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 (202) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +2 -2
  3. package/build/data-transfer.js +0 -2
  4. package/build/data-transfer.js.map +1 -1
  5. package/build/dom/caret-range-from-point.js +3 -5
  6. package/build/dom/caret-range-from-point.js.map +1 -1
  7. package/build/dom/clean-node-list.js +25 -42
  8. package/build/dom/clean-node-list.js.map +1 -1
  9. package/build/dom/compute-caret-rect.js +0 -6
  10. package/build/dom/compute-caret-rect.js.map +1 -1
  11. package/build/dom/document-has-selection.js +0 -5
  12. package/build/dom/document-has-selection.js.map +1 -1
  13. package/build/dom/document-has-text-selection.js +0 -2
  14. package/build/dom/document-has-text-selection.js.map +1 -1
  15. package/build/dom/document-has-uncollapsed-selection.js +0 -4
  16. package/build/dom/document-has-uncollapsed-selection.js.map +1 -1
  17. package/build/dom/get-computed-style.js +0 -3
  18. package/build/dom/get-computed-style.js.map +1 -1
  19. package/build/dom/get-offset-parent.js +8 -19
  20. package/build/dom/get-offset-parent.js.map +1 -1
  21. package/build/dom/get-range-height.js +0 -3
  22. package/build/dom/get-range-height.js.map +1 -1
  23. package/build/dom/get-rectangle-from-range.js +15 -22
  24. package/build/dom/get-rectangle-from-range.js.map +1 -1
  25. package/build/dom/get-scroll-container.js +3 -13
  26. package/build/dom/get-scroll-container.js.map +1 -1
  27. package/build/dom/hidden-caret-range-from-point.js +2 -6
  28. package/build/dom/hidden-caret-range-from-point.js.map +1 -1
  29. package/build/dom/index.js +0 -27
  30. package/build/dom/index.js.map +1 -1
  31. package/build/dom/input-field-has-uncollapsed-selection.js +8 -12
  32. package/build/dom/input-field-has-uncollapsed-selection.js.map +1 -1
  33. package/build/dom/insert-after.js +0 -2
  34. package/build/dom/insert-after.js.map +1 -1
  35. package/build/dom/is-edge.js +18 -40
  36. package/build/dom/is-edge.js.map +1 -1
  37. package/build/dom/is-element.js +0 -2
  38. package/build/dom/is-element.js.map +1 -1
  39. package/build/dom/is-empty.js +1 -7
  40. package/build/dom/is-empty.js.map +1 -1
  41. package/build/dom/is-entirely-selected.js +2 -18
  42. package/build/dom/is-entirely-selected.js.map +1 -1
  43. package/build/dom/is-form-element.js +0 -4
  44. package/build/dom/is-form-element.js.map +1 -1
  45. package/build/dom/is-horizontal-edge.js +2 -5
  46. package/build/dom/is-horizontal-edge.js.map +1 -1
  47. package/build/dom/is-html-input-element.js +0 -2
  48. package/build/dom/is-html-input-element.js.map +1 -1
  49. package/build/dom/is-input-or-text-area.js +0 -2
  50. package/build/dom/is-input-or-text-area.js.map +1 -1
  51. package/build/dom/is-number-input.js +0 -6
  52. package/build/dom/is-number-input.js.map +1 -1
  53. package/build/dom/is-rtl.js +0 -3
  54. package/build/dom/is-rtl.js.map +1 -1
  55. package/build/dom/is-selection-forward.js +6 -10
  56. package/build/dom/is-selection-forward.js.map +1 -1
  57. package/build/dom/is-text-field.js +1 -7
  58. package/build/dom/is-text-field.js.map +1 -1
  59. package/build/dom/is-vertical-edge.js +2 -5
  60. package/build/dom/is-vertical-edge.js.map +1 -1
  61. package/build/dom/place-caret-at-edge.js +8 -31
  62. package/build/dom/place-caret-at-edge.js.map +1 -1
  63. package/build/dom/place-caret-at-horizontal-edge.js +0 -3
  64. package/build/dom/place-caret-at-horizontal-edge.js.map +1 -1
  65. package/build/dom/place-caret-at-vertical-edge.js +0 -3
  66. package/build/dom/place-caret-at-vertical-edge.js.map +1 -1
  67. package/build/dom/remove-invalid-html.js +0 -3
  68. package/build/dom/remove-invalid-html.js.map +1 -1
  69. package/build/dom/remove.js +0 -2
  70. package/build/dom/remove.js.map +1 -1
  71. package/build/dom/replace-tag.js +0 -4
  72. package/build/dom/replace-tag.js.map +1 -1
  73. package/build/dom/replace.js +0 -5
  74. package/build/dom/replace.js.map +1 -1
  75. package/build/dom/safe-html.js +0 -8
  76. package/build/dom/safe-html.js.map +1 -1
  77. package/build/dom/scroll-if-no-range.js +31 -0
  78. package/build/dom/scroll-if-no-range.js.map +1 -0
  79. package/build/dom/strip-html.js +0 -3
  80. package/build/dom/strip-html.js.map +1 -1
  81. package/build/dom/unwrap.js +0 -4
  82. package/build/dom/unwrap.js.map +1 -1
  83. package/build/dom/wrap.js +0 -2
  84. package/build/dom/wrap.js.map +1 -1
  85. package/build/focusable.js +5 -18
  86. package/build/focusable.js.map +1 -1
  87. package/build/index.js +0 -11
  88. package/build/index.js.map +1 -1
  89. package/build/phrasing-content.js +13 -14
  90. package/build/phrasing-content.js.map +1 -1
  91. package/build/tabbable.js +21 -37
  92. package/build/tabbable.js.map +1 -1
  93. package/build/utils/assert-is-defined.js +0 -1
  94. package/build/utils/assert-is-defined.js.map +1 -1
  95. package/build-module/data-transfer.js +0 -1
  96. package/build-module/data-transfer.js.map +1 -1
  97. package/build-module/dom/caret-range-from-point.js +3 -4
  98. package/build-module/dom/caret-range-from-point.js.map +1 -1
  99. package/build-module/dom/clean-node-list.js +24 -35
  100. package/build-module/dom/clean-node-list.js.map +1 -1
  101. package/build-module/dom/compute-caret-rect.js +1 -3
  102. package/build-module/dom/compute-caret-rect.js.map +1 -1
  103. package/build-module/dom/document-has-selection.js +1 -1
  104. package/build-module/dom/document-has-selection.js.map +1 -1
  105. package/build-module/dom/document-has-text-selection.js +1 -1
  106. package/build-module/dom/document-has-text-selection.js.map +1 -1
  107. package/build-module/dom/document-has-uncollapsed-selection.js +1 -1
  108. package/build-module/dom/document-has-uncollapsed-selection.js.map +1 -1
  109. package/build-module/dom/get-computed-style.js +1 -2
  110. package/build-module/dom/get-computed-style.js.map +1 -1
  111. package/build-module/dom/get-offset-parent.js +9 -17
  112. package/build-module/dom/get-offset-parent.js.map +1 -1
  113. package/build-module/dom/get-range-height.js +0 -2
  114. package/build-module/dom/get-range-height.js.map +1 -1
  115. package/build-module/dom/get-rectangle-from-range.js +16 -21
  116. package/build-module/dom/get-rectangle-from-range.js.map +1 -1
  117. package/build-module/dom/get-scroll-container.js +4 -11
  118. package/build-module/dom/get-scroll-container.js.map +1 -1
  119. package/build-module/dom/hidden-caret-range-from-point.js +3 -3
  120. package/build-module/dom/hidden-caret-range-from-point.js.map +1 -1
  121. package/build-module/dom/index.js.map +1 -1
  122. package/build-module/dom/input-field-has-uncollapsed-selection.js +9 -9
  123. package/build-module/dom/input-field-has-uncollapsed-selection.js.map +1 -1
  124. package/build-module/dom/insert-after.js +1 -1
  125. package/build-module/dom/insert-after.js.map +1 -1
  126. package/build-module/dom/is-edge.js +19 -32
  127. package/build-module/dom/is-edge.js.map +1 -1
  128. package/build-module/dom/is-element.js +0 -1
  129. package/build-module/dom/is-element.js.map +1 -1
  130. package/build-module/dom/is-empty.js +1 -6
  131. package/build-module/dom/is-empty.js.map +1 -1
  132. package/build-module/dom/is-entirely-selected.js +3 -14
  133. package/build-module/dom/is-entirely-selected.js.map +1 -1
  134. package/build-module/dom/is-form-element.js +1 -2
  135. package/build-module/dom/is-form-element.js.map +1 -1
  136. package/build-module/dom/is-horizontal-edge.js +3 -3
  137. package/build-module/dom/is-horizontal-edge.js.map +1 -1
  138. package/build-module/dom/is-html-input-element.js +0 -1
  139. package/build-module/dom/is-html-input-element.js.map +1 -1
  140. package/build-module/dom/is-input-or-text-area.js +0 -1
  141. package/build-module/dom/is-input-or-text-area.js.map +1 -1
  142. package/build-module/dom/is-number-input.js +2 -4
  143. package/build-module/dom/is-number-input.js.map +1 -1
  144. package/build-module/dom/is-rtl.js +1 -1
  145. package/build-module/dom/is-rtl.js.map +1 -1
  146. package/build-module/dom/is-selection-forward.js +7 -9
  147. package/build-module/dom/is-selection-forward.js.map +1 -1
  148. package/build-module/dom/is-text-field.js +2 -5
  149. package/build-module/dom/is-text-field.js.map +1 -1
  150. package/build-module/dom/is-vertical-edge.js +3 -3
  151. package/build-module/dom/is-vertical-edge.js.map +1 -1
  152. package/build-module/dom/place-caret-at-edge.js +9 -26
  153. package/build-module/dom/place-caret-at-edge.js.map +1 -1
  154. package/build-module/dom/place-caret-at-horizontal-edge.js +1 -1
  155. package/build-module/dom/place-caret-at-horizontal-edge.js.map +1 -1
  156. package/build-module/dom/place-caret-at-vertical-edge.js +1 -1
  157. package/build-module/dom/place-caret-at-vertical-edge.js.map +1 -1
  158. package/build-module/dom/remove-invalid-html.js +1 -1
  159. package/build-module/dom/remove-invalid-html.js.map +1 -1
  160. package/build-module/dom/remove.js +1 -1
  161. package/build-module/dom/remove.js.map +1 -1
  162. package/build-module/dom/replace-tag.js +1 -3
  163. package/build-module/dom/replace-tag.js.map +1 -1
  164. package/build-module/dom/replace.js +1 -1
  165. package/build-module/dom/replace.js.map +1 -1
  166. package/build-module/dom/safe-html.js +1 -6
  167. package/build-module/dom/safe-html.js.map +1 -1
  168. package/build-module/dom/scroll-if-no-range.js +25 -0
  169. package/build-module/dom/scroll-if-no-range.js.map +1 -0
  170. package/build-module/dom/strip-html.js +1 -1
  171. package/build-module/dom/strip-html.js.map +1 -1
  172. package/build-module/dom/unwrap.js +1 -3
  173. package/build-module/dom/unwrap.js.map +1 -1
  174. package/build-module/dom/wrap.js +1 -1
  175. package/build-module/dom/wrap.js.map +1 -1
  176. package/build-module/focusable.js +5 -17
  177. package/build-module/focusable.js.map +1 -1
  178. package/build-module/index.js +1 -1
  179. package/build-module/index.js.map +1 -1
  180. package/build-module/phrasing-content.js +13 -11
  181. package/build-module/phrasing-content.js.map +1 -1
  182. package/build-module/tabbable.js +22 -33
  183. package/build-module/tabbable.js.map +1 -1
  184. package/build-module/utils/assert-is-defined.js.map +1 -1
  185. package/build-types/dom/is-edge.d.ts +4 -4
  186. package/build-types/dom/is-edge.d.ts.map +1 -1
  187. package/build-types/dom/is-horizontal-edge.d.ts +3 -3
  188. package/build-types/dom/is-horizontal-edge.d.ts.map +1 -1
  189. package/build-types/dom/is-vertical-edge.d.ts +3 -3
  190. package/build-types/dom/is-vertical-edge.d.ts.map +1 -1
  191. package/build-types/dom/place-caret-at-edge.d.ts.map +1 -1
  192. package/build-types/dom/scroll-if-no-range.d.ts +12 -0
  193. package/build-types/dom/scroll-if-no-range.d.ts.map +1 -0
  194. package/build-types/index.d.ts +2 -2
  195. package/build-types/index.d.ts.map +1 -1
  196. package/package.json +3 -3
  197. package/src/dom/is-edge.js +6 -8
  198. package/src/dom/is-horizontal-edge.js +2 -2
  199. package/src/dom/is-vertical-edge.js +2 -2
  200. package/src/dom/place-caret-at-edge.js +5 -19
  201. package/src/dom/scroll-if-no-range.js +34 -0
  202. package/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/dom/src/phrasing-content.js"],"names":["textContentSchema","strong","em","s","del","ins","a","attributes","code","abbr","sub","sup","br","small","q","dfn","data","time","var","samp","kbd","i","b","u","mark","ruby","rt","rp","bdi","bdo","wbr","excludedElements","Object","keys","filter","element","includes","forEach","tag","removedTag","restSchema","children","embeddedContentSchema","audio","canvas","embed","img","object","video","phrasingContentSchema","getPhrasingContentSchema","context","remainingContentSchema","isPhrasingContent","node","nodeName","toLowerCase","hasOwnProperty","isTextContent"],"mappings":"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","sourcesContent":["/**\n * All phrasing content elements.\n *\n * @see https://www.w3.org/TR/2011/WD-html5-20110525/content-models.html#phrasing-content-0\n */\n\n/**\n * @typedef {Record<string,SemanticElementDefinition>} ContentSchema\n */\n\n/**\n * @typedef SemanticElementDefinition\n * @property {string[]} [attributes] Content attributes\n * @property {ContentSchema} [children] Content attributes\n */\n\n/**\n * All text-level semantic elements.\n *\n * @see https://html.spec.whatwg.org/multipage/text-level-semantics.html\n *\n * @type {ContentSchema}\n */\nconst textContentSchema = {\n\tstrong: {},\n\tem: {},\n\ts: {},\n\tdel: {},\n\tins: {},\n\ta: { attributes: [ 'href', 'target', 'rel', 'id' ] },\n\tcode: {},\n\tabbr: { attributes: [ 'title' ] },\n\tsub: {},\n\tsup: {},\n\tbr: {},\n\tsmall: {},\n\t// To do: fix blockquote.\n\t// cite: {},\n\tq: { attributes: [ 'cite' ] },\n\tdfn: { attributes: [ 'title' ] },\n\tdata: { attributes: [ 'value' ] },\n\ttime: { attributes: [ 'datetime' ] },\n\tvar: {},\n\tsamp: {},\n\tkbd: {},\n\ti: {},\n\tb: {},\n\tu: {},\n\tmark: {},\n\truby: {},\n\trt: {},\n\trp: {},\n\tbdi: { attributes: [ 'dir' ] },\n\tbdo: { attributes: [ 'dir' ] },\n\twbr: {},\n\t'#text': {},\n};\n\n// Recursion is needed.\n// Possible: strong > em > strong.\n// Impossible: strong > strong.\nconst excludedElements = [ '#text', 'br' ];\nObject.keys( textContentSchema )\n\t.filter( ( element ) => ! excludedElements.includes( element ) )\n\t.forEach( ( tag ) => {\n\t\tconst { [ tag ]: removedTag, ...restSchema } = textContentSchema;\n\t\ttextContentSchema[ tag ].children = restSchema;\n\t} );\n\n/**\n * Embedded content elements.\n *\n * @see https://www.w3.org/TR/2011/WD-html5-20110525/content-models.html#embedded-content-0\n *\n * @type {ContentSchema}\n */\nconst embeddedContentSchema = {\n\taudio: {\n\t\tattributes: [\n\t\t\t'src',\n\t\t\t'preload',\n\t\t\t'autoplay',\n\t\t\t'mediagroup',\n\t\t\t'loop',\n\t\t\t'muted',\n\t\t],\n\t},\n\tcanvas: { attributes: [ 'width', 'height' ] },\n\tembed: { attributes: [ 'src', 'type', 'width', 'height' ] },\n\timg: {\n\t\tattributes: [\n\t\t\t'alt',\n\t\t\t'src',\n\t\t\t'srcset',\n\t\t\t'usemap',\n\t\t\t'ismap',\n\t\t\t'width',\n\t\t\t'height',\n\t\t],\n\t},\n\tobject: {\n\t\tattributes: [\n\t\t\t'data',\n\t\t\t'type',\n\t\t\t'name',\n\t\t\t'usemap',\n\t\t\t'form',\n\t\t\t'width',\n\t\t\t'height',\n\t\t],\n\t},\n\tvideo: {\n\t\tattributes: [\n\t\t\t'src',\n\t\t\t'poster',\n\t\t\t'preload',\n\t\t\t'autoplay',\n\t\t\t'mediagroup',\n\t\t\t'loop',\n\t\t\t'muted',\n\t\t\t'controls',\n\t\t\t'width',\n\t\t\t'height',\n\t\t],\n\t},\n};\n\n/**\n * Phrasing content elements.\n *\n * @see https://www.w3.org/TR/2011/WD-html5-20110525/content-models.html#phrasing-content-0\n */\nconst phrasingContentSchema = {\n\t...textContentSchema,\n\t...embeddedContentSchema,\n};\n\n/**\n * Get schema of possible paths for phrasing content.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Phrasing_content\n *\n * @param {string} [context] Set to \"paste\" to exclude invisible elements and\n * sensitive data.\n *\n * @return {Partial<ContentSchema>} Schema.\n */\nexport function getPhrasingContentSchema( context ) {\n\tif ( context !== 'paste' ) {\n\t\treturn phrasingContentSchema;\n\t}\n\n\t/**\n\t * @type {Partial<ContentSchema>}\n\t */\n\tconst {\n\t\tu, // Used to mark misspelling. Shouldn't be pasted.\n\t\tabbr, // Invisible.\n\t\tdata, // Invisible.\n\t\ttime, // Invisible.\n\t\twbr, // Invisible.\n\t\tbdi, // Invisible.\n\t\tbdo, // Invisible.\n\t\t...remainingContentSchema\n\t} = {\n\t\t...phrasingContentSchema,\n\t\t// We shouldn't paste potentially sensitive information which is not\n\t\t// visible to the user when pasted, so strip the attributes.\n\t\tins: { children: phrasingContentSchema.ins.children },\n\t\tdel: { children: phrasingContentSchema.del.children },\n\t};\n\n\treturn remainingContentSchema;\n}\n\n/**\n * Find out whether or not the given node is phrasing content.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Phrasing_content\n *\n * @param {Node} node The node to test.\n *\n * @return {boolean} True if phrasing content, false if not.\n */\nexport function isPhrasingContent( node ) {\n\tconst tag = node.nodeName.toLowerCase();\n\treturn getPhrasingContentSchema().hasOwnProperty( tag ) || tag === 'span';\n}\n\n/**\n * @param {Node} node\n * @return {boolean} Node is text content\n */\nexport function isTextContent( node ) {\n\tconst tag = node.nodeName.toLowerCase();\n\treturn textContentSchema.hasOwnProperty( tag ) || tag === 'span';\n}\n"]}
1
+ {"version":3,"names":["textContentSchema","strong","em","s","del","ins","a","attributes","code","abbr","sub","sup","br","small","q","dfn","data","time","var","samp","kbd","i","b","u","mark","ruby","rt","rp","bdi","bdo","wbr","excludedElements","Object","keys","filter","element","includes","forEach","tag","removedTag","restSchema","children","embeddedContentSchema","audio","canvas","embed","img","object","video","phrasingContentSchema","getPhrasingContentSchema","context","remainingContentSchema","isPhrasingContent","node","nodeName","toLowerCase","hasOwnProperty","isTextContent"],"sources":["@wordpress/dom/src/phrasing-content.js"],"sourcesContent":["/**\n * All phrasing content elements.\n *\n * @see https://www.w3.org/TR/2011/WD-html5-20110525/content-models.html#phrasing-content-0\n */\n\n/**\n * @typedef {Record<string,SemanticElementDefinition>} ContentSchema\n */\n\n/**\n * @typedef SemanticElementDefinition\n * @property {string[]} [attributes] Content attributes\n * @property {ContentSchema} [children] Content attributes\n */\n\n/**\n * All text-level semantic elements.\n *\n * @see https://html.spec.whatwg.org/multipage/text-level-semantics.html\n *\n * @type {ContentSchema}\n */\nconst textContentSchema = {\n\tstrong: {},\n\tem: {},\n\ts: {},\n\tdel: {},\n\tins: {},\n\ta: { attributes: [ 'href', 'target', 'rel', 'id' ] },\n\tcode: {},\n\tabbr: { attributes: [ 'title' ] },\n\tsub: {},\n\tsup: {},\n\tbr: {},\n\tsmall: {},\n\t// To do: fix blockquote.\n\t// cite: {},\n\tq: { attributes: [ 'cite' ] },\n\tdfn: { attributes: [ 'title' ] },\n\tdata: { attributes: [ 'value' ] },\n\ttime: { attributes: [ 'datetime' ] },\n\tvar: {},\n\tsamp: {},\n\tkbd: {},\n\ti: {},\n\tb: {},\n\tu: {},\n\tmark: {},\n\truby: {},\n\trt: {},\n\trp: {},\n\tbdi: { attributes: [ 'dir' ] },\n\tbdo: { attributes: [ 'dir' ] },\n\twbr: {},\n\t'#text': {},\n};\n\n// Recursion is needed.\n// Possible: strong > em > strong.\n// Impossible: strong > strong.\nconst excludedElements = [ '#text', 'br' ];\nObject.keys( textContentSchema )\n\t.filter( ( element ) => ! excludedElements.includes( element ) )\n\t.forEach( ( tag ) => {\n\t\tconst { [ tag ]: removedTag, ...restSchema } = textContentSchema;\n\t\ttextContentSchema[ tag ].children = restSchema;\n\t} );\n\n/**\n * Embedded content elements.\n *\n * @see https://www.w3.org/TR/2011/WD-html5-20110525/content-models.html#embedded-content-0\n *\n * @type {ContentSchema}\n */\nconst embeddedContentSchema = {\n\taudio: {\n\t\tattributes: [\n\t\t\t'src',\n\t\t\t'preload',\n\t\t\t'autoplay',\n\t\t\t'mediagroup',\n\t\t\t'loop',\n\t\t\t'muted',\n\t\t],\n\t},\n\tcanvas: { attributes: [ 'width', 'height' ] },\n\tembed: { attributes: [ 'src', 'type', 'width', 'height' ] },\n\timg: {\n\t\tattributes: [\n\t\t\t'alt',\n\t\t\t'src',\n\t\t\t'srcset',\n\t\t\t'usemap',\n\t\t\t'ismap',\n\t\t\t'width',\n\t\t\t'height',\n\t\t],\n\t},\n\tobject: {\n\t\tattributes: [\n\t\t\t'data',\n\t\t\t'type',\n\t\t\t'name',\n\t\t\t'usemap',\n\t\t\t'form',\n\t\t\t'width',\n\t\t\t'height',\n\t\t],\n\t},\n\tvideo: {\n\t\tattributes: [\n\t\t\t'src',\n\t\t\t'poster',\n\t\t\t'preload',\n\t\t\t'autoplay',\n\t\t\t'mediagroup',\n\t\t\t'loop',\n\t\t\t'muted',\n\t\t\t'controls',\n\t\t\t'width',\n\t\t\t'height',\n\t\t],\n\t},\n};\n\n/**\n * Phrasing content elements.\n *\n * @see https://www.w3.org/TR/2011/WD-html5-20110525/content-models.html#phrasing-content-0\n */\nconst phrasingContentSchema = {\n\t...textContentSchema,\n\t...embeddedContentSchema,\n};\n\n/**\n * Get schema of possible paths for phrasing content.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Phrasing_content\n *\n * @param {string} [context] Set to \"paste\" to exclude invisible elements and\n * sensitive data.\n *\n * @return {Partial<ContentSchema>} Schema.\n */\nexport function getPhrasingContentSchema( context ) {\n\tif ( context !== 'paste' ) {\n\t\treturn phrasingContentSchema;\n\t}\n\n\t/**\n\t * @type {Partial<ContentSchema>}\n\t */\n\tconst {\n\t\tu, // Used to mark misspelling. Shouldn't be pasted.\n\t\tabbr, // Invisible.\n\t\tdata, // Invisible.\n\t\ttime, // Invisible.\n\t\twbr, // Invisible.\n\t\tbdi, // Invisible.\n\t\tbdo, // Invisible.\n\t\t...remainingContentSchema\n\t} = {\n\t\t...phrasingContentSchema,\n\t\t// We shouldn't paste potentially sensitive information which is not\n\t\t// visible to the user when pasted, so strip the attributes.\n\t\tins: { children: phrasingContentSchema.ins.children },\n\t\tdel: { children: phrasingContentSchema.del.children },\n\t};\n\n\treturn remainingContentSchema;\n}\n\n/**\n * Find out whether or not the given node is phrasing content.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Phrasing_content\n *\n * @param {Node} node The node to test.\n *\n * @return {boolean} True if phrasing content, false if not.\n */\nexport function isPhrasingContent( node ) {\n\tconst tag = node.nodeName.toLowerCase();\n\treturn getPhrasingContentSchema().hasOwnProperty( tag ) || tag === 'span';\n}\n\n/**\n * @param {Node} node\n * @return {boolean} Node is text content\n */\nexport function isTextContent( node ) {\n\tconst tag = node.nodeName.toLowerCase();\n\treturn textContentSchema.hasOwnProperty( tag ) || tag === 'span';\n}\n"],"mappings":"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"}
package/build/tabbable.js CHANGED
@@ -7,9 +7,7 @@ exports.find = find;
7
7
  exports.findNext = findNext;
8
8
  exports.findPrevious = findPrevious;
9
9
  exports.isTabbableIndex = isTabbableIndex;
10
-
11
10
  var _focusable = require("./focusable");
12
-
13
11
  /**
14
12
  * Internal dependencies
15
13
  */
@@ -30,6 +28,7 @@ function getTabIndex(element) {
30
28
  const tabIndex = element.getAttribute('tabindex');
31
29
  return tabIndex === null ? 0 : parseInt(tabIndex, 10);
32
30
  }
31
+
33
32
  /**
34
33
  * Returns true if the specified element is tabbable, or false otherwise.
35
34
  *
@@ -37,11 +36,10 @@ function getTabIndex(element) {
37
36
  *
38
37
  * @return {boolean} Whether element is tabbable.
39
38
  */
40
-
41
-
42
39
  function isTabbableIndex(element) {
43
40
  return getTabIndex(element) !== -1;
44
41
  }
42
+
45
43
  /** @typedef {Element & { type?: string, checked?: boolean, name?: string }} MaybeHTMLInputElement */
46
44
 
47
45
  /**
@@ -52,47 +50,41 @@ function isTabbableIndex(element) {
52
50
  *
53
51
  * @return {(acc: MaybeHTMLInputElement[], el: MaybeHTMLInputElement) => MaybeHTMLInputElement[]} Radio group collapse reducer.
54
52
  */
55
-
56
-
57
53
  function createStatefulCollapseRadioGroup() {
58
54
  /** @type {Record<string, MaybeHTMLInputElement>} */
59
55
  const CHOSEN_RADIO_BY_NAME = {};
60
- return function collapseRadioGroup(
61
- /** @type {MaybeHTMLInputElement[]} */
62
- result,
63
- /** @type {MaybeHTMLInputElement} */
64
- element) {
56
+ return function collapseRadioGroup( /** @type {MaybeHTMLInputElement[]} */result, /** @type {MaybeHTMLInputElement} */element) {
65
57
  const {
66
58
  nodeName,
67
59
  type,
68
60
  checked,
69
61
  name
70
- } = element; // For all non-radio tabbables, construct to array by concatenating.
62
+ } = element;
71
63
 
64
+ // For all non-radio tabbables, construct to array by concatenating.
72
65
  if (nodeName !== 'INPUT' || type !== 'radio' || !name) {
73
66
  return result.concat(element);
74
67
  }
68
+ const hasChosen = CHOSEN_RADIO_BY_NAME.hasOwnProperty(name);
75
69
 
76
- const hasChosen = CHOSEN_RADIO_BY_NAME.hasOwnProperty(name); // Omit by skipping concatenation if the radio element is not chosen.
77
-
70
+ // Omit by skipping concatenation if the radio element is not chosen.
78
71
  const isChosen = checked || !hasChosen;
79
-
80
72
  if (!isChosen) {
81
73
  return result;
82
- } // At this point, if there had been a chosen element, the current
74
+ }
75
+
76
+ // At this point, if there had been a chosen element, the current
83
77
  // element is checked and should take priority. Retroactively remove
84
78
  // the element which had previously been considered the chosen one.
85
-
86
-
87
79
  if (hasChosen) {
88
80
  const hadChosenElement = CHOSEN_RADIO_BY_NAME[name];
89
81
  result = result.filter(e => e !== hadChosenElement);
90
82
  }
91
-
92
83
  CHOSEN_RADIO_BY_NAME[name] = element;
93
84
  return result.concat(element);
94
85
  };
95
86
  }
87
+
96
88
  /**
97
89
  * An array map callback, returning an object with the element value and its
98
90
  * array index location as properties. This is used to emulate a proper stable
@@ -104,14 +96,13 @@ function createStatefulCollapseRadioGroup() {
104
96
  *
105
97
  * @return {{ element: Element, index: number }} Mapped object with element, index.
106
98
  */
107
-
108
-
109
99
  function mapElementToObjectTabbable(element, index) {
110
100
  return {
111
101
  element,
112
102
  index
113
103
  };
114
104
  }
105
+
115
106
  /**
116
107
  * An array map callback, returning an element of the given mapped object's
117
108
  * element value.
@@ -120,11 +111,10 @@ function mapElementToObjectTabbable(element, index) {
120
111
  *
121
112
  * @return {Element} Mapped object element.
122
113
  */
123
-
124
-
125
114
  function mapObjectTabbableToElement(object) {
126
115
  return object.element;
127
116
  }
117
+
128
118
  /**
129
119
  * A sort comparator function used in comparing two objects of mapped elements.
130
120
  *
@@ -135,18 +125,15 @@ function mapObjectTabbableToElement(object) {
135
125
  *
136
126
  * @return {number} Comparator result.
137
127
  */
138
-
139
-
140
128
  function compareObjectTabbables(a, b) {
141
129
  const aTabIndex = getTabIndex(a.element);
142
130
  const bTabIndex = getTabIndex(b.element);
143
-
144
131
  if (aTabIndex === bTabIndex) {
145
132
  return a.index - b.index;
146
133
  }
147
-
148
134
  return aTabIndex - bTabIndex;
149
135
  }
136
+
150
137
  /**
151
138
  * Givin focusable elements, filters out tabbable element.
152
139
  *
@@ -154,20 +141,18 @@ function compareObjectTabbables(a, b) {
154
141
  *
155
142
  * @return {Element[]} Tabbable elements.
156
143
  */
157
-
158
-
159
144
  function filterTabbable(focusables) {
160
145
  return focusables.filter(isTabbableIndex).map(mapElementToObjectTabbable).sort(compareObjectTabbables).map(mapObjectTabbableToElement).reduce(createStatefulCollapseRadioGroup(), []);
161
146
  }
147
+
162
148
  /**
163
149
  * @param {Element} context
164
150
  * @return {Element[]} Tabbable elements within the context.
165
151
  */
166
-
167
-
168
152
  function find(context) {
169
153
  return filterTabbable((0, _focusable.find)(context));
170
154
  }
155
+
171
156
  /**
172
157
  * Given a focusable element, find the preceding tabbable element.
173
158
  *
@@ -176,15 +161,15 @@ function find(context) {
176
161
  *
177
162
  * @return {Element|undefined} Preceding tabbable element.
178
163
  */
179
-
180
-
181
164
  function findPrevious(element) {
182
165
  return filterTabbable((0, _focusable.find)(element.ownerDocument.body)).reverse().find(focusable => {
183
- return (// eslint-disable-next-line no-bitwise
166
+ return (
167
+ // eslint-disable-next-line no-bitwise
184
168
  element.compareDocumentPosition(focusable) & element.DOCUMENT_POSITION_PRECEDING
185
169
  );
186
170
  });
187
171
  }
172
+
188
173
  /**
189
174
  * Given a focusable element, find the next tabbable element.
190
175
  *
@@ -193,11 +178,10 @@ function findPrevious(element) {
193
178
  *
194
179
  * @return {Element|undefined} Next tabbable element.
195
180
  */
196
-
197
-
198
181
  function findNext(element) {
199
182
  return filterTabbable((0, _focusable.find)(element.ownerDocument.body)).find(focusable => {
200
- return (// eslint-disable-next-line no-bitwise
183
+ return (
184
+ // eslint-disable-next-line no-bitwise
201
185
  element.compareDocumentPosition(focusable) & element.DOCUMENT_POSITION_FOLLOWING
202
186
  );
203
187
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/dom/src/tabbable.js"],"names":["getTabIndex","element","tabIndex","getAttribute","parseInt","isTabbableIndex","createStatefulCollapseRadioGroup","CHOSEN_RADIO_BY_NAME","collapseRadioGroup","result","nodeName","type","checked","name","concat","hasChosen","hasOwnProperty","isChosen","hadChosenElement","filter","e","mapElementToObjectTabbable","index","mapObjectTabbableToElement","object","compareObjectTabbables","a","b","aTabIndex","bTabIndex","filterTabbable","focusables","map","sort","reduce","find","context","findPrevious","ownerDocument","body","reverse","focusable","compareDocumentPosition","DOCUMENT_POSITION_PRECEDING","findNext","DOCUMENT_POSITION_FOLLOWING"],"mappings":"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","sourcesContent":["/**\n * Internal dependencies\n */\nimport { find as findFocusable } from './focusable';\n\n/**\n * Returns the tab index of the given element. In contrast with the tabIndex\n * property, this normalizes the default (0) to avoid browser inconsistencies,\n * operating under the assumption that this function is only ever called with a\n * focusable node.\n *\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=1190261\n *\n * @param {Element} element Element from which to retrieve.\n *\n * @return {number} Tab index of element (default 0).\n */\nfunction getTabIndex( element ) {\n\tconst tabIndex = element.getAttribute( 'tabindex' );\n\treturn tabIndex === null ? 0 : parseInt( tabIndex, 10 );\n}\n\n/**\n * Returns true if the specified element is tabbable, or false otherwise.\n *\n * @param {Element} element Element to test.\n *\n * @return {boolean} Whether element is tabbable.\n */\nexport function isTabbableIndex( element ) {\n\treturn getTabIndex( element ) !== -1;\n}\n\n/** @typedef {Element & { type?: string, checked?: boolean, name?: string }} MaybeHTMLInputElement */\n\n/**\n * Returns a stateful reducer function which constructs a filtered array of\n * tabbable elements, where at most one radio input is selected for a given\n * name, giving priority to checked input, falling back to the first\n * encountered.\n *\n * @return {(acc: MaybeHTMLInputElement[], el: MaybeHTMLInputElement) => MaybeHTMLInputElement[]} Radio group collapse reducer.\n */\nfunction createStatefulCollapseRadioGroup() {\n\t/** @type {Record<string, MaybeHTMLInputElement>} */\n\tconst CHOSEN_RADIO_BY_NAME = {};\n\n\treturn function collapseRadioGroup(\n\t\t/** @type {MaybeHTMLInputElement[]} */ result,\n\t\t/** @type {MaybeHTMLInputElement} */ element\n\t) {\n\t\tconst { nodeName, type, checked, name } = element;\n\n\t\t// For all non-radio tabbables, construct to array by concatenating.\n\t\tif ( nodeName !== 'INPUT' || type !== 'radio' || ! name ) {\n\t\t\treturn result.concat( element );\n\t\t}\n\n\t\tconst hasChosen = CHOSEN_RADIO_BY_NAME.hasOwnProperty( name );\n\n\t\t// Omit by skipping concatenation if the radio element is not chosen.\n\t\tconst isChosen = checked || ! hasChosen;\n\t\tif ( ! isChosen ) {\n\t\t\treturn result;\n\t\t}\n\n\t\t// At this point, if there had been a chosen element, the current\n\t\t// element is checked and should take priority. Retroactively remove\n\t\t// the element which had previously been considered the chosen one.\n\t\tif ( hasChosen ) {\n\t\t\tconst hadChosenElement = CHOSEN_RADIO_BY_NAME[ name ];\n\t\t\tresult = result.filter( ( e ) => e !== hadChosenElement );\n\t\t}\n\n\t\tCHOSEN_RADIO_BY_NAME[ name ] = element;\n\n\t\treturn result.concat( element );\n\t};\n}\n\n/**\n * An array map callback, returning an object with the element value and its\n * array index location as properties. This is used to emulate a proper stable\n * sort where equal tabIndex should be left in order of their occurrence in the\n * document.\n *\n * @param {Element} element Element.\n * @param {number} index Array index of element.\n *\n * @return {{ element: Element, index: number }} Mapped object with element, index.\n */\nfunction mapElementToObjectTabbable( element, index ) {\n\treturn { element, index };\n}\n\n/**\n * An array map callback, returning an element of the given mapped object's\n * element value.\n *\n * @param {{ element: Element }} object Mapped object with element.\n *\n * @return {Element} Mapped object element.\n */\nfunction mapObjectTabbableToElement( object ) {\n\treturn object.element;\n}\n\n/**\n * A sort comparator function used in comparing two objects of mapped elements.\n *\n * @see mapElementToObjectTabbable\n *\n * @param {{ element: Element, index: number }} a First object to compare.\n * @param {{ element: Element, index: number }} b Second object to compare.\n *\n * @return {number} Comparator result.\n */\nfunction compareObjectTabbables( a, b ) {\n\tconst aTabIndex = getTabIndex( a.element );\n\tconst bTabIndex = getTabIndex( b.element );\n\n\tif ( aTabIndex === bTabIndex ) {\n\t\treturn a.index - b.index;\n\t}\n\n\treturn aTabIndex - bTabIndex;\n}\n\n/**\n * Givin focusable elements, filters out tabbable element.\n *\n * @param {Element[]} focusables Focusable elements to filter.\n *\n * @return {Element[]} Tabbable elements.\n */\nfunction filterTabbable( focusables ) {\n\treturn focusables\n\t\t.filter( isTabbableIndex )\n\t\t.map( mapElementToObjectTabbable )\n\t\t.sort( compareObjectTabbables )\n\t\t.map( mapObjectTabbableToElement )\n\t\t.reduce( createStatefulCollapseRadioGroup(), [] );\n}\n\n/**\n * @param {Element} context\n * @return {Element[]} Tabbable elements within the context.\n */\nexport function find( context ) {\n\treturn filterTabbable( findFocusable( context ) );\n}\n\n/**\n * Given a focusable element, find the preceding tabbable element.\n *\n * @param {Element} element The focusable element before which to look. Defaults\n * to the active element.\n *\n * @return {Element|undefined} Preceding tabbable element.\n */\nexport function findPrevious( element ) {\n\treturn filterTabbable( findFocusable( element.ownerDocument.body ) )\n\t\t.reverse()\n\t\t.find( ( focusable ) => {\n\t\t\treturn (\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\telement.compareDocumentPosition( focusable ) &\n\t\t\t\telement.DOCUMENT_POSITION_PRECEDING\n\t\t\t);\n\t\t} );\n}\n\n/**\n * Given a focusable element, find the next tabbable element.\n *\n * @param {Element} element The focusable element after which to look. Defaults\n * to the active element.\n *\n * @return {Element|undefined} Next tabbable element.\n */\nexport function findNext( element ) {\n\treturn filterTabbable( findFocusable( element.ownerDocument.body ) ).find(\n\t\t( focusable ) => {\n\t\t\treturn (\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\telement.compareDocumentPosition( focusable ) &\n\t\t\t\telement.DOCUMENT_POSITION_FOLLOWING\n\t\t\t);\n\t\t}\n\t);\n}\n"]}
1
+ {"version":3,"names":["_focusable","require","getTabIndex","element","tabIndex","getAttribute","parseInt","isTabbableIndex","createStatefulCollapseRadioGroup","CHOSEN_RADIO_BY_NAME","collapseRadioGroup","result","nodeName","type","checked","name","concat","hasChosen","hasOwnProperty","isChosen","hadChosenElement","filter","e","mapElementToObjectTabbable","index","mapObjectTabbableToElement","object","compareObjectTabbables","a","b","aTabIndex","bTabIndex","filterTabbable","focusables","map","sort","reduce","find","context","findFocusable","findPrevious","ownerDocument","body","reverse","focusable","compareDocumentPosition","DOCUMENT_POSITION_PRECEDING","findNext","DOCUMENT_POSITION_FOLLOWING"],"sources":["@wordpress/dom/src/tabbable.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport { find as findFocusable } from './focusable';\n\n/**\n * Returns the tab index of the given element. In contrast with the tabIndex\n * property, this normalizes the default (0) to avoid browser inconsistencies,\n * operating under the assumption that this function is only ever called with a\n * focusable node.\n *\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=1190261\n *\n * @param {Element} element Element from which to retrieve.\n *\n * @return {number} Tab index of element (default 0).\n */\nfunction getTabIndex( element ) {\n\tconst tabIndex = element.getAttribute( 'tabindex' );\n\treturn tabIndex === null ? 0 : parseInt( tabIndex, 10 );\n}\n\n/**\n * Returns true if the specified element is tabbable, or false otherwise.\n *\n * @param {Element} element Element to test.\n *\n * @return {boolean} Whether element is tabbable.\n */\nexport function isTabbableIndex( element ) {\n\treturn getTabIndex( element ) !== -1;\n}\n\n/** @typedef {Element & { type?: string, checked?: boolean, name?: string }} MaybeHTMLInputElement */\n\n/**\n * Returns a stateful reducer function which constructs a filtered array of\n * tabbable elements, where at most one radio input is selected for a given\n * name, giving priority to checked input, falling back to the first\n * encountered.\n *\n * @return {(acc: MaybeHTMLInputElement[], el: MaybeHTMLInputElement) => MaybeHTMLInputElement[]} Radio group collapse reducer.\n */\nfunction createStatefulCollapseRadioGroup() {\n\t/** @type {Record<string, MaybeHTMLInputElement>} */\n\tconst CHOSEN_RADIO_BY_NAME = {};\n\n\treturn function collapseRadioGroup(\n\t\t/** @type {MaybeHTMLInputElement[]} */ result,\n\t\t/** @type {MaybeHTMLInputElement} */ element\n\t) {\n\t\tconst { nodeName, type, checked, name } = element;\n\n\t\t// For all non-radio tabbables, construct to array by concatenating.\n\t\tif ( nodeName !== 'INPUT' || type !== 'radio' || ! name ) {\n\t\t\treturn result.concat( element );\n\t\t}\n\n\t\tconst hasChosen = CHOSEN_RADIO_BY_NAME.hasOwnProperty( name );\n\n\t\t// Omit by skipping concatenation if the radio element is not chosen.\n\t\tconst isChosen = checked || ! hasChosen;\n\t\tif ( ! isChosen ) {\n\t\t\treturn result;\n\t\t}\n\n\t\t// At this point, if there had been a chosen element, the current\n\t\t// element is checked and should take priority. Retroactively remove\n\t\t// the element which had previously been considered the chosen one.\n\t\tif ( hasChosen ) {\n\t\t\tconst hadChosenElement = CHOSEN_RADIO_BY_NAME[ name ];\n\t\t\tresult = result.filter( ( e ) => e !== hadChosenElement );\n\t\t}\n\n\t\tCHOSEN_RADIO_BY_NAME[ name ] = element;\n\n\t\treturn result.concat( element );\n\t};\n}\n\n/**\n * An array map callback, returning an object with the element value and its\n * array index location as properties. This is used to emulate a proper stable\n * sort where equal tabIndex should be left in order of their occurrence in the\n * document.\n *\n * @param {Element} element Element.\n * @param {number} index Array index of element.\n *\n * @return {{ element: Element, index: number }} Mapped object with element, index.\n */\nfunction mapElementToObjectTabbable( element, index ) {\n\treturn { element, index };\n}\n\n/**\n * An array map callback, returning an element of the given mapped object's\n * element value.\n *\n * @param {{ element: Element }} object Mapped object with element.\n *\n * @return {Element} Mapped object element.\n */\nfunction mapObjectTabbableToElement( object ) {\n\treturn object.element;\n}\n\n/**\n * A sort comparator function used in comparing two objects of mapped elements.\n *\n * @see mapElementToObjectTabbable\n *\n * @param {{ element: Element, index: number }} a First object to compare.\n * @param {{ element: Element, index: number }} b Second object to compare.\n *\n * @return {number} Comparator result.\n */\nfunction compareObjectTabbables( a, b ) {\n\tconst aTabIndex = getTabIndex( a.element );\n\tconst bTabIndex = getTabIndex( b.element );\n\n\tif ( aTabIndex === bTabIndex ) {\n\t\treturn a.index - b.index;\n\t}\n\n\treturn aTabIndex - bTabIndex;\n}\n\n/**\n * Givin focusable elements, filters out tabbable element.\n *\n * @param {Element[]} focusables Focusable elements to filter.\n *\n * @return {Element[]} Tabbable elements.\n */\nfunction filterTabbable( focusables ) {\n\treturn focusables\n\t\t.filter( isTabbableIndex )\n\t\t.map( mapElementToObjectTabbable )\n\t\t.sort( compareObjectTabbables )\n\t\t.map( mapObjectTabbableToElement )\n\t\t.reduce( createStatefulCollapseRadioGroup(), [] );\n}\n\n/**\n * @param {Element} context\n * @return {Element[]} Tabbable elements within the context.\n */\nexport function find( context ) {\n\treturn filterTabbable( findFocusable( context ) );\n}\n\n/**\n * Given a focusable element, find the preceding tabbable element.\n *\n * @param {Element} element The focusable element before which to look. Defaults\n * to the active element.\n *\n * @return {Element|undefined} Preceding tabbable element.\n */\nexport function findPrevious( element ) {\n\treturn filterTabbable( findFocusable( element.ownerDocument.body ) )\n\t\t.reverse()\n\t\t.find( ( focusable ) => {\n\t\t\treturn (\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\telement.compareDocumentPosition( focusable ) &\n\t\t\t\telement.DOCUMENT_POSITION_PRECEDING\n\t\t\t);\n\t\t} );\n}\n\n/**\n * Given a focusable element, find the next tabbable element.\n *\n * @param {Element} element The focusable element after which to look. Defaults\n * to the active element.\n *\n * @return {Element|undefined} Next tabbable element.\n */\nexport function findNext( element ) {\n\treturn filterTabbable( findFocusable( element.ownerDocument.body ) ).find(\n\t\t( focusable ) => {\n\t\t\treturn (\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\telement.compareDocumentPosition( focusable ) &\n\t\t\t\telement.DOCUMENT_POSITION_FOLLOWING\n\t\t\t);\n\t\t}\n\t);\n}\n"],"mappings":"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"}
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.assertIsDefined = assertIsDefined;
7
-
8
7
  function assertIsDefined(val, name) {
9
8
  if (process.env.NODE_ENV !== 'production' && (val === undefined || val === null)) {
10
9
  throw new Error(`Expected '${name}' to be defined, but received ${val}`);
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/dom/src/utils/assert-is-defined.ts"],"names":["assertIsDefined","val","name","process","env","NODE_ENV","undefined","Error"],"mappings":";;;;;;;AAAO,SAASA,eAAT,CACNC,GADM,EAENC,IAFM,EAG4B;AAClC,MACCC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAAzB,KACEJ,GAAG,KAAKK,SAAR,IAAqBL,GAAG,KAAK,IAD/B,CADD,EAGE;AACD,UAAM,IAAIM,KAAJ,CACJ,aAAaL,IAAM,iCAAiCD,GAAK,EADrD,CAAN;AAGA;AACD","sourcesContent":["export function assertIsDefined< T >(\n\tval: T,\n\tname: string\n): asserts val is NonNullable< T > {\n\tif (\n\t\tprocess.env.NODE_ENV !== 'production' &&\n\t\t( val === undefined || val === null )\n\t) {\n\t\tthrow new Error(\n\t\t\t`Expected '${ name }' to be defined, but received ${ val }`\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"names":["assertIsDefined","val","name","process","env","NODE_ENV","undefined","Error"],"sources":["@wordpress/dom/src/utils/assert-is-defined.ts"],"sourcesContent":["export function assertIsDefined< T >(\n\tval: T,\n\tname: string\n): asserts val is NonNullable< T > {\n\tif (\n\t\tprocess.env.NODE_ENV !== 'production' &&\n\t\t( val === undefined || val === null )\n\t) {\n\t\tthrow new Error(\n\t\t\t`Expected '${ name }' to be defined, but received ${ val }`\n\t\t);\n\t}\n}\n"],"mappings":";;;;;;AAAO,SAASA,eAAeA,CAC9BC,GAAM,EACNC,IAAY,EACsB;EAClC,IACCC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,KACnCJ,GAAG,KAAKK,SAAS,IAAIL,GAAG,KAAK,IAAI,CAAE,EACpC;IACD,MAAM,IAAIM,KAAK,CACb,aAAaL,IAAM,iCAAiCD,GAAK,EAC3D,CAAC;EACF;AACD"}
@@ -9,7 +9,6 @@ export function getFilesFromDataTransfer(dataTransfer) {
9
9
  const files = Array.from(dataTransfer.files);
10
10
  Array.from(dataTransfer.items).forEach(item => {
11
11
  const file = item.getAsFile();
12
-
13
12
  if (file && !files.find(({
14
13
  name,
15
14
  type,
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/dom/src/data-transfer.js"],"names":["getFilesFromDataTransfer","dataTransfer","files","Array","from","items","forEach","item","file","getAsFile","find","name","type","size","push"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,wBAAT,CAAmCC,YAAnC,EAAkD;AACxD,QAAMC,KAAK,GAAGC,KAAK,CAACC,IAAN,CAAYH,YAAY,CAACC,KAAzB,CAAd;AAEAC,EAAAA,KAAK,CAACC,IAAN,CAAYH,YAAY,CAACI,KAAzB,EAAiCC,OAAjC,CAA4CC,IAAF,IAAY;AACrD,UAAMC,IAAI,GAAGD,IAAI,CAACE,SAAL,EAAb;;AAEA,QACCD,IAAI,IACJ,CAAEN,KAAK,CAACQ,IAAN,CACD,CAAE;AAAEC,MAAAA,IAAF;AAAQC,MAAAA,IAAR;AAAcC,MAAAA;AAAd,KAAF,KACCF,IAAI,KAAKH,IAAI,CAACG,IAAd,IACAC,IAAI,KAAKJ,IAAI,CAACI,IADd,IAEAC,IAAI,KAAKL,IAAI,CAACK,IAJd,CAFH,EAQE;AACDX,MAAAA,KAAK,CAACY,IAAN,CAAYN,IAAZ;AACA;AACD,GAdD;AAgBA,SAAON,KAAP;AACA","sourcesContent":["/**\n * Gets all files from a DataTransfer object.\n *\n * @param {DataTransfer} dataTransfer DataTransfer object to inspect.\n *\n * @return {File[]} An array containing all files.\n */\nexport function getFilesFromDataTransfer( dataTransfer ) {\n\tconst files = Array.from( dataTransfer.files );\n\n\tArray.from( dataTransfer.items ).forEach( ( item ) => {\n\t\tconst file = item.getAsFile();\n\n\t\tif (\n\t\t\tfile &&\n\t\t\t! files.find(\n\t\t\t\t( { name, type, size } ) =>\n\t\t\t\t\tname === file.name &&\n\t\t\t\t\ttype === file.type &&\n\t\t\t\t\tsize === file.size\n\t\t\t)\n\t\t) {\n\t\t\tfiles.push( file );\n\t\t}\n\t} );\n\n\treturn files;\n}\n"]}
1
+ {"version":3,"names":["getFilesFromDataTransfer","dataTransfer","files","Array","from","items","forEach","item","file","getAsFile","find","name","type","size","push"],"sources":["@wordpress/dom/src/data-transfer.js"],"sourcesContent":["/**\n * Gets all files from a DataTransfer object.\n *\n * @param {DataTransfer} dataTransfer DataTransfer object to inspect.\n *\n * @return {File[]} An array containing all files.\n */\nexport function getFilesFromDataTransfer( dataTransfer ) {\n\tconst files = Array.from( dataTransfer.files );\n\n\tArray.from( dataTransfer.items ).forEach( ( item ) => {\n\t\tconst file = item.getAsFile();\n\n\t\tif (\n\t\t\tfile &&\n\t\t\t! files.find(\n\t\t\t\t( { name, type, size } ) =>\n\t\t\t\t\tname === file.name &&\n\t\t\t\t\ttype === file.type &&\n\t\t\t\t\tsize === file.size\n\t\t\t)\n\t\t) {\n\t\t\tfiles.push( file );\n\t\t}\n\t} );\n\n\treturn files;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,wBAAwBA,CAAEC,YAAY,EAAG;EACxD,MAAMC,KAAK,GAAGC,KAAK,CAACC,IAAI,CAAEH,YAAY,CAACC,KAAM,CAAC;EAE9CC,KAAK,CAACC,IAAI,CAAEH,YAAY,CAACI,KAAM,CAAC,CAACC,OAAO,CAAIC,IAAI,IAAM;IACrD,MAAMC,IAAI,GAAGD,IAAI,CAACE,SAAS,CAAC,CAAC;IAE7B,IACCD,IAAI,IACJ,CAAEN,KAAK,CAACQ,IAAI,CACX,CAAE;MAAEC,IAAI;MAAEC,IAAI;MAAEC;IAAK,CAAC,KACrBF,IAAI,KAAKH,IAAI,CAACG,IAAI,IAClBC,IAAI,KAAKJ,IAAI,CAACI,IAAI,IAClBC,IAAI,KAAKL,IAAI,CAACK,IAChB,CAAC,EACA;MACDX,KAAK,CAACY,IAAI,CAAEN,IAAK,CAAC;IACnB;EACD,CAAE,CAAC;EAEH,OAAON,KAAK;AACb"}
@@ -14,23 +14,22 @@ export default function caretRangeFromPoint(doc, x, y) {
14
14
  if (doc.caretRangeFromPoint) {
15
15
  return doc.caretRangeFromPoint(x, y);
16
16
  }
17
-
18
17
  if (!doc.caretPositionFromPoint) {
19
18
  return null;
20
19
  }
20
+ const point = doc.caretPositionFromPoint(x, y);
21
21
 
22
- const point = doc.caretPositionFromPoint(x, y); // If x or y are negative, outside viewport, or there is no text entry node.
22
+ // If x or y are negative, outside viewport, or there is no text entry node.
23
23
  // https://developer.mozilla.org/en-US/docs/Web/API/Document/caretRangeFromPoint
24
-
25
24
  if (!point) {
26
25
  return null;
27
26
  }
28
-
29
27
  const range = doc.createRange();
30
28
  range.setStart(point.offsetNode, point.offset);
31
29
  range.collapse(true);
32
30
  return range;
33
31
  }
32
+
34
33
  /**
35
34
  * @typedef {{caretPositionFromPoint?: (x: number, y: number)=> CaretPosition | null} & Document } DocumentMaybeWithCaretPositionFromPoint
36
35
  * @typedef {{ readonly offset: number; readonly offsetNode: Node; getClientRect(): DOMRect | null; }} CaretPosition
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/dom/src/dom/caret-range-from-point.js"],"names":["caretRangeFromPoint","doc","x","y","caretPositionFromPoint","point","range","createRange","setStart","offsetNode","offset","collapse"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASA,mBAAT,CAA8BC,GAA9B,EAAmCC,CAAnC,EAAsCC,CAAtC,EAA0C;AACxD,MAAKF,GAAG,CAACD,mBAAT,EAA+B;AAC9B,WAAOC,GAAG,CAACD,mBAAJ,CAAyBE,CAAzB,EAA4BC,CAA5B,CAAP;AACA;;AAED,MAAK,CAAEF,GAAG,CAACG,sBAAX,EAAoC;AACnC,WAAO,IAAP;AACA;;AAED,QAAMC,KAAK,GAAGJ,GAAG,CAACG,sBAAJ,CAA4BF,CAA5B,EAA+BC,CAA/B,CAAd,CATwD,CAWxD;AACA;;AACA,MAAK,CAAEE,KAAP,EAAe;AACd,WAAO,IAAP;AACA;;AAED,QAAMC,KAAK,GAAGL,GAAG,CAACM,WAAJ,EAAd;AAEAD,EAAAA,KAAK,CAACE,QAAN,CAAgBH,KAAK,CAACI,UAAtB,EAAkCJ,KAAK,CAACK,MAAxC;AACAJ,EAAAA,KAAK,CAACK,QAAN,CAAgB,IAAhB;AAEA,SAAOL,KAAP;AACA;AAED;AACA;AACA;AACA","sourcesContent":["/**\n * Polyfill.\n * Get a collapsed range for a given point.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/caretRangeFromPoint\n *\n * @param {DocumentMaybeWithCaretPositionFromPoint} doc The document of the range.\n * @param {number} x Horizontal position within the current viewport.\n * @param {number} y Vertical position within the current viewport.\n *\n * @return {Range | null} The best range for the given point.\n */\nexport default function caretRangeFromPoint( doc, x, y ) {\n\tif ( doc.caretRangeFromPoint ) {\n\t\treturn doc.caretRangeFromPoint( x, y );\n\t}\n\n\tif ( ! doc.caretPositionFromPoint ) {\n\t\treturn null;\n\t}\n\n\tconst point = doc.caretPositionFromPoint( x, y );\n\n\t// If x or y are negative, outside viewport, or there is no text entry node.\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Document/caretRangeFromPoint\n\tif ( ! point ) {\n\t\treturn null;\n\t}\n\n\tconst range = doc.createRange();\n\n\trange.setStart( point.offsetNode, point.offset );\n\trange.collapse( true );\n\n\treturn range;\n}\n\n/**\n * @typedef {{caretPositionFromPoint?: (x: number, y: number)=> CaretPosition | null} & Document } DocumentMaybeWithCaretPositionFromPoint\n * @typedef {{ readonly offset: number; readonly offsetNode: Node; getClientRect(): DOMRect | null; }} CaretPosition\n */\n"]}
1
+ {"version":3,"names":["caretRangeFromPoint","doc","x","y","caretPositionFromPoint","point","range","createRange","setStart","offsetNode","offset","collapse"],"sources":["@wordpress/dom/src/dom/caret-range-from-point.js"],"sourcesContent":["/**\n * Polyfill.\n * Get a collapsed range for a given point.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/caretRangeFromPoint\n *\n * @param {DocumentMaybeWithCaretPositionFromPoint} doc The document of the range.\n * @param {number} x Horizontal position within the current viewport.\n * @param {number} y Vertical position within the current viewport.\n *\n * @return {Range | null} The best range for the given point.\n */\nexport default function caretRangeFromPoint( doc, x, y ) {\n\tif ( doc.caretRangeFromPoint ) {\n\t\treturn doc.caretRangeFromPoint( x, y );\n\t}\n\n\tif ( ! doc.caretPositionFromPoint ) {\n\t\treturn null;\n\t}\n\n\tconst point = doc.caretPositionFromPoint( x, y );\n\n\t// If x or y are negative, outside viewport, or there is no text entry node.\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Document/caretRangeFromPoint\n\tif ( ! point ) {\n\t\treturn null;\n\t}\n\n\tconst range = doc.createRange();\n\n\trange.setStart( point.offsetNode, point.offset );\n\trange.collapse( true );\n\n\treturn range;\n}\n\n/**\n * @typedef {{caretPositionFromPoint?: (x: number, y: number)=> CaretPosition | null} & Document } DocumentMaybeWithCaretPositionFromPoint\n * @typedef {{ readonly offset: number; readonly offsetNode: Node; getClientRect(): DOMRect | null; }} CaretPosition\n */\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASA,mBAAmBA,CAAEC,GAAG,EAAEC,CAAC,EAAEC,CAAC,EAAG;EACxD,IAAKF,GAAG,CAACD,mBAAmB,EAAG;IAC9B,OAAOC,GAAG,CAACD,mBAAmB,CAAEE,CAAC,EAAEC,CAAE,CAAC;EACvC;EAEA,IAAK,CAAEF,GAAG,CAACG,sBAAsB,EAAG;IACnC,OAAO,IAAI;EACZ;EAEA,MAAMC,KAAK,GAAGJ,GAAG,CAACG,sBAAsB,CAAEF,CAAC,EAAEC,CAAE,CAAC;;EAEhD;EACA;EACA,IAAK,CAAEE,KAAK,EAAG;IACd,OAAO,IAAI;EACZ;EAEA,MAAMC,KAAK,GAAGL,GAAG,CAACM,WAAW,CAAC,CAAC;EAE/BD,KAAK,CAACE,QAAQ,CAAEH,KAAK,CAACI,UAAU,EAAEJ,KAAK,CAACK,MAAO,CAAC;EAChDJ,KAAK,CAACK,QAAQ,CAAE,IAAK,CAAC;EAEtB,OAAOL,KAAK;AACb;;AAEA;AACA;AACA;AACA"}
@@ -7,10 +7,9 @@ import unwrap from './unwrap';
7
7
  import { isPhrasingContent } from '../phrasing-content';
8
8
  import insertAfter from './insert-after';
9
9
  import isElement from './is-element';
10
-
11
10
  const noop = () => {};
12
- /* eslint-disable jsdoc/valid-types */
13
11
 
12
+ /* eslint-disable jsdoc/valid-types */
14
13
  /**
15
14
  * @typedef SchemaItem
16
15
  * @property {string[]} [attributes] Attributes.
@@ -22,7 +21,6 @@ const noop = () => {};
22
21
  */
23
22
 
24
23
  /** @typedef {{ [tag: string]: SchemaItem }} Schema */
25
-
26
24
  /* eslint-enable jsdoc/valid-types */
27
25
 
28
26
  /**
@@ -34,15 +32,12 @@ const noop = () => {};
34
32
  * @param {Schema} schema An array of functions that can mutate with the provided node.
35
33
  * @param {boolean} inline Whether to clean for inline mode.
36
34
  */
37
-
38
-
39
35
  export default function cleanNodeList(nodeList, doc, schema, inline) {
40
- Array.from(nodeList).forEach((
41
- /** @type {Node & { nextElementSibling?: unknown }} */
42
- node) => {
43
- const tag = node.nodeName.toLowerCase(); // It's a valid child, if the tag exists in the schema without an isMatch
44
- // function, or with an isMatch function that matches the node.
36
+ Array.from(nodeList).forEach(( /** @type {Node & { nextElementSibling?: unknown }} */node) => {
37
+ const tag = node.nodeName.toLowerCase();
45
38
 
39
+ // It's a valid child, if the tag exists in the schema without an isMatch
40
+ // function, or with an isMatch function that matches the node.
46
41
  if (schema.hasOwnProperty(tag) && (!schema[tag].isMatch || schema[tag].isMatch?.(node))) {
47
42
  if (isElement(node)) {
48
43
  const {
@@ -51,14 +46,14 @@ export default function cleanNodeList(nodeList, doc, schema, inline) {
51
46
  children,
52
47
  require = [],
53
48
  allowEmpty
54
- } = schema[tag]; // If the node is empty and it's supposed to have children,
55
- // remove the node.
49
+ } = schema[tag];
56
50
 
51
+ // If the node is empty and it's supposed to have children,
52
+ // remove the node.
57
53
  if (children && !allowEmpty && isEmpty(node)) {
58
54
  remove(node);
59
55
  return;
60
56
  }
61
-
62
57
  if (node.hasAttributes()) {
63
58
  // Strip invalid attributes.
64
59
  Array.from(node.attributes).forEach(({
@@ -67,22 +62,18 @@ export default function cleanNodeList(nodeList, doc, schema, inline) {
67
62
  if (name !== 'class' && !attributes.includes(name)) {
68
63
  node.removeAttribute(name);
69
64
  }
70
- }); // Strip invalid classes.
65
+ });
66
+
67
+ // Strip invalid classes.
71
68
  // In jsdom-jscore, 'node.classList' can be undefined.
72
69
  // TODO: Explore patching this in jsdom-jscore.
73
-
74
70
  if (node.classList && node.classList.length) {
75
71
  const mattchers = classes.map(item => {
76
72
  if (typeof item === 'string') {
77
- return (
78
- /** @type {string} */
79
- className) => className === item;
73
+ return ( /** @type {string} */className) => className === item;
80
74
  } else if (item instanceof RegExp) {
81
- return (
82
- /** @type {string} */
83
- className) => item.test(className);
75
+ return ( /** @type {string} */className) => item.test(className);
84
76
  }
85
-
86
77
  return noop;
87
78
  });
88
79
  Array.from(node.classList).forEach(name => {
@@ -90,54 +81,52 @@ export default function cleanNodeList(nodeList, doc, schema, inline) {
90
81
  node.classList.remove(name);
91
82
  }
92
83
  });
93
-
94
84
  if (!node.classList.length) {
95
85
  node.removeAttribute('class');
96
86
  }
97
87
  }
98
88
  }
99
-
100
89
  if (node.hasChildNodes()) {
101
90
  // Do not filter any content.
102
91
  if (children === '*') {
103
92
  return;
104
- } // Continue if the node is supposed to have children.
105
-
93
+ }
106
94
 
95
+ // Continue if the node is supposed to have children.
107
96
  if (children) {
108
97
  // If a parent requires certain children, but it does
109
98
  // not have them, drop the parent and continue.
110
99
  if (require.length && !node.querySelector(require.join(','))) {
111
100
  cleanNodeList(node.childNodes, doc, schema, inline);
112
- unwrap(node); // If the node is at the top, phrasing content, and
101
+ unwrap(node);
102
+ // If the node is at the top, phrasing content, and
113
103
  // contains children that are block content, unwrap
114
104
  // the node because it is invalid.
115
105
  } else if (node.parentNode && node.parentNode.nodeName === 'BODY' && isPhrasingContent(node)) {
116
106
  cleanNodeList(node.childNodes, doc, schema, inline);
117
-
118
107
  if (Array.from(node.childNodes).some(child => !isPhrasingContent(child))) {
119
108
  unwrap(node);
120
109
  }
121
110
  } else {
122
111
  cleanNodeList(node.childNodes, doc, children, inline);
123
- } // Remove children if the node is not supposed to have any.
124
-
112
+ }
113
+ // Remove children if the node is not supposed to have any.
125
114
  } else {
126
115
  while (node.firstChild) {
127
116
  remove(node.firstChild);
128
117
  }
129
118
  }
130
119
  }
131
- } // Invalid child. Continue with schema at the same place and unwrap.
132
-
120
+ }
121
+ // Invalid child. Continue with schema at the same place and unwrap.
133
122
  } else {
134
- cleanNodeList(node.childNodes, doc, schema, inline); // For inline mode, insert a line break when unwrapping nodes that
135
- // are not phrasing content.
123
+ cleanNodeList(node.childNodes, doc, schema, inline);
136
124
 
125
+ // For inline mode, insert a line break when unwrapping nodes that
126
+ // are not phrasing content.
137
127
  if (inline && !isPhrasingContent(node) && node.nextElementSibling) {
138
128
  insertAfter(doc.createElement('br'), node);
139
129
  }
140
-
141
130
  unwrap(node);
142
131
  }
143
132
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/dom/src/dom/clean-node-list.js"],"names":["isEmpty","remove","unwrap","isPhrasingContent","insertAfter","isElement","noop","cleanNodeList","nodeList","doc","schema","inline","Array","from","forEach","node","tag","nodeName","toLowerCase","hasOwnProperty","isMatch","attributes","classes","children","require","allowEmpty","hasAttributes","name","includes","removeAttribute","classList","length","mattchers","map","item","className","RegExp","test","some","hasChildNodes","querySelector","join","childNodes","parentNode","child","firstChild","nextElementSibling","createElement"],"mappings":"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","sourcesContent":["/**\n * Internal dependencies\n */\nimport isEmpty from './is-empty';\nimport remove from './remove';\nimport unwrap from './unwrap';\nimport { isPhrasingContent } from '../phrasing-content';\nimport insertAfter from './insert-after';\nimport isElement from './is-element';\n\nconst noop = () => {};\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * @typedef SchemaItem\n * @property {string[]} [attributes] Attributes.\n * @property {(string | RegExp)[]} [classes] Classnames or RegExp to test against.\n * @property {'*' | { [tag: string]: SchemaItem }} [children] Child schemas.\n * @property {string[]} [require] Selectors to test required children against. Leave empty or undefined if there are no requirements.\n * @property {boolean} allowEmpty Whether to allow nodes without children.\n * @property {(node: Node) => boolean} [isMatch] Function to test whether a node is a match. If left undefined any node will be assumed to match.\n */\n\n/** @typedef {{ [tag: string]: SchemaItem }} Schema */\n/* eslint-enable jsdoc/valid-types */\n\n/**\n * Given a schema, unwraps or removes nodes, attributes and classes on a node\n * list.\n *\n * @param {NodeList} nodeList The nodeList to filter.\n * @param {Document} doc The document of the nodeList.\n * @param {Schema} schema An array of functions that can mutate with the provided node.\n * @param {boolean} inline Whether to clean for inline mode.\n */\nexport default function cleanNodeList( nodeList, doc, schema, inline ) {\n\tArray.from( nodeList ).forEach(\n\t\t( /** @type {Node & { nextElementSibling?: unknown }} */ node ) => {\n\t\t\tconst tag = node.nodeName.toLowerCase();\n\n\t\t\t// It's a valid child, if the tag exists in the schema without an isMatch\n\t\t\t// function, or with an isMatch function that matches the node.\n\t\t\tif (\n\t\t\t\tschema.hasOwnProperty( tag ) &&\n\t\t\t\t( ! schema[ tag ].isMatch || schema[ tag ].isMatch?.( node ) )\n\t\t\t) {\n\t\t\t\tif ( isElement( node ) ) {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tattributes = [],\n\t\t\t\t\t\tclasses = [],\n\t\t\t\t\t\tchildren,\n\t\t\t\t\t\trequire = [],\n\t\t\t\t\t\tallowEmpty,\n\t\t\t\t\t} = schema[ tag ];\n\n\t\t\t\t\t// If the node is empty and it's supposed to have children,\n\t\t\t\t\t// remove the node.\n\t\t\t\t\tif ( children && ! allowEmpty && isEmpty( node ) ) {\n\t\t\t\t\t\tremove( node );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( node.hasAttributes() ) {\n\t\t\t\t\t\t// Strip invalid attributes.\n\t\t\t\t\t\tArray.from( node.attributes ).forEach( ( { name } ) => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tname !== 'class' &&\n\t\t\t\t\t\t\t\t! attributes.includes( name )\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnode.removeAttribute( name );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t// Strip invalid classes.\n\t\t\t\t\t\t// In jsdom-jscore, 'node.classList' can be undefined.\n\t\t\t\t\t\t// TODO: Explore patching this in jsdom-jscore.\n\t\t\t\t\t\tif ( node.classList && node.classList.length ) {\n\t\t\t\t\t\t\tconst mattchers = classes.map( ( item ) => {\n\t\t\t\t\t\t\t\tif ( typeof item === 'string' ) {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t/** @type {string} */ className\n\t\t\t\t\t\t\t\t\t) => className === item;\n\t\t\t\t\t\t\t\t} else if ( item instanceof RegExp ) {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t/** @type {string} */ className\n\t\t\t\t\t\t\t\t\t) => item.test( className );\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn noop;\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\tArray.from( node.classList ).forEach( ( name ) => {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t! mattchers.some( ( isMatch ) =>\n\t\t\t\t\t\t\t\t\t\tisMatch( name )\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tnode.classList.remove( name );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\tif ( ! node.classList.length ) {\n\t\t\t\t\t\t\t\tnode.removeAttribute( 'class' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( node.hasChildNodes() ) {\n\t\t\t\t\t\t// Do not filter any content.\n\t\t\t\t\t\tif ( children === '*' ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Continue if the node is supposed to have children.\n\t\t\t\t\t\tif ( children ) {\n\t\t\t\t\t\t\t// If a parent requires certain children, but it does\n\t\t\t\t\t\t\t// not have them, drop the parent and continue.\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\trequire.length &&\n\t\t\t\t\t\t\t\t! node.querySelector( require.join( ',' ) )\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tcleanNodeList(\n\t\t\t\t\t\t\t\t\tnode.childNodes,\n\t\t\t\t\t\t\t\t\tdoc,\n\t\t\t\t\t\t\t\t\tschema,\n\t\t\t\t\t\t\t\t\tinline\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tunwrap( node );\n\t\t\t\t\t\t\t\t// If the node is at the top, phrasing content, and\n\t\t\t\t\t\t\t\t// contains children that are block content, unwrap\n\t\t\t\t\t\t\t\t// the node because it is invalid.\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tnode.parentNode &&\n\t\t\t\t\t\t\t\tnode.parentNode.nodeName === 'BODY' &&\n\t\t\t\t\t\t\t\tisPhrasingContent( node )\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tcleanNodeList(\n\t\t\t\t\t\t\t\t\tnode.childNodes,\n\t\t\t\t\t\t\t\t\tdoc,\n\t\t\t\t\t\t\t\t\tschema,\n\t\t\t\t\t\t\t\t\tinline\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tArray.from( node.childNodes ).some(\n\t\t\t\t\t\t\t\t\t\t( child ) =>\n\t\t\t\t\t\t\t\t\t\t\t! isPhrasingContent( child )\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tunwrap( node );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcleanNodeList(\n\t\t\t\t\t\t\t\t\tnode.childNodes,\n\t\t\t\t\t\t\t\t\tdoc,\n\t\t\t\t\t\t\t\t\tchildren,\n\t\t\t\t\t\t\t\t\tinline\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Remove children if the node is not supposed to have any.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twhile ( node.firstChild ) {\n\t\t\t\t\t\t\t\tremove( node.firstChild );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Invalid child. Continue with schema at the same place and unwrap.\n\t\t\t} else {\n\t\t\t\tcleanNodeList( node.childNodes, doc, schema, inline );\n\n\t\t\t\t// For inline mode, insert a line break when unwrapping nodes that\n\t\t\t\t// are not phrasing content.\n\t\t\t\tif (\n\t\t\t\t\tinline &&\n\t\t\t\t\t! isPhrasingContent( node ) &&\n\t\t\t\t\tnode.nextElementSibling\n\t\t\t\t) {\n\t\t\t\t\tinsertAfter( doc.createElement( 'br' ), node );\n\t\t\t\t}\n\n\t\t\t\tunwrap( node );\n\t\t\t}\n\t\t}\n\t);\n}\n"]}
1
+ {"version":3,"names":["isEmpty","remove","unwrap","isPhrasingContent","insertAfter","isElement","noop","cleanNodeList","nodeList","doc","schema","inline","Array","from","forEach","node","tag","nodeName","toLowerCase","hasOwnProperty","isMatch","attributes","classes","children","require","allowEmpty","hasAttributes","name","includes","removeAttribute","classList","length","mattchers","map","item","className","RegExp","test","some","hasChildNodes","querySelector","join","childNodes","parentNode","child","firstChild","nextElementSibling","createElement"],"sources":["@wordpress/dom/src/dom/clean-node-list.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport isEmpty from './is-empty';\nimport remove from './remove';\nimport unwrap from './unwrap';\nimport { isPhrasingContent } from '../phrasing-content';\nimport insertAfter from './insert-after';\nimport isElement from './is-element';\n\nconst noop = () => {};\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * @typedef SchemaItem\n * @property {string[]} [attributes] Attributes.\n * @property {(string | RegExp)[]} [classes] Classnames or RegExp to test against.\n * @property {'*' | { [tag: string]: SchemaItem }} [children] Child schemas.\n * @property {string[]} [require] Selectors to test required children against. Leave empty or undefined if there are no requirements.\n * @property {boolean} allowEmpty Whether to allow nodes without children.\n * @property {(node: Node) => boolean} [isMatch] Function to test whether a node is a match. If left undefined any node will be assumed to match.\n */\n\n/** @typedef {{ [tag: string]: SchemaItem }} Schema */\n/* eslint-enable jsdoc/valid-types */\n\n/**\n * Given a schema, unwraps or removes nodes, attributes and classes on a node\n * list.\n *\n * @param {NodeList} nodeList The nodeList to filter.\n * @param {Document} doc The document of the nodeList.\n * @param {Schema} schema An array of functions that can mutate with the provided node.\n * @param {boolean} inline Whether to clean for inline mode.\n */\nexport default function cleanNodeList( nodeList, doc, schema, inline ) {\n\tArray.from( nodeList ).forEach(\n\t\t( /** @type {Node & { nextElementSibling?: unknown }} */ node ) => {\n\t\t\tconst tag = node.nodeName.toLowerCase();\n\n\t\t\t// It's a valid child, if the tag exists in the schema without an isMatch\n\t\t\t// function, or with an isMatch function that matches the node.\n\t\t\tif (\n\t\t\t\tschema.hasOwnProperty( tag ) &&\n\t\t\t\t( ! schema[ tag ].isMatch || schema[ tag ].isMatch?.( node ) )\n\t\t\t) {\n\t\t\t\tif ( isElement( node ) ) {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tattributes = [],\n\t\t\t\t\t\tclasses = [],\n\t\t\t\t\t\tchildren,\n\t\t\t\t\t\trequire = [],\n\t\t\t\t\t\tallowEmpty,\n\t\t\t\t\t} = schema[ tag ];\n\n\t\t\t\t\t// If the node is empty and it's supposed to have children,\n\t\t\t\t\t// remove the node.\n\t\t\t\t\tif ( children && ! allowEmpty && isEmpty( node ) ) {\n\t\t\t\t\t\tremove( node );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( node.hasAttributes() ) {\n\t\t\t\t\t\t// Strip invalid attributes.\n\t\t\t\t\t\tArray.from( node.attributes ).forEach( ( { name } ) => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tname !== 'class' &&\n\t\t\t\t\t\t\t\t! attributes.includes( name )\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tnode.removeAttribute( name );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t// Strip invalid classes.\n\t\t\t\t\t\t// In jsdom-jscore, 'node.classList' can be undefined.\n\t\t\t\t\t\t// TODO: Explore patching this in jsdom-jscore.\n\t\t\t\t\t\tif ( node.classList && node.classList.length ) {\n\t\t\t\t\t\t\tconst mattchers = classes.map( ( item ) => {\n\t\t\t\t\t\t\t\tif ( typeof item === 'string' ) {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t/** @type {string} */ className\n\t\t\t\t\t\t\t\t\t) => className === item;\n\t\t\t\t\t\t\t\t} else if ( item instanceof RegExp ) {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t/** @type {string} */ className\n\t\t\t\t\t\t\t\t\t) => item.test( className );\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn noop;\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\tArray.from( node.classList ).forEach( ( name ) => {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t! mattchers.some( ( isMatch ) =>\n\t\t\t\t\t\t\t\t\t\tisMatch( name )\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tnode.classList.remove( name );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\tif ( ! node.classList.length ) {\n\t\t\t\t\t\t\t\tnode.removeAttribute( 'class' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( node.hasChildNodes() ) {\n\t\t\t\t\t\t// Do not filter any content.\n\t\t\t\t\t\tif ( children === '*' ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Continue if the node is supposed to have children.\n\t\t\t\t\t\tif ( children ) {\n\t\t\t\t\t\t\t// If a parent requires certain children, but it does\n\t\t\t\t\t\t\t// not have them, drop the parent and continue.\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\trequire.length &&\n\t\t\t\t\t\t\t\t! node.querySelector( require.join( ',' ) )\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tcleanNodeList(\n\t\t\t\t\t\t\t\t\tnode.childNodes,\n\t\t\t\t\t\t\t\t\tdoc,\n\t\t\t\t\t\t\t\t\tschema,\n\t\t\t\t\t\t\t\t\tinline\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tunwrap( node );\n\t\t\t\t\t\t\t\t// If the node is at the top, phrasing content, and\n\t\t\t\t\t\t\t\t// contains children that are block content, unwrap\n\t\t\t\t\t\t\t\t// the node because it is invalid.\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tnode.parentNode &&\n\t\t\t\t\t\t\t\tnode.parentNode.nodeName === 'BODY' &&\n\t\t\t\t\t\t\t\tisPhrasingContent( node )\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tcleanNodeList(\n\t\t\t\t\t\t\t\t\tnode.childNodes,\n\t\t\t\t\t\t\t\t\tdoc,\n\t\t\t\t\t\t\t\t\tschema,\n\t\t\t\t\t\t\t\t\tinline\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tArray.from( node.childNodes ).some(\n\t\t\t\t\t\t\t\t\t\t( child ) =>\n\t\t\t\t\t\t\t\t\t\t\t! isPhrasingContent( child )\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tunwrap( node );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcleanNodeList(\n\t\t\t\t\t\t\t\t\tnode.childNodes,\n\t\t\t\t\t\t\t\t\tdoc,\n\t\t\t\t\t\t\t\t\tchildren,\n\t\t\t\t\t\t\t\t\tinline\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Remove children if the node is not supposed to have any.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twhile ( node.firstChild ) {\n\t\t\t\t\t\t\t\tremove( node.firstChild );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Invalid child. Continue with schema at the same place and unwrap.\n\t\t\t} else {\n\t\t\t\tcleanNodeList( node.childNodes, doc, schema, inline );\n\n\t\t\t\t// For inline mode, insert a line break when unwrapping nodes that\n\t\t\t\t// are not phrasing content.\n\t\t\t\tif (\n\t\t\t\t\tinline &&\n\t\t\t\t\t! isPhrasingContent( node ) &&\n\t\t\t\t\tnode.nextElementSibling\n\t\t\t\t) {\n\t\t\t\t\tinsertAfter( doc.createElement( 'br' ), node );\n\t\t\t\t}\n\n\t\t\t\tunwrap( node );\n\t\t\t}\n\t\t}\n\t);\n}\n"],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import getRectangleFromRange from './get-rectangle-from-range';
5
5
  import { assertIsDefined } from '../utils/assert-is-defined';
6
+
6
7
  /**
7
8
  * Get the rectangle for the selection in a container.
8
9
  *
@@ -10,16 +11,13 @@ import { assertIsDefined } from '../utils/assert-is-defined';
10
11
  *
11
12
  * @return {DOMRect | null} The rectangle.
12
13
  */
13
-
14
14
  export default function computeCaretRect(win) {
15
15
  const selection = win.getSelection();
16
16
  assertIsDefined(selection, 'selection');
17
17
  const range = selection.rangeCount ? selection.getRangeAt(0) : null;
18
-
19
18
  if (!range) {
20
19
  return null;
21
20
  }
22
-
23
21
  return getRectangleFromRange(range);
24
22
  }
25
23
  //# sourceMappingURL=compute-caret-rect.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/dom/src/dom/compute-caret-rect.js"],"names":["getRectangleFromRange","assertIsDefined","computeCaretRect","win","selection","getSelection","range","rangeCount","getRangeAt"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,qBAAP,MAAkC,4BAAlC;AACA,SAASC,eAAT,QAAgC,4BAAhC;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASC,gBAAT,CAA2BC,GAA3B,EAAiC;AAC/C,QAAMC,SAAS,GAAGD,GAAG,CAACE,YAAJ,EAAlB;AACAJ,EAAAA,eAAe,CAAEG,SAAF,EAAa,WAAb,CAAf;AACA,QAAME,KAAK,GAAGF,SAAS,CAACG,UAAV,GAAuBH,SAAS,CAACI,UAAV,CAAsB,CAAtB,CAAvB,GAAmD,IAAjE;;AAEA,MAAK,CAAEF,KAAP,EAAe;AACd,WAAO,IAAP;AACA;;AAED,SAAON,qBAAqB,CAAEM,KAAF,CAA5B;AACA","sourcesContent":["/**\n * Internal dependencies\n */\nimport getRectangleFromRange from './get-rectangle-from-range';\nimport { assertIsDefined } from '../utils/assert-is-defined';\n\n/**\n * Get the rectangle for the selection in a container.\n *\n * @param {Window} win The window of the selection.\n *\n * @return {DOMRect | null} The rectangle.\n */\nexport default function computeCaretRect( win ) {\n\tconst selection = win.getSelection();\n\tassertIsDefined( selection, 'selection' );\n\tconst range = selection.rangeCount ? selection.getRangeAt( 0 ) : null;\n\n\tif ( ! range ) {\n\t\treturn null;\n\t}\n\n\treturn getRectangleFromRange( range );\n}\n"]}
1
+ {"version":3,"names":["getRectangleFromRange","assertIsDefined","computeCaretRect","win","selection","getSelection","range","rangeCount","getRangeAt"],"sources":["@wordpress/dom/src/dom/compute-caret-rect.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport getRectangleFromRange from './get-rectangle-from-range';\nimport { assertIsDefined } from '../utils/assert-is-defined';\n\n/**\n * Get the rectangle for the selection in a container.\n *\n * @param {Window} win The window of the selection.\n *\n * @return {DOMRect | null} The rectangle.\n */\nexport default function computeCaretRect( win ) {\n\tconst selection = win.getSelection();\n\tassertIsDefined( selection, 'selection' );\n\tconst range = selection.rangeCount ? selection.getRangeAt( 0 ) : null;\n\n\tif ( ! range ) {\n\t\treturn null;\n\t}\n\n\treturn getRectangleFromRange( range );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,qBAAqB,MAAM,4BAA4B;AAC9D,SAASC,eAAe,QAAQ,4BAA4B;;AAE5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,gBAAgBA,CAAEC,GAAG,EAAG;EAC/C,MAAMC,SAAS,GAAGD,GAAG,CAACE,YAAY,CAAC,CAAC;EACpCJ,eAAe,CAAEG,SAAS,EAAE,WAAY,CAAC;EACzC,MAAME,KAAK,GAAGF,SAAS,CAACG,UAAU,GAAGH,SAAS,CAACI,UAAU,CAAE,CAAE,CAAC,GAAG,IAAI;EAErE,IAAK,CAAEF,KAAK,EAAG;IACd,OAAO,IAAI;EACZ;EAEA,OAAON,qBAAqB,CAAEM,KAAM,CAAC;AACtC"}
@@ -4,6 +4,7 @@
4
4
  import isTextField from './is-text-field';
5
5
  import isHTMLInputElement from './is-html-input-element';
6
6
  import documentHasTextSelection from './document-has-text-selection';
7
+
7
8
  /**
8
9
  * Check whether the current document has a selection. This includes focus in
9
10
  * input fields, textareas, and general rich-text selection.
@@ -12,7 +13,6 @@ import documentHasTextSelection from './document-has-text-selection';
12
13
  *
13
14
  * @return {boolean} True if there is selection, false if not.
14
15
  */
15
-
16
16
  export default function documentHasSelection(doc) {
17
17
  return !!doc.activeElement && (isHTMLInputElement(doc.activeElement) || isTextField(doc.activeElement) || documentHasTextSelection(doc));
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/dom/src/dom/document-has-selection.js"],"names":["isTextField","isHTMLInputElement","documentHasTextSelection","documentHasSelection","doc","activeElement"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,WAAP,MAAwB,iBAAxB;AACA,OAAOC,kBAAP,MAA+B,yBAA/B;AACA,OAAOC,wBAAP,MAAqC,+BAArC;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASC,oBAAT,CAA+BC,GAA/B,EAAqC;AACnD,SACC,CAAC,CAAEA,GAAG,CAACC,aAAP,KACEJ,kBAAkB,CAAEG,GAAG,CAACC,aAAN,CAAlB,IACDL,WAAW,CAAEI,GAAG,CAACC,aAAN,CADV,IAEDH,wBAAwB,CAAEE,GAAF,CAHzB,CADD;AAMA","sourcesContent":["/**\n * Internal dependencies\n */\nimport isTextField from './is-text-field';\nimport isHTMLInputElement from './is-html-input-element';\nimport documentHasTextSelection from './document-has-text-selection';\n\n/**\n * Check whether the current document has a selection. This includes focus in\n * input fields, textareas, and general rich-text selection.\n *\n * @param {Document} doc The document to check.\n *\n * @return {boolean} True if there is selection, false if not.\n */\nexport default function documentHasSelection( doc ) {\n\treturn (\n\t\t!! doc.activeElement &&\n\t\t( isHTMLInputElement( doc.activeElement ) ||\n\t\t\tisTextField( doc.activeElement ) ||\n\t\t\tdocumentHasTextSelection( doc ) )\n\t);\n}\n"]}
1
+ {"version":3,"names":["isTextField","isHTMLInputElement","documentHasTextSelection","documentHasSelection","doc","activeElement"],"sources":["@wordpress/dom/src/dom/document-has-selection.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport isTextField from './is-text-field';\nimport isHTMLInputElement from './is-html-input-element';\nimport documentHasTextSelection from './document-has-text-selection';\n\n/**\n * Check whether the current document has a selection. This includes focus in\n * input fields, textareas, and general rich-text selection.\n *\n * @param {Document} doc The document to check.\n *\n * @return {boolean} True if there is selection, false if not.\n */\nexport default function documentHasSelection( doc ) {\n\treturn (\n\t\t!! doc.activeElement &&\n\t\t( isHTMLInputElement( doc.activeElement ) ||\n\t\t\tisTextField( doc.activeElement ) ||\n\t\t\tdocumentHasTextSelection( doc ) )\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,WAAW,MAAM,iBAAiB;AACzC,OAAOC,kBAAkB,MAAM,yBAAyB;AACxD,OAAOC,wBAAwB,MAAM,+BAA+B;;AAEpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,oBAAoBA,CAAEC,GAAG,EAAG;EACnD,OACC,CAAC,CAAEA,GAAG,CAACC,aAAa,KAClBJ,kBAAkB,CAAEG,GAAG,CAACC,aAAc,CAAC,IACxCL,WAAW,CAAEI,GAAG,CAACC,aAAc,CAAC,IAChCH,wBAAwB,CAAEE,GAAI,CAAC,CAAE;AAEpC"}