@wordpress/dom 4.57.0 → 5.1.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 (334) hide show
  1. package/README.md +23 -23
  2. package/build/data-transfer.cjs +20 -38
  3. package/build/data-transfer.cjs.map +1 -7
  4. package/build/dom/caret-range-from-point.cjs +31 -38
  5. package/build/dom/caret-range-from-point.cjs.map +1 -7
  6. package/build/dom/clean-node-list.cjs +88 -133
  7. package/build/dom/clean-node-list.cjs.map +1 -7
  8. package/build/dom/compute-caret-rect.cjs +36 -36
  9. package/build/dom/compute-caret-rect.cjs.map +1 -7
  10. package/build/dom/document-has-selection.cjs +36 -31
  11. package/build/dom/document-has-selection.cjs.map +1 -7
  12. package/build/dom/document-has-text-selection.cjs +24 -30
  13. package/build/dom/document-has-text-selection.cjs.map +1 -7
  14. package/build/dom/document-has-uncollapsed-selection.cjs +35 -30
  15. package/build/dom/document-has-uncollapsed-selection.cjs.map +1 -7
  16. package/build/dom/get-computed-style.cjs +14 -30
  17. package/build/dom/get-computed-style.cjs.map +1 -7
  18. package/build/dom/get-offset-parent.cjs +41 -48
  19. package/build/dom/get-offset-parent.cjs.map +1 -7
  20. package/build/dom/get-range-height.cjs +18 -31
  21. package/build/dom/get-range-height.cjs.map +1 -7
  22. package/build/dom/get-rectangle-from-range.cjs +82 -133
  23. package/build/dom/get-rectangle-from-range.cjs.map +1 -7
  24. package/build/dom/get-scroll-container.cjs +47 -55
  25. package/build/dom/get-scroll-container.cjs.map +1 -7
  26. package/build/dom/hidden-caret-range-from-point.cjs +49 -43
  27. package/build/dom/hidden-caret-range-from-point.cjs.map +1 -7
  28. package/build/dom/index.cjs +233 -110
  29. package/build/dom/input-field-has-uncollapsed-selection.cjs +49 -47
  30. package/build/dom/input-field-has-uncollapsed-selection.cjs.map +1 -7
  31. package/build/dom/insert-after.cjs +17 -27
  32. package/build/dom/insert-after.cjs.map +1 -7
  33. package/build/dom/is-edge.cjs +83 -98
  34. package/build/dom/is-edge.cjs.map +1 -7
  35. package/build/dom/is-element.cjs +12 -25
  36. package/build/dom/is-element.cjs.map +1 -7
  37. package/build/dom/is-empty.cjs +23 -40
  38. package/build/dom/is-empty.cjs.map +1 -7
  39. package/build/dom/is-entirely-selected.cjs +71 -71
  40. package/build/dom/is-entirely-selected.cjs.map +1 -7
  41. package/build/dom/is-form-element.cjs +34 -34
  42. package/build/dom/is-form-element.cjs.map +1 -7
  43. package/build/dom/is-horizontal-edge.cjs +32 -29
  44. package/build/dom/is-horizontal-edge.cjs.map +1 -7
  45. package/build/dom/is-html-input-element.cjs +12 -25
  46. package/build/dom/is-html-input-element.cjs.map +1 -7
  47. package/build/dom/is-input-or-text-area.cjs +12 -25
  48. package/build/dom/is-input-or-text-area.cjs.map +1 -7
  49. package/build/dom/is-number-input.cjs +37 -34
  50. package/build/dom/is-number-input.cjs.map +1 -7
  51. package/build/dom/is-rtl.cjs +31 -29
  52. package/build/dom/is-rtl.cjs.map +1 -7
  53. package/build/dom/is-selection-forward.cjs +26 -39
  54. package/build/dom/is-selection-forward.cjs.map +1 -7
  55. package/build/dom/is-text-field.cjs +46 -44
  56. package/build/dom/is-text-field.cjs.map +1 -7
  57. package/build/dom/is-vertical-edge.cjs +32 -29
  58. package/build/dom/is-vertical-edge.cjs.map +1 -7
  59. package/build/dom/place-caret-at-edge.cjs +76 -79
  60. package/build/dom/place-caret-at-edge.cjs.map +1 -7
  61. package/build/dom/place-caret-at-horizontal-edge.cjs +30 -29
  62. package/build/dom/place-caret-at-horizontal-edge.cjs.map +1 -7
  63. package/build/dom/place-caret-at-vertical-edge.cjs +31 -29
  64. package/build/dom/place-caret-at-vertical-edge.cjs.map +1 -7
  65. package/build/dom/remove-invalid-html.cjs +36 -32
  66. package/build/dom/remove-invalid-html.cjs.map +1 -7
  67. package/build/dom/remove.cjs +15 -27
  68. package/build/dom/remove.cjs.map +1 -7
  69. package/build/dom/replace-tag.cjs +21 -32
  70. package/build/dom/replace-tag.cjs.map +1 -7
  71. package/build/dom/replace.cjs +35 -33
  72. package/build/dom/replace.cjs.map +1 -7
  73. package/build/dom/safe-html.cjs +46 -47
  74. package/build/dom/safe-html.cjs.map +1 -7
  75. package/build/dom/scroll-if-no-range.cjs +24 -37
  76. package/build/dom/scroll-if-no-range.cjs.map +1 -7
  77. package/build/dom/strip-html.cjs +34 -32
  78. package/build/dom/strip-html.cjs.map +1 -7
  79. package/build/dom/types.cjs +5 -0
  80. package/build/dom/unwrap.cjs +17 -31
  81. package/build/dom/unwrap.cjs.map +1 -7
  82. package/build/dom/wrap.cjs +17 -28
  83. package/build/dom/wrap.cjs.map +1 -7
  84. package/build/focusable.cjs +99 -77
  85. package/build/focusable.cjs.map +1 -7
  86. package/build/index.cjs +58 -39
  87. package/build/index.cjs.map +1 -7
  88. package/build/phrasing-content.cjs +163 -159
  89. package/build/phrasing-content.cjs.map +1 -7
  90. package/build/tabbable.cjs +123 -78
  91. package/build/tabbable.cjs.map +1 -7
  92. package/build/types.cjs +5 -0
  93. package/build/utils/assert-is-defined.cjs +8 -33
  94. package/build/utils/assert-is-defined.cjs.map +1 -7
  95. package/build-module/data-transfer.mjs +17 -15
  96. package/build-module/data-transfer.mjs.map +1 -7
  97. package/build-module/dom/caret-range-from-point.mjs +28 -19
  98. package/build-module/dom/caret-range-from-point.mjs.map +1 -7
  99. package/build-module/dom/clean-node-list.mjs +60 -105
  100. package/build-module/dom/clean-node-list.mjs.map +1 -7
  101. package/build-module/dom/compute-caret-rect.mjs +16 -12
  102. package/build-module/dom/compute-caret-rect.mjs.map +1 -7
  103. package/build-module/dom/document-has-selection.mjs +13 -6
  104. package/build-module/dom/document-has-selection.mjs.map +1 -7
  105. package/build-module/dom/document-has-text-selection.mjs +20 -10
  106. package/build-module/dom/document-has-text-selection.mjs.map +1 -7
  107. package/build-module/dom/document-has-uncollapsed-selection.mjs +14 -6
  108. package/build-module/dom/document-has-uncollapsed-selection.mjs.map +1 -7
  109. package/build-module/dom/get-computed-style.mjs +10 -10
  110. package/build-module/dom/get-computed-style.mjs.map +1 -7
  111. package/build-module/dom/get-offset-parent.mjs +21 -25
  112. package/build-module/dom/get-offset-parent.mjs.map +1 -7
  113. package/build-module/dom/get-range-height.mjs +15 -12
  114. package/build-module/dom/get-range-height.mjs.map +1 -7
  115. package/build-module/dom/get-rectangle-from-range.mjs +78 -113
  116. package/build-module/dom/get-rectangle-from-range.mjs.map +1 -7
  117. package/build-module/dom/get-scroll-container.mjs +28 -32
  118. package/build-module/dom/get-scroll-container.mjs.map +1 -7
  119. package/build-module/dom/hidden-caret-range-from-point.mjs +28 -19
  120. package/build-module/dom/hidden-caret-range-from-point.mjs.map +1 -7
  121. package/build-module/dom/index.mjs +28 -58
  122. package/build-module/dom/input-field-has-uncollapsed-selection.mjs +28 -23
  123. package/build-module/dom/input-field-has-uncollapsed-selection.mjs.map +1 -7
  124. package/build-module/dom/insert-after.mjs +13 -7
  125. package/build-module/dom/insert-after.mjs.map +1 -7
  126. package/build-module/dom/is-edge.mjs +53 -69
  127. package/build-module/dom/is-edge.mjs.map +1 -7
  128. package/build-module/dom/is-element.mjs +9 -6
  129. package/build-module/dom/is-element.mjs.map +1 -7
  130. package/build-module/dom/is-empty.mjs +20 -21
  131. package/build-module/dom/is-empty.mjs.map +1 -7
  132. package/build-module/dom/is-entirely-selected.mjs +51 -47
  133. package/build-module/dom/is-entirely-selected.mjs.map +1 -7
  134. package/build-module/dom/is-form-element.mjs +15 -11
  135. package/build-module/dom/is-form-element.mjs.map +1 -7
  136. package/build-module/dom/is-horizontal-edge.mjs +13 -6
  137. package/build-module/dom/is-horizontal-edge.mjs.map +1 -7
  138. package/build-module/dom/is-html-input-element.mjs +9 -6
  139. package/build-module/dom/is-html-input-element.mjs.map +1 -7
  140. package/build-module/dom/is-input-or-text-area.mjs +9 -6
  141. package/build-module/dom/is-input-or-text-area.mjs.map +1 -7
  142. package/build-module/dom/is-number-input.mjs +16 -10
  143. package/build-module/dom/is-number-input.mjs.map +1 -7
  144. package/build-module/dom/is-rtl.mjs +12 -6
  145. package/build-module/dom/is-rtl.mjs.map +1 -7
  146. package/build-module/dom/is-selection-forward.mjs +22 -19
  147. package/build-module/dom/is-selection-forward.mjs.map +1 -7
  148. package/build-module/dom/is-text-field.mjs +27 -21
  149. package/build-module/dom/is-text-field.mjs.map +1 -7
  150. package/build-module/dom/is-vertical-edge.mjs +13 -6
  151. package/build-module/dom/is-vertical-edge.mjs.map +1 -7
  152. package/build-module/dom/place-caret-at-edge.mjs +51 -52
  153. package/build-module/dom/place-caret-at-edge.mjs.map +1 -7
  154. package/build-module/dom/place-caret-at-horizontal-edge.mjs +11 -6
  155. package/build-module/dom/place-caret-at-horizontal-edge.mjs.map +1 -7
  156. package/build-module/dom/place-caret-at-vertical-edge.mjs +12 -6
  157. package/build-module/dom/place-caret-at-vertical-edge.mjs.map +1 -7
  158. package/build-module/dom/remove-invalid-html.mjs +17 -9
  159. package/build-module/dom/remove-invalid-html.mjs.map +1 -7
  160. package/build-module/dom/remove.mjs +11 -7
  161. package/build-module/dom/remove.mjs.map +1 -7
  162. package/build-module/dom/replace-tag.mjs +17 -12
  163. package/build-module/dom/replace-tag.mjs.map +1 -7
  164. package/build-module/dom/replace.mjs +13 -8
  165. package/build-module/dom/replace.mjs.map +1 -7
  166. package/build-module/dom/safe-html.mjs +27 -24
  167. package/build-module/dom/safe-html.mjs.map +1 -7
  168. package/build-module/dom/scroll-if-no-range.mjs +21 -14
  169. package/build-module/dom/scroll-if-no-range.mjs.map +1 -7
  170. package/build-module/dom/strip-html.mjs +15 -9
  171. package/build-module/dom/strip-html.mjs.map +1 -7
  172. package/build-module/dom/types.mjs +0 -0
  173. package/build-module/dom/unwrap.mjs +13 -11
  174. package/build-module/dom/unwrap.mjs.map +1 -7
  175. package/build-module/dom/wrap.mjs +13 -8
  176. package/build-module/dom/wrap.mjs.map +1 -7
  177. package/build-module/focusable.mjs +96 -54
  178. package/build-module/focusable.mjs.map +1 -7
  179. package/build-module/index.mjs +11 -5
  180. package/build-module/index.mjs.map +1 -7
  181. package/build-module/phrasing-content.mjs +158 -134
  182. package/build-module/phrasing-content.mjs.map +1 -7
  183. package/build-module/tabbable.mjs +117 -52
  184. package/build-module/tabbable.mjs.map +1 -7
  185. package/build-module/types.mjs +0 -0
  186. package/build-module/utils/assert-is-defined.mjs +4 -9
  187. package/build-module/utils/assert-is-defined.mjs.map +1 -7
  188. package/build-types/data-transfer.d.ts +2 -2
  189. package/build-types/data-transfer.d.ts.map +1 -1
  190. package/build-types/dom/caret-range-from-point.d.ts +4 -4
  191. package/build-types/dom/caret-range-from-point.d.ts.map +1 -1
  192. package/build-types/dom/clean-node-list.d.ts +6 -46
  193. package/build-types/dom/clean-node-list.d.ts.map +1 -1
  194. package/build-types/dom/compute-caret-rect.d.ts +2 -2
  195. package/build-types/dom/compute-caret-rect.d.ts.map +1 -1
  196. package/build-types/dom/document-has-selection.d.ts +2 -2
  197. package/build-types/dom/document-has-selection.d.ts.map +1 -1
  198. package/build-types/dom/document-has-text-selection.d.ts +2 -2
  199. package/build-types/dom/document-has-text-selection.d.ts.map +1 -1
  200. package/build-types/dom/document-has-uncollapsed-selection.d.ts +2 -2
  201. package/build-types/dom/document-has-uncollapsed-selection.d.ts.map +1 -1
  202. package/build-types/dom/get-computed-style.d.ts +3 -3
  203. package/build-types/dom/get-computed-style.d.ts.map +1 -1
  204. package/build-types/dom/get-offset-parent.d.ts +2 -2
  205. package/build-types/dom/get-offset-parent.d.ts.map +1 -1
  206. package/build-types/dom/get-range-height.d.ts +2 -2
  207. package/build-types/dom/get-range-height.d.ts.map +1 -1
  208. package/build-types/dom/get-rectangle-from-range.d.ts +2 -2
  209. package/build-types/dom/get-rectangle-from-range.d.ts.map +1 -1
  210. package/build-types/dom/get-scroll-container.d.ts +5 -5
  211. package/build-types/dom/get-scroll-container.d.ts.map +1 -1
  212. package/build-types/dom/hidden-caret-range-from-point.d.ts +5 -5
  213. package/build-types/dom/hidden-caret-range-from-point.d.ts.map +1 -1
  214. package/build-types/dom/index.d.ts.map +1 -1
  215. package/build-types/dom/input-field-has-uncollapsed-selection.d.ts +2 -2
  216. package/build-types/dom/input-field-has-uncollapsed-selection.d.ts.map +1 -1
  217. package/build-types/dom/insert-after.d.ts +2 -3
  218. package/build-types/dom/insert-after.d.ts.map +1 -1
  219. package/build-types/dom/is-edge.d.ts +4 -4
  220. package/build-types/dom/is-edge.d.ts.map +1 -1
  221. package/build-types/dom/is-element.d.ts.map +1 -1
  222. package/build-types/dom/is-empty.d.ts +3 -3
  223. package/build-types/dom/is-empty.d.ts.map +1 -1
  224. package/build-types/dom/is-entirely-selected.d.ts +2 -2
  225. package/build-types/dom/is-entirely-selected.d.ts.map +1 -1
  226. package/build-types/dom/is-form-element.d.ts +3 -3
  227. package/build-types/dom/is-form-element.d.ts.map +1 -1
  228. package/build-types/dom/is-horizontal-edge.d.ts.map +1 -1
  229. package/build-types/dom/is-html-input-element.d.ts +1 -1
  230. package/build-types/dom/is-html-input-element.d.ts.map +1 -1
  231. package/build-types/dom/is-input-or-text-area.d.ts.map +1 -1
  232. package/build-types/dom/is-number-input.d.ts +2 -2
  233. package/build-types/dom/is-number-input.d.ts.map +1 -1
  234. package/build-types/dom/is-rtl.d.ts +2 -2
  235. package/build-types/dom/is-rtl.d.ts.map +1 -1
  236. package/build-types/dom/is-selection-forward.d.ts +2 -2
  237. package/build-types/dom/is-selection-forward.d.ts.map +1 -1
  238. package/build-types/dom/is-text-field.d.ts +2 -2
  239. package/build-types/dom/is-text-field.d.ts.map +1 -1
  240. package/build-types/dom/is-vertical-edge.d.ts.map +1 -1
  241. package/build-types/dom/place-caret-at-edge.d.ts +3 -3
  242. package/build-types/dom/place-caret-at-edge.d.ts.map +1 -1
  243. package/build-types/dom/place-caret-at-horizontal-edge.d.ts.map +1 -1
  244. package/build-types/dom/place-caret-at-vertical-edge.d.ts.map +1 -1
  245. package/build-types/dom/remove-invalid-html.d.ts +5 -4
  246. package/build-types/dom/remove-invalid-html.d.ts.map +1 -1
  247. package/build-types/dom/remove.d.ts +1 -2
  248. package/build-types/dom/remove.d.ts.map +1 -1
  249. package/build-types/dom/replace-tag.d.ts +3 -3
  250. package/build-types/dom/replace-tag.d.ts.map +1 -1
  251. package/build-types/dom/replace.d.ts +2 -3
  252. package/build-types/dom/replace.d.ts.map +1 -1
  253. package/build-types/dom/safe-html.d.ts +2 -2
  254. package/build-types/dom/safe-html.d.ts.map +1 -1
  255. package/build-types/dom/scroll-if-no-range.d.ts +5 -5
  256. package/build-types/dom/scroll-if-no-range.d.ts.map +1 -1
  257. package/build-types/dom/strip-html.d.ts +2 -2
  258. package/build-types/dom/strip-html.d.ts.map +1 -1
  259. package/build-types/dom/types.d.ts +32 -0
  260. package/build-types/dom/types.d.ts.map +1 -0
  261. package/build-types/dom/unwrap.d.ts +1 -3
  262. package/build-types/dom/unwrap.d.ts.map +1 -1
  263. package/build-types/dom/wrap.d.ts +2 -2
  264. package/build-types/dom/wrap.d.ts.map +1 -1
  265. package/build-types/focusable.d.ts +11 -30
  266. package/build-types/focusable.d.ts.map +1 -1
  267. package/build-types/index.d.ts +17 -0
  268. package/build-types/index.d.ts.map +1 -1
  269. package/build-types/phrasing-content.d.ts +9 -24
  270. package/build-types/phrasing-content.d.ts.map +1 -1
  271. package/build-types/tabbable.d.ts +10 -15
  272. package/build-types/tabbable.d.ts.map +1 -1
  273. package/build-types/types.d.ts +29 -0
  274. package/build-types/types.d.ts.map +1 -0
  275. package/package.json +6 -7
  276. package/src/{data-transfer.js → data-transfer.ts} +3 -3
  277. package/src/dom/{caret-range-from-point.js → caret-range-from-point.ts} +9 -5
  278. package/src/dom/{clean-node-list.js → clean-node-list.ts} +16 -24
  279. package/src/dom/{compute-caret-rect.js → compute-caret-rect.ts} +3 -3
  280. package/src/dom/{document-has-selection.js → document-has-selection.ts} +3 -3
  281. package/src/dom/{document-has-text-selection.js → document-has-text-selection.ts} +3 -3
  282. package/src/dom/{document-has-uncollapsed-selection.js → document-has-uncollapsed-selection.ts} +5 -3
  283. package/src/dom/{get-computed-style.js → get-computed-style.ts} +5 -3
  284. package/src/dom/{get-offset-parent.js → get-offset-parent.ts} +9 -14
  285. package/src/dom/{get-range-height.js → get-range-height.ts} +3 -3
  286. package/src/dom/{get-rectangle-from-range.js → get-rectangle-from-range.ts} +6 -12
  287. package/src/dom/{get-scroll-container.js → get-scroll-container.ts} +9 -9
  288. package/src/dom/{hidden-caret-range-from-point.js → hidden-caret-range-from-point.ts} +11 -6
  289. package/src/dom/{input-field-has-uncollapsed-selection.js → input-field-has-uncollapsed-selection.ts} +7 -5
  290. package/src/dom/{insert-after.js → insert-after.ts} +6 -4
  291. package/src/dom/{is-edge.js → is-edge.ts} +44 -48
  292. package/src/dom/{is-element.js → is-element.ts} +3 -1
  293. package/src/dom/{is-empty.js → is-empty.ts} +5 -7
  294. package/src/dom/{is-entirely-selected.js → is-entirely-selected.ts} +14 -11
  295. package/src/dom/{is-form-element.js → is-form-element.ts} +5 -3
  296. package/src/dom/{is-horizontal-edge.js → is-horizontal-edge.ts} +4 -1
  297. package/src/dom/{is-html-input-element.js → is-html-input-element.ts} +3 -1
  298. package/src/dom/{is-input-or-text-area.js → is-input-or-text-area.ts} +3 -1
  299. package/src/dom/{is-number-input.js → is-number-input.ts} +3 -3
  300. package/src/dom/{is-rtl.js → is-rtl.ts} +3 -3
  301. package/src/dom/{is-selection-forward.js → is-selection-forward.ts} +3 -3
  302. package/src/dom/{is-text-field.js → is-text-field.ts} +4 -4
  303. package/src/dom/{is-vertical-edge.js → is-vertical-edge.ts} +4 -1
  304. package/src/dom/{place-caret-at-edge.js → place-caret-at-edge.ts} +17 -9
  305. package/src/dom/{place-caret-at-horizontal-edge.js → place-caret-at-horizontal-edge.ts} +4 -1
  306. package/src/dom/{place-caret-at-vertical-edge.js → place-caret-at-vertical-edge.ts} +5 -1
  307. package/src/dom/{remove-invalid-html.js → remove-invalid-html.ts} +9 -4
  308. package/src/dom/{remove.js → remove.ts} +2 -3
  309. package/src/dom/{replace-tag.js → replace-tag.ts} +4 -4
  310. package/src/dom/{replace.js → replace.ts} +6 -4
  311. package/src/dom/{safe-html.js → safe-html.ts} +3 -3
  312. package/src/dom/{scroll-if-no-range.js → scroll-if-no-range.ts} +9 -5
  313. package/src/dom/{strip-html.js → strip-html.ts} +3 -3
  314. package/src/dom/test/{get-rectangle-from-range.browser.test.js → get-rectangle-from-range.browser.test.ts} +25 -25
  315. package/src/dom/types.ts +28 -0
  316. package/src/dom/{unwrap.js → unwrap.ts} +2 -4
  317. package/src/dom/{wrap.js → wrap.ts} +3 -3
  318. package/src/{focusable.js → focusable.ts} +34 -32
  319. package/src/index.ts +33 -0
  320. package/src/{phrasing-content.js → phrasing-content.ts} +15 -30
  321. package/src/{tabbable.js → tabbable.ts} +48 -39
  322. package/src/test/{dom.jsdom.test.js → dom.jsdom.test.ts} +30 -6
  323. package/src/test/{focusable.browser.test.js → focusable.browser.test.ts} +14 -13
  324. package/src/test/{tabbable.browser.test.js → tabbable.browser.test.ts} +3 -2
  325. package/src/types.ts +32 -0
  326. package/CHANGELOG.md +0 -317
  327. package/build/dom/index.cjs.map +0 -7
  328. package/build-module/dom/index.mjs.map +0 -7
  329. package/src/index.js +0 -12
  330. /package/src/dom/{index.js → index.ts} +0 -0
  331. /package/src/dom/test/{safe-html.jsdom.test.js → safe-html.jsdom.test.ts} +0 -0
  332. /package/src/dom/test/{strip-html.jsdom.test.js → strip-html.jsdom.test.ts} +0 -0
  333. /package/src/test/{focusable-area.jsdom.test.js → focusable-area.jsdom.test.ts} +0 -0
  334. /package/src/test/{utils.js → utils.ts} +0 -0
