@wordpress/block-editor 8.2.0 → 8.2.1-next.a55ed9455a.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 (475) hide show
  1. package/README.md +6 -2
  2. package/build/autocompleters/link.js +78 -0
  3. package/build/autocompleters/link.js.map +1 -0
  4. package/build/components/autocomplete/index.js +3 -1
  5. package/build/components/autocomplete/index.js.map +1 -1
  6. package/build/components/block-actions/index.js +1 -1
  7. package/build/components/block-actions/index.js.map +1 -1
  8. package/build/components/block-breadcrumb/index.js +4 -2
  9. package/build/components/block-breadcrumb/index.js.map +1 -1
  10. package/build/components/block-compare/index.js +2 -2
  11. package/build/components/block-compare/index.js.map +1 -1
  12. package/build/components/block-controls/index.js +1 -1
  13. package/build/components/block-controls/index.js.map +1 -1
  14. package/build/components/block-draggable/index.js +1 -1
  15. package/build/components/block-draggable/index.js.map +1 -1
  16. package/build/components/block-edit/edit.js +1 -1
  17. package/build/components/block-edit/edit.js.map +1 -1
  18. package/build/components/block-list/block-html.js +1 -1
  19. package/build/components/block-list/block-html.js.map +1 -1
  20. package/build/components/block-list/block-invalid-warning.js +1 -1
  21. package/build/components/block-list/block-invalid-warning.js.map +1 -1
  22. package/build/components/block-list/block-list-item.native.js +4 -4
  23. package/build/components/block-list/block-list-item.native.js.map +1 -1
  24. package/build/components/block-list/block-selection-button.native.js +4 -3
  25. package/build/components/block-list/block-selection-button.native.js.map +1 -1
  26. package/build/components/block-list/block.js +1 -1
  27. package/build/components/block-list/block.js.map +1 -1
  28. package/build/components/block-list/block.native.js +5 -5
  29. package/build/components/block-list/block.native.js.map +1 -1
  30. package/build/components/block-list/index.native.js +5 -5
  31. package/build/components/block-list/index.native.js.map +1 -1
  32. package/build/components/block-list/use-block-props/use-block-class-names.js +1 -1
  33. package/build/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  34. package/build/components/block-media-update-progress/index.native.js +4 -4
  35. package/build/components/block-media-update-progress/index.native.js.map +1 -1
  36. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +3 -3
  37. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  38. package/build/components/block-mobile-toolbar/index.native.js +1 -1
  39. package/build/components/block-mobile-toolbar/index.native.js.map +1 -1
  40. package/build/components/block-mover/mover-description.js +4 -4
  41. package/build/components/block-mover/mover-description.js.map +1 -1
  42. package/build/components/block-mover/mover-description.native.js +5 -5
  43. package/build/components/block-mover/mover-description.native.js.map +1 -1
  44. package/build/components/block-settings-menu/block-settings-dropdown.js +7 -12
  45. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  46. package/build/components/block-styles/preview.native.js +1 -1
  47. package/build/components/block-styles/preview.native.js.map +1 -1
  48. package/build/components/block-switcher/index.js +2 -1
  49. package/build/components/block-switcher/index.js.map +1 -1
  50. package/build/components/block-switcher/use-transformed-patterns.js +0 -1
  51. package/build/components/block-switcher/use-transformed-patterns.js.map +1 -1
  52. package/build/components/block-title/index.js +7 -62
  53. package/build/components/block-title/index.js.map +1 -1
  54. package/build/components/block-title/use-block-display-title.js +94 -0
  55. package/build/components/block-title/use-block-display-title.js.map +1 -0
  56. package/build/components/block-toolbar/utils.js +9 -1
  57. package/build/components/block-toolbar/utils.js.map +1 -1
  58. package/build/components/block-tools/block-popover.js +1 -1
  59. package/build/components/block-tools/block-popover.js.map +1 -1
  60. package/build/components/block-tools/block-selection-button.js +2 -1
  61. package/build/components/block-tools/block-selection-button.js.map +1 -1
  62. package/build/components/block-types-list/index.native.js +1 -1
  63. package/build/components/block-types-list/index.native.js.map +1 -1
  64. package/build/components/border-radius-control/index.js +2 -2
  65. package/build/components/border-radius-control/index.js.map +1 -1
  66. package/build/components/border-radius-control/utils.js +10 -6
  67. package/build/components/border-radius-control/utils.js.map +1 -1
  68. package/build/components/contrast-checker/index.js +3 -3
  69. package/build/components/contrast-checker/index.js.map +1 -1
  70. package/build/components/convert-to-group-buttons/index.js +1 -1
  71. package/build/components/convert-to-group-buttons/index.js.map +1 -1
  72. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js +1 -3
  73. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  74. package/build/components/copy-handler/index.js +3 -3
  75. package/build/components/copy-handler/index.js.map +1 -1
  76. package/build/components/font-sizes/with-font-sizes.js +3 -3
  77. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  78. package/build/components/index.native.js +29 -1
  79. package/build/components/index.native.js.map +1 -1
  80. package/build/components/inserter/block-patterns-tab.js +1 -1
  81. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  82. package/build/components/inserter/block-types-tab.js +1 -1
  83. package/build/components/inserter/block-types-tab.js.map +1 -1
  84. package/build/components/inserter/hooks/use-block-type-impressions.native.js +2 -2
  85. package/build/components/inserter/hooks/use-block-type-impressions.native.js.map +1 -1
  86. package/build/components/inserter/index.js +3 -3
  87. package/build/components/inserter/index.js.map +1 -1
  88. package/build/components/inserter/index.native.js +7 -7
  89. package/build/components/inserter/index.native.js.map +1 -1
  90. package/build/components/inserter/menu.js.map +1 -1
  91. package/build/components/inserter/menu.native.js +3 -3
  92. package/build/components/inserter/menu.native.js.map +1 -1
  93. package/build/components/inserter/quick-inserter.js +1 -1
  94. package/build/components/inserter/quick-inserter.js.map +1 -1
  95. package/build/components/inserter/search-items.js +1 -1
  96. package/build/components/inserter/search-items.js.map +1 -1
  97. package/build/components/inserter/search-results.js +1 -1
  98. package/build/components/inserter/search-results.js.map +1 -1
  99. package/build/components/keyboard-shortcuts/index.js +1 -1
  100. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  101. package/build/components/letter-spacing-control/index.js +3 -3
  102. package/build/components/letter-spacing-control/index.js.map +1 -1
  103. package/build/components/line-height-control/index.js +4 -4
  104. package/build/components/line-height-control/index.js.map +1 -1
  105. package/build/components/line-height-control/index.native.js +3 -1
  106. package/build/components/line-height-control/index.native.js.map +1 -1
  107. package/build/components/link-control/index.js +2 -2
  108. package/build/components/link-control/index.js.map +1 -1
  109. package/build/components/link-control/search-input.js +1 -1
  110. package/build/components/link-control/search-input.js.map +1 -1
  111. package/build/components/link-control/search-results.js +2 -2
  112. package/build/components/link-control/search-results.js.map +1 -1
  113. package/build/components/link-control/use-rich-url-data.js +1 -1
  114. package/build/components/link-control/use-rich-url-data.js.map +1 -1
  115. package/build/components/link-control/use-search-handler.js +2 -2
  116. package/build/components/link-control/use-search-handler.js.map +1 -1
  117. package/build/components/list-view/block-select-button.js +2 -1
  118. package/build/components/list-view/block-select-button.js.map +1 -1
  119. package/build/components/list-view/block.js +1 -1
  120. package/build/components/list-view/block.js.map +1 -1
  121. package/build/components/media-placeholder/index.native.js +7 -5
  122. package/build/components/media-placeholder/index.native.js.map +1 -1
  123. package/build/components/media-replace-flow/index.js +20 -24
  124. package/build/components/media-replace-flow/index.js.map +1 -1
  125. package/build/components/media-upload/index.native.js +4 -3
  126. package/build/components/media-upload/index.native.js.map +1 -1
  127. package/build/components/media-upload-progress/index.native.js +1 -1
  128. package/build/components/media-upload-progress/index.native.js.map +1 -1
  129. package/build/components/navigable-toolbar/index.js +3 -3
  130. package/build/components/navigable-toolbar/index.js.map +1 -1
  131. package/build/components/plain-text/index.native.js +3 -3
  132. package/build/components/plain-text/index.native.js.map +1 -1
  133. package/build/components/rich-text/format-toolbar-container.js +2 -2
  134. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  135. package/build/components/rich-text/format-toolbar-container.native.js +1 -1
  136. package/build/components/rich-text/format-toolbar-container.native.js.map +1 -1
  137. package/build/components/rich-text/index.native.js +3 -3
  138. package/build/components/rich-text/index.native.js.map +1 -1
  139. package/build/components/rich-text/use-paste-handler.js +7 -11
  140. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  141. package/build/components/url-input/index.js +11 -11
  142. package/build/components/url-input/index.js.map +1 -1
  143. package/build/components/use-moving-animation/index.js +1 -1
  144. package/build/components/use-moving-animation/index.js.map +1 -1
  145. package/build/components/use-on-block-drop/index.js +2 -2
  146. package/build/components/use-on-block-drop/index.js.map +1 -1
  147. package/build/components/writing-flow/use-tab-nav.js +4 -3
  148. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  149. package/build/hooks/align.js +1 -1
  150. package/build/hooks/align.js.map +1 -1
  151. package/build/hooks/anchor.js +1 -1
  152. package/build/hooks/anchor.js.map +1 -1
  153. package/build/hooks/border.js +2 -14
  154. package/build/hooks/border.js.map +1 -1
  155. package/build/hooks/color.js +2 -2
  156. package/build/hooks/color.js.map +1 -1
  157. package/build/hooks/generated-class-name.js +3 -3
  158. package/build/hooks/generated-class-name.js.map +1 -1
  159. package/build/hooks/lock.js +1 -1
  160. package/build/hooks/lock.js.map +1 -1
  161. package/build/hooks/style.js +5 -2
  162. package/build/hooks/style.js.map +1 -1
  163. package/build/store/actions.js +4 -4
  164. package/build/store/actions.js.map +1 -1
  165. package/build/store/defaults.js +1 -1
  166. package/build/store/defaults.js.map +1 -1
  167. package/build/store/reducer.js +11 -11
  168. package/build/store/reducer.js.map +1 -1
  169. package/build/store/selectors.js +6 -6
  170. package/build/store/selectors.js.map +1 -1
  171. package/build/utils/parse-css-unit-to-px.js +3 -3
  172. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  173. package/build/utils/pasting.js +91 -0
  174. package/build/utils/pasting.js.map +1 -0
  175. package/build/utils/transform-styles/ast/parse.js +5 -5
  176. package/build/utils/transform-styles/ast/parse.js.map +1 -1
  177. package/build/utils/transform-styles/transforms/url-rewrite.js +2 -2
  178. package/build/utils/transform-styles/transforms/url-rewrite.js.map +1 -1
  179. package/build-module/autocompleters/link.js +64 -0
  180. package/build-module/autocompleters/link.js.map +1 -0
  181. package/build-module/components/autocomplete/index.js +2 -1
  182. package/build-module/components/autocomplete/index.js.map +1 -1
  183. package/build-module/components/block-actions/index.js +1 -1
  184. package/build-module/components/block-actions/index.js.map +1 -1
  185. package/build-module/components/block-breadcrumb/index.js +4 -2
  186. package/build-module/components/block-breadcrumb/index.js.map +1 -1
  187. package/build-module/components/block-compare/index.js +2 -2
  188. package/build-module/components/block-compare/index.js.map +1 -1
  189. package/build-module/components/block-controls/index.js +1 -1
  190. package/build-module/components/block-controls/index.js.map +1 -1
  191. package/build-module/components/block-draggable/index.js +1 -1
  192. package/build-module/components/block-draggable/index.js.map +1 -1
  193. package/build-module/components/block-edit/edit.js +1 -1
  194. package/build-module/components/block-edit/edit.js.map +1 -1
  195. package/build-module/components/block-list/block-html.js +1 -1
  196. package/build-module/components/block-list/block-html.js.map +1 -1
  197. package/build-module/components/block-list/block-invalid-warning.js +1 -1
  198. package/build-module/components/block-list/block-invalid-warning.js.map +1 -1
  199. package/build-module/components/block-list/block-list-item.native.js +4 -4
  200. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  201. package/build-module/components/block-list/block-selection-button.native.js +4 -3
  202. package/build-module/components/block-list/block-selection-button.native.js.map +1 -1
  203. package/build-module/components/block-list/block.js +1 -1
  204. package/build-module/components/block-list/block.js.map +1 -1
  205. package/build-module/components/block-list/block.native.js +5 -5
  206. package/build-module/components/block-list/block.native.js.map +1 -1
  207. package/build-module/components/block-list/index.native.js +5 -5
  208. package/build-module/components/block-list/index.native.js.map +1 -1
  209. package/build-module/components/block-list/use-block-props/use-block-class-names.js +1 -1
  210. package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  211. package/build-module/components/block-media-update-progress/index.native.js +4 -4
  212. package/build-module/components/block-media-update-progress/index.native.js.map +1 -1
  213. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +3 -3
  214. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  215. package/build-module/components/block-mobile-toolbar/index.native.js +1 -1
  216. package/build-module/components/block-mobile-toolbar/index.native.js.map +1 -1
  217. package/build-module/components/block-mover/mover-description.js +4 -4
  218. package/build-module/components/block-mover/mover-description.js.map +1 -1
  219. package/build-module/components/block-mover/mover-description.native.js +5 -5
  220. package/build-module/components/block-mover/mover-description.native.js.map +1 -1
  221. package/build-module/components/block-settings-menu/block-settings-dropdown.js +7 -13
  222. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  223. package/build-module/components/block-styles/preview.native.js +1 -1
  224. package/build-module/components/block-styles/preview.native.js.map +1 -1
  225. package/build-module/components/block-switcher/index.js +2 -1
  226. package/build-module/components/block-switcher/index.js.map +1 -1
  227. package/build-module/components/block-switcher/use-transformed-patterns.js +0 -1
  228. package/build-module/components/block-switcher/use-transformed-patterns.js.map +1 -1
  229. package/build-module/components/block-title/index.js +7 -58
  230. package/build-module/components/block-title/index.js.map +1 -1
  231. package/build-module/components/block-title/use-block-display-title.js +80 -0
  232. package/build-module/components/block-title/use-block-display-title.js.map +1 -0
  233. package/build-module/components/block-toolbar/utils.js +9 -1
  234. package/build-module/components/block-toolbar/utils.js.map +1 -1
  235. package/build-module/components/block-tools/block-popover.js +1 -1
  236. package/build-module/components/block-tools/block-popover.js.map +1 -1
  237. package/build-module/components/block-tools/block-selection-button.js +2 -1
  238. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  239. package/build-module/components/block-types-list/index.native.js +1 -1
  240. package/build-module/components/block-types-list/index.native.js.map +1 -1
  241. package/build-module/components/border-radius-control/index.js +3 -3
  242. package/build-module/components/border-radius-control/index.js.map +1 -1
  243. package/build-module/components/border-radius-control/utils.js +11 -7
  244. package/build-module/components/border-radius-control/utils.js.map +1 -1
  245. package/build-module/components/contrast-checker/index.js +3 -3
  246. package/build-module/components/contrast-checker/index.js.map +1 -1
  247. package/build-module/components/convert-to-group-buttons/index.js +1 -1
  248. package/build-module/components/convert-to-group-buttons/index.js.map +1 -1
  249. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js +1 -3
  250. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  251. package/build-module/components/copy-handler/index.js +2 -2
  252. package/build-module/components/copy-handler/index.js.map +1 -1
  253. package/build-module/components/font-sizes/with-font-sizes.js +3 -3
  254. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  255. package/build-module/components/index.native.js +4 -4
  256. package/build-module/components/index.native.js.map +1 -1
  257. package/build-module/components/inserter/block-patterns-tab.js +1 -1
  258. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  259. package/build-module/components/inserter/block-types-tab.js +1 -1
  260. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  261. package/build-module/components/inserter/hooks/use-block-type-impressions.native.js +2 -2
  262. package/build-module/components/inserter/hooks/use-block-type-impressions.native.js.map +1 -1
  263. package/build-module/components/inserter/index.js +3 -3
  264. package/build-module/components/inserter/index.js.map +1 -1
  265. package/build-module/components/inserter/index.native.js +7 -7
  266. package/build-module/components/inserter/index.native.js.map +1 -1
  267. package/build-module/components/inserter/menu.js.map +1 -1
  268. package/build-module/components/inserter/menu.native.js +3 -3
  269. package/build-module/components/inserter/menu.native.js.map +1 -1
  270. package/build-module/components/inserter/quick-inserter.js +1 -1
  271. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  272. package/build-module/components/inserter/search-items.js +1 -1
  273. package/build-module/components/inserter/search-items.js.map +1 -1
  274. package/build-module/components/inserter/search-results.js +1 -1
  275. package/build-module/components/inserter/search-results.js.map +1 -1
  276. package/build-module/components/keyboard-shortcuts/index.js +1 -1
  277. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  278. package/build-module/components/letter-spacing-control/index.js +3 -3
  279. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  280. package/build-module/components/line-height-control/index.js +4 -4
  281. package/build-module/components/line-height-control/index.js.map +1 -1
  282. package/build-module/components/line-height-control/index.native.js +3 -1
  283. package/build-module/components/line-height-control/index.native.js.map +1 -1
  284. package/build-module/components/link-control/index.js +2 -2
  285. package/build-module/components/link-control/index.js.map +1 -1
  286. package/build-module/components/link-control/search-input.js +1 -1
  287. package/build-module/components/link-control/search-input.js.map +1 -1
  288. package/build-module/components/link-control/search-results.js +2 -2
  289. package/build-module/components/link-control/search-results.js.map +1 -1
  290. package/build-module/components/link-control/use-rich-url-data.js +1 -1
  291. package/build-module/components/link-control/use-rich-url-data.js.map +1 -1
  292. package/build-module/components/link-control/use-search-handler.js +2 -2
  293. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  294. package/build-module/components/list-view/block-select-button.js +2 -1
  295. package/build-module/components/list-view/block-select-button.js.map +1 -1
  296. package/build-module/components/list-view/block.js +1 -1
  297. package/build-module/components/list-view/block.js.map +1 -1
  298. package/build-module/components/media-placeholder/index.native.js +7 -5
  299. package/build-module/components/media-placeholder/index.native.js.map +1 -1
  300. package/build-module/components/media-replace-flow/index.js +22 -27
  301. package/build-module/components/media-replace-flow/index.js.map +1 -1
  302. package/build-module/components/media-upload/index.native.js +4 -3
  303. package/build-module/components/media-upload/index.native.js.map +1 -1
  304. package/build-module/components/media-upload-progress/index.native.js +1 -1
  305. package/build-module/components/media-upload-progress/index.native.js.map +1 -1
  306. package/build-module/components/navigable-toolbar/index.js +3 -3
  307. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  308. package/build-module/components/plain-text/index.native.js +3 -3
  309. package/build-module/components/plain-text/index.native.js.map +1 -1
  310. package/build-module/components/rich-text/format-toolbar-container.js +2 -2
  311. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  312. package/build-module/components/rich-text/format-toolbar-container.native.js +1 -1
  313. package/build-module/components/rich-text/format-toolbar-container.native.js.map +1 -1
  314. package/build-module/components/rich-text/index.native.js +3 -3
  315. package/build-module/components/rich-text/index.native.js.map +1 -1
  316. package/build-module/components/rich-text/use-paste-handler.js +6 -11
  317. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  318. package/build-module/components/url-input/index.js +11 -11
  319. package/build-module/components/url-input/index.js.map +1 -1
  320. package/build-module/components/use-moving-animation/index.js +1 -1
  321. package/build-module/components/use-moving-animation/index.js.map +1 -1
  322. package/build-module/components/use-on-block-drop/index.js +2 -2
  323. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  324. package/build-module/components/writing-flow/use-tab-nav.js +4 -3
  325. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  326. package/build-module/hooks/align.js +1 -1
  327. package/build-module/hooks/align.js.map +1 -1
  328. package/build-module/hooks/anchor.js +1 -1
  329. package/build-module/hooks/anchor.js.map +1 -1
  330. package/build-module/hooks/border.js +2 -14
  331. package/build-module/hooks/border.js.map +1 -1
  332. package/build-module/hooks/color.js +2 -2
  333. package/build-module/hooks/color.js.map +1 -1
  334. package/build-module/hooks/generated-class-name.js +3 -3
  335. package/build-module/hooks/generated-class-name.js.map +1 -1
  336. package/build-module/hooks/lock.js +1 -1
  337. package/build-module/hooks/lock.js.map +1 -1
  338. package/build-module/hooks/style.js +5 -2
  339. package/build-module/hooks/style.js.map +1 -1
  340. package/build-module/store/actions.js +4 -4
  341. package/build-module/store/actions.js.map +1 -1
  342. package/build-module/store/defaults.js +1 -1
  343. package/build-module/store/defaults.js.map +1 -1
  344. package/build-module/store/reducer.js +11 -11
  345. package/build-module/store/reducer.js.map +1 -1
  346. package/build-module/store/selectors.js +6 -6
  347. package/build-module/store/selectors.js.map +1 -1
  348. package/build-module/utils/parse-css-unit-to-px.js +3 -3
  349. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  350. package/build-module/utils/pasting.js +80 -0
  351. package/build-module/utils/pasting.js.map +1 -0
  352. package/build-module/utils/transform-styles/ast/parse.js +5 -5
  353. package/build-module/utils/transform-styles/ast/parse.js.map +1 -1
  354. package/build-module/utils/transform-styles/transforms/url-rewrite.js +2 -2
  355. package/build-module/utils/transform-styles/transforms/url-rewrite.js.map +1 -1
  356. package/build-style/style-rtl.css +7 -0
  357. package/build-style/style.css +7 -0
  358. package/package.json +27 -27
  359. package/src/autocompleters/link.js +62 -0
  360. package/src/autocompleters/style.scss +8 -0
  361. package/src/components/alignment-control/test/index.js +2 -2
  362. package/src/components/autocomplete/index.js +2 -0
  363. package/src/components/block-actions/index.js +1 -1
  364. package/src/components/block-alignment-control/test/index.js +1 -1
  365. package/src/components/block-breadcrumb/index.js +5 -2
  366. package/src/components/block-compare/index.js +2 -2
  367. package/src/components/block-controls/index.js +1 -1
  368. package/src/components/block-draggable/index.js +1 -1
  369. package/src/components/block-draggable/stories/index.js +1 -1
  370. package/src/components/block-edit/edit.js +1 -1
  371. package/src/components/block-list/block-html.js +1 -1
  372. package/src/components/block-list/block-invalid-warning.js +1 -1
  373. package/src/components/block-list/block-list-item.native.js +4 -4
  374. package/src/components/block-list/block-selection-button.native.js +3 -3
  375. package/src/components/block-list/block.js +1 -1
  376. package/src/components/block-list/block.native.js +5 -5
  377. package/src/components/block-list/index.native.js +5 -5
  378. package/src/components/block-list/use-block-props/use-block-class-names.js +1 -1
  379. package/src/components/block-media-update-progress/index.native.js +4 -4
  380. package/src/components/block-media-update-progress/test/index.native.js +2 -2
  381. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +3 -3
  382. package/src/components/block-mobile-toolbar/index.native.js +2 -2
  383. package/src/components/block-mover/mover-description.js +4 -4
  384. package/src/components/block-mover/mover-description.native.js +5 -5
  385. package/src/components/block-settings-menu/block-settings-dropdown.js +7 -8
  386. package/src/components/block-styles/preview.native.js +1 -1
  387. package/src/components/block-switcher/index.js +4 -1
  388. package/src/components/block-switcher/use-transformed-patterns.js +0 -1
  389. package/src/components/block-title/README.md +17 -1
  390. package/src/components/block-title/index.js +7 -62
  391. package/src/components/block-title/test/index.js +21 -3
  392. package/src/components/block-title/use-block-display-title.js +83 -0
  393. package/src/components/block-toolbar/utils.js +12 -2
  394. package/src/components/block-tools/block-popover.js +1 -1
  395. package/src/components/block-tools/block-selection-button.js +4 -1
  396. package/src/components/block-types-list/index.native.js +1 -1
  397. package/src/components/border-radius-control/index.js +5 -3
  398. package/src/components/border-radius-control/test/utils.js +10 -10
  399. package/src/components/border-radius-control/utils.js +10 -8
  400. package/src/components/contrast-checker/index.js +3 -3
  401. package/src/components/convert-to-group-buttons/index.js +1 -1
  402. package/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js +1 -6
  403. package/src/components/copy-handler/index.js +2 -2
  404. package/src/components/font-sizes/with-font-sizes.js +3 -3
  405. package/src/components/image-size-control/test/index.js +1 -1
  406. package/src/components/index.native.js +10 -4
  407. package/src/components/inserter/block-patterns-tab.js +1 -1
  408. package/src/components/inserter/block-types-tab.js +1 -1
  409. package/src/components/inserter/hooks/use-block-type-impressions.native.js +2 -2
  410. package/src/components/inserter/index.js +3 -3
  411. package/src/components/inserter/index.native.js +7 -7
  412. package/src/components/inserter/menu.js +1 -1
  413. package/src/components/inserter/menu.native.js +3 -3
  414. package/src/components/inserter/quick-inserter.js +1 -1
  415. package/src/components/inserter/search-items.js +1 -1
  416. package/src/components/inserter/search-results.js +1 -1
  417. package/src/components/inserter/test/fixtures/index.native.js +1 -1
  418. package/src/components/inserter/test/reusable-blocks-tab.js +2 -2
  419. package/src/components/justify-content-control/README.md +1 -1
  420. package/src/components/keyboard-shortcuts/index.js +1 -1
  421. package/src/components/letter-spacing-control/index.js +1 -1
  422. package/src/components/line-height-control/index.js +4 -4
  423. package/src/components/line-height-control/index.native.js +2 -0
  424. package/src/components/link-control/index.js +2 -2
  425. package/src/components/link-control/search-input.js +1 -1
  426. package/src/components/link-control/search-results.js +2 -2
  427. package/src/components/link-control/test/index.js +142 -144
  428. package/src/components/link-control/use-rich-url-data.js +1 -1
  429. package/src/components/link-control/use-search-handler.js +2 -2
  430. package/src/components/list-view/block-select-button.js +1 -1
  431. package/src/components/list-view/block.js +1 -1
  432. package/src/components/media-placeholder/index.native.js +11 -9
  433. package/src/components/media-replace-flow/README.md +7 -0
  434. package/src/components/media-replace-flow/index.js +20 -26
  435. package/src/components/media-replace-flow/test/index.js +100 -0
  436. package/src/components/media-upload/index.native.js +3 -2
  437. package/src/components/media-upload-progress/index.native.js +1 -1
  438. package/src/components/navigable-toolbar/index.js +3 -3
  439. package/src/components/plain-text/index.native.js +3 -3
  440. package/src/components/responsive-block-control/test/index.js +6 -6
  441. package/src/components/rich-text/format-toolbar-container.js +2 -2
  442. package/src/components/rich-text/format-toolbar-container.native.js +1 -1
  443. package/src/components/rich-text/index.native.js +3 -3
  444. package/src/components/rich-text/use-paste-handler.js +7 -13
  445. package/src/components/url-input/index.js +11 -11
  446. package/src/components/use-block-drop-zone/test/index.js +1 -1
  447. package/src/components/use-moving-animation/index.js +1 -1
  448. package/src/components/use-on-block-drop/index.js +2 -2
  449. package/src/components/writing-flow/use-tab-nav.js +6 -3
  450. package/src/hooks/align.js +1 -1
  451. package/src/hooks/anchor.js +1 -1
  452. package/src/hooks/border.js +8 -19
  453. package/src/hooks/color.js +2 -2
  454. package/src/hooks/generated-class-name.js +3 -3
  455. package/src/hooks/lock.js +1 -1
  456. package/src/hooks/style.js +5 -2
  457. package/src/hooks/test/align.js +1 -1
  458. package/src/store/actions.js +4 -4
  459. package/src/store/defaults.js +1 -2
  460. package/src/store/reducer.js +11 -11
  461. package/src/store/selectors.js +6 -6
  462. package/src/store/test/actions.js +1 -1
  463. package/src/store/test/reducer.js +1 -1
  464. package/src/store/test/selectors.js +1 -1
  465. package/src/utils/parse-css-unit-to-px.js +3 -3
  466. package/src/utils/pasting.js +77 -0
  467. package/src/utils/test/parse-css-unit-to-px.js +5 -5
  468. package/src/utils/test/pasting.js +84 -0
  469. package/src/utils/transform-styles/ast/parse.js +5 -5
  470. package/src/utils/transform-styles/transforms/url-rewrite.js +2 -2
  471. package/build/utils/get-paste-event-data.js +0 -56
  472. package/build/utils/get-paste-event-data.js.map +0 -1
  473. package/build-module/utils/get-paste-event-data.js +0 -47
  474. package/build-module/utils/get-paste-event-data.js.map +0 -1
  475. package/src/utils/get-paste-event-data.js +0 -42
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/rich-text/use-paste-handler.js"],"names":["adjustLines","value","isMultiline","LINE_SEPARATOR","RegExp","usePasteHandler","props","propsRef","current","element","_onPaste","event","isSelected","disableFormats","onChange","formatTypes","tagName","onReplace","onSplit","onSplitMiddle","__unstableEmbedURLOnPaste","multilineTag","preserveWhiteSpace","pastePlainText","clipboardData","plainText","html","getData","error1","error2","removeWindowsFragments","removeCharsetMetaTag","preventDefault","window","console","log","transformed","reduce","accumlator","__unstablePasteRule","files","isInternal","pastedMultilineTag","undefined","pastedValue","multilineWrapperTags","activeFormats","text","length","includes","content","HTML","mode","pastedBlocks","trim","valueToInsert","addEventListener","removeEventListener","startReg","endReg","replace","metaTag","startsWith","slice"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useRef } from '@wordpress/element';\nimport { useRefEffect } from '@wordpress/compose';\nimport { getFilesFromDataTransfer } from '@wordpress/dom';\nimport { pasteHandler } from '@wordpress/blocks';\nimport {\n\tisEmpty,\n\tinsert,\n\tcreate,\n\treplace,\n\t__UNSTABLE_LINE_SEPARATOR as LINE_SEPARATOR,\n} from '@wordpress/rich-text';\nimport { isURL } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { filePasteHandler } from './file-paste-handler';\nimport { addActiveFormats, isShortcode } from './utils';\nimport { splitValue } from './split-value';\n\n/** @typedef {import('@wordpress/rich-text').RichTextValue} RichTextValue */\n\n/**\n * Replaces line separators with line breaks if not multiline.\n * Replaces line breaks with line separators if multiline.\n *\n * @param {RichTextValue} value Value to adjust.\n * @param {boolean} isMultiline Whether to adjust to multiline or not.\n *\n * @return {RichTextValue} Adjusted value.\n */\nfunction adjustLines( value, isMultiline ) {\n\tif ( isMultiline ) {\n\t\treturn replace( value, /\\n+/g, LINE_SEPARATOR );\n\t}\n\n\treturn replace( value, new RegExp( LINE_SEPARATOR, 'g' ), '\\n' );\n}\n\nexport function usePasteHandler( props ) {\n\tconst propsRef = useRef( props );\n\tpropsRef.current = props;\n\treturn useRefEffect( ( element ) => {\n\t\tfunction _onPaste( event ) {\n\t\t\tconst {\n\t\t\t\tisSelected,\n\t\t\t\tdisableFormats,\n\t\t\t\tonChange,\n\t\t\t\tvalue,\n\t\t\t\tformatTypes,\n\t\t\t\ttagName,\n\t\t\t\tonReplace,\n\t\t\t\tonSplit,\n\t\t\t\tonSplitMiddle,\n\t\t\t\t__unstableEmbedURLOnPaste,\n\t\t\t\tmultilineTag,\n\t\t\t\tpreserveWhiteSpace,\n\t\t\t\tpastePlainText,\n\t\t\t} = propsRef.current;\n\n\t\t\tif ( ! isSelected ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { clipboardData } = event;\n\n\t\t\tlet plainText = '';\n\t\t\tlet html = '';\n\n\t\t\t// IE11 only supports `Text` as an argument for `getData` and will\n\t\t\t// otherwise throw an invalid argument error, so we try the standard\n\t\t\t// arguments first, then fallback to `Text` if they fail.\n\t\t\ttry {\n\t\t\t\tplainText = clipboardData.getData( 'text/plain' );\n\t\t\t\thtml = clipboardData.getData( 'text/html' );\n\t\t\t} catch ( error1 ) {\n\t\t\t\ttry {\n\t\t\t\t\thtml = clipboardData.getData( 'Text' );\n\t\t\t\t} catch ( error2 ) {\n\t\t\t\t\t// Some browsers like UC Browser paste plain text by default and\n\t\t\t\t\t// don't support clipboardData at all, so allow default\n\t\t\t\t\t// behaviour.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove Windows-specific metadata appended within copied HTML text.\n\t\t\thtml = removeWindowsFragments( html );\n\n\t\t\t// Strip meta tag.\n\t\t\thtml = removeCharsetMetaTag( html );\n\n\t\t\tevent.preventDefault();\n\n\t\t\t// Allows us to ask for this information when we get a report.\n\t\t\twindow.console.log( 'Received HTML:\\n\\n', html );\n\t\t\twindow.console.log( 'Received plain text:\\n\\n', plainText );\n\n\t\t\tif ( disableFormats ) {\n\t\t\t\tonChange( insert( value, plainText ) );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst transformed = formatTypes.reduce(\n\t\t\t\t( accumlator, { __unstablePasteRule } ) => {\n\t\t\t\t\t// Only allow one transform.\n\t\t\t\t\tif ( __unstablePasteRule && accumlator === value ) {\n\t\t\t\t\t\taccumlator = __unstablePasteRule( value, {\n\t\t\t\t\t\t\thtml,\n\t\t\t\t\t\t\tplainText,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn accumlator;\n\t\t\t\t},\n\t\t\t\tvalue\n\t\t\t);\n\n\t\t\tif ( transformed !== value ) {\n\t\t\t\tonChange( transformed );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst files = [ ...getFilesFromDataTransfer( clipboardData ) ];\n\t\t\tconst isInternal = clipboardData.getData( 'rich-text' ) === 'true';\n\n\t\t\t// If the data comes from a rich text instance, we can directly use it\n\t\t\t// without filtering the data. The filters are only meant for externally\n\t\t\t// pasted content and remove inline styles.\n\t\t\tif ( isInternal ) {\n\t\t\t\tconst pastedMultilineTag =\n\t\t\t\t\tclipboardData.getData( 'rich-text-multi-line-tag' ) ||\n\t\t\t\t\tundefined;\n\t\t\t\tlet pastedValue = create( {\n\t\t\t\t\thtml,\n\t\t\t\t\tmultilineTag: pastedMultilineTag,\n\t\t\t\t\tmultilineWrapperTags:\n\t\t\t\t\t\tpastedMultilineTag === 'li'\n\t\t\t\t\t\t\t? [ 'ul', 'ol' ]\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\tpreserveWhiteSpace,\n\t\t\t\t} );\n\t\t\t\tpastedValue = adjustLines( pastedValue, !! multilineTag );\n\t\t\t\taddActiveFormats( pastedValue, value.activeFormats );\n\t\t\t\tonChange( insert( value, pastedValue ) );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( pastePlainText ) {\n\t\t\t\tonChange( insert( value, create( { text: plainText } ) ) );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Process any attached files, unless we detect Microsoft Office as\n\t\t\t// the source.\n\t\t\t//\n\t\t\t// When content is copied from Microsoft Office, an image of the\n\t\t\t// content is rendered and attached to the clipboard along with the\n\t\t\t// plain-text and HTML content. This artifact is a distraction from\n\t\t\t// the relevant clipboard data, so we ignore it.\n\t\t\t//\n\t\t\t// Props https://github.com/pubpub/pubpub/commit/2f933277a15a263a1ab4bbd36b96d3a106544aec\n\t\t\tif (\n\t\t\t\tfiles &&\n\t\t\t\tfiles.length &&\n\t\t\t\t! html?.includes(\n\t\t\t\t\t'xmlns:o=\"urn:schemas-microsoft-com:office:office'\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tconst content = pasteHandler( {\n\t\t\t\t\tHTML: filePasteHandler( files ),\n\t\t\t\t\tmode: 'BLOCKS',\n\t\t\t\t\ttagName,\n\t\t\t\t\tpreserveWhiteSpace,\n\t\t\t\t} );\n\n\t\t\t\t// Allows us to ask for this information when we get a report.\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\twindow.console.log( 'Received items:\\n\\n', files );\n\n\t\t\t\tif ( onReplace && isEmpty( value ) ) {\n\t\t\t\t\tonReplace( content );\n\t\t\t\t} else {\n\t\t\t\t\tsplitValue( {\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tpastedBlocks: content,\n\t\t\t\t\t\tonReplace,\n\t\t\t\t\t\tonSplit,\n\t\t\t\t\t\tonSplitMiddle,\n\t\t\t\t\t\tmultilineTag,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet mode = onReplace && onSplit ? 'AUTO' : 'INLINE';\n\n\t\t\t// Force the blocks mode when the user is pasting\n\t\t\t// on a new line & the content resembles a shortcode.\n\t\t\t// Otherwise it's going to be detected as inline\n\t\t\t// and the shortcode won't be replaced.\n\t\t\tif (\n\t\t\t\tmode === 'AUTO' &&\n\t\t\t\tisEmpty( value ) &&\n\t\t\t\tisShortcode( plainText )\n\t\t\t) {\n\t\t\t\tmode = 'BLOCKS';\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t__unstableEmbedURLOnPaste &&\n\t\t\t\tisEmpty( value ) &&\n\t\t\t\tisURL( plainText.trim() )\n\t\t\t) {\n\t\t\t\tmode = 'BLOCKS';\n\t\t\t}\n\n\t\t\tconst content = pasteHandler( {\n\t\t\t\tHTML: html,\n\t\t\t\tplainText,\n\t\t\t\tmode,\n\t\t\t\ttagName,\n\t\t\t\tpreserveWhiteSpace,\n\t\t\t} );\n\n\t\t\tif ( typeof content === 'string' ) {\n\t\t\t\tlet valueToInsert = create( { html: content } );\n\n\t\t\t\t// If the content should be multiline, we should process text\n\t\t\t\t// separated by a line break as separate lines.\n\t\t\t\tvalueToInsert = adjustLines( valueToInsert, !! multilineTag );\n\n\t\t\t\taddActiveFormats( valueToInsert, value.activeFormats );\n\t\t\t\tonChange( insert( value, valueToInsert ) );\n\t\t\t} else if ( content.length > 0 ) {\n\t\t\t\tif ( onReplace && isEmpty( value ) ) {\n\t\t\t\t\tonReplace( content, content.length - 1, -1 );\n\t\t\t\t} else {\n\t\t\t\t\tsplitValue( {\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tpastedBlocks: content,\n\t\t\t\t\t\tonReplace,\n\t\t\t\t\t\tonSplit,\n\t\t\t\t\t\tonSplitMiddle,\n\t\t\t\t\t\tmultilineTag,\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\telement.addEventListener( 'paste', _onPaste );\n\t\treturn () => {\n\t\t\telement.removeEventListener( 'paste', _onPaste );\n\t\t};\n\t}, [] );\n}\n\n/**\n * Normalizes a given string of HTML to remove the Windows specific \"Fragment\" comments\n * and any preceeding and trailing whitespace.\n *\n * @param {string} html the html to be normalized\n * @return {string} the normalized html\n */\nfunction removeWindowsFragments( html ) {\n\tconst startReg = /.*<!--StartFragment-->/s;\n\tconst endReg = /<!--EndFragment-->.*/s;\n\n\treturn html.replace( startReg, '' ).replace( endReg, '' );\n}\n\n/**\n * Removes the charset meta tag inserted by Chromium.\n * See:\n * - https://github.com/WordPress/gutenberg/issues/33585\n * - https://bugs.chromium.org/p/chromium/issues/detail?id=1264616#c4\n *\n * @param {string} html the html to be stripped of the meta tag.\n * @return {string} the cleaned html\n */\nfunction removeCharsetMetaTag( html ) {\n\tconst metaTag = `<meta charset='utf-8'>`;\n\n\tif ( html.startsWith( metaTag ) ) {\n\t\treturn html.slice( metaTag.length );\n\t}\n\n\treturn html;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/rich-text/use-paste-handler.js"],"names":["adjustLines","value","isMultiline","LINE_SEPARATOR","RegExp","usePasteHandler","props","propsRef","current","element","_onPaste","event","isSelected","disableFormats","onChange","formatTypes","tagName","onReplace","onSplit","onSplitMiddle","__unstableEmbedURLOnPaste","multilineTag","preserveWhiteSpace","pastePlainText","clipboardData","plainText","html","getData","error1","error2","removeWindowsFragments","removeCharsetMetaTag","preventDefault","window","console","log","transformed","reduce","accumlator","__unstablePasteRule","files","isInternal","pastedMultilineTag","undefined","pastedValue","multilineWrapperTags","activeFormats","text","length","content","HTML","mode","pastedBlocks","trim","valueToInsert","addEventListener","removeEventListener","startReg","endReg","replace","metaTag","startsWith","slice"],"mappings":";;;;;;;AAGA;;AACA;;AACA;;AACA;;AACA;;AAOA;;AAKA;;AACA;;AACA;;AACA;;AAtBA;AACA;AACA;;AAcA;AACA;AACA;;AAMA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,WAAT,CAAsBC,KAAtB,EAA6BC,WAA7B,EAA2C;AAC1C,MAAKA,WAAL,EAAmB;AAClB,WAAO,uBAASD,KAAT,EAAgB,MAAhB,EAAwBE,mCAAxB,CAAP;AACA;;AAED,SAAO,uBAASF,KAAT,EAAgB,IAAIG,MAAJ,CAAYD,mCAAZ,EAA4B,GAA5B,CAAhB,EAAmD,IAAnD,CAAP;AACA;;AAEM,SAASE,eAAT,CAA0BC,KAA1B,EAAkC;AACxC,QAAMC,QAAQ,GAAG,qBAAQD,KAAR,CAAjB;AACAC,EAAAA,QAAQ,CAACC,OAAT,GAAmBF,KAAnB;AACA,SAAO,2BAAgBG,OAAF,IAAe;AACnC,aAASC,QAAT,CAAmBC,KAAnB,EAA2B;AAC1B,YAAM;AACLC,QAAAA,UADK;AAELC,QAAAA,cAFK;AAGLC,QAAAA,QAHK;AAILb,QAAAA,KAJK;AAKLc,QAAAA,WALK;AAMLC,QAAAA,OANK;AAOLC,QAAAA,SAPK;AAQLC,QAAAA,OARK;AASLC,QAAAA,aATK;AAULC,QAAAA,yBAVK;AAWLC,QAAAA,YAXK;AAYLC,QAAAA,kBAZK;AAaLC,QAAAA;AAbK,UAcFhB,QAAQ,CAACC,OAdb;;AAgBA,UAAK,CAAEI,UAAP,EAAoB;AACnB;AACA;;AAED,YAAM;AAAEY,QAAAA;AAAF,UAAoBb,KAA1B;AAEA,UAAIc,SAAS,GAAG,EAAhB;AACA,UAAIC,IAAI,GAAG,EAAX,CAxB0B,CA0B1B;AACA;AACA;;AACA,UAAI;AACHD,QAAAA,SAAS,GAAGD,aAAa,CAACG,OAAd,CAAuB,YAAvB,CAAZ;AACAD,QAAAA,IAAI,GAAGF,aAAa,CAACG,OAAd,CAAuB,WAAvB,CAAP;AACA,OAHD,CAGE,OAAQC,MAAR,EAAiB;AAClB,YAAI;AACHF,UAAAA,IAAI,GAAGF,aAAa,CAACG,OAAd,CAAuB,MAAvB,CAAP;AACA,SAFD,CAEE,OAAQE,MAAR,EAAiB;AAClB;AACA;AACA;AACA;AACA;AACD,OAzCyB,CA2C1B;;;AACAH,MAAAA,IAAI,GAAGI,sBAAsB,CAAEJ,IAAF,CAA7B,CA5C0B,CA8C1B;;AACAA,MAAAA,IAAI,GAAGK,oBAAoB,CAAEL,IAAF,CAA3B;AAEAf,MAAAA,KAAK,CAACqB,cAAN,GAjD0B,CAmD1B;;AACAC,MAAAA,MAAM,CAACC,OAAP,CAAeC,GAAf,CAAoB,oBAApB,EAA0CT,IAA1C;AACAO,MAAAA,MAAM,CAACC,OAAP,CAAeC,GAAf,CAAoB,0BAApB,EAAgDV,SAAhD;;AAEA,UAAKZ,cAAL,EAAsB;AACrBC,QAAAA,QAAQ,CAAE,sBAAQb,KAAR,EAAewB,SAAf,CAAF,CAAR;AACA;AACA;;AAED,YAAMW,WAAW,GAAGrB,WAAW,CAACsB,MAAZ,CACnB,CAAEC,UAAF,WAA2C;AAAA,YAA7B;AAAEC,UAAAA;AAAF,SAA6B;;AAC1C;AACA,YAAKA,mBAAmB,IAAID,UAAU,KAAKrC,KAA3C,EAAmD;AAClDqC,UAAAA,UAAU,GAAGC,mBAAmB,CAAEtC,KAAF,EAAS;AACxCyB,YAAAA,IADwC;AAExCD,YAAAA;AAFwC,WAAT,CAAhC;AAIA;;AAED,eAAOa,UAAP;AACA,OAXkB,EAYnBrC,KAZmB,CAApB;;AAeA,UAAKmC,WAAW,KAAKnC,KAArB,EAA6B;AAC5Ba,QAAAA,QAAQ,CAAEsB,WAAF,CAAR;AACA;AACA;;AAED,YAAMI,KAAK,GAAG,CAAE,GAAG,mCAA0BhB,aAA1B,CAAL,CAAd;AACA,YAAMiB,UAAU,GAAGjB,aAAa,CAACG,OAAd,CAAuB,WAAvB,MAAyC,MAA5D,CAjF0B,CAmF1B;AACA;AACA;;AACA,UAAKc,UAAL,EAAkB;AACjB,cAAMC,kBAAkB,GACvBlB,aAAa,CAACG,OAAd,CAAuB,0BAAvB,KACAgB,SAFD;AAGA,YAAIC,WAAW,GAAG,sBAAQ;AACzBlB,UAAAA,IADyB;AAEzBL,UAAAA,YAAY,EAAEqB,kBAFW;AAGzBG,UAAAA,oBAAoB,EACnBH,kBAAkB,KAAK,IAAvB,GACG,CAAE,IAAF,EAAQ,IAAR,CADH,GAEGC,SANqB;AAOzBrB,UAAAA;AAPyB,SAAR,CAAlB;AASAsB,QAAAA,WAAW,GAAG5C,WAAW,CAAE4C,WAAF,EAAe,CAAC,CAAEvB,YAAlB,CAAzB;AACA,qCAAkBuB,WAAlB,EAA+B3C,KAAK,CAAC6C,aAArC;AACAhC,QAAAA,QAAQ,CAAE,sBAAQb,KAAR,EAAe2C,WAAf,CAAF,CAAR;AACA;AACA;;AAED,UAAKrB,cAAL,EAAsB;AACrBT,QAAAA,QAAQ,CAAE,sBAAQb,KAAR,EAAe,sBAAQ;AAAE8C,UAAAA,IAAI,EAAEtB;AAAR,SAAR,CAAf,CAAF,CAAR;AACA;AACA,OA5GyB,CA8G1B;AACA;AACA;AACA;AACA;;;AACA,UACCe,KAAK,SAAL,IAAAA,KAAK,WAAL,IAAAA,KAAK,CAAEQ,MAAP,IACA,CAAE,uCAA0BR,KAA1B,EAAiCd,IAAjC,EAAuCD,SAAvC,CAFH,EAGE;AACD,cAAMwB,OAAO,GAAG,0BAAc;AAC7BC,UAAAA,IAAI,EAAE,wCAAkBV,KAAlB,CADuB;AAE7BW,UAAAA,IAAI,EAAE,QAFuB;AAG7BnC,UAAAA,OAH6B;AAI7BM,UAAAA;AAJ6B,SAAd,CAAhB,CADC,CAQD;AACA;;AACAW,QAAAA,MAAM,CAACC,OAAP,CAAeC,GAAf,CAAoB,qBAApB,EAA2CK,KAA3C;;AAEA,YAAKvB,SAAS,IAAI,uBAAShB,KAAT,CAAlB,EAAqC;AACpCgB,UAAAA,SAAS,CAAEgC,OAAF,CAAT;AACA,SAFD,MAEO;AACN,sCAAY;AACXhD,YAAAA,KADW;AAEXmD,YAAAA,YAAY,EAAEH,OAFH;AAGXhC,YAAAA,SAHW;AAIXC,YAAAA,OAJW;AAKXC,YAAAA,aALW;AAMXE,YAAAA;AANW,WAAZ;AAQA;;AAED;AACA;;AAED,UAAI8B,IAAI,GAAGlC,SAAS,IAAIC,OAAb,GAAuB,MAAvB,GAAgC,QAA3C,CAlJ0B,CAoJ1B;AACA;AACA;AACA;;AACA,UACCiC,IAAI,KAAK,MAAT,IACA,uBAASlD,KAAT,CADA,IAEA,wBAAawB,SAAb,CAHD,EAIE;AACD0B,QAAAA,IAAI,GAAG,QAAP;AACA;;AAED,UACC/B,yBAAyB,IACzB,uBAASnB,KAAT,CADA,IAEA,gBAAOwB,SAAS,CAAC4B,IAAV,EAAP,CAHD,EAIE;AACDF,QAAAA,IAAI,GAAG,QAAP;AACA;;AAED,YAAMF,OAAO,GAAG,0BAAc;AAC7BC,QAAAA,IAAI,EAAExB,IADuB;AAE7BD,QAAAA,SAF6B;AAG7B0B,QAAAA,IAH6B;AAI7BnC,QAAAA,OAJ6B;AAK7BM,QAAAA;AAL6B,OAAd,CAAhB;;AAQA,UAAK,OAAO2B,OAAP,KAAmB,QAAxB,EAAmC;AAClC,YAAIK,aAAa,GAAG,sBAAQ;AAAE5B,UAAAA,IAAI,EAAEuB;AAAR,SAAR,CAApB,CADkC,CAGlC;AACA;;AACAK,QAAAA,aAAa,GAAGtD,WAAW,CAAEsD,aAAF,EAAiB,CAAC,CAAEjC,YAApB,CAA3B;AAEA,qCAAkBiC,aAAlB,EAAiCrD,KAAK,CAAC6C,aAAvC;AACAhC,QAAAA,QAAQ,CAAE,sBAAQb,KAAR,EAAeqD,aAAf,CAAF,CAAR;AACA,OATD,MASO,IAAKL,OAAO,CAACD,MAAR,GAAiB,CAAtB,EAA0B;AAChC,YAAK/B,SAAS,IAAI,uBAAShB,KAAT,CAAlB,EAAqC;AACpCgB,UAAAA,SAAS,CAAEgC,OAAF,EAAWA,OAAO,CAACD,MAAR,GAAiB,CAA5B,EAA+B,CAAC,CAAhC,CAAT;AACA,SAFD,MAEO;AACN,sCAAY;AACX/C,YAAAA,KADW;AAEXmD,YAAAA,YAAY,EAAEH,OAFH;AAGXhC,YAAAA,SAHW;AAIXC,YAAAA,OAJW;AAKXC,YAAAA,aALW;AAMXE,YAAAA;AANW,WAAZ;AAQA;AACD;AACD;;AAEDZ,IAAAA,OAAO,CAAC8C,gBAAR,CAA0B,OAA1B,EAAmC7C,QAAnC;AACA,WAAO,MAAM;AACZD,MAAAA,OAAO,CAAC+C,mBAAR,CAA6B,OAA7B,EAAsC9C,QAAtC;AACA,KAFD;AAGA,GA9MM,EA8MJ,EA9MI,CAAP;AA+MA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASoB,sBAAT,CAAiCJ,IAAjC,EAAwC;AACvC,QAAM+B,QAAQ,GAAG,yBAAjB;AACA,QAAMC,MAAM,GAAG,uBAAf;AAEA,SAAOhC,IAAI,CAACiC,OAAL,CAAcF,QAAd,EAAwB,EAAxB,EAA6BE,OAA7B,CAAsCD,MAAtC,EAA8C,EAA9C,CAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS3B,oBAAT,CAA+BL,IAA/B,EAAsC;AACrC,QAAMkC,OAAO,GAAI,wBAAjB;;AAEA,MAAKlC,IAAI,CAACmC,UAAL,CAAiBD,OAAjB,CAAL,EAAkC;AACjC,WAAOlC,IAAI,CAACoC,KAAL,CAAYF,OAAO,CAACZ,MAApB,CAAP;AACA;;AAED,SAAOtB,IAAP;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useRef } from '@wordpress/element';\nimport { useRefEffect } from '@wordpress/compose';\nimport { getFilesFromDataTransfer } from '@wordpress/dom';\nimport { pasteHandler } from '@wordpress/blocks';\nimport {\n\tisEmpty,\n\tinsert,\n\tcreate,\n\treplace,\n\t__UNSTABLE_LINE_SEPARATOR as LINE_SEPARATOR,\n} from '@wordpress/rich-text';\nimport { isURL } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { filePasteHandler } from './file-paste-handler';\nimport { addActiveFormats, isShortcode } from './utils';\nimport { splitValue } from './split-value';\nimport { shouldDismissPastedFiles } from '../../utils/pasting';\n\n/** @typedef {import('@wordpress/rich-text').RichTextValue} RichTextValue */\n\n/**\n * Replaces line separators with line breaks if not multiline.\n * Replaces line breaks with line separators if multiline.\n *\n * @param {RichTextValue} value Value to adjust.\n * @param {boolean} isMultiline Whether to adjust to multiline or not.\n *\n * @return {RichTextValue} Adjusted value.\n */\nfunction adjustLines( value, isMultiline ) {\n\tif ( isMultiline ) {\n\t\treturn replace( value, /\\n+/g, LINE_SEPARATOR );\n\t}\n\n\treturn replace( value, new RegExp( LINE_SEPARATOR, 'g' ), '\\n' );\n}\n\nexport function usePasteHandler( props ) {\n\tconst propsRef = useRef( props );\n\tpropsRef.current = props;\n\treturn useRefEffect( ( element ) => {\n\t\tfunction _onPaste( event ) {\n\t\t\tconst {\n\t\t\t\tisSelected,\n\t\t\t\tdisableFormats,\n\t\t\t\tonChange,\n\t\t\t\tvalue,\n\t\t\t\tformatTypes,\n\t\t\t\ttagName,\n\t\t\t\tonReplace,\n\t\t\t\tonSplit,\n\t\t\t\tonSplitMiddle,\n\t\t\t\t__unstableEmbedURLOnPaste,\n\t\t\t\tmultilineTag,\n\t\t\t\tpreserveWhiteSpace,\n\t\t\t\tpastePlainText,\n\t\t\t} = propsRef.current;\n\n\t\t\tif ( ! isSelected ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { clipboardData } = event;\n\n\t\t\tlet plainText = '';\n\t\t\tlet html = '';\n\n\t\t\t// IE11 only supports `Text` as an argument for `getData` and will\n\t\t\t// otherwise throw an invalid argument error, so we try the standard\n\t\t\t// arguments first, then fallback to `Text` if they fail.\n\t\t\ttry {\n\t\t\t\tplainText = clipboardData.getData( 'text/plain' );\n\t\t\t\thtml = clipboardData.getData( 'text/html' );\n\t\t\t} catch ( error1 ) {\n\t\t\t\ttry {\n\t\t\t\t\thtml = clipboardData.getData( 'Text' );\n\t\t\t\t} catch ( error2 ) {\n\t\t\t\t\t// Some browsers like UC Browser paste plain text by default and\n\t\t\t\t\t// don't support clipboardData at all, so allow default\n\t\t\t\t\t// behaviour.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove Windows-specific metadata appended within copied HTML text.\n\t\t\thtml = removeWindowsFragments( html );\n\n\t\t\t// Strip meta tag.\n\t\t\thtml = removeCharsetMetaTag( html );\n\n\t\t\tevent.preventDefault();\n\n\t\t\t// Allows us to ask for this information when we get a report.\n\t\t\twindow.console.log( 'Received HTML:\\n\\n', html );\n\t\t\twindow.console.log( 'Received plain text:\\n\\n', plainText );\n\n\t\t\tif ( disableFormats ) {\n\t\t\t\tonChange( insert( value, plainText ) );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst transformed = formatTypes.reduce(\n\t\t\t\t( accumlator, { __unstablePasteRule } ) => {\n\t\t\t\t\t// Only allow one transform.\n\t\t\t\t\tif ( __unstablePasteRule && accumlator === value ) {\n\t\t\t\t\t\taccumlator = __unstablePasteRule( value, {\n\t\t\t\t\t\t\thtml,\n\t\t\t\t\t\t\tplainText,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn accumlator;\n\t\t\t\t},\n\t\t\t\tvalue\n\t\t\t);\n\n\t\t\tif ( transformed !== value ) {\n\t\t\t\tonChange( transformed );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst files = [ ...getFilesFromDataTransfer( clipboardData ) ];\n\t\t\tconst isInternal = clipboardData.getData( 'rich-text' ) === 'true';\n\n\t\t\t// If the data comes from a rich text instance, we can directly use it\n\t\t\t// without filtering the data. The filters are only meant for externally\n\t\t\t// pasted content and remove inline styles.\n\t\t\tif ( isInternal ) {\n\t\t\t\tconst pastedMultilineTag =\n\t\t\t\t\tclipboardData.getData( 'rich-text-multi-line-tag' ) ||\n\t\t\t\t\tundefined;\n\t\t\t\tlet pastedValue = create( {\n\t\t\t\t\thtml,\n\t\t\t\t\tmultilineTag: pastedMultilineTag,\n\t\t\t\t\tmultilineWrapperTags:\n\t\t\t\t\t\tpastedMultilineTag === 'li'\n\t\t\t\t\t\t\t? [ 'ul', 'ol' ]\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\tpreserveWhiteSpace,\n\t\t\t\t} );\n\t\t\t\tpastedValue = adjustLines( pastedValue, !! multilineTag );\n\t\t\t\taddActiveFormats( pastedValue, value.activeFormats );\n\t\t\t\tonChange( insert( value, pastedValue ) );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( pastePlainText ) {\n\t\t\t\tonChange( insert( value, create( { text: plainText } ) ) );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Process any attached files, unless we infer that the files in\n\t\t\t// question are redundant \"screenshots\" of the actual HTML payload,\n\t\t\t// as created by certain office-type programs.\n\t\t\t//\n\t\t\t// @see shouldDismissPastedFiles\n\t\t\tif (\n\t\t\t\tfiles?.length &&\n\t\t\t\t! shouldDismissPastedFiles( files, html, plainText )\n\t\t\t) {\n\t\t\t\tconst content = pasteHandler( {\n\t\t\t\t\tHTML: filePasteHandler( files ),\n\t\t\t\t\tmode: 'BLOCKS',\n\t\t\t\t\ttagName,\n\t\t\t\t\tpreserveWhiteSpace,\n\t\t\t\t} );\n\n\t\t\t\t// Allows us to ask for this information when we get a report.\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\twindow.console.log( 'Received items:\\n\\n', files );\n\n\t\t\t\tif ( onReplace && isEmpty( value ) ) {\n\t\t\t\t\tonReplace( content );\n\t\t\t\t} else {\n\t\t\t\t\tsplitValue( {\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tpastedBlocks: content,\n\t\t\t\t\t\tonReplace,\n\t\t\t\t\t\tonSplit,\n\t\t\t\t\t\tonSplitMiddle,\n\t\t\t\t\t\tmultilineTag,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet mode = onReplace && onSplit ? 'AUTO' : 'INLINE';\n\n\t\t\t// Force the blocks mode when the user is pasting\n\t\t\t// on a new line & the content resembles a shortcode.\n\t\t\t// Otherwise it's going to be detected as inline\n\t\t\t// and the shortcode won't be replaced.\n\t\t\tif (\n\t\t\t\tmode === 'AUTO' &&\n\t\t\t\tisEmpty( value ) &&\n\t\t\t\tisShortcode( plainText )\n\t\t\t) {\n\t\t\t\tmode = 'BLOCKS';\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t__unstableEmbedURLOnPaste &&\n\t\t\t\tisEmpty( value ) &&\n\t\t\t\tisURL( plainText.trim() )\n\t\t\t) {\n\t\t\t\tmode = 'BLOCKS';\n\t\t\t}\n\n\t\t\tconst content = pasteHandler( {\n\t\t\t\tHTML: html,\n\t\t\t\tplainText,\n\t\t\t\tmode,\n\t\t\t\ttagName,\n\t\t\t\tpreserveWhiteSpace,\n\t\t\t} );\n\n\t\t\tif ( typeof content === 'string' ) {\n\t\t\t\tlet valueToInsert = create( { html: content } );\n\n\t\t\t\t// If the content should be multiline, we should process text\n\t\t\t\t// separated by a line break as separate lines.\n\t\t\t\tvalueToInsert = adjustLines( valueToInsert, !! multilineTag );\n\n\t\t\t\taddActiveFormats( valueToInsert, value.activeFormats );\n\t\t\t\tonChange( insert( value, valueToInsert ) );\n\t\t\t} else if ( content.length > 0 ) {\n\t\t\t\tif ( onReplace && isEmpty( value ) ) {\n\t\t\t\t\tonReplace( content, content.length - 1, -1 );\n\t\t\t\t} else {\n\t\t\t\t\tsplitValue( {\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tpastedBlocks: content,\n\t\t\t\t\t\tonReplace,\n\t\t\t\t\t\tonSplit,\n\t\t\t\t\t\tonSplitMiddle,\n\t\t\t\t\t\tmultilineTag,\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\telement.addEventListener( 'paste', _onPaste );\n\t\treturn () => {\n\t\t\telement.removeEventListener( 'paste', _onPaste );\n\t\t};\n\t}, [] );\n}\n\n/**\n * Normalizes a given string of HTML to remove the Windows specific \"Fragment\" comments\n * and any preceeding and trailing whitespace.\n *\n * @param {string} html the html to be normalized\n * @return {string} the normalized html\n */\nfunction removeWindowsFragments( html ) {\n\tconst startReg = /.*<!--StartFragment-->/s;\n\tconst endReg = /<!--EndFragment-->.*/s;\n\n\treturn html.replace( startReg, '' ).replace( endReg, '' );\n}\n\n/**\n * Removes the charset meta tag inserted by Chromium.\n * See:\n * - https://github.com/WordPress/gutenberg/issues/33585\n * - https://bugs.chromium.org/p/chromium/issues/detail?id=1264616#c4\n *\n * @param {string} html the html to be stripped of the meta tag.\n * @return {string} the cleaned html\n */\nfunction removeCharsetMetaTag( html ) {\n\tconst metaTag = `<meta charset='utf-8'>`;\n\n\tif ( html.startsWith( metaTag ) ) {\n\t\treturn html.slice( metaTag.length );\n\t}\n\n\treturn html;\n}\n"]}
@@ -73,8 +73,8 @@ class URLInput extends _element.Component {
73
73
  const {
74
74
  value,
75
75
  __experimentalShowInitialSuggestions = false
76
- } = this.props; // only have to worry about scrolling selected suggestion into view
77
- // when already expanded
76
+ } = this.props; // Only have to worry about scrolling selected suggestion into view
77
+ // when already expanded.
78
78
 
