@wordpress/block-editor 11.8.0 → 12.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +16 -4
  3. package/build/components/block-controls/slot.js +12 -4
  4. package/build/components/block-controls/slot.js.map +1 -1
  5. package/build/components/block-controls/slot.native.js +10 -1
  6. package/build/components/block-controls/slot.native.js.map +1 -1
  7. package/build/components/block-draggable/index.js +11 -7
  8. package/build/components/block-draggable/index.js.map +1 -1
  9. package/build/components/block-draggable/use-scroll-when-dragging.js +2 -2
  10. package/build/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  11. package/build/components/block-info-slot-fill/index.js +47 -0
  12. package/build/components/block-info-slot-fill/index.js.map +1 -0
  13. package/build/components/block-inspector/index.js +4 -2
  14. package/build/components/block-inspector/index.js.map +1 -1
  15. package/build/components/block-list/block-invalid-warning.native.js +15 -7
  16. package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
  17. package/build/components/block-list/block-list-item-cell.native.js +15 -2
  18. package/build/components/block-list/block-list-item-cell.native.js.map +1 -1
  19. package/build/components/block-list/block-list-item.native.js +158 -195
  20. package/build/components/block-list/block-list-item.native.js.map +1 -1
  21. package/build/components/block-list/block-outline.native.js +57 -0
  22. package/build/components/block-list/block-outline.native.js.map +1 -0
  23. package/build/components/block-list/block.native.js +343 -300
  24. package/build/components/block-list/block.native.js.map +1 -1
  25. package/build/components/block-list/index.native.js +202 -298
  26. package/build/components/block-list/index.native.js.map +1 -1
  27. package/build/components/block-list/insertion-point.native.js +4 -2
  28. package/build/components/block-list/insertion-point.native.js.map +1 -1
  29. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  30. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  31. package/build/components/block-settings-menu/block-settings-dropdown.js +8 -10
  32. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  33. package/build/components/block-settings-menu-controls/index.js +15 -4
  34. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  35. package/build/components/block-toolbar/index.js +2 -1
  36. package/build/components/block-toolbar/index.js.map +1 -1
  37. package/build/components/block-tools/block-contextual-toolbar.js +40 -11
  38. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  39. package/build/components/block-tools/selected-block-popover.js +8 -30
  40. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  41. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  42. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  43. package/build/components/editor-styles/index.js +4 -3
  44. package/build/components/editor-styles/index.js.map +1 -1
  45. package/build/components/font-sizes/fluid-utils.js +21 -14
  46. package/build/components/font-sizes/fluid-utils.js.map +1 -1
  47. package/build/components/global-styles/advanced-panel.js +86 -0
  48. package/build/components/global-styles/advanced-panel.js.map +1 -0
  49. package/build/components/global-styles/border-panel.js +2 -32
  50. package/build/components/global-styles/border-panel.js.map +1 -1
  51. package/build/components/global-styles/color-panel.js +16 -13
  52. package/build/components/global-styles/color-panel.js.map +1 -1
  53. package/build/components/global-styles/color-panel.native.js +174 -0
  54. package/build/components/global-styles/color-panel.native.js.map +1 -0
  55. package/build/components/global-styles/dimensions-panel.js +12 -12
  56. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  57. package/build/components/global-styles/effects-panel.js +1 -1
  58. package/build/components/global-styles/effects-panel.js.map +1 -1
  59. package/build/components/global-styles/filters-panel.js +78 -14
  60. package/build/components/global-styles/filters-panel.js.map +1 -1
  61. package/build/components/global-styles/hooks.js +1 -2
  62. package/build/components/global-styles/hooks.js.map +1 -1
  63. package/build/components/global-styles/index.js +24 -0
  64. package/build/components/global-styles/index.js.map +1 -1
  65. package/build/components/global-styles/typography-panel.js +10 -10
  66. package/build/components/global-styles/typography-panel.js.map +1 -1
  67. package/build/components/global-styles/use-global-styles-output.js +114 -81
  68. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  69. package/build/components/global-styles/utils.js +30 -0
  70. package/build/components/global-styles/utils.js.map +1 -1
  71. package/build/components/image-editor/use-save-image.js +24 -8
  72. package/build/components/image-editor/use-save-image.js.map +1 -1
  73. package/build/components/index.js +7 -0
  74. package/build/components/index.js.map +1 -1
  75. package/build/components/inserter/block-types-tab.js +12 -7
  76. package/build/components/inserter/block-types-tab.js.map +1 -1
  77. package/build/components/inserter/index.js +2 -1
  78. package/build/components/inserter/index.js.map +1 -1
  79. package/build/components/inserter-draggable-blocks/index.js +5 -0
  80. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  81. package/build/components/inspector-controls/fill.js +1 -1
  82. package/build/components/inspector-controls/fill.js.map +1 -1
  83. package/build/components/inspector-controls/fill.native.js +1 -1
  84. package/build/components/inspector-controls/fill.native.js.map +1 -1
  85. package/build/components/inspector-controls/groups.js +2 -0
  86. package/build/components/inspector-controls/groups.js.map +1 -1
  87. package/build/components/inspector-controls/slot.js +3 -6
  88. package/build/components/inspector-controls/slot.js.map +1 -1
  89. package/build/components/inspector-controls/slot.native.js +1 -1
  90. package/build/components/inspector-controls/slot.native.js.map +1 -1
  91. package/build/components/inspector-controls-tabs/styles-tab.js +2 -0
  92. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  93. package/build/components/line-height-control/index.js +7 -2
  94. package/build/components/line-height-control/index.js.map +1 -1
  95. package/build/components/link-control/use-internal-input-value.js +9 -8
  96. package/build/components/link-control/use-internal-input-value.js.map +1 -1
  97. package/build/components/list-view/block-contents.js +7 -2
  98. package/build/components/list-view/block-contents.js.map +1 -1
  99. package/build/components/list-view/block-select-button.js +9 -3
  100. package/build/components/list-view/block-select-button.js.map +1 -1
  101. package/build/components/list-view/block.js +16 -25
  102. package/build/components/list-view/block.js.map +1 -1
  103. package/build/components/list-view/drop-indicator.js +37 -10
  104. package/build/components/list-view/drop-indicator.js.map +1 -1
  105. package/build/components/list-view/index.js +38 -18
  106. package/build/components/list-view/index.js.map +1 -1
  107. package/build/components/list-view/leaf.js +2 -1
  108. package/build/components/list-view/leaf.js.map +1 -1
  109. package/build/components/list-view/use-block-selection.js +1 -1
  110. package/build/components/list-view/use-block-selection.js.map +1 -1
  111. package/build/components/list-view/use-list-view-drop-zone.js +163 -11
  112. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  113. package/build/components/media-placeholder/index.js +68 -7
  114. package/build/components/media-placeholder/index.js.map +1 -1
  115. package/build/components/media-replace-flow/index.js +5 -5
  116. package/build/components/media-replace-flow/index.js.map +1 -1
  117. package/build/components/multi-selection-inspector/index.js +2 -2
  118. package/build/components/multi-selection-inspector/index.js.map +1 -1
  119. package/build/components/navigable-toolbar/index.js +12 -4
  120. package/build/components/navigable-toolbar/index.js.map +1 -1
  121. package/build/components/off-canvas-editor/appender.js +2 -7
  122. package/build/components/off-canvas-editor/appender.js.map +1 -1
  123. package/build/components/off-canvas-editor/leaf-more-menu.js +3 -1
  124. package/build/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  125. package/build/components/preview-options/index.js +6 -1
  126. package/build/components/preview-options/index.js.map +1 -1
  127. package/build/components/spacing-sizes-control/spacing-input-control.js +1 -1
  128. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  129. package/build/components/url-input/index.js +1 -2
  130. package/build/components/url-input/index.js.map +1 -1
  131. package/build/hooks/align.js +1 -1
  132. package/build/hooks/align.js.map +1 -1
  133. package/build/hooks/border.js +1 -1
  134. package/build/hooks/border.js.map +1 -1
  135. package/build/hooks/color.js +1 -1
  136. package/build/hooks/color.js.map +1 -1
  137. package/build/hooks/content-lock-ui.js +8 -12
  138. package/build/hooks/content-lock-ui.js.map +1 -1
  139. package/build/hooks/duotone.js +29 -4
  140. package/build/hooks/duotone.js.map +1 -1
  141. package/build/hooks/index.native.js +8 -0
  142. package/build/hooks/index.native.js.map +1 -1
  143. package/build/hooks/layout.js +2 -2
  144. package/build/hooks/layout.js.map +1 -1
  145. package/build/hooks/position.js +1 -1
  146. package/build/hooks/position.js.map +1 -1
  147. package/build/hooks/style.js +1 -1
  148. package/build/hooks/style.js.map +1 -1
  149. package/build/hooks/use-editor-wrapper-styles.native.js +255 -0
  150. package/build/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  151. package/build/hooks/use-typography-props.js +14 -10
  152. package/build/hooks/use-typography-props.js.map +1 -1
  153. package/build/hooks/utils.js +15 -3
  154. package/build/hooks/utils.js.map +1 -1
  155. package/build/index.native.js +31 -0
  156. package/build/index.native.js.map +1 -0
  157. package/build/private-apis.js +10 -1
  158. package/build/private-apis.js.map +1 -1
  159. package/build/store/actions.js +7 -0
  160. package/build/store/actions.js.map +1 -1
  161. package/build/utils/object.js +5 -5
  162. package/build/utils/object.js.map +1 -1
  163. package/build/utils/transform-styles/index.js +2 -2
  164. package/build/utils/transform-styles/index.js.map +1 -1
  165. package/build/utils/use-should-contextual-toolbar-show.js +72 -0
  166. package/build/utils/use-should-contextual-toolbar-show.js.map +1 -0
  167. package/build-module/components/block-controls/slot.js +11 -4
  168. package/build-module/components/block-controls/slot.js.map +1 -1
  169. package/build-module/components/block-controls/slot.native.js +9 -1
  170. package/build-module/components/block-controls/slot.native.js.map +1 -1
  171. package/build-module/components/block-draggable/index.js +10 -6
  172. package/build-module/components/block-draggable/index.js.map +1 -1
  173. package/build-module/components/block-draggable/use-scroll-when-dragging.js +2 -2
  174. package/build-module/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  175. package/build-module/components/block-info-slot-fill/index.js +34 -0
  176. package/build-module/components/block-info-slot-fill/index.js.map +1 -0
  177. package/build-module/components/block-inspector/index.js +3 -2
  178. package/build-module/components/block-inspector/index.js.map +1 -1
  179. package/build-module/components/block-list/block-invalid-warning.native.js +16 -8
  180. package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
  181. package/build-module/components/block-list/block-list-item-cell.native.js +13 -2
  182. package/build-module/components/block-list/block-list-item-cell.native.js.map +1 -1
  183. package/build-module/components/block-list/block-list-item.native.js +160 -190
  184. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  185. package/build-module/components/block-list/block-outline.native.js +44 -0
  186. package/build-module/components/block-list/block-outline.native.js.map +1 -0
  187. package/build-module/components/block-list/block.native.js +341 -299
  188. package/build-module/components/block-list/block.native.js.map +1 -1
  189. package/build-module/components/block-list/index.native.js +203 -293
  190. package/build-module/components/block-list/index.native.js.map +1 -1
  191. package/build-module/components/block-list/insertion-point.native.js +4 -2
  192. package/build-module/components/block-list/insertion-point.native.js.map +1 -1
  193. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  194. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  195. package/build-module/components/block-settings-menu/block-settings-dropdown.js +8 -9
  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 +13 -5
  198. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  199. package/build-module/components/block-toolbar/index.js +2 -1
  200. package/build-module/components/block-toolbar/index.js.map +1 -1
  201. package/build-module/components/block-tools/block-contextual-toolbar.js +37 -11
  202. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  203. package/build-module/components/block-tools/selected-block-popover.js +8 -29
  204. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  205. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  206. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  207. package/build-module/components/editor-styles/index.js +4 -3
  208. package/build-module/components/editor-styles/index.js.map +1 -1
  209. package/build-module/components/font-sizes/fluid-utils.js +21 -14
  210. package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
  211. package/build-module/components/global-styles/advanced-panel.js +74 -0
  212. package/build-module/components/global-styles/advanced-panel.js.map +1 -0
  213. package/build-module/components/global-styles/border-panel.js +2 -32
  214. package/build-module/components/global-styles/border-panel.js.map +1 -1
  215. package/build-module/components/global-styles/color-panel.js +18 -15
  216. package/build-module/components/global-styles/color-panel.js.map +1 -1
  217. package/build-module/components/global-styles/color-panel.native.js +150 -0
  218. package/build-module/components/global-styles/color-panel.native.js.map +1 -0
  219. package/build-module/components/global-styles/dimensions-panel.js +13 -13
  220. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  221. package/build-module/components/global-styles/effects-panel.js +2 -2
  222. package/build-module/components/global-styles/effects-panel.js.map +1 -1
  223. package/build-module/components/global-styles/filters-panel.js +78 -16
  224. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  225. package/build-module/components/global-styles/hooks.js +1 -2
  226. package/build-module/components/global-styles/hooks.js.map +1 -1
  227. package/build-module/components/global-styles/index.js +3 -1
  228. package/build-module/components/global-styles/index.js.map +1 -1
  229. package/build-module/components/global-styles/typography-panel.js +11 -11
  230. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  231. package/build-module/components/global-styles/use-global-styles-output.js +112 -81
  232. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  233. package/build-module/components/global-styles/utils.js +25 -0
  234. package/build-module/components/global-styles/utils.js.map +1 -1
  235. package/build-module/components/image-editor/use-save-image.js +24 -8
  236. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  237. package/build-module/components/index.js +1 -1
  238. package/build-module/components/index.js.map +1 -1
  239. package/build-module/components/inserter/block-types-tab.js +12 -6
  240. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  241. package/build-module/components/inserter/index.js +2 -1
  242. package/build-module/components/inserter/index.js.map +1 -1
  243. package/build-module/components/inserter-draggable-blocks/index.js +4 -0
  244. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  245. package/build-module/components/inspector-controls/fill.js +1 -1
  246. package/build-module/components/inspector-controls/fill.js.map +1 -1
  247. package/build-module/components/inspector-controls/fill.native.js +1 -1
  248. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  249. package/build-module/components/inspector-controls/groups.js +2 -0
  250. package/build-module/components/inspector-controls/groups.js.map +1 -1
  251. package/build-module/components/inspector-controls/slot.js +4 -7
  252. package/build-module/components/inspector-controls/slot.js.map +1 -1
  253. package/build-module/components/inspector-controls/slot.native.js +1 -1
  254. package/build-module/components/inspector-controls/slot.native.js.map +1 -1
  255. package/build-module/components/inspector-controls-tabs/styles-tab.js +2 -0
  256. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  257. package/build-module/components/line-height-control/index.js +7 -2
  258. package/build-module/components/line-height-control/index.js.map +1 -1
  259. package/build-module/components/link-control/use-internal-input-value.js +9 -8
  260. package/build-module/components/link-control/use-internal-input-value.js.map +1 -1
  261. package/build-module/components/list-view/block-contents.js +7 -3
  262. package/build-module/components/list-view/block-contents.js.map +1 -1
  263. package/build-module/components/list-view/block-select-button.js +9 -3
  264. package/build-module/components/list-view/block-select-button.js.map +1 -1
  265. package/build-module/components/list-view/block.js +18 -26
  266. package/build-module/components/list-view/block.js.map +1 -1
  267. package/build-module/components/list-view/drop-indicator.js +36 -10
  268. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  269. package/build-module/components/list-view/index.js +39 -19
  270. package/build-module/components/list-view/index.js.map +1 -1
  271. package/build-module/components/list-view/leaf.js +2 -1
  272. package/build-module/components/list-view/leaf.js.map +1 -1
  273. package/build-module/components/list-view/use-block-selection.js +1 -1
  274. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  275. package/build-module/components/list-view/use-list-view-drop-zone.js +160 -11
  276. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  277. package/build-module/components/media-placeholder/index.js +66 -7
  278. package/build-module/components/media-placeholder/index.js.map +1 -1
  279. package/build-module/components/media-replace-flow/index.js +5 -5
  280. package/build-module/components/media-replace-flow/index.js.map +1 -1
  281. package/build-module/components/multi-selection-inspector/index.js +2 -2
  282. package/build-module/components/multi-selection-inspector/index.js.map +1 -1
  283. package/build-module/components/navigable-toolbar/index.js +12 -4
  284. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  285. package/build-module/components/off-canvas-editor/appender.js +1 -5
  286. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  287. package/build-module/components/off-canvas-editor/leaf-more-menu.js +3 -1
  288. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  289. package/build-module/components/preview-options/index.js +7 -2
  290. package/build-module/components/preview-options/index.js.map +1 -1
  291. package/build-module/components/spacing-sizes-control/spacing-input-control.js +1 -1
  292. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  293. package/build-module/components/url-input/index.js +1 -2
  294. package/build-module/components/url-input/index.js.map +1 -1
  295. package/build-module/hooks/align.js +1 -1
  296. package/build-module/hooks/align.js.map +1 -1
  297. package/build-module/hooks/border.js +1 -1
  298. package/build-module/hooks/border.js.map +1 -1
  299. package/build-module/hooks/color.js +1 -1
  300. package/build-module/hooks/color.js.map +1 -1
  301. package/build-module/hooks/content-lock-ui.js +8 -11
  302. package/build-module/hooks/content-lock-ui.js.map +1 -1
  303. package/build-module/hooks/duotone.js +28 -5
  304. package/build-module/hooks/duotone.js.map +1 -1
  305. package/build-module/hooks/index.native.js +1 -0
  306. package/build-module/hooks/index.native.js.map +1 -1
  307. package/build-module/hooks/layout.js +2 -2
  308. package/build-module/hooks/layout.js.map +1 -1
  309. package/build-module/hooks/position.js +1 -1
  310. package/build-module/hooks/position.js.map +1 -1
  311. package/build-module/hooks/style.js +1 -1
  312. package/build-module/hooks/style.js.map +1 -1
  313. package/build-module/hooks/use-editor-wrapper-styles.native.js +242 -0
  314. package/build-module/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  315. package/build-module/hooks/use-typography-props.js +14 -10
  316. package/build-module/hooks/use-typography-props.js.map +1 -1
  317. package/build-module/hooks/utils.js +16 -4
  318. package/build-module/hooks/utils.js.map +1 -1
  319. package/build-module/index.native.js +6 -0
  320. package/build-module/index.native.js.map +1 -0
  321. package/build-module/private-apis.js +7 -1
  322. package/build-module/private-apis.js.map +1 -1
  323. package/build-module/store/actions.js +7 -0
  324. package/build-module/store/actions.js.map +1 -1
  325. package/build-module/utils/object.js +4 -4
  326. package/build-module/utils/object.js.map +1 -1
  327. package/build-module/utils/transform-styles/index.js +2 -2
  328. package/build-module/utils/transform-styles/index.js.map +1 -1
  329. package/build-module/utils/use-should-contextual-toolbar-show.js +60 -0
  330. package/build-module/utils/use-should-contextual-toolbar-show.js.map +1 -0
  331. package/build-style/content-rtl.css +9 -7
  332. package/build-style/content.css +9 -7
  333. package/build-style/style-rtl.css +257 -56
  334. package/build-style/style.css +257 -56
  335. package/package.json +32 -32
  336. package/src/components/block-breadcrumb/style.scss +2 -1
  337. package/src/components/block-controls/slot.js +8 -4
  338. package/src/components/block-controls/slot.native.js +6 -1
  339. package/src/components/block-draggable/index.js +10 -6
  340. package/src/components/block-draggable/use-scroll-when-dragging.js +8 -2
  341. package/src/components/block-info-slot-fill/index.js +24 -0
  342. package/src/components/block-inspector/index.js +3 -0
  343. package/src/components/block-list/block-invalid-warning.native.js +17 -9
  344. package/src/components/block-list/block-list-item-cell.native.js +10 -1
  345. package/src/components/block-list/block-list-item.native.js +180 -208
  346. package/src/components/block-list/block-outline.native.js +58 -0
  347. package/src/components/block-list/block.native.js +564 -524
  348. package/src/components/block-list/content.scss +16 -16
  349. package/src/components/block-list/index.native.js +229 -298
  350. package/src/components/block-list/insertion-point.native.js +2 -2
  351. package/src/components/block-list/test/block-invalid-warning.native.js +48 -0
  352. package/src/components/block-list/test/index.native.js +205 -0
  353. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +3 -1
  354. package/src/components/block-mobile-toolbar/test/block-actions-menu.native.js +9 -9
  355. package/src/components/block-mover/style.scss +10 -4
  356. package/src/components/block-mover/test/index.native.js +4 -4
  357. package/src/components/block-pattern-setup/style.scss +1 -4
  358. package/src/components/block-patterns-list/style.scss +1 -4
  359. package/src/components/block-settings-menu/block-settings-dropdown.js +10 -17
  360. package/src/components/block-settings-menu-controls/index.js +24 -4
  361. package/src/components/block-styles/style.scss +4 -4
  362. package/src/components/block-toolbar/index.js +4 -3
  363. package/src/components/block-toolbar/style.scss +56 -33
  364. package/src/components/block-tools/block-contextual-toolbar.js +64 -15
  365. package/src/components/block-tools/selected-block-popover.js +11 -46
  366. package/src/components/block-tools/style.scss +165 -3
  367. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +16 -2
  368. package/src/components/editor-styles/index.js +9 -5
  369. package/src/components/font-sizes/fluid-utils.js +31 -14
  370. package/src/components/font-sizes/test/fluid-utils.js +5 -16
  371. package/src/components/global-styles/advanced-panel.js +82 -0
  372. package/src/components/global-styles/border-panel.js +1 -30
  373. package/src/components/global-styles/color-panel.js +19 -14
  374. package/src/components/global-styles/color-panel.native.js +207 -0
  375. package/src/components/global-styles/dimensions-panel.js +23 -13
  376. package/src/components/global-styles/effects-panel.js +2 -2
  377. package/src/components/global-styles/filters-panel.js +90 -17
  378. package/src/components/global-styles/hooks.js +1 -5
  379. package/src/components/global-styles/index.js +6 -1
  380. package/src/components/global-styles/style.scss +16 -1
  381. package/src/components/global-styles/test/typography-utils.js +63 -22
  382. package/src/components/global-styles/test/use-global-styles-output.js +126 -4
  383. package/src/components/global-styles/test/utils.js +57 -1
  384. package/src/components/global-styles/typography-panel.js +38 -12
  385. package/src/components/global-styles/use-global-styles-output.js +85 -67
  386. package/src/components/global-styles/utils.js +27 -0
  387. package/src/components/image-editor/use-save-image.js +20 -9
  388. package/src/components/index.js +1 -0
  389. package/src/components/inserter/block-types-tab.js +9 -6
  390. package/src/components/inserter/index.js +1 -1
  391. package/src/components/inserter-draggable-blocks/index.js +4 -0
  392. package/src/components/inspector-controls/fill.js +1 -1
  393. package/src/components/inspector-controls/fill.native.js +1 -1
  394. package/src/components/inspector-controls/groups.js +2 -0
  395. package/src/components/inspector-controls/slot.js +4 -9
  396. package/src/components/inspector-controls/slot.native.js +1 -1
  397. package/src/components/inspector-controls-tabs/styles-tab.js +1 -0
  398. package/src/components/line-height-control/index.js +7 -2
  399. package/src/components/line-height-control/stories/index.js +1 -1
  400. package/src/components/link-control/test/index.js +42 -0
  401. package/src/components/link-control/use-internal-input-value.js +8 -7
  402. package/src/components/list-view/block-contents.js +26 -20
  403. package/src/components/list-view/block-select-button.js +11 -2
  404. package/src/components/list-view/block.js +28 -33
  405. package/src/components/list-view/drop-indicator.js +67 -22
  406. package/src/components/list-view/index.js +33 -14
  407. package/src/components/list-view/leaf.js +1 -0
  408. package/src/components/list-view/style.scss +18 -3
  409. package/src/components/list-view/test/use-list-view-drop-zone.js +88 -12
  410. package/src/components/list-view/use-block-selection.js +1 -1
  411. package/src/components/list-view/use-list-view-drop-zone.js +194 -11
  412. package/src/components/media-placeholder/index.js +74 -1
  413. package/src/components/media-replace-flow/README.md +3 -2
  414. package/src/components/media-replace-flow/index.js +4 -5
  415. package/src/components/multi-selection-inspector/index.js +2 -2
  416. package/src/components/navigable-toolbar/index.js +12 -3
  417. package/src/components/off-canvas-editor/appender.js +1 -4
  418. package/src/components/off-canvas-editor/leaf-more-menu.js +2 -1
  419. package/src/components/preview-options/index.js +9 -2
  420. package/src/components/spacing-sizes-control/spacing-input-control.js +1 -0
  421. package/src/components/url-input/index.js +1 -2
  422. package/src/components/url-popover/test/__snapshots__/index.js.snap +3 -3
  423. package/src/hooks/align.js +2 -1
  424. package/src/hooks/border.js +2 -1
  425. package/src/hooks/color.js +2 -1
  426. package/src/hooks/content-lock-ui.js +3 -15
  427. package/src/hooks/duotone.js +47 -25
  428. package/src/hooks/index.native.js +1 -0
  429. package/src/hooks/layout.js +4 -2
  430. package/src/hooks/position.js +2 -1
  431. package/src/hooks/style.js +2 -1
  432. package/src/hooks/test/anchor.js +113 -0
  433. package/src/hooks/test/color.js +0 -9
  434. package/src/hooks/test/use-editor-wrapper-styles.native.js +282 -0
  435. package/src/hooks/test/use-typography-props.js +49 -4
  436. package/src/hooks/test/utils.js +20 -101
  437. package/src/hooks/use-editor-wrapper-styles.native.js +250 -0
  438. package/src/hooks/use-editor-wrapper-styles.native.scss +11 -0
  439. package/src/hooks/use-typography-props.js +10 -11
  440. package/src/hooks/utils.js +20 -3
  441. package/src/index.native.js +6 -0
  442. package/src/private-apis.js +6 -0
  443. package/src/store/actions.js +7 -0
  444. package/src/utils/object.js +4 -4
  445. package/src/utils/test/object.js +21 -21
  446. package/src/utils/transform-styles/index.js +2 -2
  447. package/src/utils/use-should-contextual-toolbar-show.js +85 -0
  448. package/tsconfig.json +2 -0
  449. package/tsconfig.tsbuildinfo +1 -1
  450. package/build/hooks/color-panel.native.js +0 -77
  451. package/build/hooks/color-panel.native.js.map +0 -1
  452. package/build-module/hooks/color-panel.native.js +0 -62
  453. package/build-module/hooks/color-panel.native.js.map +0 -1
  454. package/src/hooks/color-panel.native.js +0 -63