@@ -1,4 +1,5 @@
1
1
  import getComputedStyle from './get-computed-style';
2
+ import isElement from './is-element';
2
3
 
3
4
  /**
4
5
  * Returns the closest positioned element, or null under any of the conditions
@@ -7,18 +8,16 @@ import getComputedStyle from './get-computed-style';
7
8
  *
8
9
  * @see https://drafts.csswg.org/cssom-view/#dom-htmlelement-offsetparent
9
10
  *
10
- * @param {Node} node Node from which to find offset parent.
11
+ * @param node Node from which to find offset parent.
11
12
  *
12
- * @return {Node | null} Offset parent.
13
+ * @return Offset parent.
13
14
  */
14
- export default function getOffsetParent( node ) {
15
+ export default function getOffsetParent( node: Node ): Node | null {
15
16
  // Cannot retrieve computed style or offset parent only anything other than
16
17
  // an element node, so find the closest element node.
17
- let closestElement;
18
- while ( ( closestElement = /** @type {Node} */ ( node.parentNode ) ) ) {
19
- if ( closestElement.nodeType === closestElement.ELEMENT_NODE ) {
20
- break;
21
- }
18
+ let closestElement = node.parentNode;
19
+ while ( closestElement && ! isElement( closestElement ) ) {
20
+ closestElement = closestElement.parentNode;
22
21
  }
23
22
 
24
23
  if ( ! closestElement ) {
@@ -27,14 +26,10 @@ export default function getOffsetParent( node ) {
27
26
 
28
27
  // If the closest element is already positioned, return it, as offsetParent
29
28
  // does not otherwise consider the node itself.
30
- if (
31
- getComputedStyle( /** @type {Element} */ ( closestElement ) )
32
- .position !== 'static'
33
- ) {
29
+ if ( getComputedStyle( closestElement ).position !== 'static' ) {
34
30
  return closestElement;
35
31
  }
36
32
 
37
33
  // offsetParent is undocumented/draft.
38
- return /** @type {Node & { offsetParent: Node }} */ ( closestElement )
39
- .offsetParent;
34
+ return ( closestElement as HTMLElement ).offsetParent;
40
35
  }
@@ -2,10 +2,10 @@
2
2
  * Gets the height of the range without ignoring zero width rectangles, which
3
3
  * some browsers ignore when creating a union.
4
4
  *
5
- * @param {Range} range The range to check.
6
- * @return {number | undefined} Height of the range or undefined if the range has no client rectangles.
5
+ * @param range The range to check.
6
+ * @return Height of the range or undefined if the range has no client rectangles.
7
7
  */
8
- export default function getRangeHeight( range ) {
8
+ export default function getRangeHeight( range: Range ): number | undefined {
9
9
  const rects = Array.from( range.getClientRects() );
10
10
 
11
11
  if ( ! rects.length ) {
@@ -5,11 +5,11 @@ import { assertIsDefined } from '../utils/assert-is-defined';
5
5
  * can be found. Use instead of `Range.getBoundingClientRect()`, which is often
6
6
  * broken, especially for collapsed ranges.
7
7
  *
8
- * @param {Range} range The range.
8
+ * @param range The range.
9
9
  *
10
- * @return {DOMRect?} The rectangle.
10
+ * @return The rectangle.
11
11
  */
12
- export default function getRectangleFromRange( range ) {
12
+ export default function getRectangleFromRange( range: Range ): DOMRect | null {
13
13
  // For uncollapsed ranges, get the rectangle that bounds the contents of the
14
14
  // range; this a rectangle enclosing the union of the bounding rectangles
15
15
  // for all the elements in the range.
@@ -97,10 +97,7 @@ export default function getRectangleFromRange( range ) {
97
97
  let beforeRange;
98
98
  if ( before && before.nodeType === before.TEXT_NODE ) {
99
99
  beforeRange = ownerDocument.createRange();
100
- beforeRange.setStart(
101
- before,
102
- /** @type {Text} */ ( before ).length
103
- );
100
+ beforeRange.setStart( before, ( before as Text ).length );
104
101
  beforeRange.collapse( true );
105
102
  }
106
103
  let afterRange;
@@ -149,13 +146,10 @@ export default function getRectangleFromRange( range ) {
149
146
  rects.length === 1 &&
150
147
  startContainer.nodeType === startContainer.TEXT_NODE &&
151
148
  range.startOffset > 0 &&
152
- range.startOffset < /** @type {Text} */ ( startContainer ).length
149
+ range.startOffset < ( startContainer as Text ).length
153
150
  ) {
154
151
  assertIsDefined( ownerDocument, 'ownerDocument' );
155
- const measure = (
156
- /** @type {number} */ start,
157
- /** @type {number} */ end
158
- ) => {
152
+ const measure = ( start: number, end: number ) => {
159
153
  const charRange = ownerDocument.createRange();
160
154
  charRange.setStart( startContainer, start );
161
155
  charRange.setEnd( startContainer, end );
@@ -4,12 +4,15 @@ import getComputedStyle from './get-computed-style';
4
4
  * Given a DOM node, finds the closest scrollable container node or the node
5
5
  * itself, if scrollable.
6
6
  *
7
- * @param {Element | null} node Node from which to start.
8
- * @param {?string} direction Direction of scrollable container to search for ('vertical', 'horizontal', 'all').
9
- * Defaults to 'vertical'.
10
- * @return {Element | undefined} Scrollable container node, if found.
7
+ * @param node Node from which to start.
8
+ * @param direction Direction of scrollable container to search for ('vertical', 'horizontal', 'all').
9
+ * Defaults to 'vertical'.
10
+ * @return Scrollable container node, if found.
11
11
  */
12
- export default function getScrollContainer( node, direction = 'vertical' ) {
12
+ export default function getScrollContainer(
13
+ node: Element | null,
14
+ direction: 'vertical' | 'horizontal' | 'all' = 'vertical'
15
+ ): Element | undefined {
13
16
  if ( ! node ) {
14
17
  return undefined;
15
18
  }
@@ -43,8 +46,5 @@ export default function getScrollContainer( node, direction = 'vertical' ) {
43
46
  }
44
47
 
45
48
  // Continue traversing.
46
- return getScrollContainer(
47
- /** @type {Element} */ ( node.parentNode ),
48
- direction
49
- );
49
+ return getScrollContainer( node.parentNode as Element, direction );
50
50
  }
@@ -6,14 +6,19 @@ import getComputedStyle from './get-computed-style';
6
6
  * Gives the container a temporary high z-index (above any UI).
7
7
  * This is preferred over getting the UI nodes and set styles there.
8
8
  *
9
- * @param {Document} doc The document of the range.
10
- * @param {number} x Horizontal position within the current viewport.
11
- * @param {number} y Vertical position within the current viewport.
12
- * @param {HTMLElement} container Container in which the range is expected to be found.
9
+ * @param doc The document of the range.
10
+ * @param x Horizontal position within the current viewport.
11
+ * @param y Vertical position within the current viewport.
12
+ * @param container Container in which the range is expected to be found.
13
13
  *
14
- * @return {?Range} The best range for the given point.
14
+ * @return The best range for the given point.
15
15
  */
16
- export default function hiddenCaretRangeFromPoint( doc, x, y, container ) {
16
+ export default function hiddenCaretRangeFromPoint(
17
+ doc: Document,
18
+ x: number,
19
+ y: number,
20
+ container: HTMLElement
21
+ ): Range | null {
17
22
  const originalZIndex = container.style.zIndex;
18
23
  const originalPosition = container.style.position;
19
24
  const originalBorderRadius = container.style.borderRadius;
@@ -14,11 +14,13 @@ import isHTMLInputElement from './is-html-input-element';
14
14
  *
15
15
  * See: https://html.spec.whatwg.org/multipage/input.html#do-not-apply
16
16
  *
17
- * @param {Element} element The HTML element.
17
+ * @param element The HTML element.
18
18
  *
19
- * @return {boolean} Whether the input/textarea element has some "selection".
19
+ * @return Whether the input/textarea element has some "selection".
20
20
  */
21
- export default function inputFieldHasUncollapsedSelection( element ) {
21
+ export default function inputFieldHasUncollapsedSelection(
22
+ element: Element
23
+ ): boolean {
22
24
  if ( ! isHTMLInputElement( element ) && ! isTextField( element ) ) {
23
25
  return false;
24
26
  }
@@ -27,8 +29,8 @@ export default function inputFieldHasUncollapsedSelection( element ) {
27
29
  // `selectionEnd` on non-text <input> elements, so a try/catch construct is
28
30
  // necessary.
29
31
  try {
30
- const { selectionStart, selectionEnd } =
31
- /** @type {HTMLInputElement | HTMLTextAreaElement} */ ( element );
32
+ const { selectionStart, selectionEnd } = element as
33
+ HTMLInputElement | HTMLTextAreaElement;
32
34
  return (
33
35
  // `null` means the input type doesn't implement selection, thus we
34
36
  // cannot determine whether the selection is collapsed, so we
@@ -4,11 +4,13 @@ import { assertIsDefined } from '../utils/assert-is-defined';
4
4
  * Given two DOM nodes, inserts the former in the DOM as the next sibling of
5
5
  * the latter.
6
6
  *
7
- * @param {Node} newNode Node to be inserted.
8
- * @param {Node} referenceNode Node after which to perform the insertion.
9
- * @return {void}
7
+ * @param newNode Node to be inserted.
8
+ * @param referenceNode Node after which to perform the insertion.
10
9
  */
11
- export default function insertAfter( newNode, referenceNode ) {
10
+ export default function insertAfter(
11
+ newNode: Node,
12
+ referenceNode: Node
13
+ ): void {
12
14
  assertIsDefined( referenceNode.parentNode, 'referenceNode.parentNode' );
13
15
  referenceNode.parentNode.insertBefore( newNode, referenceNode.nextSibling );
14
16
  }
@@ -5,20 +5,23 @@ import isSelectionForward from './is-selection-forward';
5
5
  import hiddenCaretRangeFromPoint from './hidden-caret-range-from-point';
6
6
  import { assertIsDefined } from '../utils/assert-is-defined';
7
7
  import isInputOrTextArea from './is-input-or-text-area';
8
- import { scrollIfNoRange } from './scroll-if-no-range';
9
8
 
10
9
  /**
11
10
  * Check whether the selection is at the edge of the container. Checks for
12
11
  * horizontal position by default. Set `onlyVertical` to true to check only
13
12
  * vertically.
14
13
  *
15
- * @param {HTMLElement} container Focusable element.
16
- * @param {boolean} isReverse Set to true to check left, false to check right.
17
- * @param {boolean} [onlyVertical=false] Set to true to check only vertical position.
14
+ * @param container Focusable element.
15
+ * @param isReverse Set to true to check left, false to check right.
16
+ * @param onlyVertical Set to true to check only vertical position.
18
17
  *
19
- * @return {boolean} True if at the edge, false if not.
18
+ * @return True if at the edge, false if not.
20
19
  */
21
- export default function isEdge( container, isReverse, onlyVertical = false ) {
20
+ export default function isEdge(
21
+ container: HTMLElement,
22
+ isReverse: boolean,
23
+ onlyVertical: boolean = false
24
+ ): boolean {
22
25
  if (
23
26
  isInputOrTextArea( container ) &&
24
27
  typeof container.selectionStart === 'number'
@@ -78,53 +81,48 @@ export default function isEdge( container, isReverse, onlyVertical = false ) {
78
81
  return false;
79
82
  }
80
83
 
84
+ // A line above the selection (or below, when going down) means it is not
85
+ // at the vertical edge. Unlike hit-testing a point, a range measures
86
+ // lines outside the viewport too.
87
+ const contentRange = ownerDocument.createRange();
88
+ contentRange.selectNodeContents( container );
89
+ const hasLineBeyond = Array.from( contentRange.getClientRects() ).some(
90
+ ( rect ) =>
91
+ rect.height > 0 &&
92
+ ( isReverse
93
+ ? rect.bottom <= rangeRect.top + 1
94
+ : rect.top >= rangeRect.bottom - 1 )
95
+ );
96
+
97
+ if ( hasLineBeyond ) {
98
+ return false;
99
+ }
100
+
101
+ if ( onlyVertical ) {
102
+ return true;
103
+ }
104
+
81
105
  // In the case of RTL scripts, the horizontal edge is at the opposite side.
82
106
  const isReverseDir = isRTL( container ) ? ! isReverse : isReverse;
83
107
  const containerRect = container.getBoundingClientRect();
84
108
 
85
- // To check if a selection is at the edge, we insert a test selection at the
86
- // edge of the container and check if the selections have the same vertical
87
- // or horizontal position. If they do, the selection is at the edge.
88
- // This method proves to be better than a DOM-based calculation for the
89
- // horizontal edge, since it ignores empty textnodes and a trailing line
90
- // break element. In other words, we need to check visual positioning, not
91
- // DOM positioning.
92
- // It also proves better than using the computed style for the vertical
93
- // edge, because we cannot know the padding and line height reliably in
94
- // pixels. `getComputedStyle` may return a value with different units.
109
+ // The selection is on the edge line. To check if it is at the horizontal
110
+ // edge of that line, we hit-test a point at the container's edge on that
111
+ // line and check if the caret there has the same position. This proves
112
+ // better than a DOM-based calculation, since it ignores empty text nodes
113
+ // and a trailing line break element. The line is within the viewport when
114
+ // the selection is; otherwise the browser handles the key.
95
115
  const x = isReverseDir ? containerRect.left + 1 : containerRect.right - 1;
96
- const y = isReverse ? containerRect.top + 1 : containerRect.bottom - 1;
97
-
98
- // The test point can only be hit-tested when it is within the viewport
99
- // (`caretRangeFromPoint` returns nothing for a point outside it, upon
100
- // which `scrollIfNoRange` scrolls the container's edge into view to
101
- // measure, e.g. on every arrow press within a container taller than the
102
- // viewport). When the edge is outside the viewport and the selection is
103
- // within it, they are at least a viewport boundary apart along that
104
- // axis, so the selection cannot be at the edge. Check each axis
105
- // separately: the vertical check must not be short-circuited by a
106
- // horizontally overflowing container, and vice versa.
107
- const isFarFromVerticalEdge =
108
- ( y < 0 || y > defaultView.innerHeight ) &&
109
- rangeRect.top >= 0 &&
110
- rangeRect.bottom <= defaultView.innerHeight;
111
- const isFarFromHorizontalEdge =
112
- ( x < 0 || x > defaultView.innerWidth ) &&
113
- rangeRect.left >= 0 &&
114
- rangeRect.right <= defaultView.innerWidth;
115
-
116
- if (
117
- isFarFromVerticalEdge ||
118
- ( ! onlyVertical && isFarFromHorizontalEdge )
119
- ) {
120
- return false;
121
- }
116
+ const y = isReverse ? rangeRect.top + 1 : rangeRect.bottom - 1;
122
117
 
123
- const testRange = scrollIfNoRange( container, isReverse, () =>
124
- hiddenCaretRangeFromPoint( ownerDocument, x, y, container )
118
+ const testRange = hiddenCaretRangeFromPoint(
119
+ ownerDocument,
120
+ x,
121
+ y,
122
+ container
125
123
  );
126
124
 
127
- if ( ! testRange ) {
125
+ if ( ! testRange || ! container.contains( testRange.startContainer ) ) {
128
126
  return false;
129
127
  }
130
128
 
@@ -144,7 +142,5 @@ export default function isEdge( container, isReverse, onlyVertical = false ) {
144
142
  const hasVerticalDiff = Math.abs( verticalDiff ) <= 1;
145
143
  const hasHorizontalDiff = Math.abs( horizontalDiff ) <= 1;
146
144
 
147
- return onlyVertical
148
- ? hasVerticalDiff
149
- : hasVerticalDiff && hasHorizontalDiff;
145
+ return hasVerticalDiff && hasHorizontalDiff;
150
146
  }
@@ -2,6 +2,8 @@
2
2
  * @param {Node | null | undefined} node
3
3
  * @return {node is Element} True if node is an Element node
4
4
  */
5
- export default function isElement( node ) {
5
+ export default function isElement(
6
+ node: Node | null | undefined
7
+ ): node is Element {
6
8
  return !! node && node.nodeType === node.ELEMENT_NODE;
7
9
  }
@@ -2,26 +2,24 @@
2
2
  * Recursively checks if an element is empty. An element is not empty if it
3
3
  * contains text or contains elements with attributes such as images.
4
4
  *
5
- * @param {Element} element The element to check.
5
+ * @param element The element to check.
6
6
  *
7
- * @return {boolean} Whether or not the element is empty.
7
+ * @return Whether or not the element is empty.
8
8
  */
9
- export default function isEmpty( element ) {
9
+ export default function isEmpty( element: Node ): boolean {
10
10
  switch ( element.nodeType ) {
11
11
  case element.TEXT_NODE:
12
12
  // We cannot use \s since it includes special spaces which we want
13
13
  // to preserve.
14
14
  return /^[ \f\n\r\t\v\u00a0]*$/.test( element.nodeValue || '' );
15
15
  case element.ELEMENT_NODE:
16
- if ( element.hasAttributes() ) {
16
+ if ( ( element as Element ).hasAttributes() ) {
17
17
  return false;
18
18
  } else if ( ! element.hasChildNodes() ) {
19
19
  return true;
20
20
  }
21
21
 
22
- return /** @type {Element[]} */ (
23
- Array.from( element.childNodes )
24
- ).every( isEmpty );
22
+ return Array.from( element.childNodes ).every( isEmpty );
25
23
  default:
26
24
  return true;
27
25
  }
@@ -11,11 +11,11 @@ const ZWNBSP = '\ufeff';
11
11
  * Check whether the contents of the element have been entirely selected.
12
12
  * Returns true if there is no possibility of selection.
13
13
  *
14
- * @param {HTMLElement} element The element to check.
14
+ * @param element The element to check.
15
15
  *
16
- * @return {boolean} True if entirely selected, false if not.
16
+ * @return True if entirely selected, false if not.
17
17
  */
18
- export default function isEntirelySelected( element ) {
18
+ export default function isEntirelySelected( element: HTMLElement ): boolean {
19
19
  if ( isInputOrTextArea( element ) ) {
20
20
  return (
21
21
  element.selectionStart === 0 &&
@@ -61,7 +61,7 @@ export default function isEntirelySelected( element ) {
61
61
  assertIsDefined( lastChild, 'lastChild' );
62
62
  const endContainerContentLength =
63
63
  endContainer.nodeType === endContainer.TEXT_NODE
64
- ? /** @type {Text} */ ( endContainer ).data.length
64
+ ? ( endContainer as Text ).data.length
65
65
  : endContainer.childNodes.length;
66
66
 
67
67
  return (
@@ -76,15 +76,18 @@ export default function isEntirelySelected( element ) {
76
76
  * Check whether the contents of the element have been entirely selected.
77
77
  * Returns true if there is no possibility of selection.
78
78
  *
79
- * @param {HTMLElement|Node} query The element to check.
80
- * @param {HTMLElement} container The container that we suspect "query" may be a first or last child of.
81
- * @param {"firstChild"|"lastChild"} propName "firstChild" or "lastChild"
79
+ * @param query The element to check.
80
+ * @param container The container that we suspect "query" may be a first or last child of.
81
+ * @param propName "firstChild" or "lastChild"
82
82
  *
83
- * @return {boolean} True if query is a deep first/last child of container, false otherwise.
83
+ * @return True if query is a deep first/last child of container, false otherwise.
84
84
  */
85
- function isDeepChild( query, container, propName ) {
86
- /** @type {HTMLElement | ChildNode | null} */
87
- let candidate = container;
85
+ function isDeepChild(
86
+ query: HTMLElement | Node,
87
+ container: HTMLElement,
88
+ propName: 'firstChild' | 'lastChild'
89
+ ): boolean {
90
+ let candidate: HTMLElement | ChildNode | null = container;
88
91
  do {
89
92
  if ( query === candidate ) {
90
93
  return true;
@@ -4,11 +4,13 @@ import isInputOrTextArea from './is-input-or-text-area';
4
4
  *
5
5
  * Detects if element is a form element.
6
6
  *
7
- * @param {Element} element The element to check.
7
+ * @param element The element to check.
8
8
  *
9
- * @return {boolean} True if form element and false otherwise.
9
+ * @return True if form element and false otherwise.
10
10
  */
11
- export default function isFormElement( element ) {
11
+ export default function isFormElement(
12
+ element: Element | null | undefined
13
+ ): boolean {
12
14
  if ( ! element ) {
13
15
  return false;
14
16
  }
@@ -8,6 +8,9 @@ import isEdge from './is-edge';
8
8
  *
9
9
  * @return {boolean} True if at the horizontal edge, false if not.
10
10
  */
11
- export default function isHorizontalEdge( container, isReverse ) {
11
+ export default function isHorizontalEdge(
12
+ container: HTMLElement,
13
+ isReverse: boolean
14
+ ): boolean {
12
15
  return isEdge( container, isReverse );
13
16
  }
@@ -2,6 +2,8 @@
2
2
  * @param {Node} node
3
3
  * @return {node is HTMLInputElement} Whether the node is an HTMLInputElement.
4
4
  */
5
- export default function isHTMLInputElement( node ) {
5
+ export default function isHTMLInputElement(
6
+ node: Node | null | undefined
7
+ ): node is HTMLInputElement {
6
8
  return node?.nodeName === 'INPUT';
7
9
  }
@@ -2,6 +2,8 @@
2
2
  * @param {Element} element
3
3
  * @return {element is HTMLInputElement | HTMLTextAreaElement} Whether the element is an input or textarea
4
4
  */
5
- export default function isInputOrTextArea( element ) {
5
+ export default function isInputOrTextArea(
6
+ element: Element
7
+ ): element is HTMLInputElement | HTMLTextAreaElement {
6
8
  return element.tagName === 'INPUT' || element.tagName === 'TEXTAREA';
7
9
  }
@@ -4,11 +4,11 @@ import isHTMLInputElement from './is-html-input-element';
4
4
  /**
5
5
  * Check whether the given element is an input field of type number.
6
6
  *
7
- * @param {Node} node The HTML node.
7
+ * @param node The HTML node.
8
8
  *
9
- * @return {node is HTMLInputElement} True if the node is number input.
9
+ * @return True if the node is number input.
10
10
  */
11
- export default function isNumberInput( node ) {
11
+ export default function isNumberInput( node: Node ): node is HTMLInputElement {
12
12
  deprecated( 'wp.dom.isNumberInput', {
13
13
  since: '6.1',
14
14
  version: '6.5',
@@ -3,10 +3,10 @@ import getComputedStyle from './get-computed-style';
3
3
  /**
4
4
  * Whether the element's text direction is right-to-left.
5
5
  *
6
- * @param {Element} element The element to check.
6
+ * @param element The element to check.
7
7
  *
8
- * @return {boolean} True if rtl, false if ltr.
8
+ * @return True if rtl, false if ltr.
9
9
  */
10
- export default function isRTL( element ) {
10
+ export default function isRTL( element: Element ): boolean {
11
11
  return getComputedStyle( element ).direction === 'rtl';
12
12
  }
@@ -6,11 +6,11 @@ import { assertIsDefined } from '../utils/assert-is-defined';
6
6
  *
7
7
  * @see https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition
8
8
  *
9
- * @param {Selection} selection Selection object to check.
9
+ * @param selection Selection object to check.
10
10
  *
11
- * @return {boolean} Whether the selection is forward.
11
+ * @return Whether the selection is forward.
12
12
  */
13
- export default function isSelectionForward( selection ) {
13
+ export default function isSelectionForward( selection: Selection ): boolean {
14
14
  const { anchorNode, focusNode, anchorOffset, focusOffset } = selection;
15
15
 
16
16
  assertIsDefined( anchorNode, 'anchorNode' );
@@ -6,10 +6,10 @@ import isHTMLInputElement from './is-html-input-element';
6
6
  *
7
7
  * See: https://html.spec.whatwg.org/#textFieldSelection
8
8
  *
9
- * @param {Node} node The HTML element.
10
- * @return {node is HTMLElement} True if the element is an text field, false if not.
9
+ * @param node The HTML element.
10
+ * @return True if the element is an text field, false if not.
11
11
  */
12
- export default function isTextField( node ) {
12
+ export default function isTextField( node: Node ): node is HTMLElement {
13
13
  const nonTextInputs = [
14
14
  'button',
15
15
  'checkbox',
@@ -29,6 +29,6 @@ export default function isTextField( node ) {
29
29
  node.type &&
30
30
  ! nonTextInputs.includes( node.type ) ) ||
31
31
  node.nodeName === 'TEXTAREA' ||
32
- /** @type {HTMLElement} */ ( node ).contentEditable === 'true'
32
+ ( node as HTMLElement ).contentEditable === 'true'
33
33
  );
34
34
  }
@@ -8,6 +8,9 @@ import isEdge from './is-edge';
8
8
  *
9
9
  * @return {boolean} True if at the vertical edge, false if not.
10
10
  */
11
- export default function isVerticalEdge( container, isReverse ) {
11
+ export default function isVerticalEdge(
12
+ container: HTMLElement,
13
+ isReverse: boolean
14
+ ): boolean {
12
15
  return isEdge( container, isReverse, true );
13
16
  }
@@ -7,13 +7,17 @@ import { scrollIfNoRange } from './scroll-if-no-range';
7
7
  /**
8
8
  * Gets the range to place.
9
9
  *
10
- * @param {HTMLElement} container Focusable element.
11
- * @param {boolean} isReverse True for end, false for start.
12
- * @param {number|undefined} x X coordinate to vertically position.
10
+ * @param container Focusable element.
11
+ * @param isReverse True for end, false for start.
12
+ * @param x X coordinate to vertically position.
13
13
  *
14
- * @return {Range|null} The range to place.
14
+ * @return The range to place.
15
15
  */
16
- function getRange( container, isReverse, x ) {
16
+ function getRange(
17
+ container: HTMLElement,
18
+ isReverse: boolean,
19
+ x: number | undefined
20
+ ): Range | null {
17
21
  const { ownerDocument } = container;
18
22
  // In the case of RTL scripts, the horizontal edge is at the opposite side.
19
23
  const isReverseDir = isRTL( container ) ? ! isReverse : isReverse;
@@ -36,11 +40,15 @@ function getRange( container, isReverse, x ) {
36
40
  /**
37
41
  * Places the caret at start or end of a given element.
38
42
  *
39
- * @param {HTMLElement} container Focusable element.
40
- * @param {boolean} isReverse True for end, false for start.
41
- * @param {number|undefined} x X coordinate to vertically position.
43
+ * @param container Focusable element.
44
+ * @param isReverse True for end, false for start.
45
+ * @param x X coordinate to vertically position.
42
46
  */
43
- export default function placeCaretAtEdge( container, isReverse, x ) {
47
+ export default function placeCaretAtEdge(
48
+ container: HTMLElement,
49
+ isReverse: boolean,
50
+ x: number | undefined
51
+ ) {
44
52
  if ( ! container ) {
45
53
  return;
46
54
  }
@@ -6,6 +6,9 @@ import placeCaretAtEdge from './place-caret-at-edge';
6
6
  * @param {HTMLElement} container Focusable element.
7
7
  * @param {boolean} isReverse True for end, false for start.
8
8
  */
9
- export default function placeCaretAtHorizontalEdge( container, isReverse ) {
9
+ export default function placeCaretAtHorizontalEdge(
10
+ container: HTMLElement,
11
+ isReverse: boolean
12
+ ) {
10
13
  return placeCaretAtEdge( container, isReverse, undefined );
11
14
  }
@@ -7,6 +7,10 @@ import placeCaretAtEdge from './place-caret-at-edge';
7
7
  * @param {boolean} isReverse True for bottom, false for top.
8
8
  * @param {DOMRect} [rect] The rectangle to position the caret with.
9
9
  */
10
- export default function placeCaretAtVerticalEdge( container, isReverse, rect ) {
10
+ export default function placeCaretAtVerticalEdge(
11
+ container: HTMLElement,
12
+ isReverse: boolean,
13
+ rect?: DOMRect
14
+ ) {
11
15
  return placeCaretAtEdge( container, isReverse, rect?.left );
12
16
  }