79
79
  if (showSuggestions && selectedSuggestion !== null && this.suggestionNodes[selectedSuggestion] && !this.scrollingIntoView) {
80
80
  this.scrollingIntoView = true;
@@ -84,15 +84,15 @@ class URLInput extends _element.Component {
84
84
  this.props.setTimeout(() => {
85
85
  this.scrollingIntoView = false;
86
86
  }, 100);
87
- } // Update suggestions when the value changes
87
+ } // Update suggestions when the value changes.
88
88
 
89
89
 
90
90
  if (prevProps.value !== value && !this.props.disableSuggestions && !this.isUpdatingSuggestions) {
91
91
  if (value !== null && value !== void 0 && value.length) {
92
- // If the new value is not empty we need to update with suggestions for it
92
+ // If the new value is not empty we need to update with suggestions for it.
93
93
  this.updateSuggestions(value);
94
94
  } else if (__experimentalShowInitialSuggestions) {
95
- // If the new value is empty and we can show initial suggestions, then show initial suggestions
95
+ // If the new value is empty and we can show initial suggestions, then show initial suggestions.
96
96
  this.updateSuggestions();
97
97
  }
98
98
  }
@@ -224,7 +224,7 @@ class URLInput extends _element.Component {
224
224
  // Don't re-run the suggestions on focus if there are already suggestions present (prevents searching again when tabbing between the input and buttons)
225
225
 
226
226
  if (value && !disableSuggestions && !this.isUpdatingSuggestions && !(suggestions && suggestions.length)) {
227
- // Ensure the suggestions are updated with the current input value
227
+ // Ensure the suggestions are updated with the current input value.
228
228
  this.updateSuggestions(value);
229
229
  }
230
230
  }