@@ -2235,6 +2235,48 @@ describe( 'Controlling link title text', () => {
2235
2235
  screen.queryByRole( 'textbox', { name: 'Text' } )
2236
2236
  ).not.toBeInTheDocument();
2237
2237
  } );
2238
+
2239
+ it( 'should reset state on value change', async () => {
2240
+ const user = userEvent.setup();
2241
+ const textValue = 'My new text value';
2242
+ const mockOnChange = jest.fn();
2243
+
2244
+ const { rerender } = render(
2245
+ <LinkControl
2246
+ value={ selectedLink }
2247
+ forceIsEditingLink
2248
+ hasTextControl
2249
+ onChange={ mockOnChange }
2250
+ />
2251
+ );
2252
+
2253
+ await toggleSettingsDrawer( user );
2254
+
2255
+ const textInput = screen.queryByRole( 'textbox', { name: 'Text' } );
2256
+
2257
+ expect( textInput ).toBeVisible();
2258
+
2259
+ await user.clear( textInput );
2260
+ await user.keyboard( textValue );
2261
+
2262
+ // Was originally title: 'Hello Page', but we've changed it.
2263
+ rerender(
2264
+ <LinkControl
2265
+ value={ {
2266
+ ...selectedLink,
2267
+ title: 'Something else',
2268
+ } }
2269
+ forceIsEditingLink
2270
+ hasTextControl
2271
+ onChange={ mockOnChange }
2272
+ />
2273
+ );
2274
+
2275
+ // The text input should not be showing as the form is submitted.
2276
+ expect( screen.queryByRole( 'textbox', { name: 'Text' } ) ).toHaveValue(
2277
+ 'Something else'
2278
+ );
2279
+ } );
2238
2280
  } );
