@wordpress/block-editor 8.3.0 → 8.5.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 (443) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +56 -18
  3. package/build/components/alignment-control/index.js +13 -6
  4. package/build/components/alignment-control/index.js.map +1 -1
  5. package/build/components/block-alignment-control/index.js +13 -6
  6. package/build/components/block-alignment-control/index.js.map +1 -1
  7. package/build/components/block-draggable/index.js +2 -3
  8. package/build/components/block-draggable/index.js.map +1 -1
  9. package/build/components/block-icon/index.js +4 -0
  10. package/build/components/block-icon/index.js.map +1 -1
  11. package/build/components/block-inspector/index.js +6 -1
  12. package/build/components/block-inspector/index.js.map +1 -1
  13. package/build/components/block-list/block-html.js +4 -1
  14. package/build/components/block-list/block-html.js.map +1 -1
  15. package/build/components/block-list/block.js +4 -1
  16. package/build/components/block-list/block.js.map +1 -1
  17. package/build/components/block-list/use-block-props/index.js +1 -6
  18. package/build/components/block-list/use-block-props/index.js.map +1 -1
  19. package/build/components/block-list/use-block-props/use-focus-first-element.js +22 -6
  20. package/build/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  21. package/build/components/block-list/use-block-props/use-focus-handler.js +7 -1
  22. package/build/components/block-list/use-block-props/use-focus-handler.js.map +1 -1
  23. package/build/components/block-list-appender/index.js +6 -1
  24. package/build/components/block-list-appender/index.js.map +1 -1
  25. package/build/components/block-lock/index.js +32 -0
  26. package/build/components/block-lock/index.js.map +1 -0
  27. package/build/components/block-lock/menu-item.js +67 -0
  28. package/build/components/block-lock/menu-item.js.map +1 -0
  29. package/build/components/block-lock/modal.js +134 -0
  30. package/build/components/block-lock/modal.js.map +1 -0
  31. package/build/components/block-lock/toolbar.js +78 -0
  32. package/build/components/block-lock/toolbar.js.map +1 -0
  33. package/build/components/block-mover/index.js +4 -0
  34. package/build/components/block-mover/index.js.map +1 -1
  35. package/build/components/block-settings-menu/block-settings-dropdown.js +75 -10
  36. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  37. package/build/components/block-settings-menu-controls/index.js +19 -9
  38. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  39. package/build/components/block-switcher/index.js +1 -1
  40. package/build/components/block-switcher/index.js.map +1 -1
  41. package/build/components/block-title/index.js +2 -2
  42. package/build/components/block-title/index.js.map +1 -1
  43. package/build/components/block-title/use-block-display-title.js +8 -6
  44. package/build/components/block-title/use-block-display-title.js.map +1 -1
  45. package/build/components/block-toolbar/block-name-context.js +17 -0
  46. package/build/components/block-toolbar/block-name-context.js.map +1 -0
  47. package/build/components/block-toolbar/block-toolbar-last-item.js +20 -0
  48. package/build/components/block-toolbar/block-toolbar-last-item.js.map +1 -0
  49. package/build/components/block-toolbar/index.js +24 -5
  50. package/build/components/block-toolbar/index.js.map +1 -1
  51. package/build/components/block-tools/index.js +0 -16
  52. package/build/components/block-tools/index.js.map +1 -1
  53. package/build/components/block-variation-transforms/index.js +92 -47
  54. package/build/components/block-variation-transforms/index.js.map +1 -1
  55. package/build/components/block-vertical-alignment-control/index.js +13 -6
  56. package/build/components/block-vertical-alignment-control/index.js.map +1 -1
  57. package/build/components/border-radius-control/index.js +0 -1
  58. package/build/components/border-radius-control/index.js.map +1 -1
  59. package/build/components/border-radius-control/utils.js +1 -1
  60. package/build/components/border-radius-control/utils.js.map +1 -1
  61. package/build/components/colors-gradients/control.js +3 -1
  62. package/build/components/colors-gradients/control.js.map +1 -1
  63. package/build/components/contrast-checker/index.js +4 -0
  64. package/build/components/contrast-checker/index.js.map +1 -1
  65. package/build/components/convert-to-group-buttons/index.js +8 -0
  66. package/build/components/convert-to-group-buttons/index.js.map +1 -1
  67. package/build/components/convert-to-group-buttons/toolbar.js +105 -0
  68. package/build/components/convert-to-group-buttons/toolbar.js.map +1 -0
  69. package/build/components/copy-handler/index.js +4 -0
  70. package/build/components/copy-handler/index.js.map +1 -1
  71. package/build/components/date-format-picker/index.js +132 -0
  72. package/build/components/date-format-picker/index.js.map +1 -0
  73. package/build/components/font-sizes/font-size-picker.js +4 -0
  74. package/build/components/font-sizes/font-size-picker.js.map +1 -1
  75. package/build/components/iframe/index.js +6 -9
  76. package/build/components/iframe/index.js.map +1 -1
  77. package/build/components/index.js +27 -0
  78. package/build/components/index.js.map +1 -1
  79. package/build/components/justify-content-control/index.js +13 -6
  80. package/build/components/justify-content-control/index.js.map +1 -1
  81. package/build/components/keyboard-shortcuts/index.js +1 -1
  82. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  83. package/build/components/line-height-control/index.js +15 -6
  84. package/build/components/line-height-control/index.js.map +1 -1
  85. package/build/components/list-view/block-select-button.js +24 -23
  86. package/build/components/list-view/block-select-button.js.map +1 -1
  87. package/build/components/list-view/block.js +38 -13
  88. package/build/components/list-view/block.js.map +1 -1
  89. package/build/components/list-view/branch.js +16 -13
  90. package/build/components/list-view/branch.js.map +1 -1
  91. package/build/components/list-view/index.js +7 -1
  92. package/build/components/list-view/index.js.map +1 -1
  93. package/build/components/list-view/use-block-selection.js +9 -2
  94. package/build/components/list-view/use-block-selection.js.map +1 -1
  95. package/build/components/media-replace-flow/index.js +4 -0
  96. package/build/components/media-replace-flow/index.js.map +1 -1
  97. package/build/components/multi-selection-inspector/index.js +1 -1
  98. package/build/components/multi-selection-inspector/index.js.map +1 -1
  99. package/build/components/rich-text/index.js +27 -5
  100. package/build/components/rich-text/index.js.map +1 -1
  101. package/build/components/rich-text/index.native.js +13 -9
  102. package/build/components/rich-text/index.native.js.map +1 -1
  103. package/build/components/rich-text/split-value.js +12 -2
  104. package/build/components/rich-text/split-value.js.map +1 -1
  105. package/build/components/rich-text/use-firefox-compat.js +49 -0
  106. package/build/components/rich-text/use-firefox-compat.js.map +1 -0
  107. package/build/components/rich-text/use-input-rules.js +34 -2
  108. package/build/components/rich-text/use-input-rules.js.map +1 -1
  109. package/build/components/skip-to-selected-block/index.js +4 -0
  110. package/build/components/skip-to-selected-block/index.js.map +1 -1
  111. package/build/components/url-popover/image-url-input-ui.js +11 -27
  112. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  113. package/build/components/writing-flow/index.js +9 -1
  114. package/build/components/writing-flow/index.js.map +1 -1
  115. package/build/components/writing-flow/use-arrow-nav.js +3 -44
  116. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  117. package/build/components/writing-flow/use-click-selection.js +68 -0
  118. package/build/components/writing-flow/use-click-selection.js.map +1 -0
  119. package/build/components/writing-flow/use-drag-selection.js +134 -0
  120. package/build/components/writing-flow/use-drag-selection.js.map +1 -0
  121. package/build/components/writing-flow/use-input.js +116 -0
  122. package/build/components/writing-flow/use-input.js.map +1 -0
  123. package/build/components/writing-flow/use-multi-selection.js +18 -38
  124. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  125. package/build/components/writing-flow/use-selection-observer.js +161 -0
  126. package/build/components/writing-flow/use-selection-observer.js.map +1 -0
  127. package/build/components/writing-flow/use-tab-nav.js +1 -8
  128. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  129. package/build/hooks/anchor.js +7 -6
  130. package/build/hooks/anchor.js.map +1 -1
  131. package/build/hooks/border-color.js +3 -3
  132. package/build/hooks/border-color.js.map +1 -1
  133. package/build/hooks/border.js +0 -14
  134. package/build/hooks/border.js.map +1 -1
  135. package/build/hooks/color.js +20 -17
  136. package/build/hooks/color.js.map +1 -1
  137. package/build/hooks/font-family.js +5 -1
  138. package/build/hooks/font-family.js.map +1 -1
  139. package/build/hooks/font-size.js +4 -2
  140. package/build/hooks/font-size.js.map +1 -1
  141. package/build/hooks/gap.js +77 -5
  142. package/build/hooks/gap.js.map +1 -1
  143. package/build/hooks/layout.js +7 -2
  144. package/build/hooks/layout.js.map +1 -1
  145. package/build/hooks/style.js +34 -3
  146. package/build/hooks/style.js.map +1 -1
  147. package/build/hooks/utils.js +29 -0
  148. package/build/hooks/utils.js.map +1 -1
  149. package/build/layouts/flex.js +82 -15
  150. package/build/layouts/flex.js.map +1 -1
  151. package/build/layouts/flow.js +22 -13
  152. package/build/layouts/flow.js.map +1 -1
  153. package/build/store/actions.js +297 -51
  154. package/build/store/actions.js.map +1 -1
  155. package/build/store/defaults.js +5 -1
  156. package/build/store/defaults.js.map +1 -1
  157. package/build/store/reducer.js +25 -13
  158. package/build/store/reducer.js.map +1 -1
  159. package/build/store/selectors.js +171 -21
  160. package/build/store/selectors.js.map +1 -1
  161. package/build/utils/dom.js +2 -1
  162. package/build/utils/dom.js.map +1 -1
  163. package/build-module/components/alignment-control/index.js +12 -4
  164. package/build-module/components/alignment-control/index.js.map +1 -1
  165. package/build-module/components/block-alignment-control/index.js +12 -4
  166. package/build-module/components/block-alignment-control/index.js.map +1 -1
  167. package/build-module/components/block-draggable/index.js +2 -3
  168. package/build-module/components/block-draggable/index.js.map +1 -1
  169. package/build-module/components/block-icon/index.js +4 -0
  170. package/build-module/components/block-icon/index.js.map +1 -1
  171. package/build-module/components/block-inspector/index.js +6 -1
  172. package/build-module/components/block-inspector/index.js.map +1 -1
  173. package/build-module/components/block-list/block-html.js +5 -2
  174. package/build-module/components/block-list/block-html.js.map +1 -1
  175. package/build-module/components/block-list/block.js +5 -2
  176. package/build-module/components/block-list/block.js.map +1 -1
  177. package/build-module/components/block-list/use-block-props/index.js +1 -4
  178. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  179. package/build-module/components/block-list/use-block-props/use-focus-first-element.js +22 -6
  180. package/build-module/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  181. package/build-module/components/block-list/use-block-props/use-focus-handler.js +7 -1
  182. package/build-module/components/block-list/use-block-props/use-focus-handler.js.map +1 -1
  183. package/build-module/components/block-list-appender/index.js +6 -1
  184. package/build-module/components/block-list-appender/index.js.map +1 -1
  185. package/build-module/components/block-lock/index.js +4 -0
  186. package/build-module/components/block-lock/index.js.map +1 -0
  187. package/build-module/components/block-lock/menu-item.js +53 -0
  188. package/build-module/components/block-lock/menu-item.js.map +1 -0
  189. package/build-module/components/block-lock/modal.js +119 -0
  190. package/build-module/components/block-lock/modal.js.map +1 -0
  191. package/build-module/components/block-lock/toolbar.js +63 -0
  192. package/build-module/components/block-lock/toolbar.js.map +1 -0
  193. package/build-module/components/block-mover/index.js +4 -0
  194. package/build-module/components/block-mover/index.js.map +1 -1
  195. package/build-module/components/block-settings-menu/block-settings-dropdown.js +75 -12
  196. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  197. package/build-module/components/block-settings-menu-controls/index.js +18 -9
  198. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  199. package/build-module/components/block-switcher/index.js +2 -2
  200. package/build-module/components/block-switcher/index.js.map +1 -1
  201. package/build-module/components/block-title/index.js +2 -2
  202. package/build-module/components/block-title/index.js.map +1 -1
  203. package/build-module/components/block-title/use-block-display-title.js +8 -6
  204. package/build-module/components/block-title/use-block-display-title.js.map +1 -1
  205. package/build-module/components/block-toolbar/block-name-context.js +9 -0
  206. package/build-module/components/block-toolbar/block-name-context.js.map +1 -0
  207. package/build-module/components/block-toolbar/block-toolbar-last-item.js +11 -0
  208. package/build-module/components/block-toolbar/block-toolbar-last-item.js.map +1 -0
  209. package/build-module/components/block-toolbar/index.js +19 -4
  210. package/build-module/components/block-toolbar/index.js.map +1 -1
  211. package/build-module/components/block-tools/index.js +0 -16
  212. package/build-module/components/block-tools/index.js.map +1 -1
  213. package/build-module/components/block-variation-transforms/index.js +95 -49
  214. package/build-module/components/block-variation-transforms/index.js.map +1 -1
  215. package/build-module/components/block-vertical-alignment-control/index.js +12 -4
  216. package/build-module/components/block-vertical-alignment-control/index.js.map +1 -1
  217. package/build-module/components/border-radius-control/index.js +0 -1
  218. package/build-module/components/border-radius-control/index.js.map +1 -1
  219. package/build-module/components/border-radius-control/utils.js +1 -1
  220. package/build-module/components/border-radius-control/utils.js.map +1 -1
  221. package/build-module/components/colors-gradients/control.js +3 -1
  222. package/build-module/components/colors-gradients/control.js.map +1 -1
  223. package/build-module/components/contrast-checker/index.js +4 -0
  224. package/build-module/components/contrast-checker/index.js.map +1 -1
  225. package/build-module/components/convert-to-group-buttons/index.js +2 -1
  226. package/build-module/components/convert-to-group-buttons/index.js.map +1 -1
  227. package/build-module/components/convert-to-group-buttons/toolbar.js +90 -0
  228. package/build-module/components/convert-to-group-buttons/toolbar.js.map +1 -0
  229. package/build-module/components/copy-handler/index.js +4 -0
  230. package/build-module/components/copy-handler/index.js.map +1 -1
  231. package/build-module/components/date-format-picker/index.js +122 -0
  232. package/build-module/components/date-format-picker/index.js.map +1 -0
  233. package/build-module/components/font-sizes/font-size-picker.js +4 -0
  234. package/build-module/components/font-sizes/font-size-picker.js.map +1 -1
  235. package/build-module/components/iframe/index.js +6 -9
  236. package/build-module/components/iframe/index.js.map +1 -1
  237. package/build-module/components/index.js +3 -0
  238. package/build-module/components/index.js.map +1 -1
  239. package/build-module/components/justify-content-control/index.js +12 -4
  240. package/build-module/components/justify-content-control/index.js.map +1 -1
  241. package/build-module/components/keyboard-shortcuts/index.js +1 -1
  242. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  243. package/build-module/components/line-height-control/index.js +14 -5
  244. package/build-module/components/line-height-control/index.js.map +1 -1
  245. package/build-module/components/list-view/block-select-button.js +24 -23
  246. package/build-module/components/list-view/block-select-button.js.map +1 -1
  247. package/build-module/components/list-view/block.js +36 -13
  248. package/build-module/components/list-view/block.js.map +1 -1
  249. package/build-module/components/list-view/branch.js +16 -13
  250. package/build-module/components/list-view/branch.js.map +1 -1
  251. package/build-module/components/list-view/index.js +7 -1
  252. package/build-module/components/list-view/index.js.map +1 -1
  253. package/build-module/components/list-view/use-block-selection.js +10 -3
  254. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  255. package/build-module/components/media-replace-flow/index.js +4 -0
  256. package/build-module/components/media-replace-flow/index.js.map +1 -1
  257. package/build-module/components/multi-selection-inspector/index.js +2 -2
  258. package/build-module/components/multi-selection-inspector/index.js.map +1 -1
  259. package/build-module/components/rich-text/index.js +26 -5
  260. package/build-module/components/rich-text/index.js.map +1 -1
  261. package/build-module/components/rich-text/index.native.js +13 -9
  262. package/build-module/components/rich-text/index.native.js.map +1 -1
  263. package/build-module/components/rich-text/split-value.js +12 -2
  264. package/build-module/components/rich-text/split-value.js.map +1 -1
  265. package/build-module/components/rich-text/use-firefox-compat.js +39 -0
  266. package/build-module/components/rich-text/use-firefox-compat.js.map +1 -0
  267. package/build-module/components/rich-text/use-input-rules.js +35 -4
  268. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  269. package/build-module/components/skip-to-selected-block/index.js +4 -0
  270. package/build-module/components/skip-to-selected-block/index.js.map +1 -1
  271. package/build-module/components/url-popover/image-url-input-ui.js +12 -28
  272. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  273. package/build-module/components/writing-flow/index.js +5 -1
  274. package/build-module/components/writing-flow/index.js.map +1 -1
  275. package/build-module/components/writing-flow/use-arrow-nav.js +4 -45
  276. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  277. package/build-module/components/writing-flow/use-click-selection.js +57 -0
  278. package/build-module/components/writing-flow/use-click-selection.js.map +1 -0
  279. package/build-module/components/writing-flow/use-drag-selection.js +124 -0
  280. package/build-module/components/writing-flow/use-drag-selection.js.map +1 -0
  281. package/build-module/components/writing-flow/use-input.js +104 -0
  282. package/build-module/components/writing-flow/use-input.js.map +1 -0
  283. package/build-module/components/writing-flow/use-multi-selection.js +18 -37
  284. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  285. package/build-module/components/writing-flow/use-selection-observer.js +150 -0
  286. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -0
  287. package/build-module/components/writing-flow/use-tab-nav.js +1 -9
  288. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  289. package/build-module/hooks/anchor.js +7 -6
  290. package/build-module/hooks/anchor.js.map +1 -1
  291. package/build-module/hooks/border-color.js +5 -5
  292. package/build-module/hooks/border-color.js.map +1 -1
  293. package/build-module/hooks/border.js +0 -12
  294. package/build-module/hooks/border.js.map +1 -1
  295. package/build-module/hooks/color.js +19 -18
  296. package/build-module/hooks/color.js.map +1 -1
  297. package/build-module/hooks/font-family.js +3 -1
  298. package/build-module/hooks/font-family.js.map +1 -1
  299. package/build-module/hooks/font-size.js +4 -3
  300. package/build-module/hooks/font-size.js.map +1 -1
  301. package/build-module/hooks/gap.js +75 -7
  302. package/build-module/hooks/gap.js.map +1 -1
  303. package/build-module/hooks/layout.js +7 -2
  304. package/build-module/hooks/layout.js.map +1 -1
  305. package/build-module/hooks/style.js +33 -3
  306. package/build-module/hooks/style.js.map +1 -1
  307. package/build-module/hooks/utils.js +26 -0
  308. package/build-module/hooks/utils.js.map +1 -1
  309. package/build-module/layouts/flex.js +81 -16
  310. package/build-module/layouts/flex.js.map +1 -1
  311. package/build-module/layouts/flow.js +20 -13
  312. package/build-module/layouts/flow.js.map +1 -1
  313. package/build-module/store/actions.js +286 -49
  314. package/build-module/store/actions.js.map +1 -1
  315. package/build-module/store/defaults.js +5 -1
  316. package/build-module/store/defaults.js.map +1 -1
  317. package/build-module/store/reducer.js +25 -13
  318. package/build-module/store/reducer.js.map +1 -1
  319. package/build-module/store/selectors.js +162 -20
  320. package/build-module/store/selectors.js.map +1 -1
  321. package/build-module/utils/dom.js +2 -1
  322. package/build-module/utils/dom.js.map +1 -1
  323. package/build-style/style-rtl.css +214 -24
  324. package/build-style/style.css +214 -24
  325. package/build-types/utils/dom.d.ts.map +1 -1
  326. package/package.json +28 -27
  327. package/src/components/alignment-control/index.js +9 -4
  328. package/src/components/block-alignment-control/index.js +9 -4
  329. package/src/components/block-draggable/index.js +2 -5
  330. package/src/components/block-icon/index.js +3 -0
  331. package/src/components/block-inspector/index.js +4 -0
  332. package/src/components/block-list/block-html.js +8 -4
  333. package/src/components/block-list/block.js +5 -1
  334. package/src/components/block-list/style.scss +4 -5
  335. package/src/components/block-list/use-block-props/index.js +0 -5
  336. package/src/components/block-list/use-block-props/use-focus-first-element.js +27 -6
  337. package/src/components/block-list/use-block-props/use-focus-handler.js +8 -0
  338. package/src/components/block-list-appender/index.js +5 -0
  339. package/src/components/block-lock/index.js +3 -0
  340. package/src/components/block-lock/menu-item.js +59 -0
  341. package/src/components/block-lock/modal.js +170 -0
  342. package/src/components/block-lock/style.scss +70 -0
  343. package/src/components/block-lock/toolbar.js +68 -0
  344. package/src/components/block-mover/index.js +3 -0
  345. package/src/components/block-mover/style.scss +4 -0
  346. package/src/components/block-settings-menu/block-settings-dropdown.js +109 -9
  347. package/src/components/block-settings-menu-controls/index.js +33 -12
  348. package/src/components/block-switcher/index.js +2 -2
  349. package/src/components/block-switcher/style.scss +8 -1
  350. package/src/components/block-switcher/test/index.js +2 -2
  351. package/src/components/block-title/README.md +6 -1
  352. package/src/components/block-title/index.js +2 -2
  353. package/src/components/block-title/test/index.js +43 -1
  354. package/src/components/block-title/use-block-display-title.js +10 -7
  355. package/src/components/block-toolbar/block-name-context.js +8 -0
  356. package/src/components/block-toolbar/block-toolbar-last-item.js +12 -0
  357. package/src/components/block-toolbar/index.js +24 -2
  358. package/src/components/block-toolbar/style.scss +10 -0
  359. package/src/components/block-tools/index.js +0 -19
  360. package/src/components/block-tools/style.scss +27 -0
  361. package/src/components/block-variation-transforms/index.js +105 -36
  362. package/src/components/block-variation-transforms/style.scss +1 -1
  363. package/src/components/block-vertical-alignment-control/index.js +9 -4
  364. package/src/components/border-radius-control/index.js +0 -1
  365. package/src/components/border-radius-control/test/utils.js +4 -0
  366. package/src/components/border-radius-control/utils.js +2 -1
  367. package/src/components/button-block-appender/style.scss +5 -1
  368. package/src/components/color-palette/test/__snapshots__/control.js.snap +70 -4
  369. package/src/components/colors-gradients/control.js +1 -1
  370. package/src/components/colors-gradients/style.scss +6 -0
  371. package/src/components/contrast-checker/index.js +3 -0
  372. package/src/components/convert-to-group-buttons/index.js +6 -1
  373. package/src/components/convert-to-group-buttons/toolbar.js +87 -0
  374. package/src/components/copy-handler/index.js +3 -0
  375. package/src/components/date-format-picker/README.md +58 -0
  376. package/src/components/date-format-picker/index.js +161 -0
  377. package/src/components/date-format-picker/style.scss +31 -0
  378. package/src/components/font-sizes/font-size-picker.js +3 -0
  379. package/src/components/iframe/index.js +5 -7
  380. package/src/components/index.js +3 -0
  381. package/src/components/justify-content-control/index.js +9 -4
  382. package/src/components/keyboard-shortcuts/index.js +1 -1
  383. package/src/components/line-height-control/index.js +11 -6
  384. package/src/components/link-control/README.md +1 -1
  385. package/src/components/list-view/block-select-button.js +21 -30
  386. package/src/components/list-view/block.js +55 -13
  387. package/src/components/list-view/branch.js +37 -15
  388. package/src/components/list-view/index.js +6 -0
  389. package/src/components/list-view/style.scss +56 -14
  390. package/src/components/list-view/use-block-selection.js +15 -2
  391. package/src/components/media-placeholder/README.md +8 -0
  392. package/src/components/media-replace-flow/index.js +3 -0
  393. package/src/components/multi-selection-inspector/index.js +2 -2
  394. package/src/components/rich-text/index.js +25 -2
  395. package/src/components/rich-text/index.native.js +24 -8
  396. package/src/components/rich-text/split-value.js +5 -1
  397. package/src/components/rich-text/use-firefox-compat.js +39 -0
  398. package/src/components/rich-text/use-input-rules.js +40 -3
  399. package/src/components/skip-to-selected-block/index.js +3 -0
  400. package/src/components/url-input/style.scss +3 -2
  401. package/src/components/url-popover/image-url-input-ui.js +16 -29
  402. package/src/components/writing-flow/index.js +8 -0
  403. package/src/components/writing-flow/readme.md +28 -0
  404. package/src/components/writing-flow/use-arrow-nav.js +4 -53
  405. package/src/components/writing-flow/use-click-selection.js +65 -0
  406. package/src/components/writing-flow/use-drag-selection.js +126 -0
  407. package/src/components/writing-flow/use-input.js +112 -0
  408. package/src/components/writing-flow/use-multi-selection.js +13 -36
  409. package/src/components/writing-flow/use-selection-observer.js +153 -0
  410. package/src/components/writing-flow/use-tab-nav.js +1 -11
  411. package/src/hooks/anchor.js +8 -6
  412. package/src/hooks/border-color.js +5 -5
  413. package/src/hooks/border.js +0 -13
  414. package/src/hooks/color.js +51 -24
  415. package/src/hooks/font-family.js +5 -2
  416. package/src/hooks/font-size.js +10 -7
  417. package/src/hooks/gap.js +91 -12
  418. package/src/hooks/layout.js +11 -1
  419. package/src/hooks/style.js +40 -4
  420. package/src/hooks/test/gap.js +66 -0
  421. package/src/hooks/test/style.js +94 -0
  422. package/src/hooks/test/utils.js +1 -1
  423. package/src/hooks/utils.js +26 -0
  424. package/src/layouts/flex.js +93 -6
  425. package/src/layouts/flow.js +28 -12
  426. package/src/store/actions.js +349 -32
  427. package/src/store/defaults.js +7 -1
  428. package/src/store/reducer.js +25 -10
  429. package/src/store/selectors.js +207 -25
  430. package/src/store/test/selectors.js +305 -5
  431. package/src/style.scss +2 -0
  432. package/src/utils/dom.js +2 -1
  433. package/tsconfig.tsbuildinfo +1 -1
  434. package/build/components/block-list/use-block-props/use-multi-selection.js +0 -205
  435. package/build/components/block-list/use-block-props/use-multi-selection.js.map +0 -1
  436. package/build/components/block-list/use-block-props/use-scroll-into-view.js +0 -77
  437. package/build/components/block-list/use-block-props/use-scroll-into-view.js.map +0 -1
  438. package/build-module/components/block-list/use-block-props/use-multi-selection.js +0 -192
  439. package/build-module/components/block-list/use-block-props/use-multi-selection.js.map +0 -1
  440. package/build-module/components/block-list/use-block-props/use-scroll-into-view.js +0 -63
  441. package/build-module/components/block-list/use-block-props/use-scroll-into-view.js.map +0 -1
  442. package/src/components/block-list/use-block-props/use-multi-selection.js +0 -227
  443. package/src/components/block-list/use-block-props/use-scroll-into-view.js +0 -73