@@ -236,7 +236,7 @@ class URLInput extends _element.Component {
236
236
  suggestions,
237
237
  loading
238
238
  } = this.state; // If the suggestions are not shown or loading, we shouldn't handle the arrow keys
239
- // We shouldn't preventDefault to allow block arrow keys navigation
239
+ // We shouldn't preventDefault to allow block arrow keys navigation.
240
240
 
241
241
  if (!showSuggestions || !suggestions.length || loading) {
242
242
  // In the Windows version of Firefox the up and down arrows don't move the caret
@@ -250,7 +250,7 @@ class URLInput extends _element.Component {
250
250
  case _keycodes.UP:
251
251
  {
252
252
  if (0 !== event.target.selectionStart) {
253
- event.preventDefault(); // Set the input caret to position 0
253
+ event.preventDefault(); // Set the input caret to position 0.
254
254
 
255
255
  event.target.setSelectionRange(0, 0);
256
256
  }
@@ -263,14 +263,14 @@ class URLInput extends _element.Component {
263
263
  case _keycodes.DOWN:
264
264
  {
265
265
  if (this.props.value.length !== event.target.selectionStart) {
266
- event.preventDefault(); // Set the input caret to the last position
266
+ event.preventDefault(); // Set the input caret to the last position.
267
267
 
268
268
  event.target.setSelectionRange(this.props.value.length, this.props.value.length);
269
269
  }
270
270
 
271
271
  break;
272
272
  }
273
- // Submitting while loading should trigger onSubmit
273
+ // Submitting while loading should trigger onSubmit.
274
274
 
275
275
  case _keycodes.ENTER:
276
276
  {
@@ -501,7 +501,7 @@ class URLInput extends _element.Component {
501
501
 
502
502
  var _default = (0, _compose.compose)(_compose.withSafeTimeout, _components.withSpokenMessages, _compose.withInstanceId, (0, _data.withSelect)((select, props) => {
503
503
  // If a link suggestions handler is already provided then
504
- // bail
504
+ // bail.
505
505
  if ((0, _lodash.isFunction)(props.__experimentalFetchLinkSuggestions)) {
506
506
  return;
507
507
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/url-input/index.js"],"names":["URLInput","Component","constructor","props","onChange","bind","onFocus","onKeyDown","selectLink","handleOnClick","bindSuggestionNode","autocompleteRef","inputRef","updateSuggestions","suggestionNodes","isUpdatingSuggestions","state","suggestions","showSuggestions","selectedSuggestion","suggestionsListboxId","suggestionOptionIdPrefix","componentDidUpdate","prevProps","value","__experimentalShowInitialSuggestions","scrollingIntoView","current","onlyScrollIfNeeded","setTimeout","disableSuggestions","length","componentDidMount","shouldShowInitialSuggestions","componentWillUnmount","suggestionsRequest","cancel","index","ref","__experimentalFetchLinkSuggestions","fetchLinkSuggestions","__experimentalHandleURLSuggestions","handleURLSuggestions","isInitialSuggestions","trim","setState","loading","request","then","debouncedSpeak","catch","event","inputValue","target","keyCode","UP","selectionStart","preventDefault","setSelectionRange","DOWN","ENTER","onSubmit","suggestion","previousIndex","nextIndex","TAB","speak","url","focus","getDerivedStateFromProps","instanceId","shouldShowSuggestions","hasValue","render","renderControl","renderSuggestions","label","className","isFullWidth","placeholder","__experimentalRenderControl","controlProps","id","inputProps","required","type","role","undefined","__experimentalRenderSuggestions","suggestionsListProps","buildSuggestionItemProps","tabIndex","isLoading","handleSuggestionClick","map","title","withSafeTimeout","withSpokenMessages","withInstanceId","select","getSettings","blockEditorStore"],"mappings":";;;;;;;;;AAWA;;;;AARA;;AACA;;AACA;;AAKA;;AAEA;;AACA;;AAOA;;AACA;;AACA;;AAKA;;AA3BA;AACA;AACA;;AAKA;AACA;AACA;;AAeA;AACA;AACA;AAGA,MAAMA,QAAN,SAAuBC,kBAAvB,CAAiC;AAChCC,EAAAA,WAAW,CAAEC,KAAF,EAAU;AACpB,UAAOA,KAAP;AAEA,SAAKC,QAAL,GAAgB,KAAKA,QAAL,CAAcC,IAAd,CAAoB,IAApB,CAAhB;AACA,SAAKC,OAAL,GAAe,KAAKA,OAAL,CAAaD,IAAb,CAAmB,IAAnB,CAAf;AACA,SAAKE,SAAL,GAAiB,KAAKA,SAAL,CAAeF,IAAf,CAAqB,IAArB,CAAjB;AACA,SAAKG,UAAL,GAAkB,KAAKA,UAAL,CAAgBH,IAAhB,CAAsB,IAAtB,CAAlB;AACA,SAAKI,aAAL,GAAqB,KAAKA,aAAL,CAAmBJ,IAAnB,CAAyB,IAAzB,CAArB;AACA,SAAKK,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBL,IAAxB,CAA8B,IAA9B,CAA1B;AACA,SAAKM,eAAL,GAAuBR,KAAK,CAACQ,eAAN,IAAyB,yBAAhD;AACA,SAAKC,QAAL,GAAgB,yBAAhB;AACA,SAAKC,iBAAL,GAAyB,sBACxB,KAAKA,iBAAL,CAAuBR,IAAvB,CAA6B,IAA7B,CADwB,EAExB,GAFwB,CAAzB;AAKA,SAAKS,eAAL,GAAuB,EAAvB;AAEA,SAAKC,qBAAL,GAA6B,KAA7B;AAEA,SAAKC,KAAL,GAAa;AACZC,MAAAA,WAAW,EAAE,EADD;AAEZC,MAAAA,eAAe,EAAE,KAFL;AAGZC,MAAAA,kBAAkB,EAAE,IAHR;AAKZC,MAAAA,oBAAoB,EAAE,EALV;AAMZC,MAAAA,wBAAwB,EAAE;AANd,KAAb;AAQA;;AAEDC,EAAAA,kBAAkB,CAAEC,SAAF,EAAc;AAC/B,UAAM;AAAEL,MAAAA,eAAF;AAAmBC,MAAAA;AAAnB,QAA0C,KAAKH,KAArD;AACA,UAAM;AACLQ,MAAAA,KADK;AAELC,MAAAA,oCAAoC,GAAG;AAFlC,QAGF,KAAKtB,KAHT,CAF+B,CAO/B;AACA;;AACA,QACCe,eAAe,IACfC,kBAAkB,KAAK,IADvB,IAEA,KAAKL,eAAL,CAAsBK,kBAAtB,CAFA,IAGA,CAAE,KAAKO,iBAJR,EAKE;AACD,WAAKA,iBAAL,GAAyB,IAAzB;AACA,sCACC,KAAKZ,eAAL,CAAsBK,kBAAtB,CADD,EAEC,KAAKR,eAAL,CAAqBgB,OAFtB,EAGC;AACCC,QAAAA,kBAAkB,EAAE;AADrB,OAHD;AAQA,WAAKzB,KAAL,CAAW0B,UAAX,CAAuB,MAAM;AAC5B,aAAKH,iBAAL,GAAyB,KAAzB;AACA,OAFD,EAEG,GAFH;AAGA,KA3B8B,CA6B/B;;;AACA,QACCH,SAAS,CAACC,KAAV,KAAoBA,KAApB,IACA,CAAE,KAAKrB,KAAL,CAAW2B,kBADb,IAEA,CAAE,KAAKf,qBAHR,EAIE;AACD,UAAKS,KAAL,aAAKA,KAAL,eAAKA,KAAK,CAAEO,MAAZ,EAAqB;AACpB;AACA,aAAKlB,iBAAL,CAAwBW,KAAxB;AACA,OAHD,MAGO,IAAKC,oCAAL,EAA4C;AAClD;AACA,aAAKZ,iBAAL;AACA;AACD;AACD;;AAEDmB,EAAAA,iBAAiB,GAAG;AACnB,QAAK,KAAKC,4BAAL,EAAL,EAA2C;AAC1C,WAAKpB,iBAAL;AACA;AACD;;AAEDqB,EAAAA,oBAAoB,GAAG;AAAA;;AACtB,kCAAKC,kBAAL,0GAAyBC,MAAzB;AACA,WAAO,KAAKD,kBAAZ;AACA;;AAEDzB,EAAAA,kBAAkB,CAAE2B,KAAF,EAAU;AAC3B,WAASC,GAAF,IAAW;AACjB,WAAKxB,eAAL,CAAsBuB,KAAtB,IAAgCC,GAAhC;AACA,KAFD;AAGA;;AAEDL,EAAAA,4BAA4B,GAAG;AAC9B,UAAM;AAAEhB,MAAAA;AAAF,QAAkB,KAAKD,KAA7B;AACA,UAAM;AACLS,MAAAA,oCAAoC,GAAG,KADlC;AAELD,MAAAA;AAFK,QAGF,KAAKrB,KAHT;AAIA,WACC,CAAE,KAAKY,qBAAP,IACAU,oCADA,IAEA,EAAID,KAAK,IAAIA,KAAK,CAACO,MAAnB,CAFA,IAGA,EAAId,WAAW,IAAIA,WAAW,CAACc,MAA/B,CAJD;AAMA;;AAEDlB,EAAAA,iBAAiB,GAAe;AAAA;;AAAA,QAAbW,KAAa,uEAAL,EAAK;AAC/B,UAAM;AACLe,MAAAA,kCAAkC,EAAEC,oBAD/B;AAELC,MAAAA,kCAAkC,EAAEC;AAF/B,QAGF,KAAKvC,KAHT;;AAKA,QAAK,CAAEqC,oBAAP,EAA8B;AAC7B;AACA,KAR8B,CAU/B;AACA;;;AACA,UAAMG,oBAAoB,GAAG,YAAEnB,KAAF,mCAAE,OAAOO,MAAT,CAA7B,CAZ+B,CAc/B;AACA;;AACAP,IAAAA,KAAK,GAAGA,KAAK,CAACoB,IAAN,EAAR,CAhB+B,CAkB/B;AACA;AACA;AACA;;AACA,QACC,CAAED,oBAAF,KACEnB,KAAK,CAACO,MAAN,GAAe,CAAf,IAAsB,CAAEW,oBAAF,IAA0B,gBAAOlB,KAAP,CADlD,CADD,EAGE;AACD,WAAKqB,QAAL,CAAe;AACd3B,QAAAA,eAAe,EAAE,KADH;AAEdC,QAAAA,kBAAkB,EAAE,IAFN;AAGd2B,QAAAA,OAAO,EAAE;AAHK,OAAf;AAMA;AACA;;AAED,SAAK/B,qBAAL,GAA6B,IAA7B;AAEA,SAAK8B,QAAL,CAAe;AACd1B,MAAAA,kBAAkB,EAAE,IADN;AAEd2B,MAAAA,OAAO,EAAE;AAFK,KAAf;AAKA,UAAMC,OAAO,GAAGP,oBAAoB,CAAEhB,KAAF,EAAS;AAC5CmB,MAAAA;AAD4C,KAAT,CAApC;AAIAI,IAAAA,OAAO,CACLC,IADF,CACU/B,WAAF,IAAmB;AACzB;AACA;AACA;AACA,UAAK,KAAKkB,kBAAL,KAA4BY,OAAjC,EAA2C;AAC1C;AACA;;AAED,WAAKF,QAAL,CAAe;AACd5B,QAAAA,WADc;AAEd6B,QAAAA,OAAO,EAAE,KAFK;AAGd5B,QAAAA,eAAe,EAAE,CAAC,CAAED,WAAW,CAACc;AAHlB,OAAf;;AAMA,UAAK,CAAC,CAAEd,WAAW,CAACc,MAApB,EAA6B;AAC5B,aAAK5B,KAAL,CAAW8C,cAAX,CACC;AACC;AACA,sBACC,0DADD,EAEC,2DAFD,EAGChC,WAAW,CAACc,MAHb,CAFD,EAOCd,WAAW,CAACc,MAPb,CADD,EAUC,WAVD;AAYA,OAbD,MAaO;AACN,aAAK5B,KAAL,CAAW8C,cAAX,CACC,cAAI,aAAJ,CADD,EAEC,WAFD;AAIA;;AACD,WAAKlC,qBAAL,GAA6B,KAA7B;AACA,KAnCF,EAoCEmC,KApCF,CAoCS,MAAM;AACb,UAAK,KAAKf,kBAAL,KAA4BY,OAAjC,EAA2C;AAC1C,aAAKF,QAAL,CAAe;AACdC,UAAAA,OAAO,EAAE;AADK,SAAf;AAGA,aAAK/B,qBAAL,GAA6B,KAA7B;AACA;AACD,KA3CF,EA9C+B,CA2F/B;AACA;;AACA,SAAKoB,kBAAL,GAA0BY,OAA1B;AACA;;AAED3C,EAAAA,QAAQ,CAAE+C,KAAF,EAAU;AACjB,UAAMC,UAAU,GAAGD,KAAK,CAACE,MAAN,CAAa7B,KAAhC;AAEA,SAAKrB,KAAL,CAAWC,QAAX,CAAqBgD,UAArB;;AACA,QAAK,CAAE,KAAKjD,KAAL,CAAW2B,kBAAlB,EAAuC;AACtC,WAAKjB,iBAAL,CAAwBuC,UAAxB;AACA;AACD;;AAED9C,EAAAA,OAAO,GAAG;AACT,UAAM;AAAEW,MAAAA;AAAF,QAAkB,KAAKD,KAA7B;AACA,UAAM;AAAEc,MAAAA,kBAAF;AAAsBN,MAAAA;AAAtB,QAAgC,KAAKrB,KAA3C,CAFS,CAIT;AACA;;AACA,QACCqB,KAAK,IACL,CAAEM,kBADF,IAEA,CAAE,KAAKf,qBAFP,IAGA,EAAIE,WAAW,IAAIA,WAAW,CAACc,MAA/B,CAJD,EAKE;AACD;AACA,WAAKlB,iBAAL,CAAwBW,KAAxB;AACA;AACD;;AAEDjB,EAAAA,SAAS,CAAE4C,KAAF,EAAU;AAClB,UAAM;AACLjC,MAAAA,eADK;AAELC,MAAAA,kBAFK;AAGLF,MAAAA,WAHK;AAIL6B,MAAAA;AAJK,QAKF,KAAK9B,KALT,CADkB,CAQlB;AACA;;AACA,QAAK,CAAEE,eAAF,IAAqB,CAAED,WAAW,CAACc,MAAnC,IAA6Ce,OAAlD,EAA4D;AAC3D;AACA;AACA;AACA;AACA;AACA,cAASK,KAAK,CAACG,OAAf;AACC;AACA;AACA,aAAKC,YAAL;AAAS;AACR,gBAAK,MAAMJ,KAAK,CAACE,MAAN,CAAaG,cAAxB,EAAyC;AACxCL,cAAAA,KAAK,CAACM,cAAN,GADwC,CAGxC;;AACAN,cAAAA,KAAK,CAACE,MAAN,CAAaK,iBAAb,CAAgC,CAAhC,EAAmC,CAAnC;AACA;;AACD;AACA;AACD;AACA;;AACA,aAAKC,cAAL;AAAW;AACV,gBACC,KAAKxD,KAAL,CAAWqB,KAAX,CAAiBO,MAAjB,KAA4BoB,KAAK,CAACE,MAAN,CAAaG,cAD1C,EAEE;AACDL,cAAAA,KAAK,CAACM,cAAN,GADC,CAGD;;AACAN,cAAAA,KAAK,CAACE,MAAN,CAAaK,iBAAb,CACC,KAAKvD,KAAL,CAAWqB,KAAX,CAAiBO,MADlB,EAEC,KAAK5B,KAAL,CAAWqB,KAAX,CAAiBO,MAFlB;AAIA;;AACD;AACA;AAED;;AACA,aAAK6B,eAAL;AAAY;AACX,gBAAK,KAAKzD,KAAL,CAAW0D,QAAhB,EAA2B;AAC1B,mBAAK1D,KAAL,CAAW0D,QAAX,CAAqB,IAArB,EAA2BV,KAA3B;AACA;;AAED;AACA;AApCF;;AAuCA;AACA;;AAED,UAAMW,UAAU,GAAG,KAAK9C,KAAL,CAAWC,WAAX,CAClB,KAAKD,KAAL,CAAWG,kBADO,CAAnB;;AAIA,YAASgC,KAAK,CAACG,OAAf;AACC,WAAKC,YAAL;AAAS;AACRJ,UAAAA,KAAK,CAACM,cAAN;AACA,gBAAMM,aAAa,GAAG,CAAE5C,kBAAF,GACnBF,WAAW,CAACc,MAAZ,GAAqB,CADF,GAEnBZ,kBAAkB,GAAG,CAFxB;AAGA,eAAK0B,QAAL,CAAe;AACd1B,YAAAA,kBAAkB,EAAE4C;AADN,WAAf;AAGA;AACA;;AACD,WAAKJ,cAAL;AAAW;AACVR,UAAAA,KAAK,CAACM,cAAN;AACA,gBAAMO,SAAS,GACd7C,kBAAkB,KAAK,IAAvB,IACAA,kBAAkB,KAAKF,WAAW,CAACc,MAAZ,GAAqB,CAD5C,GAEG,CAFH,GAGGZ,kBAAkB,GAAG,CAJzB;AAKA,eAAK0B,QAAL,CAAe;AACd1B,YAAAA,kBAAkB,EAAE6C;AADN,WAAf;AAGA;AACA;;AACD,WAAKC,aAAL;AAAU;AACT,cAAK,KAAKjD,KAAL,CAAWG,kBAAX,KAAkC,IAAvC,EAA8C;AAC7C,iBAAKX,UAAL,CAAiBsD,UAAjB,EAD6C,CAE7C;;AACA,iBAAK3D,KAAL,CAAW+D,KAAX,CAAkB,cAAI,gBAAJ,CAAlB;AACA;;AACD;AACA;;AACD,WAAKN,eAAL;AAAY;AACX,cAAK,KAAK5C,KAAL,CAAWG,kBAAX,KAAkC,IAAvC,EAA8C;AAC7C,iBAAKX,UAAL,CAAiBsD,UAAjB;;AAEA,gBAAK,KAAK3D,KAAL,CAAW0D,QAAhB,EAA2B;AAC1B,mBAAK1D,KAAL,CAAW0D,QAAX,CAAqBC,UAArB,EAAiCX,KAAjC;AACA;AACD,WAND,MAMO,IAAK,KAAKhD,KAAL,CAAW0D,QAAhB,EAA2B;AACjC,iBAAK1D,KAAL,CAAW0D,QAAX,CAAqB,IAArB,EAA2BV,KAA3B;AACA;;AAED;AACA;AA3CF;AA6CA;;AAED3C,EAAAA,UAAU,CAAEsD,UAAF,EAAe;AACxB,SAAK3D,KAAL,CAAWC,QAAX,CAAqB0D,UAAU,CAACK,GAAhC,EAAqCL,UAArC;AACA,SAAKjB,QAAL,CAAe;AACd1B,MAAAA,kBAAkB,EAAE,IADN;AAEdD,MAAAA,eAAe,EAAE;AAFH,KAAf;AAIA;;AAEDT,EAAAA,aAAa,CAAEqD,UAAF,EAAe;AAC3B,SAAKtD,UAAL,CAAiBsD,UAAjB,EAD2B,CAE3B;;AACA,SAAKlD,QAAL,CAAce,OAAd,CAAsByC,KAAtB;AACA;;AAE8B,SAAxBC,wBAAwB,cAQ7B;AAAA,QAPD;AACC7C,MAAAA,KADD;AAEC8C,MAAAA,UAFD;AAGCxC,MAAAA,kBAHD;AAICL,MAAAA,oCAAoC,GAAG;AAJxC,KAOC;AAAA,QADD;AAAEP,MAAAA;AAAF,KACC;AACD,QAAIqD,qBAAqB,GAAGrD,eAA5B;AAEA,UAAMsD,QAAQ,GAAGhD,KAAK,IAAIA,KAAK,CAACO,MAAhC;;AAEA,QAAK,CAAEN,oCAAF,IAA0C,CAAE+C,QAAjD,EAA4D;AAC3DD,MAAAA,qBAAqB,GAAG,KAAxB;AACA;;AAED,QAAKzC,kBAAkB,KAAK,IAA5B,EAAmC;AAClCyC,MAAAA,qBAAqB,GAAG,KAAxB;AACA;;AAED,WAAO;AACNrD,MAAAA,eAAe,EAAEqD,qBADX;AAENnD,MAAAA,oBAAoB,EAAG,sCAAsCkD,UAAY,EAFnE;AAGNjD,MAAAA,wBAAwB,EAAG,qCAAqCiD,UAAY;AAHtE,KAAP;AAKA;;AAEDG,EAAAA,MAAM,GAAG;AACR,WACC,qDACG,KAAKC,aAAL,EADH,EAEG,KAAKC,iBAAL,EAFH,CADD;AAMA;;AAEDD,EAAAA,aAAa,GAAG;AACf,UAAM;AACLE,MAAAA,KADK;AAELC,MAAAA,SAFK;AAGLC,MAAAA,WAHK;AAILR,MAAAA,UAJK;AAKLS,MAAAA,WAAW,GAAG,cAAI,6BAAJ,CALT;AAMLC,MAAAA,2BAA2B,EAAEN,aANxB;AAOLlD,MAAAA,KAAK,GAAG;AAPH,QAQF,KAAKrB,KART;AAUA,UAAM;AACL2C,MAAAA,OADK;AAEL5B,MAAAA,eAFK;AAGLC,MAAAA,kBAHK;AAILC,MAAAA,oBAJK;AAKLC,MAAAA;AALK,QAMF,KAAKL,KANT;AAQA,UAAMiE,YAAY,GAAG;AACpBC,MAAAA,EAAE,EAAG,qBAAqBZ,UAAY,EADlB;AAEpBM,MAAAA,KAFoB;AAGpBC,MAAAA,SAAS,EAAE,yBAAY,wBAAZ,EAAsCA,SAAtC,EAAiD;AAC3D,yBAAiBC;AAD0C,OAAjD;AAHS,KAArB;AAQA,UAAMK,UAAU,GAAG;AAClB3D,MAAAA,KADkB;AAElB4D,MAAAA,QAAQ,EAAE,IAFQ;AAGlBP,MAAAA,SAAS,EAAE,+BAHO;AAIlBQ,MAAAA,IAAI,EAAE,MAJY;AAKlBjF,MAAAA,QAAQ,EAAE,KAAKA,QALG;AAMlBE,MAAAA,OAAO,EAAE,KAAKA,OANI;AAOlByE,MAAAA,WAPkB;AAQlBxE,MAAAA,SAAS,EAAE,KAAKA,SARE;AASlB+E,MAAAA,IAAI,EAAE,UATY;AAUlB,oBAAc,cAAI,KAAJ,CAVI;AAWlB,uBAAiBpE,eAXC;AAYlB,2BAAqB,MAZH;AAalB,mBAAaE,oBAbK;AAclB,+BACCD,kBAAkB,KAAK,IAAvB,GACI,GAAGE,wBAA0B,IAAIF,kBAAoB,EADzD,GAEGoE,SAjBc;AAkBlBjD,MAAAA,GAAG,EAAE,KAAK1B;AAlBQ,KAAnB;;AAqBA,QAAK8D,aAAL,EAAqB;AACpB,aAAOA,aAAa,CAAEO,YAAF,EAAgBE,UAAhB,EAA4BrC,OAA5B,CAApB;AACA;;AAED,WACC,4BAAC,uBAAD,EAAkBmC,YAAlB,EACC,qCAAYE,UAAZ,CADD,EAEGrC,OAAO,IAAI,4BAAC,mBAAD,OAFd,CADD;AAMA;;AAED6B,EAAAA,iBAAiB,GAAG;AACnB,UAAM;AACLE,MAAAA,SADK;AAELW,MAAAA,+BAA+B,EAAEb,iBAF5B;AAGLnD,MAAAA,KAAK,GAAG,EAHH;AAILC,MAAAA,oCAAoC,GAAG;AAJlC,QAKF,KAAKtB,KALT;AAOA,UAAM;AACLe,MAAAA,eADK;AAELD,MAAAA,WAFK;AAGLE,MAAAA,kBAHK;AAILC,MAAAA,oBAJK;AAKLC,MAAAA,wBALK;AAMLyB,MAAAA;AANK,QAOF,KAAK9B,KAPT;AASA,UAAMyE,oBAAoB,GAAG;AAC5BP,MAAAA,EAAE,EAAE9D,oBADwB;AAE5BkB,MAAAA,GAAG,EAAE,KAAK3B,eAFkB;AAG5B2E,MAAAA,IAAI,EAAE;AAHsB,KAA7B;;AAMA,UAAMI,wBAAwB,GAAG,CAAE5B,UAAF,EAAczB,KAAd,KAAyB;AACzD,aAAO;AACNiD,QAAAA,IAAI,EAAE,QADA;AAENK,QAAAA,QAAQ,EAAE,IAFJ;AAGNT,QAAAA,EAAE,EAAG,GAAG7D,wBAA0B,IAAIgB,KAAO,EAHvC;AAINC,QAAAA,GAAG,EAAE,KAAK5B,kBAAL,CAAyB2B,KAAzB,CAJC;AAKN,yBAAiBA,KAAK,KAAKlB;AALrB,OAAP;AAOA,KARD;;AAUA,QACC,wBAAYwD,iBAAZ,KACAzD,eADA,IAEA,CAAC,CAAED,WAAW,CAACc,MAHhB,EAIE;AACD,aAAO4C,iBAAiB,CAAE;AACzB1D,QAAAA,WADyB;AAEzBE,QAAAA,kBAFyB;AAGzBsE,QAAAA,oBAHyB;AAIzBC,QAAAA,wBAJyB;AAKzBE,QAAAA,SAAS,EAAE9C,OALc;AAMzB+C,QAAAA,qBAAqB,EAAE,KAAKpF,aANH;AAOzBkC,QAAAA,oBAAoB,EACnBlB,oCAAoC,IACpC,EAAID,KAAK,IAAIA,KAAK,CAACO,MAAnB;AATwB,OAAF,CAAxB;AAWA;;AAED,QACC,CAAE,wBAAY4C,iBAAZ,CAAF,IACAzD,eADA,IAEA,CAAC,CAAED,WAAW,CAACc,MAHhB,EAIE;AACD,aACC,4BAAC,mBAAD;AAAS,QAAA,QAAQ,EAAC,QAAlB;AAA2B,QAAA,OAAO,MAAlC;AAAmC,QAAA,YAAY,EAAG;AAAlD,SACC,8DACM0D,oBADN;AAEC,QAAA,SAAS,EAAG,yBACX,qCADW,EAEV,GAAGZ,SAAW,eAFJ;AAFb,UAOG5D,WAAW,CAAC6E,GAAZ,CAAiB,CAAEhC,UAAF,EAAczB,KAAd,KAClB,4BAAC,kBAAD,6BACMqD,wBAAwB,CAC5B5B,UAD4B,EAE5BzB,KAF4B,CAD9B;AAKC,QAAA,GAAG,EAAGyB,UAAU,CAACoB,EALlB;AAMC,QAAA,SAAS,EAAG,yBACX,oCADW,EAEX;AACC,yBACC7C,KAAK,KAAKlB;AAFZ,SAFW,CANb;AAaC,QAAA,OAAO,EAAG,MACT,KAAKV,aAAL,CAAoBqD,UAApB;AAdF,UAiBGA,UAAU,CAACiC,KAjBd,CADC,CAPH,CADD,CADD;AAiCA;;AACD,WAAO,IAAP;AACA;;AA5hB+B;AA+hBjC;AACA;AACA;;;eACe,sBACdC,wBADc,EAEdC,8BAFc,EAGdC,uBAHc,EAId,sBAAY,CAAEC,MAAF,EAAUhG,KAAV,KAAqB;AAChC;AACA;AACA,MAAK,wBAAYA,KAAK,CAACoC,kCAAlB,CAAL,EAA8D;AAC7D;AACA;;AACD,QAAM;AAAE6D,IAAAA;AAAF,MAAkBD,MAAM,CAAEE,YAAF,CAA9B;AACA,SAAO;AACN9D,IAAAA,kCAAkC,EAAE6D,WAAW,GAC7C7D;AAFI,GAAP;AAIA,CAXD,CAJc,EAgBZvC,QAhBY,C","sourcesContent":["/**\n * External dependencies\n */\nimport { debounce, isFunction } from 'lodash';\nimport classnames from 'classnames';\nimport scrollIntoView from 'dom-scroll-into-view';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf, _n } from '@wordpress/i18n';\nimport { Component, createRef } from '@wordpress/element';\nimport { UP, DOWN, ENTER, TAB } from '@wordpress/keycodes';\nimport {\n\tBaseControl,\n\tButton,\n\tSpinner,\n\twithSpokenMessages,\n\tPopover,\n} from '@wordpress/components';\nimport { withInstanceId, withSafeTimeout, compose } from '@wordpress/compose';\nimport { withSelect } from '@wordpress/data';\nimport { isURL } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nclass URLInput extends Component {\n\tconstructor( props ) {\n\t\tsuper( props );\n\n\t\tthis.onChange = this.onChange.bind( this );\n\t\tthis.onFocus = this.onFocus.bind( this );\n\t\tthis.onKeyDown = this.onKeyDown.bind( this );\n\t\tthis.selectLink = this.selectLink.bind( this );\n\t\tthis.handleOnClick = this.handleOnClick.bind( this );\n\t\tthis.bindSuggestionNode = this.bindSuggestionNode.bind( this );\n\t\tthis.autocompleteRef = props.autocompleteRef || createRef();\n\t\tthis.inputRef = createRef();\n\t\tthis.updateSuggestions = debounce(\n\t\t\tthis.updateSuggestions.bind( this ),\n\t\t\t200\n\t\t);\n\n\t\tthis.suggestionNodes = [];\n\n\t\tthis.isUpdatingSuggestions = false;\n\n\t\tthis.state = {\n\t\t\tsuggestions: [],\n\t\t\tshowSuggestions: false,\n\t\t\tselectedSuggestion: null,\n\n\t\t\tsuggestionsListboxId: '',\n\t\t\tsuggestionOptionIdPrefix: '',\n\t\t};\n\t}\n\n\tcomponentDidUpdate( prevProps ) {\n\t\tconst { showSuggestions, selectedSuggestion } = this.state;\n\t\tconst {\n\t\t\tvalue,\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t} = this.props;\n\n\t\t// only have to worry about scrolling selected suggestion into view\n\t\t// when already expanded\n\t\tif (\n\t\t\tshowSuggestions &&\n\t\t\tselectedSuggestion !== null &&\n\t\t\tthis.suggestionNodes[ selectedSuggestion ] &&\n\t\t\t! this.scrollingIntoView\n\t\t) {\n\t\t\tthis.scrollingIntoView = true;\n\t\t\tscrollIntoView(\n\t\t\t\tthis.suggestionNodes[ selectedSuggestion ],\n\t\t\t\tthis.autocompleteRef.current,\n\t\t\t\t{\n\t\t\t\t\tonlyScrollIfNeeded: true,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tthis.props.setTimeout( () => {\n\t\t\t\tthis.scrollingIntoView = false;\n\t\t\t}, 100 );\n\t\t}\n\n\t\t// Update suggestions when the value changes\n\t\tif (\n\t\t\tprevProps.value !== value &&\n\t\t\t! this.props.disableSuggestions &&\n\t\t\t! this.isUpdatingSuggestions\n\t\t) {\n\t\t\tif ( value?.length ) {\n\t\t\t\t// If the new value is not empty we need to update with suggestions for it\n\t\t\t\tthis.updateSuggestions( value );\n\t\t\t} else if ( __experimentalShowInitialSuggestions ) {\n\t\t\t\t// If the new value is empty and we can show initial suggestions, then show initial suggestions\n\t\t\t\tthis.updateSuggestions();\n\t\t\t}\n\t\t}\n\t}\n\n\tcomponentDidMount() {\n\t\tif ( this.shouldShowInitialSuggestions() ) {\n\t\t\tthis.updateSuggestions();\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.suggestionsRequest?.cancel?.();\n\t\tdelete this.suggestionsRequest;\n\t}\n\n\tbindSuggestionNode( index ) {\n\t\treturn ( ref ) => {\n\t\t\tthis.suggestionNodes[ index ] = ref;\n\t\t};\n\t}\n\n\tshouldShowInitialSuggestions() {\n\t\tconst { suggestions } = this.state;\n\t\tconst {\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t\tvalue,\n\t\t} = this.props;\n\t\treturn (\n\t\t\t! this.isUpdatingSuggestions &&\n\t\t\t__experimentalShowInitialSuggestions &&\n\t\t\t! ( value && value.length ) &&\n\t\t\t! ( suggestions && suggestions.length )\n\t\t);\n\t}\n\n\tupdateSuggestions( value = '' ) {\n\t\tconst {\n\t\t\t__experimentalFetchLinkSuggestions: fetchLinkSuggestions,\n\t\t\t__experimentalHandleURLSuggestions: handleURLSuggestions,\n\t\t} = this.props;\n\n\t\tif ( ! fetchLinkSuggestions ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Initial suggestions may only show if there is no value\n\t\t// (note: this includes whitespace).\n\t\tconst isInitialSuggestions = ! value?.length;\n\n\t\t// Trim only now we've determined whether or not it originally had a \"length\"\n\t\t// (even if that value was all whitespace).\n\t\tvalue = value.trim();\n\n\t\t// Allow a suggestions request if:\n\t\t// - there are at least 2 characters in the search input (except manual searches where\n\t\t// search input length is not required to trigger a fetch)\n\t\t// - this is a direct entry (eg: a URL)\n\t\tif (\n\t\t\t! isInitialSuggestions &&\n\t\t\t( value.length < 2 || ( ! handleURLSuggestions && isURL( value ) ) )\n\t\t) {\n\t\t\tthis.setState( {\n\t\t\t\tshowSuggestions: false,\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tloading: false,\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isUpdatingSuggestions = true;\n\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tloading: true,\n\t\t} );\n\n\t\tconst request = fetchLinkSuggestions( value, {\n\t\t\tisInitialSuggestions,\n\t\t} );\n\n\t\trequest\n\t\t\t.then( ( suggestions ) => {\n\t\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\n\t\t\t\t// comparing the request reference in on the instance, which is\n\t\t\t\t// reset or deleted on subsequent requests or unmounting.\n\t\t\t\tif ( this.suggestionsRequest !== request ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.setState( {\n\t\t\t\t\tsuggestions,\n\t\t\t\t\tloading: false,\n\t\t\t\t\tshowSuggestions: !! suggestions.length,\n\t\t\t\t} );\n\n\t\t\t\tif ( !! suggestions.length ) {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t/* translators: %s: number of results. */\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'%d result found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\t'%d results found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\t__( 'No results.' ),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis.isUpdatingSuggestions = false;\n\t\t\t} )\n\t\t\t.catch( () => {\n\t\t\t\tif ( this.suggestionsRequest === request ) {\n\t\t\t\t\tthis.setState( {\n\t\t\t\t\t\tloading: false,\n\t\t\t\t\t} );\n\t\t\t\t\tthis.isUpdatingSuggestions = false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// Note that this assignment is handled *before* the async search request\n\t\t// as a Promise always resolves on the next tick of the event loop.\n\t\tthis.suggestionsRequest = request;\n\t}\n\n\tonChange( event ) {\n\t\tconst inputValue = event.target.value;\n\n\t\tthis.props.onChange( inputValue );\n\t\tif ( ! this.props.disableSuggestions ) {\n\t\t\tthis.updateSuggestions( inputValue );\n\t\t}\n\t}\n\n\tonFocus() {\n\t\tconst { suggestions } = this.state;\n\t\tconst { disableSuggestions, value } = this.props;\n\n\t\t// When opening the link editor, if there's a value present, we want to load the suggestions pane with the results for this input search value\n\t\t// Don't re-run the suggestions on focus if there are already suggestions present (prevents searching again when tabbing between the input and buttons)\n\t\tif (\n\t\t\tvalue &&\n\t\t\t! disableSuggestions &&\n\t\t\t! this.isUpdatingSuggestions &&\n\t\t\t! ( suggestions && suggestions.length )\n\t\t) {\n\t\t\t// Ensure the suggestions are updated with the current input value\n\t\t\tthis.updateSuggestions( value );\n\t\t}\n\t}\n\n\tonKeyDown( event ) {\n\t\tconst {\n\t\t\tshowSuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestions,\n\t\t\tloading,\n\t\t} = this.state;\n\n\t\t// If the suggestions are not shown or loading, we shouldn't handle the arrow keys\n\t\t// We shouldn't preventDefault to allow block arrow keys navigation\n\t\tif ( ! showSuggestions || ! suggestions.length || loading ) {\n\t\t\t// In the Windows version of Firefox the up and down arrows don't move the caret\n\t\t\t// within an input field like they do for Mac Firefox/Chrome/Safari. This causes\n\t\t\t// a form of focus trapping that is disruptive to the user experience. This disruption\n\t\t\t// only happens if the caret is not in the first or last position in the text input.\n\t\t\t// See: https://github.com/WordPress/gutenberg/issues/5693#issuecomment-436684747\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\t// When UP is pressed, if the caret is at the start of the text, move it to the 0\n\t\t\t\t// position.\n\t\t\t\tcase UP: {\n\t\t\t\t\tif ( 0 !== event.target.selectionStart ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to position 0\n\t\t\t\t\t\tevent.target.setSelectionRange( 0, 0 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// When DOWN is pressed, if the caret is not at the end of the text, move it to the\n\t\t\t\t// last position.\n\t\t\t\tcase DOWN: {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.props.value.length !== event.target.selectionStart\n\t\t\t\t\t) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to the last position\n\t\t\t\t\t\tevent.target.setSelectionRange(\n\t\t\t\t\t\t\tthis.props.value.length,\n\t\t\t\t\t\t\tthis.props.value.length\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Submitting while loading should trigger onSubmit\n\t\t\t\tcase ENTER: {\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst suggestion = this.state.suggestions[\n\t\t\tthis.state.selectedSuggestion\n\t\t];\n\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase UP: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst previousIndex = ! selectedSuggestion\n\t\t\t\t\t? suggestions.length - 1\n\t\t\t\t\t: selectedSuggestion - 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: previousIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase DOWN: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex =\n\t\t\t\t\tselectedSuggestion === null ||\n\t\t\t\t\tselectedSuggestion === suggestions.length - 1\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: selectedSuggestion + 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: nextIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TAB: {\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\t\t\t\t\t// Announce a link has been selected when tabbing away from the input field.\n\t\t\t\t\tthis.props.speak( __( 'Link selected.' ) );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ENTER: {\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tthis.props.onSubmit( suggestion, event );\n\t\t\t\t\t}\n\t\t\t\t} else if ( this.props.onSubmit ) {\n\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tselectLink( suggestion ) {\n\t\tthis.props.onChange( suggestion.url, suggestion );\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tshowSuggestions: false,\n\t\t} );\n\t}\n\n\thandleOnClick( suggestion ) {\n\t\tthis.selectLink( suggestion );\n\t\t// Move focus to the input field when a link suggestion is clicked.\n\t\tthis.inputRef.current.focus();\n\t}\n\n\tstatic getDerivedStateFromProps(\n\t\t{\n\t\t\tvalue,\n\t\t\tinstanceId,\n\t\t\tdisableSuggestions,\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t},\n\t\t{ showSuggestions }\n\t) {\n\t\tlet shouldShowSuggestions = showSuggestions;\n\n\t\tconst hasValue = value && value.length;\n\n\t\tif ( ! __experimentalShowInitialSuggestions && ! hasValue ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\tif ( disableSuggestions === true ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\treturn {\n\t\t\tshowSuggestions: shouldShowSuggestions,\n\t\t\tsuggestionsListboxId: `block-editor-url-input-suggestions-${ instanceId }`,\n\t\t\tsuggestionOptionIdPrefix: `block-editor-url-input-suggestion-${ instanceId }`,\n\t\t};\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ this.renderControl() }\n\t\t\t\t{ this.renderSuggestions() }\n\t\t\t</>\n\t\t);\n\t}\n\n\trenderControl() {\n\t\tconst {\n\t\t\tlabel,\n\t\t\tclassName,\n\t\t\tisFullWidth,\n\t\t\tinstanceId,\n\t\t\tplaceholder = __( 'Paste URL or type to search' ),\n\t\t\t__experimentalRenderControl: renderControl,\n\t\t\tvalue = '',\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tloading,\n\t\t\tshowSuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t} = this.state;\n\n\t\tconst controlProps = {\n\t\t\tid: `url-input-control-${ instanceId }`,\n\t\t\tlabel,\n\t\t\tclassName: classnames( 'block-editor-url-input', className, {\n\t\t\t\t'is-full-width': isFullWidth,\n\t\t\t} ),\n\t\t};\n\n\t\tconst inputProps = {\n\t\t\tvalue,\n\t\t\trequired: true,\n\t\t\tclassName: 'block-editor-url-input__input',\n\t\t\ttype: 'text',\n\t\t\tonChange: this.onChange,\n\t\t\tonFocus: this.onFocus,\n\t\t\tplaceholder,\n\t\t\tonKeyDown: this.onKeyDown,\n\t\t\trole: 'combobox',\n\t\t\t'aria-label': __( 'URL' ),\n\t\t\t'aria-expanded': showSuggestions,\n\t\t\t'aria-autocomplete': 'list',\n\t\t\t'aria-owns': suggestionsListboxId,\n\t\t\t'aria-activedescendant':\n\t\t\t\tselectedSuggestion !== null\n\t\t\t\t\t? `${ suggestionOptionIdPrefix }-${ selectedSuggestion }`\n\t\t\t\t\t: undefined,\n\t\t\tref: this.inputRef,\n\t\t};\n\n\t\tif ( renderControl ) {\n\t\t\treturn renderControl( controlProps, inputProps, loading );\n\t\t}\n\n\t\treturn (\n\t\t\t<BaseControl { ...controlProps }>\n\t\t\t\t<input { ...inputProps } />\n\t\t\t\t{ loading && <Spinner /> }\n\t\t\t</BaseControl>\n\t\t);\n\t}\n\n\trenderSuggestions() {\n\t\tconst {\n\t\t\tclassName,\n\t\t\t__experimentalRenderSuggestions: renderSuggestions,\n\t\t\tvalue = '',\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tshowSuggestions,\n\t\t\tsuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t\tloading,\n\t\t} = this.state;\n\n\t\tconst suggestionsListProps = {\n\t\t\tid: suggestionsListboxId,\n\t\t\tref: this.autocompleteRef,\n\t\t\trole: 'listbox',\n\t\t};\n\n\t\tconst buildSuggestionItemProps = ( suggestion, index ) => {\n\t\t\treturn {\n\t\t\t\trole: 'option',\n\t\t\t\ttabIndex: '-1',\n\t\t\t\tid: `${ suggestionOptionIdPrefix }-${ index }`,\n\t\t\t\tref: this.bindSuggestionNode( index ),\n\t\t\t\t'aria-selected': index === selectedSuggestion,\n\t\t\t};\n\t\t};\n\n\t\tif (\n\t\t\tisFunction( renderSuggestions ) &&\n\t\t\tshowSuggestions &&\n\t\t\t!! suggestions.length\n\t\t) {\n\t\t\treturn renderSuggestions( {\n\t\t\t\tsuggestions,\n\t\t\t\tselectedSuggestion,\n\t\t\t\tsuggestionsListProps,\n\t\t\t\tbuildSuggestionItemProps,\n\t\t\t\tisLoading: loading,\n\t\t\t\thandleSuggestionClick: this.handleOnClick,\n\t\t\t\tisInitialSuggestions:\n\t\t\t\t\t__experimentalShowInitialSuggestions &&\n\t\t\t\t\t! ( value && value.length ),\n\t\t\t} );\n\t\t}\n\n\t\tif (\n\t\t\t! isFunction( renderSuggestions ) &&\n\t\t\tshowSuggestions &&\n\t\t\t!! suggestions.length\n\t\t) {\n\t\t\treturn (\n\t\t\t\t<Popover position=\"bottom\" noArrow focusOnMount={ false }>\n\t\t\t\t\t<div\n\t\t\t\t\t\t{ ...suggestionsListProps }\n\t\t\t\t\t\tclassName={ classnames(\n\t\t\t\t\t\t\t'block-editor-url-input__suggestions',\n\t\t\t\t\t\t\t`${ className }__suggestions`\n\t\t\t\t\t\t) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ suggestions.map( ( suggestion, index ) => (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t{ ...buildSuggestionItemProps(\n\t\t\t\t\t\t\t\t\tsuggestion,\n\t\t\t\t\t\t\t\t\tindex\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tkey={ suggestion.id }\n\t\t\t\t\t\t\t\tclassName={ classnames(\n\t\t\t\t\t\t\t\t\t'block-editor-url-input__suggestion',\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t'is-selected':\n\t\t\t\t\t\t\t\t\t\t\tindex === selectedSuggestion,\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\tonClick={ () =>\n\t\t\t\t\t\t\t\t\tthis.handleOnClick( suggestion )\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\t{ suggestion.title }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</div>\n\t\t\t\t</Popover>\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/url-input/README.md\n */\nexport default compose(\n\twithSafeTimeout,\n\twithSpokenMessages,\n\twithInstanceId,\n\twithSelect( ( select, props ) => {\n\t\t// If a link suggestions handler is already provided then\n\t\t// bail\n\t\tif ( isFunction( props.__experimentalFetchLinkSuggestions ) ) {\n\t\t\treturn;\n\t\t}\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn {\n\t\t\t__experimentalFetchLinkSuggestions: getSettings()\n\t\t\t\t.__experimentalFetchLinkSuggestions,\n\t\t};\n\t} )\n)( URLInput );\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/url-input/index.js"],"names":["URLInput","Component","constructor","props","onChange","bind","onFocus","onKeyDown","selectLink","handleOnClick","bindSuggestionNode","autocompleteRef","inputRef","updateSuggestions","suggestionNodes","isUpdatingSuggestions","state","suggestions","showSuggestions","selectedSuggestion","suggestionsListboxId","suggestionOptionIdPrefix","componentDidUpdate","prevProps","value","__experimentalShowInitialSuggestions","scrollingIntoView","current","onlyScrollIfNeeded","setTimeout","disableSuggestions","length","componentDidMount","shouldShowInitialSuggestions","componentWillUnmount","suggestionsRequest","cancel","index","ref","__experimentalFetchLinkSuggestions","fetchLinkSuggestions","__experimentalHandleURLSuggestions","handleURLSuggestions","isInitialSuggestions","trim","setState","loading","request","then","debouncedSpeak","catch","event","inputValue","target","keyCode","UP","selectionStart","preventDefault","setSelectionRange","DOWN","ENTER","onSubmit","suggestion","previousIndex","nextIndex","TAB","speak","url","focus","getDerivedStateFromProps","instanceId","shouldShowSuggestions","hasValue","render","renderControl","renderSuggestions","label","className","isFullWidth","placeholder","__experimentalRenderControl","controlProps","id","inputProps","required","type","role","undefined","__experimentalRenderSuggestions","suggestionsListProps","buildSuggestionItemProps","tabIndex","isLoading","handleSuggestionClick","map","title","withSafeTimeout","withSpokenMessages","withInstanceId","select","getSettings","blockEditorStore"],"mappings":";;;;;;;;;AAWA;;;;AARA;;AACA;;AACA;;AAKA;;AAEA;;AACA;;AAOA;;AACA;;AACA;;AAKA;;AA3BA;AACA;AACA;;AAKA;AACA;AACA;;AAeA;AACA;AACA;AAGA,MAAMA,QAAN,SAAuBC,kBAAvB,CAAiC;AAChCC,EAAAA,WAAW,CAAEC,KAAF,EAAU;AACpB,UAAOA,KAAP;AAEA,SAAKC,QAAL,GAAgB,KAAKA,QAAL,CAAcC,IAAd,CAAoB,IAApB,CAAhB;AACA,SAAKC,OAAL,GAAe,KAAKA,OAAL,CAAaD,IAAb,CAAmB,IAAnB,CAAf;AACA,SAAKE,SAAL,GAAiB,KAAKA,SAAL,CAAeF,IAAf,CAAqB,IAArB,CAAjB;AACA,SAAKG,UAAL,GAAkB,KAAKA,UAAL,CAAgBH,IAAhB,CAAsB,IAAtB,CAAlB;AACA,SAAKI,aAAL,GAAqB,KAAKA,aAAL,CAAmBJ,IAAnB,CAAyB,IAAzB,CAArB;AACA,SAAKK,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBL,IAAxB,CAA8B,IAA9B,CAA1B;AACA,SAAKM,eAAL,GAAuBR,KAAK,CAACQ,eAAN,IAAyB,yBAAhD;AACA,SAAKC,QAAL,GAAgB,yBAAhB;AACA,SAAKC,iBAAL,GAAyB,sBACxB,KAAKA,iBAAL,CAAuBR,IAAvB,CAA6B,IAA7B,CADwB,EAExB,GAFwB,CAAzB;AAKA,SAAKS,eAAL,GAAuB,EAAvB;AAEA,SAAKC,qBAAL,GAA6B,KAA7B;AAEA,SAAKC,KAAL,GAAa;AACZC,MAAAA,WAAW,EAAE,EADD;AAEZC,MAAAA,eAAe,EAAE,KAFL;AAGZC,MAAAA,kBAAkB,EAAE,IAHR;AAKZC,MAAAA,oBAAoB,EAAE,EALV;AAMZC,MAAAA,wBAAwB,EAAE;AANd,KAAb;AAQA;;AAEDC,EAAAA,kBAAkB,CAAEC,SAAF,EAAc;AAC/B,UAAM;AAAEL,MAAAA,eAAF;AAAmBC,MAAAA;AAAnB,QAA0C,KAAKH,KAArD;AACA,UAAM;AACLQ,MAAAA,KADK;AAELC,MAAAA,oCAAoC,GAAG;AAFlC,QAGF,KAAKtB,KAHT,CAF+B,CAO/B;AACA;;AACA,QACCe,eAAe,IACfC,kBAAkB,KAAK,IADvB,IAEA,KAAKL,eAAL,CAAsBK,kBAAtB,CAFA,IAGA,CAAE,KAAKO,iBAJR,EAKE;AACD,WAAKA,iBAAL,GAAyB,IAAzB;AACA,sCACC,KAAKZ,eAAL,CAAsBK,kBAAtB,CADD,EAEC,KAAKR,eAAL,CAAqBgB,OAFtB,EAGC;AACCC,QAAAA,kBAAkB,EAAE;AADrB,OAHD;AAQA,WAAKzB,KAAL,CAAW0B,UAAX,CAAuB,MAAM;AAC5B,aAAKH,iBAAL,GAAyB,KAAzB;AACA,OAFD,EAEG,GAFH;AAGA,KA3B8B,CA6B/B;;;AACA,QACCH,SAAS,CAACC,KAAV,KAAoBA,KAApB,IACA,CAAE,KAAKrB,KAAL,CAAW2B,kBADb,IAEA,CAAE,KAAKf,qBAHR,EAIE;AACD,UAAKS,KAAL,aAAKA,KAAL,eAAKA,KAAK,CAAEO,MAAZ,EAAqB;AACpB;AACA,aAAKlB,iBAAL,CAAwBW,KAAxB;AACA,OAHD,MAGO,IAAKC,oCAAL,EAA4C;AAClD;AACA,aAAKZ,iBAAL;AACA;AACD;AACD;;AAEDmB,EAAAA,iBAAiB,GAAG;AACnB,QAAK,KAAKC,4BAAL,EAAL,EAA2C;AAC1C,WAAKpB,iBAAL;AACA;AACD;;AAEDqB,EAAAA,oBAAoB,GAAG;AAAA;;AACtB,kCAAKC,kBAAL,0GAAyBC,MAAzB;AACA,WAAO,KAAKD,kBAAZ;AACA;;AAEDzB,EAAAA,kBAAkB,CAAE2B,KAAF,EAAU;AAC3B,WAASC,GAAF,IAAW;AACjB,WAAKxB,eAAL,CAAsBuB,KAAtB,IAAgCC,GAAhC;AACA,KAFD;AAGA;;AAEDL,EAAAA,4BAA4B,GAAG;AAC9B,UAAM;AAAEhB,MAAAA;AAAF,QAAkB,KAAKD,KAA7B;AACA,UAAM;AACLS,MAAAA,oCAAoC,GAAG,KADlC;AAELD,MAAAA;AAFK,QAGF,KAAKrB,KAHT;AAIA,WACC,CAAE,KAAKY,qBAAP,IACAU,oCADA,IAEA,EAAID,KAAK,IAAIA,KAAK,CAACO,MAAnB,CAFA,IAGA,EAAId,WAAW,IAAIA,WAAW,CAACc,MAA/B,CAJD;AAMA;;AAEDlB,EAAAA,iBAAiB,GAAe;AAAA;;AAAA,QAAbW,KAAa,uEAAL,EAAK;AAC/B,UAAM;AACLe,MAAAA,kCAAkC,EAAEC,oBAD/B;AAELC,MAAAA,kCAAkC,EAAEC;AAF/B,QAGF,KAAKvC,KAHT;;AAKA,QAAK,CAAEqC,oBAAP,EAA8B;AAC7B;AACA,KAR8B,CAU/B;AACA;;;AACA,UAAMG,oBAAoB,GAAG,YAAEnB,KAAF,mCAAE,OAAOO,MAAT,CAA7B,CAZ+B,CAc/B;AACA;;AACAP,IAAAA,KAAK,GAAGA,KAAK,CAACoB,IAAN,EAAR,CAhB+B,CAkB/B;AACA;AACA;AACA;;AACA,QACC,CAAED,oBAAF,KACEnB,KAAK,CAACO,MAAN,GAAe,CAAf,IAAsB,CAAEW,oBAAF,IAA0B,gBAAOlB,KAAP,CADlD,CADD,EAGE;AACD,WAAKqB,QAAL,CAAe;AACd3B,QAAAA,eAAe,EAAE,KADH;AAEdC,QAAAA,kBAAkB,EAAE,IAFN;AAGd2B,QAAAA,OAAO,EAAE;AAHK,OAAf;AAMA;AACA;;AAED,SAAK/B,qBAAL,GAA6B,IAA7B;AAEA,SAAK8B,QAAL,CAAe;AACd1B,MAAAA,kBAAkB,EAAE,IADN;AAEd2B,MAAAA,OAAO,EAAE;AAFK,KAAf;AAKA,UAAMC,OAAO,GAAGP,oBAAoB,CAAEhB,KAAF,EAAS;AAC5CmB,MAAAA;AAD4C,KAAT,CAApC;AAIAI,IAAAA,OAAO,CACLC,IADF,CACU/B,WAAF,IAAmB;AACzB;AACA;AACA;AACA,UAAK,KAAKkB,kBAAL,KAA4BY,OAAjC,EAA2C;AAC1C;AACA;;AAED,WAAKF,QAAL,CAAe;AACd5B,QAAAA,WADc;AAEd6B,QAAAA,OAAO,EAAE,KAFK;AAGd5B,QAAAA,eAAe,EAAE,CAAC,CAAED,WAAW,CAACc;AAHlB,OAAf;;AAMA,UAAK,CAAC,CAAEd,WAAW,CAACc,MAApB,EAA6B;AAC5B,aAAK5B,KAAL,CAAW8C,cAAX,CACC;AACC;AACA,sBACC,0DADD,EAEC,2DAFD,EAGChC,WAAW,CAACc,MAHb,CAFD,EAOCd,WAAW,CAACc,MAPb,CADD,EAUC,WAVD;AAYA,OAbD,MAaO;AACN,aAAK5B,KAAL,CAAW8C,cAAX,CACC,cAAI,aAAJ,CADD,EAEC,WAFD;AAIA;;AACD,WAAKlC,qBAAL,GAA6B,KAA7B;AACA,KAnCF,EAoCEmC,KApCF,CAoCS,MAAM;AACb,UAAK,KAAKf,kBAAL,KAA4BY,OAAjC,EAA2C;AAC1C,aAAKF,QAAL,CAAe;AACdC,UAAAA,OAAO,EAAE;AADK,SAAf;AAGA,aAAK/B,qBAAL,GAA6B,KAA7B;AACA;AACD,KA3CF,EA9C+B,CA2F/B;AACA;;AACA,SAAKoB,kBAAL,GAA0BY,OAA1B;AACA;;AAED3C,EAAAA,QAAQ,CAAE+C,KAAF,EAAU;AACjB,UAAMC,UAAU,GAAGD,KAAK,CAACE,MAAN,CAAa7B,KAAhC;AAEA,SAAKrB,KAAL,CAAWC,QAAX,CAAqBgD,UAArB;;AACA,QAAK,CAAE,KAAKjD,KAAL,CAAW2B,kBAAlB,EAAuC;AACtC,WAAKjB,iBAAL,CAAwBuC,UAAxB;AACA;AACD;;AAED9C,EAAAA,OAAO,GAAG;AACT,UAAM;AAAEW,MAAAA;AAAF,QAAkB,KAAKD,KAA7B;AACA,UAAM;AAAEc,MAAAA,kBAAF;AAAsBN,MAAAA;AAAtB,QAAgC,KAAKrB,KAA3C,CAFS,CAIT;AACA;;AACA,QACCqB,KAAK,IACL,CAAEM,kBADF,IAEA,CAAE,KAAKf,qBAFP,IAGA,EAAIE,WAAW,IAAIA,WAAW,CAACc,MAA/B,CAJD,EAKE;AACD;AACA,WAAKlB,iBAAL,CAAwBW,KAAxB;AACA;AACD;;AAEDjB,EAAAA,SAAS,CAAE4C,KAAF,EAAU;AAClB,UAAM;AACLjC,MAAAA,eADK;AAELC,MAAAA,kBAFK;AAGLF,MAAAA,WAHK;AAIL6B,MAAAA;AAJK,QAKF,KAAK9B,KALT,CADkB,CAQlB;AACA;;AACA,QAAK,CAAEE,eAAF,IAAqB,CAAED,WAAW,CAACc,MAAnC,IAA6Ce,OAAlD,EAA4D;AAC3D;AACA;AACA;AACA;AACA;AACA,cAASK,KAAK,CAACG,OAAf;AACC;AACA;AACA,aAAKC,YAAL;AAAS;AACR,gBAAK,MAAMJ,KAAK,CAACE,MAAN,CAAaG,cAAxB,EAAyC;AACxCL,cAAAA,KAAK,CAACM,cAAN,GADwC,CAGxC;;AACAN,cAAAA,KAAK,CAACE,MAAN,CAAaK,iBAAb,CAAgC,CAAhC,EAAmC,CAAnC;AACA;;AACD;AACA;AACD;AACA;;AACA,aAAKC,cAAL;AAAW;AACV,gBACC,KAAKxD,KAAL,CAAWqB,KAAX,CAAiBO,MAAjB,KAA4BoB,KAAK,CAACE,MAAN,CAAaG,cAD1C,EAEE;AACDL,cAAAA,KAAK,CAACM,cAAN,GADC,CAGD;;AACAN,cAAAA,KAAK,CAACE,MAAN,CAAaK,iBAAb,CACC,KAAKvD,KAAL,CAAWqB,KAAX,CAAiBO,MADlB,EAEC,KAAK5B,KAAL,CAAWqB,KAAX,CAAiBO,MAFlB;AAIA;;AACD;AACA;AAED;;AACA,aAAK6B,eAAL;AAAY;AACX,gBAAK,KAAKzD,KAAL,CAAW0D,QAAhB,EAA2B;AAC1B,mBAAK1D,KAAL,CAAW0D,QAAX,CAAqB,IAArB,EAA2BV,KAA3B;AACA;;AAED;AACA;AApCF;;AAuCA;AACA;;AAED,UAAMW,UAAU,GAAG,KAAK9C,KAAL,CAAWC,WAAX,CAClB,KAAKD,KAAL,CAAWG,kBADO,CAAnB;;AAIA,YAASgC,KAAK,CAACG,OAAf;AACC,WAAKC,YAAL;AAAS;AACRJ,UAAAA,KAAK,CAACM,cAAN;AACA,gBAAMM,aAAa,GAAG,CAAE5C,kBAAF,GACnBF,WAAW,CAACc,MAAZ,GAAqB,CADF,GAEnBZ,kBAAkB,GAAG,CAFxB;AAGA,eAAK0B,QAAL,CAAe;AACd1B,YAAAA,kBAAkB,EAAE4C;AADN,WAAf;AAGA;AACA;;AACD,WAAKJ,cAAL;AAAW;AACVR,UAAAA,KAAK,CAACM,cAAN;AACA,gBAAMO,SAAS,GACd7C,kBAAkB,KAAK,IAAvB,IACAA,kBAAkB,KAAKF,WAAW,CAACc,MAAZ,GAAqB,CAD5C,GAEG,CAFH,GAGGZ,kBAAkB,GAAG,CAJzB;AAKA,eAAK0B,QAAL,CAAe;AACd1B,YAAAA,kBAAkB,EAAE6C;AADN,WAAf;AAGA;AACA;;AACD,WAAKC,aAAL;AAAU;AACT,cAAK,KAAKjD,KAAL,CAAWG,kBAAX,KAAkC,IAAvC,EAA8C;AAC7C,iBAAKX,UAAL,CAAiBsD,UAAjB,EAD6C,CAE7C;;AACA,iBAAK3D,KAAL,CAAW+D,KAAX,CAAkB,cAAI,gBAAJ,CAAlB;AACA;;AACD;AACA;;AACD,WAAKN,eAAL;AAAY;AACX,cAAK,KAAK5C,KAAL,CAAWG,kBAAX,KAAkC,IAAvC,EAA8C;AAC7C,iBAAKX,UAAL,CAAiBsD,UAAjB;;AAEA,gBAAK,KAAK3D,KAAL,CAAW0D,QAAhB,EAA2B;AAC1B,mBAAK1D,KAAL,CAAW0D,QAAX,CAAqBC,UAArB,EAAiCX,KAAjC;AACA;AACD,WAND,MAMO,IAAK,KAAKhD,KAAL,CAAW0D,QAAhB,EAA2B;AACjC,iBAAK1D,KAAL,CAAW0D,QAAX,CAAqB,IAArB,EAA2BV,KAA3B;AACA;;AAED;AACA;AA3CF;AA6CA;;AAED3C,EAAAA,UAAU,CAAEsD,UAAF,EAAe;AACxB,SAAK3D,KAAL,CAAWC,QAAX,CAAqB0D,UAAU,CAACK,GAAhC,EAAqCL,UAArC;AACA,SAAKjB,QAAL,CAAe;AACd1B,MAAAA,kBAAkB,EAAE,IADN;AAEdD,MAAAA,eAAe,EAAE;AAFH,KAAf;AAIA;;AAEDT,EAAAA,aAAa,CAAEqD,UAAF,EAAe;AAC3B,SAAKtD,UAAL,CAAiBsD,UAAjB,EAD2B,CAE3B;;AACA,SAAKlD,QAAL,CAAce,OAAd,CAAsByC,KAAtB;AACA;;AAE8B,SAAxBC,wBAAwB,cAQ7B;AAAA,QAPD;AACC7C,MAAAA,KADD;AAEC8C,MAAAA,UAFD;AAGCxC,MAAAA,kBAHD;AAICL,MAAAA,oCAAoC,GAAG;AAJxC,KAOC;AAAA,QADD;AAAEP,MAAAA;AAAF,KACC;AACD,QAAIqD,qBAAqB,GAAGrD,eAA5B;AAEA,UAAMsD,QAAQ,GAAGhD,KAAK,IAAIA,KAAK,CAACO,MAAhC;;AAEA,QAAK,CAAEN,oCAAF,IAA0C,CAAE+C,QAAjD,EAA4D;AAC3DD,MAAAA,qBAAqB,GAAG,KAAxB;AACA;;AAED,QAAKzC,kBAAkB,KAAK,IAA5B,EAAmC;AAClCyC,MAAAA,qBAAqB,GAAG,KAAxB;AACA;;AAED,WAAO;AACNrD,MAAAA,eAAe,EAAEqD,qBADX;AAENnD,MAAAA,oBAAoB,EAAG,sCAAsCkD,UAAY,EAFnE;AAGNjD,MAAAA,wBAAwB,EAAG,qCAAqCiD,UAAY;AAHtE,KAAP;AAKA;;AAEDG,EAAAA,MAAM,GAAG;AACR,WACC,qDACG,KAAKC,aAAL,EADH,EAEG,KAAKC,iBAAL,EAFH,CADD;AAMA;;AAEDD,EAAAA,aAAa,GAAG;AACf,UAAM;AACLE,MAAAA,KADK;AAELC,MAAAA,SAFK;AAGLC,MAAAA,WAHK;AAILR,MAAAA,UAJK;AAKLS,MAAAA,WAAW,GAAG,cAAI,6BAAJ,CALT;AAMLC,MAAAA,2BAA2B,EAAEN,aANxB;AAOLlD,MAAAA,KAAK,GAAG;AAPH,QAQF,KAAKrB,KART;AAUA,UAAM;AACL2C,MAAAA,OADK;AAEL5B,MAAAA,eAFK;AAGLC,MAAAA,kBAHK;AAILC,MAAAA,oBAJK;AAKLC,MAAAA;AALK,QAMF,KAAKL,KANT;AAQA,UAAMiE,YAAY,GAAG;AACpBC,MAAAA,EAAE,EAAG,qBAAqBZ,UAAY,EADlB;AAEpBM,MAAAA,KAFoB;AAGpBC,MAAAA,SAAS,EAAE,yBAAY,wBAAZ,EAAsCA,SAAtC,EAAiD;AAC3D,yBAAiBC;AAD0C,OAAjD;AAHS,KAArB;AAQA,UAAMK,UAAU,GAAG;AAClB3D,MAAAA,KADkB;AAElB4D,MAAAA,QAAQ,EAAE,IAFQ;AAGlBP,MAAAA,SAAS,EAAE,+BAHO;AAIlBQ,MAAAA,IAAI,EAAE,MAJY;AAKlBjF,MAAAA,QAAQ,EAAE,KAAKA,QALG;AAMlBE,MAAAA,OAAO,EAAE,KAAKA,OANI;AAOlByE,MAAAA,WAPkB;AAQlBxE,MAAAA,SAAS,EAAE,KAAKA,SARE;AASlB+E,MAAAA,IAAI,EAAE,UATY;AAUlB,oBAAc,cAAI,KAAJ,CAVI;AAWlB,uBAAiBpE,eAXC;AAYlB,2BAAqB,MAZH;AAalB,mBAAaE,oBAbK;AAclB,+BACCD,kBAAkB,KAAK,IAAvB,GACI,GAAGE,wBAA0B,IAAIF,kBAAoB,EADzD,GAEGoE,SAjBc;AAkBlBjD,MAAAA,GAAG,EAAE,KAAK1B;AAlBQ,KAAnB;;AAqBA,QAAK8D,aAAL,EAAqB;AACpB,aAAOA,aAAa,CAAEO,YAAF,EAAgBE,UAAhB,EAA4BrC,OAA5B,CAApB;AACA;;AAED,WACC,4BAAC,uBAAD,EAAkBmC,YAAlB,EACC,qCAAYE,UAAZ,CADD,EAEGrC,OAAO,IAAI,4BAAC,mBAAD,OAFd,CADD;AAMA;;AAED6B,EAAAA,iBAAiB,GAAG;AACnB,UAAM;AACLE,MAAAA,SADK;AAELW,MAAAA,+BAA+B,EAAEb,iBAF5B;AAGLnD,MAAAA,KAAK,GAAG,EAHH;AAILC,MAAAA,oCAAoC,GAAG;AAJlC,QAKF,KAAKtB,KALT;AAOA,UAAM;AACLe,MAAAA,eADK;AAELD,MAAAA,WAFK;AAGLE,MAAAA,kBAHK;AAILC,MAAAA,oBAJK;AAKLC,MAAAA,wBALK;AAMLyB,MAAAA;AANK,QAOF,KAAK9B,KAPT;AASA,UAAMyE,oBAAoB,GAAG;AAC5BP,MAAAA,EAAE,EAAE9D,oBADwB;AAE5BkB,MAAAA,GAAG,EAAE,KAAK3B,eAFkB;AAG5B2E,MAAAA,IAAI,EAAE;AAHsB,KAA7B;;AAMA,UAAMI,wBAAwB,GAAG,CAAE5B,UAAF,EAAczB,KAAd,KAAyB;AACzD,aAAO;AACNiD,QAAAA,IAAI,EAAE,QADA;AAENK,QAAAA,QAAQ,EAAE,IAFJ;AAGNT,QAAAA,EAAE,EAAG,GAAG7D,wBAA0B,IAAIgB,KAAO,EAHvC;AAINC,QAAAA,GAAG,EAAE,KAAK5B,kBAAL,CAAyB2B,KAAzB,CAJC;AAKN,yBAAiBA,KAAK,KAAKlB;AALrB,OAAP;AAOA,KARD;;AAUA,QACC,wBAAYwD,iBAAZ,KACAzD,eADA,IAEA,CAAC,CAAED,WAAW,CAACc,MAHhB,EAIE;AACD,aAAO4C,iBAAiB,CAAE;AACzB1D,QAAAA,WADyB;AAEzBE,QAAAA,kBAFyB;AAGzBsE,QAAAA,oBAHyB;AAIzBC,QAAAA,wBAJyB;AAKzBE,QAAAA,SAAS,EAAE9C,OALc;AAMzB+C,QAAAA,qBAAqB,EAAE,KAAKpF,aANH;AAOzBkC,QAAAA,oBAAoB,EACnBlB,oCAAoC,IACpC,EAAID,KAAK,IAAIA,KAAK,CAACO,MAAnB;AATwB,OAAF,CAAxB;AAWA;;AAED,QACC,CAAE,wBAAY4C,iBAAZ,CAAF,IACAzD,eADA,IAEA,CAAC,CAAED,WAAW,CAACc,MAHhB,EAIE;AACD,aACC,4BAAC,mBAAD;AAAS,QAAA,QAAQ,EAAC,QAAlB;AAA2B,QAAA,OAAO,MAAlC;AAAmC,QAAA,YAAY,EAAG;AAAlD,SACC,8DACM0D,oBADN;AAEC,QAAA,SAAS,EAAG,yBACX,qCADW,EAEV,GAAGZ,SAAW,eAFJ;AAFb,UAOG5D,WAAW,CAAC6E,GAAZ,CAAiB,CAAEhC,UAAF,EAAczB,KAAd,KAClB,4BAAC,kBAAD,6BACMqD,wBAAwB,CAC5B5B,UAD4B,EAE5BzB,KAF4B,CAD9B;AAKC,QAAA,GAAG,EAAGyB,UAAU,CAACoB,EALlB;AAMC,QAAA,SAAS,EAAG,yBACX,oCADW,EAEX;AACC,yBACC7C,KAAK,KAAKlB;AAFZ,SAFW,CANb;AAaC,QAAA,OAAO,EAAG,MACT,KAAKV,aAAL,CAAoBqD,UAApB;AAdF,UAiBGA,UAAU,CAACiC,KAjBd,CADC,CAPH,CADD,CADD;AAiCA;;AACD,WAAO,IAAP;AACA;;AA5hB+B;AA+hBjC;AACA;AACA;;;eACe,sBACdC,wBADc,EAEdC,8BAFc,EAGdC,uBAHc,EAId,sBAAY,CAAEC,MAAF,EAAUhG,KAAV,KAAqB;AAChC;AACA;AACA,MAAK,wBAAYA,KAAK,CAACoC,kCAAlB,CAAL,EAA8D;AAC7D;AACA;;AACD,QAAM;AAAE6D,IAAAA;AAAF,MAAkBD,MAAM,CAAEE,YAAF,CAA9B;AACA,SAAO;AACN9D,IAAAA,kCAAkC,EAAE6D,WAAW,GAC7C7D;AAFI,GAAP;AAIA,CAXD,CAJc,EAgBZvC,QAhBY,C","sourcesContent":["/**\n * External dependencies\n */\nimport { debounce, isFunction } from 'lodash';\nimport classnames from 'classnames';\nimport scrollIntoView from 'dom-scroll-into-view';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf, _n } from '@wordpress/i18n';\nimport { Component, createRef } from '@wordpress/element';\nimport { UP, DOWN, ENTER, TAB } from '@wordpress/keycodes';\nimport {\n\tBaseControl,\n\tButton,\n\tSpinner,\n\twithSpokenMessages,\n\tPopover,\n} from '@wordpress/components';\nimport { withInstanceId, withSafeTimeout, compose } from '@wordpress/compose';\nimport { withSelect } from '@wordpress/data';\nimport { isURL } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nclass URLInput extends Component {\n\tconstructor( props ) {\n\t\tsuper( props );\n\n\t\tthis.onChange = this.onChange.bind( this );\n\t\tthis.onFocus = this.onFocus.bind( this );\n\t\tthis.onKeyDown = this.onKeyDown.bind( this );\n\t\tthis.selectLink = this.selectLink.bind( this );\n\t\tthis.handleOnClick = this.handleOnClick.bind( this );\n\t\tthis.bindSuggestionNode = this.bindSuggestionNode.bind( this );\n\t\tthis.autocompleteRef = props.autocompleteRef || createRef();\n\t\tthis.inputRef = createRef();\n\t\tthis.updateSuggestions = debounce(\n\t\t\tthis.updateSuggestions.bind( this ),\n\t\t\t200\n\t\t);\n\n\t\tthis.suggestionNodes = [];\n\n\t\tthis.isUpdatingSuggestions = false;\n\n\t\tthis.state = {\n\t\t\tsuggestions: [],\n\t\t\tshowSuggestions: false,\n\t\t\tselectedSuggestion: null,\n\n\t\t\tsuggestionsListboxId: '',\n\t\t\tsuggestionOptionIdPrefix: '',\n\t\t};\n\t}\n\n\tcomponentDidUpdate( prevProps ) {\n\t\tconst { showSuggestions, selectedSuggestion } = this.state;\n\t\tconst {\n\t\t\tvalue,\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t} = this.props;\n\n\t\t// Only have to worry about scrolling selected suggestion into view\n\t\t// when already expanded.\n\t\tif (\n\t\t\tshowSuggestions &&\n\t\t\tselectedSuggestion !== null &&\n\t\t\tthis.suggestionNodes[ selectedSuggestion ] &&\n\t\t\t! this.scrollingIntoView\n\t\t) {\n\t\t\tthis.scrollingIntoView = true;\n\t\t\tscrollIntoView(\n\t\t\t\tthis.suggestionNodes[ selectedSuggestion ],\n\t\t\t\tthis.autocompleteRef.current,\n\t\t\t\t{\n\t\t\t\t\tonlyScrollIfNeeded: true,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tthis.props.setTimeout( () => {\n\t\t\t\tthis.scrollingIntoView = false;\n\t\t\t}, 100 );\n\t\t}\n\n\t\t// Update suggestions when the value changes.\n\t\tif (\n\t\t\tprevProps.value !== value &&\n\t\t\t! this.props.disableSuggestions &&\n\t\t\t! this.isUpdatingSuggestions\n\t\t) {\n\t\t\tif ( value?.length ) {\n\t\t\t\t// If the new value is not empty we need to update with suggestions for it.\n\t\t\t\tthis.updateSuggestions( value );\n\t\t\t} else if ( __experimentalShowInitialSuggestions ) {\n\t\t\t\t// If the new value is empty and we can show initial suggestions, then show initial suggestions.\n\t\t\t\tthis.updateSuggestions();\n\t\t\t}\n\t\t}\n\t}\n\n\tcomponentDidMount() {\n\t\tif ( this.shouldShowInitialSuggestions() ) {\n\t\t\tthis.updateSuggestions();\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.suggestionsRequest?.cancel?.();\n\t\tdelete this.suggestionsRequest;\n\t}\n\n\tbindSuggestionNode( index ) {\n\t\treturn ( ref ) => {\n\t\t\tthis.suggestionNodes[ index ] = ref;\n\t\t};\n\t}\n\n\tshouldShowInitialSuggestions() {\n\t\tconst { suggestions } = this.state;\n\t\tconst {\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t\tvalue,\n\t\t} = this.props;\n\t\treturn (\n\t\t\t! this.isUpdatingSuggestions &&\n\t\t\t__experimentalShowInitialSuggestions &&\n\t\t\t! ( value && value.length ) &&\n\t\t\t! ( suggestions && suggestions.length )\n\t\t);\n\t}\n\n\tupdateSuggestions( value = '' ) {\n\t\tconst {\n\t\t\t__experimentalFetchLinkSuggestions: fetchLinkSuggestions,\n\t\t\t__experimentalHandleURLSuggestions: handleURLSuggestions,\n\t\t} = this.props;\n\n\t\tif ( ! fetchLinkSuggestions ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Initial suggestions may only show if there is no value\n\t\t// (note: this includes whitespace).\n\t\tconst isInitialSuggestions = ! value?.length;\n\n\t\t// Trim only now we've determined whether or not it originally had a \"length\"\n\t\t// (even if that value was all whitespace).\n\t\tvalue = value.trim();\n\n\t\t// Allow a suggestions request if:\n\t\t// - there are at least 2 characters in the search input (except manual searches where\n\t\t// search input length is not required to trigger a fetch)\n\t\t// - this is a direct entry (eg: a URL)\n\t\tif (\n\t\t\t! isInitialSuggestions &&\n\t\t\t( value.length < 2 || ( ! handleURLSuggestions && isURL( value ) ) )\n\t\t) {\n\t\t\tthis.setState( {\n\t\t\t\tshowSuggestions: false,\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tloading: false,\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isUpdatingSuggestions = true;\n\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tloading: true,\n\t\t} );\n\n\t\tconst request = fetchLinkSuggestions( value, {\n\t\t\tisInitialSuggestions,\n\t\t} );\n\n\t\trequest\n\t\t\t.then( ( suggestions ) => {\n\t\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\n\t\t\t\t// comparing the request reference in on the instance, which is\n\t\t\t\t// reset or deleted on subsequent requests or unmounting.\n\t\t\t\tif ( this.suggestionsRequest !== request ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.setState( {\n\t\t\t\t\tsuggestions,\n\t\t\t\t\tloading: false,\n\t\t\t\t\tshowSuggestions: !! suggestions.length,\n\t\t\t\t} );\n\n\t\t\t\tif ( !! suggestions.length ) {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\tsprintf(\n\t\t\t\t\t\t\t/* translators: %s: number of results. */\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'%d result found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\t'%d results found, use up and down arrow keys to navigate.',\n\t\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tsuggestions.length\n\t\t\t\t\t\t),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis.props.debouncedSpeak(\n\t\t\t\t\t\t__( 'No results.' ),\n\t\t\t\t\t\t'assertive'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis.isUpdatingSuggestions = false;\n\t\t\t} )\n\t\t\t.catch( () => {\n\t\t\t\tif ( this.suggestionsRequest === request ) {\n\t\t\t\t\tthis.setState( {\n\t\t\t\t\t\tloading: false,\n\t\t\t\t\t} );\n\t\t\t\t\tthis.isUpdatingSuggestions = false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// Note that this assignment is handled *before* the async search request\n\t\t// as a Promise always resolves on the next tick of the event loop.\n\t\tthis.suggestionsRequest = request;\n\t}\n\n\tonChange( event ) {\n\t\tconst inputValue = event.target.value;\n\n\t\tthis.props.onChange( inputValue );\n\t\tif ( ! this.props.disableSuggestions ) {\n\t\t\tthis.updateSuggestions( inputValue );\n\t\t}\n\t}\n\n\tonFocus() {\n\t\tconst { suggestions } = this.state;\n\t\tconst { disableSuggestions, value } = this.props;\n\n\t\t// When opening the link editor, if there's a value present, we want to load the suggestions pane with the results for this input search value\n\t\t// Don't re-run the suggestions on focus if there are already suggestions present (prevents searching again when tabbing between the input and buttons)\n\t\tif (\n\t\t\tvalue &&\n\t\t\t! disableSuggestions &&\n\t\t\t! this.isUpdatingSuggestions &&\n\t\t\t! ( suggestions && suggestions.length )\n\t\t) {\n\t\t\t// Ensure the suggestions are updated with the current input value.\n\t\t\tthis.updateSuggestions( value );\n\t\t}\n\t}\n\n\tonKeyDown( event ) {\n\t\tconst {\n\t\t\tshowSuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestions,\n\t\t\tloading,\n\t\t} = this.state;\n\n\t\t// If the suggestions are not shown or loading, we shouldn't handle the arrow keys\n\t\t// We shouldn't preventDefault to allow block arrow keys navigation.\n\t\tif ( ! showSuggestions || ! suggestions.length || loading ) {\n\t\t\t// In the Windows version of Firefox the up and down arrows don't move the caret\n\t\t\t// within an input field like they do for Mac Firefox/Chrome/Safari. This causes\n\t\t\t// a form of focus trapping that is disruptive to the user experience. This disruption\n\t\t\t// only happens if the caret is not in the first or last position in the text input.\n\t\t\t// See: https://github.com/WordPress/gutenberg/issues/5693#issuecomment-436684747\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\t// When UP is pressed, if the caret is at the start of the text, move it to the 0\n\t\t\t\t// position.\n\t\t\t\tcase UP: {\n\t\t\t\t\tif ( 0 !== event.target.selectionStart ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to position 0.\n\t\t\t\t\t\tevent.target.setSelectionRange( 0, 0 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// When DOWN is pressed, if the caret is not at the end of the text, move it to the\n\t\t\t\t// last position.\n\t\t\t\tcase DOWN: {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.props.value.length !== event.target.selectionStart\n\t\t\t\t\t) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to the last position.\n\t\t\t\t\t\tevent.target.setSelectionRange(\n\t\t\t\t\t\t\tthis.props.value.length,\n\t\t\t\t\t\t\tthis.props.value.length\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Submitting while loading should trigger onSubmit.\n\t\t\t\tcase ENTER: {\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst suggestion = this.state.suggestions[\n\t\t\tthis.state.selectedSuggestion\n\t\t];\n\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase UP: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst previousIndex = ! selectedSuggestion\n\t\t\t\t\t? suggestions.length - 1\n\t\t\t\t\t: selectedSuggestion - 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: previousIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase DOWN: {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex =\n\t\t\t\t\tselectedSuggestion === null ||\n\t\t\t\t\tselectedSuggestion === suggestions.length - 1\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: selectedSuggestion + 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: nextIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TAB: {\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\t\t\t\t\t// Announce a link has been selected when tabbing away from the input field.\n\t\t\t\t\tthis.props.speak( __( 'Link selected.' ) );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ENTER: {\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( suggestion );\n\n\t\t\t\t\tif ( this.props.onSubmit ) {\n\t\t\t\t\t\tthis.props.onSubmit( suggestion, event );\n\t\t\t\t\t}\n\t\t\t\t} else if ( this.props.onSubmit ) {\n\t\t\t\t\tthis.props.onSubmit( null, event );\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tselectLink( suggestion ) {\n\t\tthis.props.onChange( suggestion.url, suggestion );\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tshowSuggestions: false,\n\t\t} );\n\t}\n\n\thandleOnClick( suggestion ) {\n\t\tthis.selectLink( suggestion );\n\t\t// Move focus to the input field when a link suggestion is clicked.\n\t\tthis.inputRef.current.focus();\n\t}\n\n\tstatic getDerivedStateFromProps(\n\t\t{\n\t\t\tvalue,\n\t\t\tinstanceId,\n\t\t\tdisableSuggestions,\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t},\n\t\t{ showSuggestions }\n\t) {\n\t\tlet shouldShowSuggestions = showSuggestions;\n\n\t\tconst hasValue = value && value.length;\n\n\t\tif ( ! __experimentalShowInitialSuggestions && ! hasValue ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\tif ( disableSuggestions === true ) {\n\t\t\tshouldShowSuggestions = false;\n\t\t}\n\n\t\treturn {\n\t\t\tshowSuggestions: shouldShowSuggestions,\n\t\t\tsuggestionsListboxId: `block-editor-url-input-suggestions-${ instanceId }`,\n\t\t\tsuggestionOptionIdPrefix: `block-editor-url-input-suggestion-${ instanceId }`,\n\t\t};\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ this.renderControl() }\n\t\t\t\t{ this.renderSuggestions() }\n\t\t\t</>\n\t\t);\n\t}\n\n\trenderControl() {\n\t\tconst {\n\t\t\tlabel,\n\t\t\tclassName,\n\t\t\tisFullWidth,\n\t\t\tinstanceId,\n\t\t\tplaceholder = __( 'Paste URL or type to search' ),\n\t\t\t__experimentalRenderControl: renderControl,\n\t\t\tvalue = '',\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tloading,\n\t\t\tshowSuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t} = this.state;\n\n\t\tconst controlProps = {\n\t\t\tid: `url-input-control-${ instanceId }`,\n\t\t\tlabel,\n\t\t\tclassName: classnames( 'block-editor-url-input', className, {\n\t\t\t\t'is-full-width': isFullWidth,\n\t\t\t} ),\n\t\t};\n\n\t\tconst inputProps = {\n\t\t\tvalue,\n\t\t\trequired: true,\n\t\t\tclassName: 'block-editor-url-input__input',\n\t\t\ttype: 'text',\n\t\t\tonChange: this.onChange,\n\t\t\tonFocus: this.onFocus,\n\t\t\tplaceholder,\n\t\t\tonKeyDown: this.onKeyDown,\n\t\t\trole: 'combobox',\n\t\t\t'aria-label': __( 'URL' ),\n\t\t\t'aria-expanded': showSuggestions,\n\t\t\t'aria-autocomplete': 'list',\n\t\t\t'aria-owns': suggestionsListboxId,\n\t\t\t'aria-activedescendant':\n\t\t\t\tselectedSuggestion !== null\n\t\t\t\t\t? `${ suggestionOptionIdPrefix }-${ selectedSuggestion }`\n\t\t\t\t\t: undefined,\n\t\t\tref: this.inputRef,\n\t\t};\n\n\t\tif ( renderControl ) {\n\t\t\treturn renderControl( controlProps, inputProps, loading );\n\t\t}\n\n\t\treturn (\n\t\t\t<BaseControl { ...controlProps }>\n\t\t\t\t<input { ...inputProps } />\n\t\t\t\t{ loading && <Spinner /> }\n\t\t\t</BaseControl>\n\t\t);\n\t}\n\n\trenderSuggestions() {\n\t\tconst {\n\t\t\tclassName,\n\t\t\t__experimentalRenderSuggestions: renderSuggestions,\n\t\t\tvalue = '',\n\t\t\t__experimentalShowInitialSuggestions = false,\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tshowSuggestions,\n\t\t\tsuggestions,\n\t\t\tselectedSuggestion,\n\t\t\tsuggestionsListboxId,\n\t\t\tsuggestionOptionIdPrefix,\n\t\t\tloading,\n\t\t} = this.state;\n\n\t\tconst suggestionsListProps = {\n\t\t\tid: suggestionsListboxId,\n\t\t\tref: this.autocompleteRef,\n\t\t\trole: 'listbox',\n\t\t};\n\n\t\tconst buildSuggestionItemProps = ( suggestion, index ) => {\n\t\t\treturn {\n\t\t\t\trole: 'option',\n\t\t\t\ttabIndex: '-1',\n\t\t\t\tid: `${ suggestionOptionIdPrefix }-${ index }`,\n\t\t\t\tref: this.bindSuggestionNode( index ),\n\t\t\t\t'aria-selected': index === selectedSuggestion,\n\t\t\t};\n\t\t};\n\n\t\tif (\n\t\t\tisFunction( renderSuggestions ) &&\n\t\t\tshowSuggestions &&\n\t\t\t!! suggestions.length\n\t\t) {\n\t\t\treturn renderSuggestions( {\n\t\t\t\tsuggestions,\n\t\t\t\tselectedSuggestion,\n\t\t\t\tsuggestionsListProps,\n\t\t\t\tbuildSuggestionItemProps,\n\t\t\t\tisLoading: loading,\n\t\t\t\thandleSuggestionClick: this.handleOnClick,\n\t\t\t\tisInitialSuggestions:\n\t\t\t\t\t__experimentalShowInitialSuggestions &&\n\t\t\t\t\t! ( value && value.length ),\n\t\t\t} );\n\t\t}\n\n\t\tif (\n\t\t\t! isFunction( renderSuggestions ) &&\n\t\t\tshowSuggestions &&\n\t\t\t!! suggestions.length\n\t\t) {\n\t\t\treturn (\n\t\t\t\t<Popover position=\"bottom\" noArrow focusOnMount={ false }>\n\t\t\t\t\t<div\n\t\t\t\t\t\t{ ...suggestionsListProps }\n\t\t\t\t\t\tclassName={ classnames(\n\t\t\t\t\t\t\t'block-editor-url-input__suggestions',\n\t\t\t\t\t\t\t`${ className }__suggestions`\n\t\t\t\t\t\t) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ suggestions.map( ( suggestion, index ) => (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t{ ...buildSuggestionItemProps(\n\t\t\t\t\t\t\t\t\tsuggestion,\n\t\t\t\t\t\t\t\t\tindex\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tkey={ suggestion.id }\n\t\t\t\t\t\t\t\tclassName={ classnames(\n\t\t\t\t\t\t\t\t\t'block-editor-url-input__suggestion',\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t'is-selected':\n\t\t\t\t\t\t\t\t\t\t\tindex === selectedSuggestion,\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\tonClick={ () =>\n\t\t\t\t\t\t\t\t\tthis.handleOnClick( suggestion )\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\t{ suggestion.title }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</div>\n\t\t\t\t</Popover>\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/url-input/README.md\n */\nexport default compose(\n\twithSafeTimeout,\n\twithSpokenMessages,\n\twithInstanceId,\n\twithSelect( ( select, props ) => {\n\t\t// If a link suggestions handler is already provided then\n\t\t// bail.\n\t\tif ( isFunction( props.__experimentalFetchLinkSuggestions ) ) {\n\t\t\treturn;\n\t\t}\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn {\n\t\t\t__experimentalFetchLinkSuggestions: getSettings()\n\t\t\t\t.__experimentalFetchLinkSuggestions,\n\t\t};\n\t} )\n)( URLInput );\n"]}
@@ -104,7 +104,7 @@ function useMovingAnimation(_ref) {
104
104
  }
105
105
 
106
106
  if (prefersReducedMotion) {
107
- // if the animation is disabled and the scroll needs to be adjusted,
107
+ // If the animation is disabled and the scroll needs to be adjusted,
108
108
  // just move directly to the final scroll position.
109
109
  preserveScrollPosition();
110
110
  return;
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/use-moving-animation/index.js"],"names":["counterReducer","state","getAbsolutePosition","element","top","offsetTop","left","offsetLeft","useMovingAnimation","isSelected","adjustScrolling","enableAnimation","triggerAnimationOnChange","ref","prefersReducedMotion","triggeredAnimation","triggerAnimation","finishedAnimation","endAnimation","transform","setTransform","x","y","previous","current","preserveScrollPosition","scrollContainer","prevRect","getBoundingClientRect","blockRect","diff","scrollTop","style","destination","Math","round","onFrameChange","isMoving","transformOrigin","zIndex","onChange","value","from","to","reset","config","mass","tension","friction","immediate"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { useSpring } from '@react-spring/web';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseState,\n\tuseLayoutEffect,\n\tuseReducer,\n\tuseMemo,\n\tuseRef,\n} from '@wordpress/element';\nimport { useReducedMotion } from '@wordpress/compose';\nimport { getScrollContainer } from '@wordpress/dom';\n\n/**\n * Simple reducer used to increment a counter.\n *\n * @param {number} state Previous counter value.\n * @return {number} New state value.\n */\nconst counterReducer = ( state ) => state + 1;\n\nconst getAbsolutePosition = ( element ) => {\n\treturn {\n\t\ttop: element.offsetTop,\n\t\tleft: element.offsetLeft,\n\t};\n};\n\n/**\n * Hook used to compute the styles required to move a div into a new position.\n *\n * The way this animation works is the following:\n * - It first renders the element as if there was no animation.\n * - It takes a snapshot of the position of the block to use it\n * as a destination point for the animation.\n * - It restores the element to the previous position using a CSS transform\n * - It uses the \"resetAnimation\" flag to reset the animation\n * from the beginning in order to animate to the new destination point.\n *\n * @param {Object} $1 Options\n * @param {boolean} $1.isSelected Whether it's the current block or not.\n * @param {boolean} $1.adjustScrolling Adjust the scroll position to the current block.\n * @param {boolean} $1.enableAnimation Enable/Disable animation.\n * @param {*} $1.triggerAnimationOnChange Variable used to trigger the animation if it changes.\n */\nfunction useMovingAnimation( {\n\tisSelected,\n\tadjustScrolling,\n\tenableAnimation,\n\ttriggerAnimationOnChange,\n} ) {\n\tconst ref = useRef();\n\tconst prefersReducedMotion = useReducedMotion() || ! enableAnimation;\n\tconst [ triggeredAnimation, triggerAnimation ] = useReducer(\n\t\tcounterReducer,\n\t\t0\n\t);\n\tconst [ finishedAnimation, endAnimation ] = useReducer( counterReducer, 0 );\n\tconst [ transform, setTransform ] = useState( { x: 0, y: 0 } );\n\tconst previous = useMemo(\n\t\t() => ( ref.current ? getAbsolutePosition( ref.current ) : null ),\n\t\t[ triggerAnimationOnChange ]\n\t);\n\n\t// Calculate the previous position of the block relative to the viewport and\n\t// return a function to maintain that position by scrolling.\n\tconst preserveScrollPosition = useMemo( () => {\n\t\tif ( ! adjustScrolling || ! ref.current ) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst scrollContainer = getScrollContainer( ref.current );\n\n\t\tif ( ! scrollContainer ) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst prevRect = ref.current.getBoundingClientRect();\n\t\treturn () => {\n\t\t\tconst blockRect = ref.current.getBoundingClientRect();\n\t\t\tconst diff = blockRect.top - prevRect.top;\n\n\t\t\tif ( diff ) {\n\t\t\t\tscrollContainer.scrollTop += diff;\n\t\t\t}\n\t\t};\n\t}, [ triggerAnimationOnChange, adjustScrolling ] );\n\n\tuseLayoutEffect( () => {\n\t\tif ( triggeredAnimation ) {\n\t\t\tendAnimation();\n\t\t}\n\t}, [ triggeredAnimation ] );\n\tuseLayoutEffect( () => {\n\t\tif ( ! previous ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( prefersReducedMotion ) {\n\t\t\t// if the animation is disabled and the scroll needs to be adjusted,\n\t\t\t// just move directly to the final scroll position.\n\t\t\tpreserveScrollPosition();\n\n\t\t\treturn;\n\t\t}\n\n\t\tref.current.style.transform = '';\n\t\tconst destination = getAbsolutePosition( ref.current );\n\n\t\ttriggerAnimation();\n\t\tsetTransform( {\n\t\t\tx: Math.round( previous.left - destination.left ),\n\t\t\ty: Math.round( previous.top - destination.top ),\n\t\t} );\n\t}, [ triggerAnimationOnChange ] );\n\n\t// Only called when either the x or y value changes.\n\tfunction onFrameChange( { x, y } ) {\n\t\tif ( ! ref.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isMoving = x === 0 && y === 0;\n\t\tref.current.style.transformOrigin = isMoving ? '' : 'center';\n\t\tref.current.style.transform = isMoving\n\t\t\t? ''\n\t\t\t: `translate3d(${ x }px,${ y }px,0)`;\n\t\tref.current.style.zIndex = ! isSelected || isMoving ? '' : '1';\n\n\t\tpreserveScrollPosition();\n\t}\n\n\t// Called for every frame computed by useSpring.\n\tfunction onChange( { value } ) {\n\t\tlet { x, y } = value;\n\t\tx = Math.round( x );\n\t\ty = Math.round( y );\n\n\t\tif ( x !== onChange.x || y !== onChange.y ) {\n\t\t\tonFrameChange( { x, y } );\n\t\t\tonChange.x = x;\n\t\t\tonChange.y = y;\n\t\t}\n\t}\n\n\tonChange.x = 0;\n\tonChange.y = 0;\n\n\tuseSpring( {\n\t\tfrom: {\n\t\t\tx: transform.x,\n\t\t\ty: transform.y,\n\t\t},\n\t\tto: {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t},\n\t\treset: triggeredAnimation !== finishedAnimation,\n\t\tconfig: { mass: 5, tension: 2000, friction: 200 },\n\t\timmediate: prefersReducedMotion,\n\t\tonChange,\n\t} );\n\n\treturn ref;\n}\n\nexport default useMovingAnimation;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/use-moving-animation/index.js"],"names":["counterReducer","state","getAbsolutePosition","element","top","offsetTop","left","offsetLeft","useMovingAnimation","isSelected","adjustScrolling","enableAnimation","triggerAnimationOnChange","ref","prefersReducedMotion","triggeredAnimation","triggerAnimation","finishedAnimation","endAnimation","transform","setTransform","x","y","previous","current","preserveScrollPosition","scrollContainer","prevRect","getBoundingClientRect","blockRect","diff","scrollTop","style","destination","Math","round","onFrameChange","isMoving","transformOrigin","zIndex","onChange","value","from","to","reset","config","mass","tension","friction","immediate"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { useSpring } from '@react-spring/web';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseState,\n\tuseLayoutEffect,\n\tuseReducer,\n\tuseMemo,\n\tuseRef,\n} from '@wordpress/element';\nimport { useReducedMotion } from '@wordpress/compose';\nimport { getScrollContainer } from '@wordpress/dom';\n\n/**\n * Simple reducer used to increment a counter.\n *\n * @param {number} state Previous counter value.\n * @return {number} New state value.\n */\nconst counterReducer = ( state ) => state + 1;\n\nconst getAbsolutePosition = ( element ) => {\n\treturn {\n\t\ttop: element.offsetTop,\n\t\tleft: element.offsetLeft,\n\t};\n};\n\n/**\n * Hook used to compute the styles required to move a div into a new position.\n *\n * The way this animation works is the following:\n * - It first renders the element as if there was no animation.\n * - It takes a snapshot of the position of the block to use it\n * as a destination point for the animation.\n * - It restores the element to the previous position using a CSS transform\n * - It uses the \"resetAnimation\" flag to reset the animation\n * from the beginning in order to animate to the new destination point.\n *\n * @param {Object} $1 Options\n * @param {boolean} $1.isSelected Whether it's the current block or not.\n * @param {boolean} $1.adjustScrolling Adjust the scroll position to the current block.\n * @param {boolean} $1.enableAnimation Enable/Disable animation.\n * @param {*} $1.triggerAnimationOnChange Variable used to trigger the animation if it changes.\n */\nfunction useMovingAnimation( {\n\tisSelected,\n\tadjustScrolling,\n\tenableAnimation,\n\ttriggerAnimationOnChange,\n} ) {\n\tconst ref = useRef();\n\tconst prefersReducedMotion = useReducedMotion() || ! enableAnimation;\n\tconst [ triggeredAnimation, triggerAnimation ] = useReducer(\n\t\tcounterReducer,\n\t\t0\n\t);\n\tconst [ finishedAnimation, endAnimation ] = useReducer( counterReducer, 0 );\n\tconst [ transform, setTransform ] = useState( { x: 0, y: 0 } );\n\tconst previous = useMemo(\n\t\t() => ( ref.current ? getAbsolutePosition( ref.current ) : null ),\n\t\t[ triggerAnimationOnChange ]\n\t);\n\n\t// Calculate the previous position of the block relative to the viewport and\n\t// return a function to maintain that position by scrolling.\n\tconst preserveScrollPosition = useMemo( () => {\n\t\tif ( ! adjustScrolling || ! ref.current ) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst scrollContainer = getScrollContainer( ref.current );\n\n\t\tif ( ! scrollContainer ) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst prevRect = ref.current.getBoundingClientRect();\n\t\treturn () => {\n\t\t\tconst blockRect = ref.current.getBoundingClientRect();\n\t\t\tconst diff = blockRect.top - prevRect.top;\n\n\t\t\tif ( diff ) {\n\t\t\t\tscrollContainer.scrollTop += diff;\n\t\t\t}\n\t\t};\n\t}, [ triggerAnimationOnChange, adjustScrolling ] );\n\n\tuseLayoutEffect( () => {\n\t\tif ( triggeredAnimation ) {\n\t\t\tendAnimation();\n\t\t}\n\t}, [ triggeredAnimation ] );\n\tuseLayoutEffect( () => {\n\t\tif ( ! previous ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( prefersReducedMotion ) {\n\t\t\t// If the animation is disabled and the scroll needs to be adjusted,\n\t\t\t// just move directly to the final scroll position.\n\t\t\tpreserveScrollPosition();\n\n\t\t\treturn;\n\t\t}\n\n\t\tref.current.style.transform = '';\n\t\tconst destination = getAbsolutePosition( ref.current );\n\n\t\ttriggerAnimation();\n\t\tsetTransform( {\n\t\t\tx: Math.round( previous.left - destination.left ),\n\t\t\ty: Math.round( previous.top - destination.top ),\n\t\t} );\n\t}, [ triggerAnimationOnChange ] );\n\n\t// Only called when either the x or y value changes.\n\tfunction onFrameChange( { x, y } ) {\n\t\tif ( ! ref.current ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isMoving = x === 0 && y === 0;\n\t\tref.current.style.transformOrigin = isMoving ? '' : 'center';\n\t\tref.current.style.transform = isMoving\n\t\t\t? ''\n\t\t\t: `translate3d(${ x }px,${ y }px,0)`;\n\t\tref.current.style.zIndex = ! isSelected || isMoving ? '' : '1';\n\n\t\tpreserveScrollPosition();\n\t}\n\n\t// Called for every frame computed by useSpring.\n\tfunction onChange( { value } ) {\n\t\tlet { x, y } = value;\n\t\tx = Math.round( x );\n\t\ty = Math.round( y );\n\n\t\tif ( x !== onChange.x || y !== onChange.y ) {\n\t\t\tonFrameChange( { x, y } );\n\t\t\tonChange.x = x;\n\t\t\tonChange.y = y;\n\t\t}\n\t}\n\n\tonChange.x = 0;\n\tonChange.y = 0;\n\n\tuseSpring( {\n\t\tfrom: {\n\t\t\tx: transform.x,\n\t\t\ty: transform.y,\n\t\t},\n\t\tto: {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t},\n\t\treset: triggeredAnimation !== finishedAnimation,\n\t\tconfig: { mass: 5, tension: 2000, friction: 200 },\n\t\timmediate: prefersReducedMotion,\n\t\tonChange,\n\t} );\n\n\treturn ref;\n}\n\nexport default useMovingAnimation;\n"]}
@@ -76,13 +76,13 @@ function onBlockDrop(targetRootClientId, targetBlockIndex, getBlockIndex, getCli
76
76
  srcClientIds: sourceClientIds,
77
77
  type: dropType,
78
78
  blocks
79
- } = parseDropEvent(event); // If the user is inserting a block
79
+ } = parseDropEvent(event); // If the user is inserting a block.
80
80
 
81
81
  if (dropType === 'inserter') {
82
82
  clearSelectedBlock();
83
83
  const blocksToInsert = blocks.map(block => (0, _blocks.cloneBlock)(block));
84
84
  insertBlocks(blocksToInsert, targetBlockIndex, targetRootClientId, true, null);
85
- } // If the user is moving a block
85
+ } // If the user is moving a block.
86
86
 
87
87
 
88
88
  if (dropType === 'block') {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/use-on-block-drop/index.js"],"names":["parseDropEvent","event","result","srcRootClientId","srcClientIds","srcIndex","type","blocks","dataTransfer","Object","assign","JSON","parse","getData","err","onBlockDrop","targetRootClientId","targetBlockIndex","getBlockIndex","getClientIdsOfDescendants","moveBlocksToPosition","insertBlocks","clearSelectedBlock","sourceRootClientId","sourceClientIds","dropType","blocksToInsert","map","block","sourceBlockIndex","includes","some","id","isAtSameLevel","draggedBlockCount","length","insertIndex","onFilesDrop","hasUploadPermissions","updateBlockAttributes","canInsertBlockType","files","transformation","transform","blockName","isMatch","onHTMLDrop","HTML","mode","useOnBlockDrop","select","blockEditorStore","getSettings","mediaUpload","_onDrop","_onFilesDrop","_onHTMLDrop","html"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tcloneBlock,\n\tfindTransform,\n\tgetBlockTransforms,\n\tpasteHandler,\n} from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { getFilesFromDataTransfer } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/** @typedef {import('@wordpress/element').WPSyntheticEvent} WPSyntheticEvent */\n\n/**\n * Retrieve the data for a block drop event.\n *\n * @param {WPSyntheticEvent} event The drop event.\n *\n * @return {Object} An object with block drag and drop data.\n */\nexport function parseDropEvent( event ) {\n\tlet result = {\n\t\tsrcRootClientId: null,\n\t\tsrcClientIds: null,\n\t\tsrcIndex: null,\n\t\ttype: null,\n\t\tblocks: null,\n\t};\n\n\tif ( ! event.dataTransfer ) {\n\t\treturn result;\n\t}\n\n\ttry {\n\t\tresult = Object.assign(\n\t\t\tresult,\n\t\t\tJSON.parse( event.dataTransfer.getData( 'wp-blocks' ) )\n\t\t);\n\t} catch ( err ) {\n\t\treturn result;\n\t}\n\n\treturn result;\n}\n\n/**\n * A function that returns an event handler function for block drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {Function} getBlockIndex A function that gets the index of a block.\n * @param {Function} getClientIdsOfDescendants A function that gets the client ids of descendant blocks.\n * @param {Function} moveBlocksToPosition A function that moves blocks.\n * @param {Function} insertBlocks A function that inserts blocks.\n * @param {Function} clearSelectedBlock A function that clears block selection.\n * @return {Function} The event handler for a block drop event.\n */\nexport function onBlockDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\tgetBlockIndex,\n\tgetClientIdsOfDescendants,\n\tmoveBlocksToPosition,\n\tinsertBlocks,\n\tclearSelectedBlock\n) {\n\treturn ( event ) => {\n\t\tconst {\n\t\t\tsrcRootClientId: sourceRootClientId,\n\t\t\tsrcClientIds: sourceClientIds,\n\t\t\ttype: dropType,\n\t\t\tblocks,\n\t\t} = parseDropEvent( event );\n\n\t\t// If the user is inserting a block\n\t\tif ( dropType === 'inserter' ) {\n\t\t\tclearSelectedBlock();\n\t\t\tconst blocksToInsert = blocks.map( ( block ) =>\n\t\t\t\tcloneBlock( block )\n\t\t\t);\n\t\t\tinsertBlocks(\n\t\t\t\tblocksToInsert,\n\t\t\t\ttargetBlockIndex,\n\t\t\t\ttargetRootClientId,\n\t\t\t\ttrue,\n\t\t\t\tnull\n\t\t\t);\n\t\t}\n\n\t\t// If the user is moving a block\n\t\tif ( dropType === 'block' ) {\n\t\t\tconst sourceBlockIndex = getBlockIndex( sourceClientIds[ 0 ] );\n\n\t\t\t// If the user is dropping to the same position, return early.\n\t\t\tif (\n\t\t\t\tsourceRootClientId === targetRootClientId &&\n\t\t\t\tsourceBlockIndex === targetBlockIndex\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the user is attempting to drop a block within its own\n\t\t\t// nested blocks, return early as this would create infinite\n\t\t\t// recursion.\n\t\t\tif (\n\t\t\t\tsourceClientIds.includes( targetRootClientId ) ||\n\t\t\t\tgetClientIdsOfDescendants( sourceClientIds ).some(\n\t\t\t\t\t( id ) => id === targetRootClientId\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isAtSameLevel = sourceRootClientId === targetRootClientId;\n\t\t\tconst draggedBlockCount = sourceClientIds.length;\n\n\t\t\t// If the block is kept at the same level and moved downwards,\n\t\t\t// subtract to take into account that the blocks being dragged\n\t\t\t// were removed from the block list above the insertion point.\n\t\t\tconst insertIndex =\n\t\t\t\tisAtSameLevel && sourceBlockIndex < targetBlockIndex\n\t\t\t\t\t? targetBlockIndex - draggedBlockCount\n\t\t\t\t\t: targetBlockIndex;\n\n\t\t\tmoveBlocksToPosition(\n\t\t\t\tsourceClientIds,\n\t\t\t\tsourceRootClientId,\n\t\t\t\ttargetRootClientId,\n\t\t\t\tinsertIndex\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * A function that returns an event handler function for block-related file drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {boolean} hasUploadPermissions Whether the user has upload permissions.\n * @param {Function} updateBlockAttributes A function that updates a block's attributes.\n * @param {Function} canInsertBlockType A function that returns checks whether a block type can be inserted.\n * @param {Function} insertBlocks A function that inserts blocks.\n *\n * @return {Function} The event handler for a block-related file drop event.\n */\nexport function onFilesDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\thasUploadPermissions,\n\tupdateBlockAttributes,\n\tcanInsertBlockType,\n\tinsertBlocks\n) {\n\treturn ( files ) => {\n\t\tif ( ! hasUploadPermissions ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst transformation = findTransform(\n\t\t\tgetBlockTransforms( 'from' ),\n\t\t\t( transform ) =>\n\t\t\t\ttransform.type === 'files' &&\n\t\t\t\tcanInsertBlockType( transform.blockName, targetRootClientId ) &&\n\t\t\t\ttransform.isMatch( files )\n\t\t);\n\n\t\tif ( transformation ) {\n\t\t\tconst blocks = transformation.transform(\n\t\t\t\tfiles,\n\t\t\t\tupdateBlockAttributes\n\t\t\t);\n\t\t\tinsertBlocks( blocks, targetBlockIndex, targetRootClientId );\n\t\t}\n\t};\n}\n\n/**\n * A function that returns an event handler function for block-related HTML drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {Function} insertBlocks A function that inserts blocks.\n *\n * @return {Function} The event handler for a block-related HTML drop event.\n */\nexport function onHTMLDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\tinsertBlocks\n) {\n\treturn ( HTML ) => {\n\t\tconst blocks = pasteHandler( { HTML, mode: 'BLOCKS' } );\n\n\t\tif ( blocks.length ) {\n\t\t\tinsertBlocks( blocks, targetBlockIndex, targetRootClientId );\n\t\t}\n\t};\n}\n\n/**\n * A React hook for handling block drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n *\n * @return {Object} An object that contains the event handlers `onDrop`, `onFilesDrop` and `onHTMLDrop`.\n */\nexport default function useOnBlockDrop( targetRootClientId, targetBlockIndex ) {\n\tconst hasUploadPermissions = useSelect(\n\t\t( select ) => select( blockEditorStore ).getSettings().mediaUpload,\n\t\t[]\n\t);\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetBlockIndex,\n\t\tgetClientIdsOfDescendants,\n\t} = useSelect( blockEditorStore );\n\tconst {\n\t\tinsertBlocks,\n\t\tmoveBlocksToPosition,\n\t\tupdateBlockAttributes,\n\t\tclearSelectedBlock,\n\t} = useDispatch( blockEditorStore );\n\n\tconst _onDrop = onBlockDrop(\n\t\ttargetRootClientId,\n\t\ttargetBlockIndex,\n\t\tgetBlockIndex,\n\t\tgetClientIdsOfDescendants,\n\t\tmoveBlocksToPosition,\n\t\tinsertBlocks,\n\t\tclearSelectedBlock\n\t);\n\tconst _onFilesDrop = onFilesDrop(\n\t\ttargetRootClientId,\n\t\ttargetBlockIndex,\n\t\thasUploadPermissions,\n\t\tupdateBlockAttributes,\n\t\tcanInsertBlockType,\n\t\tinsertBlocks\n\t);\n\tconst _onHTMLDrop = onHTMLDrop(\n\t\ttargetRootClientId,\n\t\ttargetBlockIndex,\n\t\tinsertBlocks\n\t);\n\n\treturn ( event ) => {\n\t\tconst files = getFilesFromDataTransfer( event.dataTransfer );\n\t\tconst html = event.dataTransfer.getData( 'text/html' );\n\n\t\t/**\n\t\t * From Windows Chrome 96, the `event.dataTransfer` returns both file object and HTML.\n\t\t * The order of the checks is important to recognise the HTML drop.\n\t\t */\n\t\tif ( html ) {\n\t\t\t_onHTMLDrop( html );\n\t\t} else if ( files.length ) {\n\t\t\t_onFilesDrop( files );\n\t\t} else {\n\t\t\t_onDrop( event );\n\t\t}\n\t};\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/use-on-block-drop/index.js"],"names":["parseDropEvent","event","result","srcRootClientId","srcClientIds","srcIndex","type","blocks","dataTransfer","Object","assign","JSON","parse","getData","err","onBlockDrop","targetRootClientId","targetBlockIndex","getBlockIndex","getClientIdsOfDescendants","moveBlocksToPosition","insertBlocks","clearSelectedBlock","sourceRootClientId","sourceClientIds","dropType","blocksToInsert","map","block","sourceBlockIndex","includes","some","id","isAtSameLevel","draggedBlockCount","length","insertIndex","onFilesDrop","hasUploadPermissions","updateBlockAttributes","canInsertBlockType","files","transformation","transform","blockName","isMatch","onHTMLDrop","HTML","mode","useOnBlockDrop","select","blockEditorStore","getSettings","mediaUpload","_onDrop","_onFilesDrop","_onHTMLDrop","html"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tcloneBlock,\n\tfindTransform,\n\tgetBlockTransforms,\n\tpasteHandler,\n} from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { getFilesFromDataTransfer } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/** @typedef {import('@wordpress/element').WPSyntheticEvent} WPSyntheticEvent */\n\n/**\n * Retrieve the data for a block drop event.\n *\n * @param {WPSyntheticEvent} event The drop event.\n *\n * @return {Object} An object with block drag and drop data.\n */\nexport function parseDropEvent( event ) {\n\tlet result = {\n\t\tsrcRootClientId: null,\n\t\tsrcClientIds: null,\n\t\tsrcIndex: null,\n\t\ttype: null,\n\t\tblocks: null,\n\t};\n\n\tif ( ! event.dataTransfer ) {\n\t\treturn result;\n\t}\n\n\ttry {\n\t\tresult = Object.assign(\n\t\t\tresult,\n\t\t\tJSON.parse( event.dataTransfer.getData( 'wp-blocks' ) )\n\t\t);\n\t} catch ( err ) {\n\t\treturn result;\n\t}\n\n\treturn result;\n}\n\n/**\n * A function that returns an event handler function for block drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {Function} getBlockIndex A function that gets the index of a block.\n * @param {Function} getClientIdsOfDescendants A function that gets the client ids of descendant blocks.\n * @param {Function} moveBlocksToPosition A function that moves blocks.\n * @param {Function} insertBlocks A function that inserts blocks.\n * @param {Function} clearSelectedBlock A function that clears block selection.\n * @return {Function} The event handler for a block drop event.\n */\nexport function onBlockDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\tgetBlockIndex,\n\tgetClientIdsOfDescendants,\n\tmoveBlocksToPosition,\n\tinsertBlocks,\n\tclearSelectedBlock\n) {\n\treturn ( event ) => {\n\t\tconst {\n\t\t\tsrcRootClientId: sourceRootClientId,\n\t\t\tsrcClientIds: sourceClientIds,\n\t\t\ttype: dropType,\n\t\t\tblocks,\n\t\t} = parseDropEvent( event );\n\n\t\t// If the user is inserting a block.\n\t\tif ( dropType === 'inserter' ) {\n\t\t\tclearSelectedBlock();\n\t\t\tconst blocksToInsert = blocks.map( ( block ) =>\n\t\t\t\tcloneBlock( block )\n\t\t\t);\n\t\t\tinsertBlocks(\n\t\t\t\tblocksToInsert,\n\t\t\t\ttargetBlockIndex,\n\t\t\t\ttargetRootClientId,\n\t\t\t\ttrue,\n\t\t\t\tnull\n\t\t\t);\n\t\t}\n\n\t\t// If the user is moving a block.\n\t\tif ( dropType === 'block' ) {\n\t\t\tconst sourceBlockIndex = getBlockIndex( sourceClientIds[ 0 ] );\n\n\t\t\t// If the user is dropping to the same position, return early.\n\t\t\tif (\n\t\t\t\tsourceRootClientId === targetRootClientId &&\n\t\t\t\tsourceBlockIndex === targetBlockIndex\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the user is attempting to drop a block within its own\n\t\t\t// nested blocks, return early as this would create infinite\n\t\t\t// recursion.\n\t\t\tif (\n\t\t\t\tsourceClientIds.includes( targetRootClientId ) ||\n\t\t\t\tgetClientIdsOfDescendants( sourceClientIds ).some(\n\t\t\t\t\t( id ) => id === targetRootClientId\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isAtSameLevel = sourceRootClientId === targetRootClientId;\n\t\t\tconst draggedBlockCount = sourceClientIds.length;\n\n\t\t\t// If the block is kept at the same level and moved downwards,\n\t\t\t// subtract to take into account that the blocks being dragged\n\t\t\t// were removed from the block list above the insertion point.\n\t\t\tconst insertIndex =\n\t\t\t\tisAtSameLevel && sourceBlockIndex < targetBlockIndex\n\t\t\t\t\t? targetBlockIndex - draggedBlockCount\n\t\t\t\t\t: targetBlockIndex;\n\n\t\t\tmoveBlocksToPosition(\n\t\t\t\tsourceClientIds,\n\t\t\t\tsourceRootClientId,\n\t\t\t\ttargetRootClientId,\n\t\t\t\tinsertIndex\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * A function that returns an event handler function for block-related file drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {boolean} hasUploadPermissions Whether the user has upload permissions.\n * @param {Function} updateBlockAttributes A function that updates a block's attributes.\n * @param {Function} canInsertBlockType A function that returns checks whether a block type can be inserted.\n * @param {Function} insertBlocks A function that inserts blocks.\n *\n * @return {Function} The event handler for a block-related file drop event.\n */\nexport function onFilesDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\thasUploadPermissions,\n\tupdateBlockAttributes,\n\tcanInsertBlockType,\n\tinsertBlocks\n) {\n\treturn ( files ) => {\n\t\tif ( ! hasUploadPermissions ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst transformation = findTransform(\n\t\t\tgetBlockTransforms( 'from' ),\n\t\t\t( transform ) =>\n\t\t\t\ttransform.type === 'files' &&\n\t\t\t\tcanInsertBlockType( transform.blockName, targetRootClientId ) &&\n\t\t\t\ttransform.isMatch( files )\n\t\t);\n\n\t\tif ( transformation ) {\n\t\t\tconst blocks = transformation.transform(\n\t\t\t\tfiles,\n\t\t\t\tupdateBlockAttributes\n\t\t\t);\n\t\t\tinsertBlocks( blocks, targetBlockIndex, targetRootClientId );\n\t\t}\n\t};\n}\n\n/**\n * A function that returns an event handler function for block-related HTML drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n * @param {Function} insertBlocks A function that inserts blocks.\n *\n * @return {Function} The event handler for a block-related HTML drop event.\n */\nexport function onHTMLDrop(\n\ttargetRootClientId,\n\ttargetBlockIndex,\n\tinsertBlocks\n) {\n\treturn ( HTML ) => {\n\t\tconst blocks = pasteHandler( { HTML, mode: 'BLOCKS' } );\n\n\t\tif ( blocks.length ) {\n\t\t\tinsertBlocks( blocks, targetBlockIndex, targetRootClientId );\n\t\t}\n\t};\n}\n\n/**\n * A React hook for handling block drop events.\n *\n * @param {string} targetRootClientId The root client id where the block(s) will be inserted.\n * @param {number} targetBlockIndex The index where the block(s) will be inserted.\n *\n * @return {Object} An object that contains the event handlers `onDrop`, `onFilesDrop` and `onHTMLDrop`.\n */\nexport default function useOnBlockDrop( targetRootClientId, targetBlockIndex ) {\n\tconst hasUploadPermissions = useSelect(\n\t\t( select ) => select( blockEditorStore ).getSettings().mediaUpload,\n\t\t[]\n\t);\n\tconst {\n\t\tcanInsertBlockType,\n\t\tgetBlockIndex,\n\t\tgetClientIdsOfDescendants,\n\t} = useSelect( blockEditorStore );\n\tconst {\n\t\tinsertBlocks,\n\t\tmoveBlocksToPosition,\n\t\tupdateBlockAttributes,\n\t\tclearSelectedBlock,\n\t} = useDispatch( blockEditorStore );\n\n\tconst _onDrop = onBlockDrop(\n\t\ttargetRootClientId,\n\t\ttargetBlockIndex,\n\t\tgetBlockIndex,\n\t\tgetClientIdsOfDescendants,\n\t\tmoveBlocksToPosition,\n\t\tinsertBlocks,\n\t\tclearSelectedBlock\n\t);\n\tconst _onFilesDrop = onFilesDrop(\n\t\ttargetRootClientId,\n\t\ttargetBlockIndex,\n\t\thasUploadPermissions,\n\t\tupdateBlockAttributes,\n\t\tcanInsertBlockType,\n\t\tinsertBlocks\n\t);\n\tconst _onHTMLDrop = onHTMLDrop(\n\t\ttargetRootClientId,\n\t\ttargetBlockIndex,\n\t\tinsertBlocks\n\t);\n\n\treturn ( event ) => {\n\t\tconst files = getFilesFromDataTransfer( event.dataTransfer );\n\t\tconst html = event.dataTransfer.getData( 'text/html' );\n\n\t\t/**\n\t\t * From Windows Chrome 96, the `event.dataTransfer` returns both file object and HTML.\n\t\t * The order of the checks is important to recognise the HTML drop.\n\t\t */\n\t\tif ( html ) {\n\t\t\t_onHTMLDrop( html );\n\t\t} else if ( files.length ) {\n\t\t\t_onFilesDrop( files );\n\t\t} else {\n\t\t\t_onDrop( event );\n\t\t}\n\t};\n}\n"]}
@@ -113,14 +113,15 @@ function useTabNav() {
113
113
  // will no longer send focus through the focus capture element.
114
114
  if (event.target === node) setNavigationMode(true);
115
115
  return;
116
- } // Allow tabbing between form elements rendered in a block,
116
+ } // Allow tabbing from the block wrapper to a form element,
117
+ // and between form elements rendered in a block,
117
118
  // such as inside a placeholder. Form elements are generally
118
119
  // meant to be UI rather than part of the content. Ideally
119
120
  // these are not rendered in the content and perhaps in the
120
121
  // future they can be rendered in an iframe or shadow DOM.
121
122
 
122
123
 
123
- if (isFormElement(event.target) && isFormElement(_dom.focus.tabbable[direction](event.target))) {
124
+ if ((isFormElement(event.target) || event.target.getAttribute('data-block') === getSelectedBlockClientId()) && isFormElement(_dom.focus.tabbable[direction](event.target))) {
124
125
  return;
125
126
  }
126
127
 
@@ -175,7 +176,7 @@ function useTabNav() {
175
176
  const isShift = event.shiftKey;
176
177
  const direction = isShift ? 'findPrevious' : 'findNext';
177
178
 
178
- const target = _dom.focus.tabbable[direction](event.target); // only do something when the next tabbable is a focus capture div (before/after)
179
+ const target = _dom.focus.tabbable[direction](event.target); // Only do something when the next tabbable is a focus capture div (before/after)
179
180
 
180
181
 
181
182
  if (target === focusCaptureBeforeRef.current || target === focusCaptureAfterRef.current) {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/writing-flow/use-tab-nav.js"],"names":["isFormElement","element","tagName","useTabNav","container","focusCaptureBeforeRef","focusCaptureAfterRef","lastFocus","hasMultiSelection","getSelectedBlockClientId","getBlockCount","blockEditorStore","setNavigationMode","isNavigationMode","select","focusCaptureTabIndex","undefined","noCapture","onFocusCapture","event","current","focus","isBefore","target","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","action","tabbable","before","after","ref","node","onKeyDown","defaultPrevented","keyCode","ESCAPE","preventDefault","TAB","isShift","shiftKey","direction","next","preventScroll","onFocusOut","ownerDocument","relatedTarget","activeElement","body","preventScrollOnTab","getAttribute","defaultView","addEventListener","removeEventListener","mergedRefs"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { focus } from '@wordpress/dom';\nimport { TAB, ESCAPE } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect, useMergeRefs } from '@wordpress/compose';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nfunction isFormElement( element ) {\n\tconst { tagName } = element;\n\treturn (\n\t\ttagName === 'INPUT' ||\n\t\ttagName === 'BUTTON' ||\n\t\ttagName === 'SELECT' ||\n\t\ttagName === 'TEXTAREA'\n\t);\n}\n\nexport default function useTabNav() {\n\tconst container = useRef();\n\tconst focusCaptureBeforeRef = useRef();\n\tconst focusCaptureAfterRef = useRef();\n\tconst lastFocus = useRef();\n\tconst {\n\t\thasMultiSelection,\n\t\tgetSelectedBlockClientId,\n\t\tgetBlockCount,\n\t} = useSelect( blockEditorStore );\n\tconst { setNavigationMode } = useDispatch( blockEditorStore );\n\tconst isNavigationMode = useSelect(\n\t\t( select ) => select( blockEditorStore ).isNavigationMode(),\n\t\t[]\n\t);\n\n\t// Don't allow tabbing to this element in Navigation mode.\n\tconst focusCaptureTabIndex = ! isNavigationMode ? '0' : undefined;\n\n\t// Reference that holds the a flag for enabling or disabling\n\t// capturing on the focus capture elements.\n\tconst noCapture = useRef();\n\n\tfunction onFocusCapture( event ) {\n\t\t// Do not capture incoming focus if set by us in WritingFlow.\n\t\tif ( noCapture.current ) {\n\t\t\tnoCapture.current = null;\n\t\t} else if ( hasMultiSelection() ) {\n\t\t\tcontainer.current.focus();\n\t\t} else if ( getSelectedBlockClientId() ) {\n\t\t\tlastFocus.current.focus();\n\t\t} else {\n\t\t\tsetNavigationMode( true );\n\n\t\t\tconst isBefore =\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tevent.target.compareDocumentPosition( container.current ) &\n\t\t\t\tevent.target.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tconst action = isBefore ? 'findNext' : 'findPrevious';\n\n\t\t\tfocus.tabbable[ action ]( event.target ).focus();\n\t\t}\n\t}\n\n\tconst before = (\n\t\t<div\n\t\t\tref={ focusCaptureBeforeRef }\n\t\t\ttabIndex={ focusCaptureTabIndex }\n\t\t\tonFocus={ onFocusCapture }\n\t\t/>\n\t);\n\n\tconst after = (\n\t\t<div\n\t\t\tref={ focusCaptureAfterRef }\n\t\t\ttabIndex={ focusCaptureTabIndex }\n\t\t\tonFocus={ onFocusCapture }\n\t\t/>\n\t);\n\n\tconst ref = useRefEffect( ( node ) => {\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( event.keyCode === ESCAPE && ! hasMultiSelection() ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tsetNavigationMode( true );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// In Edit mode, Tab should focus the first tabbable element after\n\t\t\t// the content, which is normally the sidebar (with block controls)\n\t\t\t// and Shift+Tab should focus the first tabbable element before the\n\t\t\t// content, which is normally the block toolbar.\n\t\t\t// Arrow keys can be used, and Tab and arrow keys can be used in\n\t\t\t// Navigation mode (press Esc), to navigate through blocks.\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isShift = event.shiftKey;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\n\t\t\tif ( ! hasMultiSelection() && ! getSelectedBlockClientId() ) {\n\t\t\t\t// Preserve the behaviour of entering navigation mode when\n\t\t\t\t// tabbing into the content without a block selection.\n\t\t\t\t// `onFocusCapture` already did this previously, but we need to\n\t\t\t\t// do it again here because after clearing block selection,\n\t\t\t\t// focus land on the writing flow container and pressing Tab\n\t\t\t\t// will no longer send focus through the focus capture element.\n\t\t\t\tif ( event.target === node ) setNavigationMode( true );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Allow tabbing between form elements rendered in a block,\n\t\t\t// such as inside a placeholder. Form elements are generally\n\t\t\t// meant to be UI rather than part of the content. Ideally\n\t\t\t// these are not rendered in the content and perhaps in the\n\t\t\t// future they can be rendered in an iframe or shadow DOM.\n\t\t\tif (\n\t\t\t\tisFormElement( event.target ) &&\n\t\t\t\tisFormElement( focus.tabbable[ direction ]( event.target ) )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst next = isShift ? focusCaptureBeforeRef : focusCaptureAfterRef;\n\n\t\t\t// Disable focus capturing on the focus capture element, so it\n\t\t\t// doesn't refocus this block and so it allows default behaviour\n\t\t\t// (moving focus to the next tabbable element).\n\t\t\tnoCapture.current = true;\n\n\t\t\t// Focusing the focus capture element, which is located above and\n\t\t\t// below the editor, should not scroll the page all the way up or\n\t\t\t// down.\n\t\t\tnext.current.focus( { preventScroll: true } );\n\t\t}\n\n\t\tfunction onFocusOut( event ) {\n\t\t\tlastFocus.current = event.target;\n\n\t\t\tconst { ownerDocument } = node;\n\n\t\t\t// If focus disappears due to there being no blocks, move focus to\n\t\t\t// the writing flow wrapper.\n\t\t\tif (\n\t\t\t\t! event.relatedTarget &&\n\t\t\t\townerDocument.activeElement === ownerDocument.body &&\n\t\t\t\tgetBlockCount() === 0\n\t\t\t) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t}\n\n\t\t// When tabbing back to an element in block list, this event handler prevents scrolling if the\n\t\t// focus capture divs (before/after) are outside of the viewport. (For example shift+tab back to a paragraph\n\t\t// when focus is on a sidebar element. This prevents the scrollable writing area from jumping either to the\n\t\t// top or bottom of the document.\n\t\t//\n\t\t// Note that it isn't possible to disable scrolling in the onFocus event. We need to intercept this\n\t\t// earlier in the keypress handler, and call focus( { preventScroll: true } ) instead.\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/focus#parameters\n\t\tfunction preventScrollOnTab( event ) {\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( event.target?.getAttribute( 'role' ) === 'region' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( container.current === event.target ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isShift = event.shiftKey;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\t\t\tconst target = focus.tabbable[ direction ]( event.target );\n\t\t\t// only do something when the next tabbable is a focus capture div (before/after)\n\t\t\tif (\n\t\t\t\ttarget === focusCaptureBeforeRef.current ||\n\t\t\t\ttarget === focusCaptureAfterRef.current\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttarget.focus( { preventScroll: true } );\n\t\t\t}\n\t\t}\n\n\t\tconst { ownerDocument } = node;\n\t\tconst { defaultView } = ownerDocument;\n\t\tdefaultView.addEventListener( 'keydown', preventScrollOnTab );\n\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\tnode.addEventListener( 'focusout', onFocusOut );\n\t\treturn () => {\n\t\t\tdefaultView.removeEventListener( 'keydown', preventScrollOnTab );\n\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\tnode.removeEventListener( 'focusout', onFocusOut );\n\t\t};\n\t}, [] );\n\n\tconst mergedRefs = useMergeRefs( [ container, ref ] );\n\n\treturn [ before, mergedRefs, after ];\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/writing-flow/use-tab-nav.js"],"names":["isFormElement","element","tagName","useTabNav","container","focusCaptureBeforeRef","focusCaptureAfterRef","lastFocus","hasMultiSelection","getSelectedBlockClientId","getBlockCount","blockEditorStore","setNavigationMode","isNavigationMode","select","focusCaptureTabIndex","undefined","noCapture","onFocusCapture","event","current","focus","isBefore","target","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","action","tabbable","before","after","ref","node","onKeyDown","defaultPrevented","keyCode","ESCAPE","preventDefault","TAB","isShift","shiftKey","direction","getAttribute","next","preventScroll","onFocusOut","ownerDocument","relatedTarget","activeElement","body","preventScrollOnTab","defaultView","addEventListener","removeEventListener","mergedRefs"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { focus } from '@wordpress/dom';\nimport { TAB, ESCAPE } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect, useMergeRefs } from '@wordpress/compose';\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nfunction isFormElement( element ) {\n\tconst { tagName } = element;\n\treturn (\n\t\ttagName === 'INPUT' ||\n\t\ttagName === 'BUTTON' ||\n\t\ttagName === 'SELECT' ||\n\t\ttagName === 'TEXTAREA'\n\t);\n}\n\nexport default function useTabNav() {\n\tconst container = useRef();\n\tconst focusCaptureBeforeRef = useRef();\n\tconst focusCaptureAfterRef = useRef();\n\tconst lastFocus = useRef();\n\tconst {\n\t\thasMultiSelection,\n\t\tgetSelectedBlockClientId,\n\t\tgetBlockCount,\n\t} = useSelect( blockEditorStore );\n\tconst { setNavigationMode } = useDispatch( blockEditorStore );\n\tconst isNavigationMode = useSelect(\n\t\t( select ) => select( blockEditorStore ).isNavigationMode(),\n\t\t[]\n\t);\n\n\t// Don't allow tabbing to this element in Navigation mode.\n\tconst focusCaptureTabIndex = ! isNavigationMode ? '0' : undefined;\n\n\t// Reference that holds the a flag for enabling or disabling\n\t// capturing on the focus capture elements.\n\tconst noCapture = useRef();\n\n\tfunction onFocusCapture( event ) {\n\t\t// Do not capture incoming focus if set by us in WritingFlow.\n\t\tif ( noCapture.current ) {\n\t\t\tnoCapture.current = null;\n\t\t} else if ( hasMultiSelection() ) {\n\t\t\tcontainer.current.focus();\n\t\t} else if ( getSelectedBlockClientId() ) {\n\t\t\tlastFocus.current.focus();\n\t\t} else {\n\t\t\tsetNavigationMode( true );\n\n\t\t\tconst isBefore =\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tevent.target.compareDocumentPosition( container.current ) &\n\t\t\t\tevent.target.DOCUMENT_POSITION_FOLLOWING;\n\t\t\tconst action = isBefore ? 'findNext' : 'findPrevious';\n\n\t\t\tfocus.tabbable[ action ]( event.target ).focus();\n\t\t}\n\t}\n\n\tconst before = (\n\t\t<div\n\t\t\tref={ focusCaptureBeforeRef }\n\t\t\ttabIndex={ focusCaptureTabIndex }\n\t\t\tonFocus={ onFocusCapture }\n\t\t/>\n\t);\n\n\tconst after = (\n\t\t<div\n\t\t\tref={ focusCaptureAfterRef }\n\t\t\ttabIndex={ focusCaptureTabIndex }\n\t\t\tonFocus={ onFocusCapture }\n\t\t/>\n\t);\n\n\tconst ref = useRefEffect( ( node ) => {\n\t\tfunction onKeyDown( event ) {\n\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( event.keyCode === ESCAPE && ! hasMultiSelection() ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tsetNavigationMode( true );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// In Edit mode, Tab should focus the first tabbable element after\n\t\t\t// the content, which is normally the sidebar (with block controls)\n\t\t\t// and Shift+Tab should focus the first tabbable element before the\n\t\t\t// content, which is normally the block toolbar.\n\t\t\t// Arrow keys can be used, and Tab and arrow keys can be used in\n\t\t\t// Navigation mode (press Esc), to navigate through blocks.\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isShift = event.shiftKey;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\n\t\t\tif ( ! hasMultiSelection() && ! getSelectedBlockClientId() ) {\n\t\t\t\t// Preserve the behaviour of entering navigation mode when\n\t\t\t\t// tabbing into the content without a block selection.\n\t\t\t\t// `onFocusCapture` already did this previously, but we need to\n\t\t\t\t// do it again here because after clearing block selection,\n\t\t\t\t// focus land on the writing flow container and pressing Tab\n\t\t\t\t// will no longer send focus through the focus capture element.\n\t\t\t\tif ( event.target === node ) setNavigationMode( true );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Allow tabbing from the block wrapper to a form element,\n\t\t\t// and between form elements rendered in a block,\n\t\t\t// such as inside a placeholder. Form elements are generally\n\t\t\t// meant to be UI rather than part of the content. Ideally\n\t\t\t// these are not rendered in the content and perhaps in the\n\t\t\t// future they can be rendered in an iframe or shadow DOM.\n\t\t\tif (\n\t\t\t\t( isFormElement( event.target ) ||\n\t\t\t\t\tevent.target.getAttribute( 'data-block' ) ===\n\t\t\t\t\t\tgetSelectedBlockClientId() ) &&\n\t\t\t\tisFormElement( focus.tabbable[ direction ]( event.target ) )\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst next = isShift ? focusCaptureBeforeRef : focusCaptureAfterRef;\n\n\t\t\t// Disable focus capturing on the focus capture element, so it\n\t\t\t// doesn't refocus this block and so it allows default behaviour\n\t\t\t// (moving focus to the next tabbable element).\n\t\t\tnoCapture.current = true;\n\n\t\t\t// Focusing the focus capture element, which is located above and\n\t\t\t// below the editor, should not scroll the page all the way up or\n\t\t\t// down.\n\t\t\tnext.current.focus( { preventScroll: true } );\n\t\t}\n\n\t\tfunction onFocusOut( event ) {\n\t\t\tlastFocus.current = event.target;\n\n\t\t\tconst { ownerDocument } = node;\n\n\t\t\t// If focus disappears due to there being no blocks, move focus to\n\t\t\t// the writing flow wrapper.\n\t\t\tif (\n\t\t\t\t! event.relatedTarget &&\n\t\t\t\townerDocument.activeElement === ownerDocument.body &&\n\t\t\t\tgetBlockCount() === 0\n\t\t\t) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t}\n\n\t\t// When tabbing back to an element in block list, this event handler prevents scrolling if the\n\t\t// focus capture divs (before/after) are outside of the viewport. (For example shift+tab back to a paragraph\n\t\t// when focus is on a sidebar element. This prevents the scrollable writing area from jumping either to the\n\t\t// top or bottom of the document.\n\t\t//\n\t\t// Note that it isn't possible to disable scrolling in the onFocus event. We need to intercept this\n\t\t// earlier in the keypress handler, and call focus( { preventScroll: true } ) instead.\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/focus#parameters\n\t\tfunction preventScrollOnTab( event ) {\n\t\t\tif ( event.keyCode !== TAB ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( event.target?.getAttribute( 'role' ) === 'region' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( container.current === event.target ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isShift = event.shiftKey;\n\t\t\tconst direction = isShift ? 'findPrevious' : 'findNext';\n\t\t\tconst target = focus.tabbable[ direction ]( event.target );\n\t\t\t// Only do something when the next tabbable is a focus capture div (before/after)\n\t\t\tif (\n\t\t\t\ttarget === focusCaptureBeforeRef.current ||\n\t\t\t\ttarget === focusCaptureAfterRef.current\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttarget.focus( { preventScroll: true } );\n\t\t\t}\n\t\t}\n\n\t\tconst { ownerDocument } = node;\n\t\tconst { defaultView } = ownerDocument;\n\t\tdefaultView.addEventListener( 'keydown', preventScrollOnTab );\n\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\tnode.addEventListener( 'focusout', onFocusOut );\n\t\treturn () => {\n\t\t\tdefaultView.removeEventListener( 'keydown', preventScrollOnTab );\n\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\tnode.removeEventListener( 'focusout', onFocusOut );\n\t\t};\n\t}, [] );\n\n\tconst mergedRefs = useMergeRefs( [ container, ref ] );\n\n\treturn [ before, mergedRefs, after ];\n}\n"]}
@@ -100,7 +100,7 @@ function getValidAlignments(blockAlign) {
100
100
 
101
101
 
102
102
  function addAttribute(settings) {
103
- // allow blocks to specify their own attribute definition with default values if needed.
103
+ // Allow blocks to specify their own attribute definition with default values if needed.
104
104
  if ((0, _lodash.has)(settings.attributes, ['align', 'type'])) {
105
105
  return settings;
106
106
  }