2239
2281
 
2240
2282
  async function toggleSettingsDrawer( user ) {
@@ -8,14 +8,15 @@ export default function useInternalInputValue( value ) {
8
8
  value || ''
9
9
  );
10
10
 
11
+ // If the value prop changes, update the internal state.
11
12
  useEffect( () => {
12
- /**
13
- * If the value changes then sync this
14
- * back up with state.
15
- */
16
- if ( value && value !== internalInputValue ) {
17
- setInternalInputValue( value );
18
- }
13
+ setInternalInputValue( ( prevValue ) => {
14
+ if ( value && value !== prevValue ) {
15
+ return value;
16
+ }
17
+
18
+ return prevValue;
19
+ } );
19
20
  }, [ value ] );
20
21
 
21
22
  return [ internalInputValue, setInternalInputValue ];
@@ -15,6 +15,7 @@ import { forwardRef } from '@wordpress/element';
15
15
  import ListViewBlockSelectButton from './block-select-button';
16
16
  import BlockDraggable from '../block-draggable';
17
17
  import { store as blockEditorStore } from '../../store';
18
+ import { useListViewContext } from './context';
18
19
 
19
20
  const ListViewBlockContents = forwardRef(
20
21
  (
@@ -46,6 +47,8 @@ const ListViewBlockContents = forwardRef(
46
47
  [ clientId ]
47
48
  );
48
49
 
50
+ const { renderAdditionalBlockUI } = useListViewContext();
51
+
49
52
  const isBlockMoveTarget =
50
53
  blockMovingClientId && selectedBlockInBlockEditor === clientId;
51
54
 
@@ -62,26 +65,29 @@ const ListViewBlockContents = forwardRef(
62
65
  : [ clientId ];
63
66
 
64
67
  return (
65
- <BlockDraggable clientIds={ draggableClientIds }>
66
- { ( { draggable, onDragStart, onDragEnd } ) => (
67
- <ListViewBlockSelectButton
68
- ref={ ref }
69
- className={ className }
70
- block={ block }
71
- onClick={ onClick }
72
- onToggleExpanded={ onToggleExpanded }
73
- isSelected={ isSelected }
74
- position={ position }
75
- siblingBlockCount={ siblingBlockCount }
76
- level={ level }
77
- draggable={ draggable }
78
- onDragStart={ onDragStart }
79
- onDragEnd={ onDragEnd }
80
- isExpanded={ isExpanded }
81
- { ...props }
82
- />
83
- ) }
84
- </BlockDraggable>
68
+ <>
69
+ { renderAdditionalBlockUI && renderAdditionalBlockUI( block ) }
70
+ <BlockDraggable clientIds={ draggableClientIds }>
71
+ { ( { draggable, onDragStart, onDragEnd } ) => (
72
+ <ListViewBlockSelectButton
73
+ ref={ ref }
74
+ className={ className }
75
+ block={ block }
76
+ onClick={ onClick }
77
+ onToggleExpanded={ onToggleExpanded }
78
+ isSelected={ isSelected }
79
+ position={ position }
80
+ siblingBlockCount={ siblingBlockCount }
81
+ level={ level }
82
+ draggable={ draggable }
83
+ onDragStart={ onDragStart }
84
+ onDragEnd={ onDragEnd }
85
+ isExpanded={ isExpanded }
86
+ { ...props }
87
+ />
88
+ ) }
89
+ </BlockDraggable>
90
+ </>
85
91
  );
86
92
  }
87
93
  );
@@ -35,6 +35,9 @@ function ListViewBlockSelectButton(
35
35
  onDragStart,
36
36
  onDragEnd,
37
37
  draggable,
38
+ isExpanded,
39
+ ariaLabel,
40
+ ariaDescribedBy,
38
41
  },
39
42
  ref
40
43
  ) {
@@ -76,10 +79,16 @@ function ListViewBlockSelectButton(
76
79
  onDragEnd={ onDragEnd }
77
80
  draggable={ draggable }
78
81
  href={ `#block-${ clientId }` }
79
- aria-hidden={ true }
82
+ aria-label={ ariaLabel }
83
+ aria-describedby={ ariaDescribedBy }
84
+ aria-expanded={ isExpanded }
80
85
  >
81
86
  <ListViewExpander onClick={ onToggleExpanded } />
82
- <BlockIcon icon={ blockInformation?.icon } showColors />
87
+ <BlockIcon
88
+ icon={ blockInformation?.icon }
89
+ showColors
90
+ context="list-view"
91
+ />
83
92
  <HStack
84
93
  alignment="center"
85
94
  className="block-editor-list-view-block-select-button__label-wrapper"
@@ -40,7 +40,7 @@ import useBlockDisplayInformation from '../use-block-display-information';
40
40
  import { useBlockLock } from '../block-lock';
41
41
 
42
42
  function ListViewBlock( {
43
- block,
43
+ block: { clientId },
44
44
  isDragged,
45
45
  isSelected,
46
46
  isBranchSelected,
@@ -53,13 +53,11 @@ function ListViewBlock( {
53
53
  path,
54
54
  isExpanded,
55
55
  selectedClientIds,
56
- preventAnnouncement,
57
56
  isSyncedBranch,
58
57
  } ) {
59
58
  const cellRef = useRef( null );
60
59
  const rowRef = useRef( null );
61
60
  const [ isHovered, setIsHovered ] = useState( false );
62
- const { clientId } = block;
63
61
 
64
62
  const { isLocked, isContentLocked, canEdit } = useBlockLock( clientId );
65
63
  const forceSelectionContentLock = useSelect(
@@ -90,6 +88,11 @@ function ListViewBlock( {
90
88
  const { toggleBlockHighlight } = useDispatch( blockEditorStore );
91
89
 
92
90
  const blockInformation = useBlockDisplayInformation( clientId );
91
+ const blockTitle = blockInformation?.title || __( 'Untitled' );
92
+ const block = useSelect(
93
+ ( select ) => select( blockEditorStore ).getBlock( clientId ),
94
+ [ clientId ]
95
+ );
93
96
  const blockName = useSelect(
94
97
  ( select ) => select( blockEditorStore ).getBlockName( clientId ),
95
98
  [ clientId ]
@@ -111,31 +114,27 @@ function ListViewBlock( {
111
114
  level
112
115
  );
113
116
 
114
- let blockAriaLabel = __( 'Link' );
115
- if ( blockInformation ) {
116
- blockAriaLabel = isLocked
117
- ? sprintf(
118
- // translators: %s: The title of the block. This string indicates a link to select the locked block.
119
- __( '%s link (locked)' ),
120
- blockInformation.title
121
- )
122
- : sprintf(
123
- // translators: %s: The title of the block. This string indicates a link to select the block.
124
- __( '%s link' ),
125
- blockInformation.title
126
- );
127
- }
128
-
129
- const settingsAriaLabel = blockInformation
117
+ const blockAriaLabel = isLocked
130
118
  ? sprintf(
131
- // translators: %s: The title of the block.
132
- __( 'Options for %s block' ),
133
- blockInformation.title
119
+ // translators: %s: The title of the block. This string indicates a link to select the locked block.
120
+ __( '%s (locked)' ),
121
+ blockTitle
134
122
  )
135
- : __( 'Options' );
123
+ : blockTitle;
124
+
125
+ const settingsAriaLabel = sprintf(
126
+ // translators: %s: The title of the block.
127
+ __( 'Options for %s' ),
128
+ blockTitle
129
+ );
136
130
 
137
- const { isTreeGridMounted, expand, collapse, BlockSettingsMenu } =
138
- useListViewContext();
131
+ const {
132
+ isTreeGridMounted,
133
+ expand,
134
+ collapse,
135
+ BlockSettingsMenu,
136
+ listViewInstanceId,
137
+ } = useListViewContext();
139
138
 
140
139
  const hasSiblings = siblingBlockCount > 0;
141
140
  const hasRenderedMovers = showBlockMovers && hasSiblings;
@@ -246,21 +245,16 @@ function ListViewBlock( {
246
245
  position={ position }
247
246
  rowCount={ rowCount }
248
247
  path={ path }
249
- id={ `list-view-block-${ clientId }` }
248
+ id={ `list-view-${ listViewInstanceId }-block-${ clientId }` }
250
249
  data-block={ clientId }
251
250
  data-expanded={ canExpand ? isExpanded : undefined }
252
- isExpanded={ canExpand ? isExpanded : undefined }
253
- aria-selected={ !! isSelected || forceSelectionContentLock }
254
251
  ref={ rowRef }
255
252
  >
256
253
  <TreeGridCell
257
254
  className="block-editor-list-view-block__contents-cell"
258
255
  colSpan={ colSpan }
259
256
  ref={ cellRef }
260
- aria-label={ blockAriaLabel }
261
257
  aria-selected={ !! isSelected || forceSelectionContentLock }
262
- aria-expanded={ canExpand ? isExpanded : undefined }
263
- aria-describedby={ descriptionId }
264
258
  >
265
259
  { ( { ref, tabIndex, onFocus } ) => (
266
260
  <div className="block-editor-list-view-block__contents-container">
@@ -277,9 +271,10 @@ function ListViewBlock( {
277
271
  currentlyEditingBlockInCanvas ? 0 : tabIndex
278
272
  }
279
273
  onFocus={ onFocus }
280
- isExpanded={ isExpanded }
274
+ isExpanded={ canExpand ? isExpanded : undefined }
281
275
  selectedClientIds={ selectedClientIds }
282
- preventAnnouncement={ preventAnnouncement }
276
+ ariaLabel={ blockAriaLabel }
277
+ ariaDescribedBy={ descriptionId }
283
278
  />
284
279
  <div
285
280
  className="block-editor-list-view-block-select-button__description"
@@ -2,6 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { Popover } from '@wordpress/components';
5
+ import { getScrollContainer } from '@wordpress/dom';
5
6
  import { useCallback, useMemo } from '@wordpress/element';
6
7
 
7
8
  export default function ListViewDropIndicator( {
@@ -40,33 +41,74 @@ export default function ListViewDropIndicator( {
40
41
  // is undefined, so the indicator will appear after the rootBlockElement.
41
42
  const targetElement = blockElement || rootBlockElement;
42
43
 
43
- const getDropIndicatorIndent = useCallback( () => {
44
- if ( ! rootBlockElement ) {
45
- return 0;
46
- }
44
+ const getDropIndicatorIndent = useCallback(
45
+ ( targetElementRect ) => {
46
+ if ( ! rootBlockElement ) {
47
+ return 0;
48
+ }
49
+
50
+ // Calculate the indent using the block icon of the root block.
51
+ // Using a classname selector here might be flaky and could be
52
+ // improved.
53
+ const rootBlockIconElement = rootBlockElement.querySelector(
54
+ '.block-editor-block-icon'
55
+ );
56
+ const rootBlockIconRect =
57
+ rootBlockIconElement.getBoundingClientRect();
58
+ return rootBlockIconRect.right - targetElementRect.left;
59
+ },
60
+ [ rootBlockElement ]
61
+ );
47
62
 
48
- // Calculate the indent using the block icon of the root block.
49
- // Using a classname selector here might be flaky and could be
50
- // improved.
51
- const targetElementRect = targetElement.getBoundingClientRect();
52
- const rootBlockIconElement = rootBlockElement.querySelector(
53
- '.block-editor-block-icon'
54
- );
55
- const rootBlockIconRect = rootBlockIconElement.getBoundingClientRect();
56
- return rootBlockIconRect.right - targetElementRect.left;
57
- }, [ rootBlockElement, targetElement ] );
63
+ const getDropIndicatorWidth = useCallback(
64
+ ( targetElementRect, indent ) => {
65
+ if ( ! targetElement ) {
66
+ return 0;
67
+ }
68
+
69
+ // Default to assuming that the width of the drop indicator
70
+ // should be the same as the target element.
71
+ let width = targetElement.offsetWidth;
72
+
73
+ // In deeply nested lists, where a scrollbar is present,
74
+ // the width of the drop indicator should be the width of
75
+ // the scroll container, minus the distance from the left
76
+ // edge of the scroll container to the left edge of the
77
+ // target element.
78
+ const scrollContainer = getScrollContainer(
79
+ targetElement,
80
+ 'horizontal'
81
+ );
82
+
83
+ if ( scrollContainer ) {
84
+ const scrollContainerRect =
85
+ scrollContainer.getBoundingClientRect();
86
+
87
+ if ( scrollContainer.clientWidth < width ) {
88
+ width =
89
+ scrollContainer.clientWidth -
90
+ ( targetElementRect.left - scrollContainerRect.left );
91
+ }
92
+ }
93
+
94
+ // Subtract the indent from the final width of the indicator.
95
+ return width - indent;
96
+ },
97
+ [ targetElement ]
98
+ );
58
99
 
59
100
  const style = useMemo( () => {
60
101
  if ( ! targetElement ) {
61
102
  return {};
62
103
  }
63
104
 
64
- const indent = getDropIndicatorIndent();
105
+ const targetElementRect = targetElement.getBoundingClientRect();
106
+ const indent = getDropIndicatorIndent( targetElementRect );
65
107
 
66
108
  return {
67
- width: targetElement.offsetWidth - indent,
109
+ width: getDropIndicatorWidth( targetElementRect, indent ),
68
110
  };
69
- }, [ getDropIndicatorIndent, targetElement ] );
111
+ }, [ getDropIndicatorIndent, getDropIndicatorWidth, targetElement ] );
70
112
 
71
113
  const popoverAnchor = useMemo( () => {
72
114
  const isValidDropPosition =
@@ -81,10 +123,8 @@ export default function ListViewDropIndicator( {
81
123
  ownerDocument: targetElement.ownerDocument,
82
124
  getBoundingClientRect() {
83
125
  const rect = targetElement.getBoundingClientRect();
84
- const indent = getDropIndicatorIndent();
85
-
126
+ const indent = getDropIndicatorIndent( rect );
86
127
  const left = rect.left + indent;
87
- const right = rect.right;
88
128
  let top = 0;
89
129
  let bottom = 0;
90
130
 
@@ -97,13 +137,18 @@ export default function ListViewDropIndicator( {
97
137
  bottom = rect.bottom;
98
138
  }
99
139
 
100
- const width = right - left;
140
+ const width = getDropIndicatorWidth( rect, indent );
101
141
  const height = bottom - top;
102
142
 
103
143
  return new window.DOMRect( left, top, width, height );
104
144
  },
105
145
  };
106
- }, [ targetElement, dropPosition, getDropIndicatorIndent ] );
146
+ }, [
147
+ targetElement,
148
+ dropPosition,
149
+ getDropIndicatorIndent,
150
+ getDropIndicatorWidth,
151
+ ] );
107
152
 
108
153
  if ( ! targetElement ) {
109
154
  return null;
@@ -2,6 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import {
5
+ useInstanceId,
5
6
  useMergeRefs,
6
7
  __experimentalUseFixedWindowList as useFixedWindowList,
7
8
  } from '@wordpress/compose';
@@ -55,15 +56,18 @@ export const BLOCK_LIST_ITEM_HEIGHT = 36;
55
56
  /**
56
57
  * Show a hierarchical list of blocks.
57
58
  *
58
- * @param {Object} props Components props.
59
- * @param {string} props.id An HTML element id for the root element of ListView.
60
- * @param {Array} props.blocks _deprecated_ Custom subset of block client IDs to be used instead of the default hierarchy.
61
- * @param {?boolean} props.showBlockMovers Flag to enable block movers. Defaults to `false`.
62
- * @param {?boolean} props.isExpanded Flag to determine whether nested levels are expanded by default. Defaults to `false`.
63
- * @param {?boolean} props.showAppender Flag to show or hide the block appender. Defaults to `false`.
64
- * @param {?ComponentType} props.blockSettingsMenu Optional more menu substitution. Defaults to the standard `BlockSettingsDropdown` component.
65
- * @param {string} props.rootClientId The client id of the root block from which we determine the blocks to show in the list.
66
- * @param {Ref} ref Forwarded ref
59
+ * @param {Object} props Components props.
60
+ * @param {string} props.id An HTML element id for the root element of ListView.
61
+ * @param {Array} props.blocks _deprecated_ Custom subset of block client IDs to be used instead of the default hierarchy.
62
+ * @param {?boolean} props.showBlockMovers Flag to enable block movers. Defaults to `false`.
63
+ * @param {?boolean} props.isExpanded Flag to determine whether nested levels are expanded by default. Defaults to `false`.
64
+ * @param {?boolean} props.showAppender Flag to show or hide the block appender. Defaults to `false`.
65
+ * @param {?ComponentType} props.blockSettingsMenu Optional more menu substitution. Defaults to the standard `BlockSettingsDropdown` component.
66
+ * @param {string} props.rootClientId The client id of the root block from which we determine the blocks to show in the list.
67
+ * @param {string} props.description Optional accessible description for the tree grid component.
68
+ * @param {?Function} props.onSelect Optional callback to be invoked when a block is selected. Receives the block object that was selected.
69
+ * @param {Function} props.renderAdditionalBlockUI Function that renders additional block content UI.
70
+ * @param {Ref} ref Forwarded ref
67
71
  */
68
72
  function ListViewComponent(
69
73
  {
@@ -74,6 +78,9 @@ function ListViewComponent(
74
78
  showAppender = false,
75
79
  blockSettingsMenu: BlockSettingsMenu = BlockSettingsDropdown,
76
80
  rootClientId,
81
+ description,
82
+ onSelect,
83
+ renderAdditionalBlockUI,
77
84
  },
78
85
  ref
79
86
  ) {
@@ -88,9 +95,11 @@ function ListViewComponent(
88
95
  );
89
96
  }
90
97
 
98
+ const instanceId = useInstanceId( ListViewComponent );
91
99
  const { clientIdsTree, draggedClientIds, selectedClientIds } =
92
100
  useListViewClientIds( { blocks, rootClientId } );
93
101
 
102
+ const { getBlock } = useSelect( blockEditorStore );
94
103
  const { visibleBlockCount, shouldShowInnerBlocks } = useSelect(
95
104
  ( select ) => {
96
105
  const {
@@ -124,11 +133,14 @@ function ListViewComponent(
124
133
  setExpandedState,
125
134
  } );
126
135
  const selectEditorBlock = useCallback(
127
- ( event, clientId ) => {
128
- updateBlockSelection( event, clientId );
129
- setSelectedTreeId( clientId );
136
+ ( event, blockClientId ) => {
137
+ updateBlockSelection( event, blockClientId );
138
+ setSelectedTreeId( blockClientId );
139
+ if ( onSelect ) {
140
+ onSelect( getBlock( blockClientId ) );
141
+ }
130
142
  },
131
- [ setSelectedTreeId, updateBlockSelection ]
143
+ [ setSelectedTreeId, updateBlockSelection, onSelect, getBlock ]
132
144
  );
133
145
  useEffect( () => {
134
146
  isMounted.current = true;
@@ -198,14 +210,17 @@ function ListViewComponent(
198
210
  expand,
199
211
  collapse,
200
212
  BlockSettingsMenu,
213
+ listViewInstanceId: instanceId,
214
+ renderAdditionalBlockUI,
201
215
  } ),
202
216
  [
203
- isMounted.current,
204
217
  draggedClientIds,
205
218
  expandedState,
206
219
  expand,
207
220
  collapse,
208
221
  BlockSettingsMenu,
222
+ instanceId,
223
+ renderAdditionalBlockUI,
209
224
  ]
210
225
  );
211
226
 
@@ -229,6 +244,8 @@ function ListViewComponent(
229
244
  onExpandRow={ expandRow }
230
245
  onFocusRow={ focusRow }
231
246
  applicationAriaLabel={ __( 'Block navigation structure' ) }
247
+ // eslint-disable-next-line jsx-a11y/aria-props
248
+ aria-description={ description }
232
249
  >
233
250
  <ListViewContext.Provider value={ contextValue }>
234
251
  <ListViewBranch
@@ -257,6 +274,8 @@ export default forwardRef( ( props, ref ) => {
257
274
  showAppender={ false }
258
275
  blockSettingsMenu={ BlockSettingsDropdown }
259
276
  rootClientId={ null }
277
+ onSelect={ null }
278
+ renderAdditionalBlockUICallback={ null }
260
279
  />
261
280
  );
262
281
  } );
@@ -51,6 +51,7 @@ const ListViewLeaf = forwardRef(
51
51
  level={ level }
52
52
  positionInSet={ position }
53
53
  setSize={ rowCount }
54
+ isExpanded={ undefined }
54
55
  { ...props }
55
56
  >
56
57
  { children }
@@ -15,6 +15,18 @@
15
15
  // Use position relative for row animation.
16
16
  position: relative;
17
17
 
18
+ .block-editor-list-view-block-select-button {
19
+ // When a row is expanded, retain the dark color.
20
+ &[aria-expanded="true"] {
21
+ color: inherit;
22
+ }
23
+
24
+ // Ensure that on hover, the admin color is still used.
25
+ &:hover {
26
+ color: var(--wp-admin-theme-color);
27
+ }
28
+ }
29
+
18
30
  // The background has to be applied to the td, not tr, or border-radius won't work.
19
31
  &.is-selected td {
20
32
  background: var(--wp-admin-theme-color);
@@ -93,7 +105,7 @@
93
105
  &.is-branch-selected.is-first-selected td:last-child {
94
106
  border-top-right-radius: $radius-block-ui;
95
107
  }
96
- &[aria-expanded="false"] {
108
+ &[data-expanded="false"] {
97
109
  &.is-branch-selected.is-first-selected td:first-child {
98
110
  border-top-left-radius: $radius-block-ui;
99
111
  }
@@ -364,6 +376,9 @@ $block-navigation-max-indent: 8;
364
376
  }
365
377
  }
366
378
 
379
+ // When updating the margin for each indentation level, the corresponding
380
+ // indentation in `use-list-view-drop-zone.js` must be updated as well
381
+ // to ensure the drop zone is aligned with the indentation.
367
382
  @for $i from 0 to $block-navigation-max-indent {
368
383
  .block-editor-list-view-leaf[aria-level="#{ $i + 1 }"] .block-editor-list-view__expander {
369
384
  @if $i - 1 >= 0 {
@@ -380,7 +395,7 @@ $block-navigation-max-indent: 8;
380
395
  }
381
396
 
382
397
  // Point downwards when open.
383
- .block-editor-list-view-leaf[aria-expanded="true"] .block-editor-list-view__expander svg {
398
+ .block-editor-list-view-leaf[data-expanded="true"] .block-editor-list-view__expander svg {
384
399
  visibility: visible;
385
400
  transition: transform 0.2s ease;
386
401
  transform: rotate(90deg);
@@ -388,7 +403,7 @@ $block-navigation-max-indent: 8;
388
403
  }
389
404
 
390
405
  // Point rightwards when closed
391
- .block-editor-list-view-leaf[aria-expanded="false"] .block-editor-list-view__expander svg {
406
+ .block-editor-list-view-leaf[data-expanded="false"] .block-editor-list-view__expander svg {
392
407
  visibility: visible;
393
408
  transform: rotate(0deg);
394
409
  transition: transform 0.2s ease;