@@ -0,0 +1,161 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { uniq } from 'lodash';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { _x, __ } from '@wordpress/i18n';
10
+ import { dateI18n } from '@wordpress/date';
11
+ import { useState, createInterpolateElement } from '@wordpress/element';
12
+ import {
13
+ TextControl,
14
+ ExternalLink,
15
+ VisuallyHidden,
16
+ CustomSelectControl,
17
+ BaseControl,
18
+ ToggleControl,
19
+ } from '@wordpress/components';
20
+
21
+ // So that we can illustrate the different formats in the dropdown properly,
22
+ // show a date that has a day greater than 12 and a month with more than three
23
+ // letters. Here we're using 2022-01-25 which is when WordPress 5.9 was
24
+ // released.
25
+ const EXAMPLE_DATE = new Date( 2022, 0, 25 );
26
+
27
+ /**
28
+ * The `DateFormatPicker` component renders controls that let the user choose a
29
+ * _date format_. That is, how they want their dates to be formatted.
30
+ *
31
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/date-format-picker/README.md
32
+ *
33
+ * @param {Object} props
34
+ * @param {string|null} props.format The selected date
35
+ * format. If
36
+ * `null`,
37
+ * _Default_ is
38
+ * selected.
39
+ * @param {string} props.defaultFormat The date format that
40
+ * will be used if the
41
+ * user selects
42
+ * 'Default'.
43
+ * @param {( format: string|null ) => void} props.onChange Called when a
44
+ * selection is
45
+ * made. If `null`,
46
+ * _Default_ is
47
+ * selected.
48
+ */
49
+ export default function DateFormatPicker( {
50
+ format,
51
+ defaultFormat,
52
+ onChange,
53
+ } ) {
54
+ return (
55
+ <fieldset className="block-editor-date-format-picker">
56
+ <VisuallyHidden as="legend">{ __( 'Date format' ) }</VisuallyHidden>
57
+ <ToggleControl
58
+ label={
59
+ <>
60
+ { __( 'Default format' ) }
61
+ <span className="block-editor-date-format-picker__default-format-toggle-control__hint">
62
+ { dateI18n( defaultFormat, EXAMPLE_DATE ) }
63
+ </span>
64
+ </>
65
+ }
66
+ checked={ ! format }
67
+ onChange={ ( checked ) =>
68
+ onChange( checked ? null : defaultFormat )
69
+ }
70
+ />
71
+ { format && (
72
+ <NonDefaultControls format={ format } onChange={ onChange } />
73
+ ) }
74
+ </fieldset>
75
+ );
76
+ }
77
+
78
+ function NonDefaultControls( { format, onChange } ) {
79
+ // Suggest a short format, medium format, long format, and a standardised
80
+ // (YYYY-MM-DD) format. The short, medium, and long formats are localised as
81
+ // different languages have different ways of writing these. For example, 'F
82
+ // j, Y' (April 20, 2022) in American English (en_US) is 'j. F Y' (20. April
83
+ // 2022) in German (de). The resultant array is de-duplicated as some
84
+ // languages will use the same format string for short, medium, and long
85
+ // formats.
86
+ const suggestedFormats = uniq( [
87
+ 'Y-m-d',
88
+ _x( 'n/j/Y', 'short date format' ),
89
+ _x( 'n/j/Y g:i A', 'short date format with time' ),
90
+ _x( 'M j, Y', 'medium date format' ),
91
+ _x( 'M j, Y g:i A', 'medium date format with time' ),
92
+ _x( 'F j, Y', 'long date format' ),
93
+ ] );
94
+
95
+ const suggestedOptions = suggestedFormats.map(
96
+ ( suggestedFormat, index ) => ( {
97
+ key: `suggested-${ index }`,
98
+ name: dateI18n( suggestedFormat, EXAMPLE_DATE ),
99
+ format: suggestedFormat,
100
+ } )
101
+ );
102
+ const customOption = {
103
+ key: 'custom',
104
+ name: __( 'Custom' ),
105
+ className:
106
+ 'block-editor-date-format-picker__custom-format-select-control__custom-option',
107
+ __experimentalHint: __( 'Enter your own date format' ),
108
+ };
109
+
110
+ const [ isCustom, setIsCustom ] = useState(
111
+ () => !! format && ! suggestedFormats.includes( format )
112
+ );
113
+
114
+ return (
115
+ <>
116
+ <BaseControl className="block-editor-date-format-picker__custom-format-select-control">
117
+ <CustomSelectControl
118
+ label={ __( 'Choose a format' ) }
119
+ options={ [ ...suggestedOptions, customOption ] }
120
+ value={
121
+ isCustom
122
+ ? customOption
123
+ : suggestedOptions.find(
124
+ ( option ) => option.format === format
125
+ ) ?? customOption
126
+ }
127
+ onChange={ ( { selectedItem } ) => {
128
+ if ( selectedItem === customOption ) {
129
+ setIsCustom( true );
130
+ } else {
131
+ setIsCustom( false );
132
+ onChange( selectedItem.format );
133
+ }
134
+ } }
135
+ />
136
+ </BaseControl>
137
+ { isCustom && (
138
+ <TextControl
139
+ label={ __( 'Custom format' ) }
140
+ hideLabelFromVision
141
+ help={ createInterpolateElement(
142
+ __(
143
+ 'Enter a date or time <Link>format string</Link>.'
144
+ ),
145
+ {
146
+ Link: (
147
+ <ExternalLink
148
+ href={ __(
149
+ 'https://wordpress.org/support/article/formatting-date-and-time/'
150
+ ) }
151
+ />
152
+ ),
153
+ }
154
+ ) }
155
+ value={ format }
156
+ onChange={ ( value ) => onChange( value ) }
157
+ />
158
+ ) }
159
+ </>
160
+ );
161
+ }
@@ -0,0 +1,31 @@
1
+ .block-editor-date-format-picker {
2
+ margin-bottom: $grid-unit-20;
3
+ }
4
+
5
+ .block-editor-date-format-picker__default-format-toggle-control__hint {
6
+ color: $gray-700;
7
+ display: block;
8
+ }
9
+
10
+ .block-editor-date-format-picker__custom-format-select-control {
11
+ &.components-base-control {
12
+ margin-bottom: 0;
13
+ }
14
+
15
+ .components-custom-select-control__button {
16
+ width: 100%;
17
+ }
18
+ }
19
+
20
+ .block-editor-date-format-picker__custom-format-select-control__custom-option {
21
+ border-top: 1px solid $gray-300;
22
+
23
+ &.has-hint {
24
+ grid-template-columns: auto 30px;
25
+ }
26
+
27
+ .components-custom-select-control__item-hint {
28
+ grid-row: 2;
29
+ text-align: left;
30
+ }
31
+ }
@@ -21,4 +21,7 @@ function FontSizePicker( props ) {
21
21
  );
22
22
  }
23
23
 
24
+ /**
25
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/font-sizes/README.md
26
+ */
24
27
  export default FontSizePicker;
@@ -203,14 +203,10 @@ function Iframe(
203
203
  return true;
204
204
  }
205
205
 
206
- if ( setDocumentIfReady() ) {
207
- return;
208
- }
206
+ // Document set with srcDoc is not immediately ready.
207
+ node.addEventListener( 'load', setDocumentIfReady );
209
208
 
210
- // Document is not immediately loaded in Firefox.
211
- node.addEventListener( 'load', () => {
212
- setDocumentIfReady();
213
- } );
209
+ return () => node.removeEventListener( 'load', setDocumentIfReady );
214
210
  }, [] );
215
211
  const headRef = useRefEffect( ( element ) => {
216
212
  scripts
@@ -264,6 +260,8 @@ function Iframe(
264
260
  { ...props }
265
261
  ref={ useMergeRefs( [ ref, setRef ] ) }
266
262
  tabIndex={ tabIndex }
263
+ // Correct doctype is required to enable rendering in standards mode
264
+ srcDoc="<!doctype html>"
267
265
  title={ __( 'Editor canvas' ) }
268
266
  >
269
267
  { iframeDocument &&
@@ -42,6 +42,7 @@ export {
42
42
  export { default as ColorPalette } from './color-palette';
43
43
  export { default as ColorPaletteControl } from './color-palette/control';
44
44
  export { default as ContrastChecker } from './contrast-checker';
45
+ export { default as __experimentalDateFormatPicker } from './date-format-picker';
45
46
  export { default as __experimentalDuotoneControl } from './duotone-control';
46
47
  export { default as __experimentalFontAppearanceControl } from './font-appearance-control';
47
48
  export { default as __experimentalFontFamilyControl } from './font-family';
@@ -98,6 +99,8 @@ export { default as withColorContext } from './color-palette/with-color-context'
98
99
  */
99
100
 
100
101
  export { default as __unstableBlockSettingsMenuFirstItem } from './block-settings-menu/block-settings-menu-first-item';
102
+ export { default as __unstableBlockToolbarLastItem } from './block-toolbar/block-toolbar-last-item';
103
+ export { default as __unstableBlockNameContext } from './block-toolbar/block-name-context';
101
104
  export { default as __unstableInserterMenuExtension } from './inserter-menu-extension';
102
105
  export { default as __experimentalPreviewOptions } from './preview-options';
103
106
  export { default as __experimentalUseResizeCanvas } from './use-resize-canvas';
@@ -3,10 +3,15 @@
3
3
  */
4
4
  import JustifyContentUI from './ui';
5
5
 
6
- export function JustifyContentControl( props ) {
6
+ const JustifyContentControl = ( props ) => {
7
7
  return <JustifyContentUI { ...props } isToolbar={ false } />;
8
- }
8
+ };
9
9
 
10
- export function JustifyToolbar( props ) {
10
+ const JustifyToolbar = ( props ) => {
11
11
  return <JustifyContentUI { ...props } isToolbar />;
12
- }
12
+ };
13
+
14
+ /**
15
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/justify-content-control/README.md
16
+ */
17
+ export { JustifyContentControl, JustifyToolbar };
@@ -61,7 +61,7 @@ function KeyboardShortcutsRegister() {
61
61
  registerShortcut( {
62
62
  name: 'core/block-editor/delete-multi-selection',
63
63
  category: 'block',
64
- description: __( 'Remove multiple selected blocks.' ),
64
+ description: __( 'Delete selection.' ),
65
65
  keyCombination: {
66
66
  character: 'del',
67
67
  },
@@ -15,13 +15,13 @@ import {
15
15
  isLineHeightDefined,
16
16
  } from './utils';
17
17
 
18
- export default function LineHeightControl( {
18
+ const LineHeightControl = ( {
19
19
  value: lineHeight,
20
20
  onChange,
21
21
  /** Start opting into the new margin-free styles that will become the default in a future version. */
22
22
  __nextHasNoMarginBottom = false,
23
23
  __unstableInputWidth = '60px',
24
- } ) {
24
+ } ) => {
25
25
  const isDefined = isLineHeightDefined( lineHeight );
26
26
 
27
27
  const adjustNextValue = ( nextValue, wasTypedOrPasted ) => {
@@ -37,7 +37,7 @@ export default function LineHeightControl( {
37
37
  * Step up/down actions can be triggered by keydowns of the up/down arrow keys,
38
38
  * or by clicking the spin buttons.
39
39
  */
40
- switch ( nextValue ) {
40
+ switch ( `${ nextValue }` ) {
41
41
  case `${ STEP }`:
42
42
  // Increment by step value.
43
43
  return BASE_DEFAULT_VALUE + STEP;
@@ -63,8 +63,8 @@ export default function LineHeightControl( {
63
63
  const wasTypedOrPasted = [ 'insertText', 'insertFromPaste' ].includes(
64
64
  action.payload.event.nativeEvent?.inputType
65
65
  );
66
- state.value = adjustNextValue( state.value, wasTypedOrPasted );
67
- return state;
66
+ const value = adjustNextValue( state.value, wasTypedOrPasted );
67
+ return { ...state, value };
68
68
  };
69
69
 
70
70
  const value = isDefined ? lineHeight : RESET_VALUE;
@@ -101,4 +101,9 @@ export default function LineHeightControl( {
101
101
  />
102
102
  </div>
103
103
  );
104
- }
104
+ };
105
+
106
+ /**
107
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/line-height-control/README.md
108
+ */
109
+ export default LineHeightControl;
@@ -85,7 +85,7 @@ Value change handler, called with the updated value if the user selects a new li
85
85
  <LinkControl
86
86
  onChange={ ( nextValue ) => {
87
87
  console.log( `The selected item URL: ${ nextValue.url }.` );
88
- }
88
+ } }
89
89
  />
90
90
  ```
91
91
 
@@ -6,47 +6,43 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { Button, VisuallyHidden } from '@wordpress/components';
10
- import { useInstanceId } from '@wordpress/compose';
9
+ import { Button } from '@wordpress/components';
11
10
  import { forwardRef } from '@wordpress/element';
12
- import { __ } from '@wordpress/i18n';
11
+ import { useSelect } from '@wordpress/data';
12
+ import { Icon, lock } from '@wordpress/icons';
13
+ import { SPACE, ENTER } from '@wordpress/keycodes';
13
14
 
14
15
  /**
15
16
  * Internal dependencies
16
17
  */
17
18
  import BlockIcon from '../block-icon';
18
19
  import useBlockDisplayInformation from '../use-block-display-information';
19
- import { getBlockPositionDescription } from './utils';
20
20
  import BlockTitle from '../block-title';
21
21
  import ListViewExpander from './expander';
22
- import { SPACE, ENTER } from '@wordpress/keycodes';
22
+ import { store as blockEditorStore } from '../../store';
23
23
 
24
24
  function ListViewBlockSelectButton(
25
25
  {
26
26
  className,
27
27
  block: { clientId },
28
- isSelected,
29
28
  onClick,
30
29
  onToggleExpanded,
31
- position,
32
- siblingBlockCount,
33
- level,
34
30
  tabIndex,
35
31
  onFocus,
36
32
  onDragStart,
37
33
  onDragEnd,
38
34
  draggable,
39
- isExpanded,
40
35
  },
41
36
  ref
42
37
  ) {
43
38
  const blockInformation = useBlockDisplayInformation( clientId );
44
- const instanceId = useInstanceId( ListViewBlockSelectButton );
45
- const descriptionId = `list-view-block-select-button__${ instanceId }`;
46
- const blockPositionDescription = getBlockPositionDescription(
47
- position,
48
- siblingBlockCount,
49
- level
39
+ const isLocked = useSelect(
40
+ ( select ) => {
41
+ const { canMoveBlock, canRemoveBlock } = select( blockEditorStore );
42
+
43
+ return ! canMoveBlock( clientId ) || ! canRemoveBlock( clientId );
44
+ },
45
+ [ clientId ]
50
46
  );
51
47
 
52
48
  // The `href` attribute triggers the browser's native HTML drag operations.
@@ -55,7 +51,7 @@ function ListViewBlockSelectButton(
55
51
  // inside the `useOnBlockDrop` hook.
56
52
  const onDragStartHandler = ( event ) => {
57
53
  event.dataTransfer.clearData();
58
- onDragStart( event );
54
+ onDragStart?.( event );
59
55
  };
60
56
 
61
57
  function onKeyDownHandler( event ) {
@@ -73,7 +69,6 @@ function ListViewBlockSelectButton(
73
69
  ) }
74
70
  onClick={ onClick }
75
71
  onKeyDown={ onKeyDownHandler }
76
- aria-describedby={ descriptionId }
77
72
  ref={ ref }
78
73
  tabIndex={ tabIndex }
79
74
  onFocus={ onFocus }
@@ -81,28 +76,24 @@ function ListViewBlockSelectButton(
81
76
  onDragEnd={ onDragEnd }
82
77
  draggable={ draggable }
83
78
  href={ `#block-${ clientId }` }
84
- aria-expanded={ isExpanded }
79
+ aria-hidden={ true }
85
80
  >
86
81
  <ListViewExpander onClick={ onToggleExpanded } />
87
82
  <BlockIcon icon={ blockInformation?.icon } showColors />
88
- <BlockTitle clientId={ clientId } maximumLength={ 35 } />
83
+ <span className="block-editor-list-view-block-select-button__title">
84
+ <BlockTitle clientId={ clientId } maximumLength={ 35 } />
85
+ </span>
89
86
  { blockInformation?.anchor && (
90
87
  <span className="block-editor-list-view-block-select-button__anchor">
91
88
  { blockInformation.anchor }
92
89
  </span>
93
90
  ) }
94
- { isSelected && (
95
- <VisuallyHidden>
96
- { __( '(selected block)' ) }
97
- </VisuallyHidden>
91
+ { isLocked && (
92
+ <span className="block-editor-list-view-block-select-button__lock">
93
+ <Icon icon={ lock } />
94
+ </span>
98
95
  ) }
99
96
  </Button>
100
- <div
101
- className="block-editor-list-view-block-select-button__description"
102
- id={ descriptionId }
103
- >
104
- { blockPositionDescription }
105
- </div>
106
97
  </>
107
98
  );
108
99
  }
@@ -10,6 +10,7 @@ import {
10
10
  __experimentalTreeGridCell as TreeGridCell,
11
11
  __experimentalTreeGridItem as TreeGridItem,
12
12
  } from '@wordpress/components';
13
+ import { useInstanceId } from '@wordpress/compose';
13
14
  import { moreVertical } from '@wordpress/icons';
14
15
  import {
15
16
  useState,
@@ -32,6 +33,7 @@ import {
32
33
  import ListViewBlockContents from './block-contents';
33
34
  import BlockSettingsDropdown from '../block-settings-menu/block-settings-dropdown';
34
35
  import { useListViewContext } from './context';
36
+ import { getBlockPositionDescription } from './utils';
35
37
  import { store as blockEditorStore } from '../../store';
36
38
  import useBlockDisplayInformation from '../use-block-display-information';
37
39
 
@@ -49,13 +51,44 @@ function ListViewBlock( {
49
51
  path,
50
52
  isExpanded,
51
53
  selectedClientIds,
54
+ preventAnnouncement,
52
55
  } ) {
53
56
  const cellRef = useRef( null );
54
57
  const [ isHovered, setIsHovered ] = useState( false );
55
58
  const { clientId } = block;
59
+ const isFirstSelectedBlock =
60
+ isSelected && selectedClientIds[ 0 ] === clientId;
61
+ const isLastSelectedBlock =
62
+ isSelected &&
63
+ selectedClientIds[ selectedClientIds.length - 1 ] === clientId;
56
64
 
57
65
  const { toggleBlockHighlight } = useDispatch( blockEditorStore );
58
66
 
67
+ const blockInformation = useBlockDisplayInformation( clientId );
68
+ const instanceId = useInstanceId( ListViewBlock );
69
+ const descriptionId = `list-view-block-select-button__${ instanceId }`;
70
+ const blockPositionDescription = getBlockPositionDescription(
71
+ position,
72
+ siblingBlockCount,
73
+ level
74
+ );
75
+
76
+ const blockAriaLabel = blockInformation
77
+ ? sprintf(
78
+ // translators: %s: The title of the block. This string indicates a link to select the block.
79
+ __( '%s link' ),
80
+ blockInformation.title
81
+ )
82
+ : __( 'Link' );
83
+
84
+ const settingsAriaLabel = blockInformation
85
+ ? sprintf(
86
+ // translators: %s: The title of the block.
87
+ __( 'Options for %s block' ),
88
+ blockInformation.title
89
+ )
90
+ : __( 'Options' );
91
+
59
92
  const {
60
93
  __experimentalFeatures: withExperimentalFeatures,
61
94
  __experimentalPersistentListViewFeatures: withExperimentalPersistentListViewFeatures,
@@ -74,7 +107,7 @@ function ListViewBlock( {
74
107
 
75
108
  const listViewBlockSettingsClassName = classnames(
76
109
  'block-editor-list-view-block__menu-cell',
77
- { 'is-visible': isHovered || isSelected }
110
+ { 'is-visible': isHovered || isFirstSelectedBlock }
78
111
  );
79
112
 
80
113
  // If ListView has experimental features related to the Persistent List View,
@@ -106,11 +139,12 @@ function ListViewBlock( {
106
139
  const selectEditorBlock = useCallback(
107
140
  ( event ) => {
108
141
  selectBlock( event, clientId );
142
+ event.preventDefault();
109
143
  },
110
144
  [ clientId, selectBlock ]
111
145
  );
112
146
 
113
- const selectDuplicatedBlock = useCallback(
147
+ const updateSelection = useCallback(
114
148
  ( newClientId ) => {
115
149
  selectBlock( undefined, newClientId );
116
150
  },
@@ -148,21 +182,14 @@ function ListViewBlock( {
148
182
 
149
183
  const classes = classnames( {
150
184
  'is-selected': isSelected,
185
+ 'is-first-selected': isFirstSelectedBlock,
186
+ 'is-last-selected': isLastSelectedBlock,
151
187
  'is-branch-selected':
152
188
  withExperimentalPersistentListViewFeatures && isBranchSelected,
153
189
  'is-dragging': isDragged,
154
190
  'has-single-cell': hideBlockActions,
155
191
  } );
156
192
 
157
- const blockInformation = useBlockDisplayInformation( clientId );
158
- const settingsAriaLabel = blockInformation
159
- ? sprintf(
160
- // translators: %s: The title of the block.
161
- __( 'Options for %s block' ),
162
- blockInformation.title
163
- )
164
- : __( 'Options' );
165
-
166
193
  // Only include all selected blocks if the currently clicked on block
167
194
  // is one of the selected blocks. This ensures that if a user attempts
168
195
  // to alter a block that isn't part of the selection, they're still able
@@ -185,11 +212,16 @@ function ListViewBlock( {
185
212
  id={ `list-view-block-${ clientId }` }
186
213
  data-block={ clientId }
187
214
  isExpanded={ isExpanded }
215
+ aria-selected={ !! isSelected }
188
216
  >
189
217
  <TreeGridCell
190
218
  className="block-editor-list-view-block__contents-cell"
191
219
  colSpan={ colSpan }
192
220
  ref={ cellRef }
221
+ aria-label={ blockAriaLabel }
222
+ aria-selected={ !! isSelected }
223
+ aria-expanded={ isExpanded }
224
+ aria-describedby={ descriptionId }
193
225
  >
194
226
  { ( { ref, tabIndex, onFocus } ) => (
195
227
  <div className="block-editor-list-view-block__contents-container">
@@ -206,7 +238,14 @@ function ListViewBlock( {
206
238
  onFocus={ onFocus }
207
239
  isExpanded={ isExpanded }
208
240
  selectedClientIds={ selectedClientIds }
241
+ preventAnnouncement={ preventAnnouncement }
209
242
  />
243
+ <div
244
+ className="block-editor-list-view-block-select-button__description"
245
+ id={ descriptionId }
246
+ >
247
+ { blockPositionDescription }
248
+ </div>
210
249
  </div>
211
250
  ) }
212
251
  </TreeGridCell>
@@ -243,7 +282,10 @@ function ListViewBlock( {
243
282
  ) }
244
283
 
245
284
  { showBlockActions && (
246
- <TreeGridCell className={ listViewBlockSettingsClassName }>
285
+ <TreeGridCell
286
+ className={ listViewBlockSettingsClassName }
287
+ aria-selected={ !! isSelected }
288
+ >
247
289
  { ( { ref, tabIndex, onFocus } ) => (
248
290
  <BlockSettingsDropdown
249
291
  clientIds={ dropdownClientIds }
@@ -256,7 +298,7 @@ function ListViewBlock( {
256
298
  onFocus,
257
299
  } }
258
300
  disableOpenOnArrowDown
259
- __experimentalSelectBlock={ selectDuplicatedBlock }
301
+ __experimentalSelectBlock={ updateSelection }
260
302
  />
261
303
  ) }
262
304
  </TreeGridCell>