@wordpress/block-editor 12.0.0 → 12.2.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 (627) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -1
  3. package/build/autocompleters/block.js +13 -5
  4. package/build/autocompleters/block.js.map +1 -1
  5. package/build/components/block-breadcrumb/index.js +6 -3
  6. package/build/components/block-breadcrumb/index.js.map +1 -1
  7. package/build/components/block-controls/slot.js +12 -4
  8. package/build/components/block-controls/slot.js.map +1 -1
  9. package/build/components/block-controls/slot.native.js +10 -1
  10. package/build/components/block-controls/slot.native.js.map +1 -1
  11. package/build/components/block-draggable/index.js +11 -7
  12. package/build/components/block-draggable/index.js.map +1 -1
  13. package/build/components/block-draggable/use-scroll-when-dragging.js +2 -2
  14. package/build/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  15. package/build/components/block-editing-mode/index.js +84 -0
  16. package/build/components/block-editing-mode/index.js.map +1 -0
  17. package/build/components/block-list/block-invalid-warning.native.js +15 -7
  18. package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
  19. package/build/components/block-list/block-list-block-context.js +15 -0
  20. package/build/components/block-list/block-list-block-context.js.map +1 -0
  21. package/build/components/block-list/block-list-item-cell.native.js +15 -2
  22. package/build/components/block-list/block-list-item-cell.native.js.map +1 -1
  23. package/build/components/block-list/block-list-item.native.js +158 -195
  24. package/build/components/block-list/block-list-item.native.js.map +1 -1
  25. package/build/components/block-list/block-outline.native.js +57 -0
  26. package/build/components/block-list/block-outline.native.js.map +1 -0
  27. package/build/components/block-list/block.js +29 -37
  28. package/build/components/block-list/block.js.map +1 -1
  29. package/build/components/block-list/block.native.js +347 -311
  30. package/build/components/block-list/block.native.js.map +1 -1
  31. package/build/components/block-list/index.native.js +260 -357
  32. package/build/components/block-list/index.native.js.map +1 -1
  33. package/build/components/block-list/insertion-point.native.js +4 -2
  34. package/build/components/block-list/insertion-point.native.js.map +1 -1
  35. package/build/components/block-list/use-block-props/index.js +2 -2
  36. package/build/components/block-list/use-block-props/index.js.map +1 -1
  37. package/build/components/block-list/use-in-between-inserter.js +7 -5
  38. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  39. package/build/components/block-list-appender/index.js +15 -1
  40. package/build/components/block-list-appender/index.js.map +1 -1
  41. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +19 -4
  42. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  43. package/build/components/block-settings-menu/block-settings-dropdown.js +8 -10
  44. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  45. package/build/components/block-settings-menu-controls/index.js +15 -4
  46. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  47. package/build/components/block-styles/preview-panel.js +1 -2
  48. package/build/components/block-styles/preview-panel.js.map +1 -1
  49. package/build/components/block-switcher/block-transformations-menu.js +8 -0
  50. package/build/components/block-switcher/block-transformations-menu.js.map +1 -1
  51. package/build/components/block-switcher/block-variation-transformations.js +125 -0
  52. package/build/components/block-switcher/block-variation-transformations.js.map +1 -0
  53. package/build/components/block-switcher/index.js +34 -12
  54. package/build/components/block-switcher/index.js.map +1 -1
  55. package/build/components/block-switcher/pattern-transformations-menu.js +3 -3
  56. package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  57. package/build/components/block-toolbar/index.js +9 -7
  58. package/build/components/block-toolbar/index.js.map +1 -1
  59. package/build/components/block-tools/block-contextual-toolbar.js +22 -65
  60. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  61. package/build/components/block-tools/insertion-point.js +11 -5
  62. package/build/components/block-tools/insertion-point.js.map +1 -1
  63. package/build/components/block-tools/selected-block-popover.js +3 -8
  64. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  65. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  66. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  67. package/build/components/convert-to-group-buttons/index.js +7 -2
  68. package/build/components/convert-to-group-buttons/index.js.map +1 -1
  69. package/build/components/convert-to-group-buttons/index.native.js +87 -3
  70. package/build/components/convert-to-group-buttons/index.native.js.map +1 -1
  71. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js +23 -37
  72. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  73. package/build/components/global-styles/advanced-panel.js +86 -0
  74. package/build/components/global-styles/advanced-panel.js.map +1 -0
  75. package/build/components/global-styles/color-panel.js +4 -1
  76. package/build/components/global-styles/color-panel.js.map +1 -1
  77. package/build/components/global-styles/dimensions-panel.js +9 -8
  78. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  79. package/build/components/global-styles/hooks.js +1 -2
  80. package/build/components/global-styles/hooks.js.map +1 -1
  81. package/build/components/global-styles/index.js +24 -0
  82. package/build/components/global-styles/index.js.map +1 -1
  83. package/build/components/global-styles/typography-panel.js +1 -1
  84. package/build/components/global-styles/typography-panel.js.map +1 -1
  85. package/build/components/global-styles/use-global-styles-output.js +27 -4
  86. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  87. package/build/components/global-styles/utils.js +30 -0
  88. package/build/components/global-styles/utils.js.map +1 -1
  89. package/build/components/iframe/index.js +14 -7
  90. package/build/components/iframe/index.js.map +1 -1
  91. package/build/components/image-editor/use-save-image.js +24 -8
  92. package/build/components/image-editor/use-save-image.js.map +1 -1
  93. package/build/components/inner-blocks/index.js +2 -1
  94. package/build/components/inner-blocks/index.js.map +1 -1
  95. package/build/components/inner-blocks/index.native.js +7 -7
  96. package/build/components/inner-blocks/index.native.js.map +1 -1
  97. package/build/components/inner-blocks/use-nested-settings-update.js +13 -5
  98. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  99. package/build/components/inserter/index.js +3 -7
  100. package/build/components/inserter/index.js.map +1 -1
  101. package/build/components/inserter/quick-inserter.js +2 -4
  102. package/build/components/inserter/quick-inserter.js.map +1 -1
  103. package/build/components/inserter/search-results.js +19 -6
  104. package/build/components/inserter/search-results.js.map +1 -1
  105. package/build/components/inserter-draggable-blocks/index.js +5 -0
  106. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  107. package/build/components/inspector-controls/fill.js +1 -1
  108. package/build/components/inspector-controls/fill.js.map +1 -1
  109. package/build/components/inspector-controls/fill.native.js +1 -1
  110. package/build/components/inspector-controls/fill.native.js.map +1 -1
  111. package/build/components/inspector-controls/slot.js +3 -6
  112. package/build/components/inspector-controls/slot.js.map +1 -1
  113. package/build/components/inspector-controls/slot.native.js +1 -1
  114. package/build/components/inspector-controls/slot.native.js.map +1 -1
  115. package/build/components/line-height-control/index.js +7 -2
  116. package/build/components/line-height-control/index.js.map +1 -1
  117. package/build/components/link-control/use-internal-input-value.js +9 -8
  118. package/build/components/link-control/use-internal-input-value.js.map +1 -1
  119. package/build/components/list-view/appender.js +6 -1
  120. package/build/components/list-view/appender.js.map +1 -1
  121. package/build/components/list-view/block-contents.js +9 -2
  122. package/build/components/list-view/block-contents.js.map +1 -1
  123. package/build/components/list-view/block-select-button.js +2 -1
  124. package/build/components/list-view/block-select-button.js.map +1 -1
  125. package/build/components/list-view/block.js +25 -29
  126. package/build/components/list-view/block.js.map +1 -1
  127. package/build/components/list-view/branch.js +1 -3
  128. package/build/components/list-view/branch.js.map +1 -1
  129. package/build/components/list-view/index.js +43 -22
  130. package/build/components/list-view/index.js.map +1 -1
  131. package/build/components/list-view/use-list-view-client-ids.js +27 -3
  132. package/build/components/list-view/use-list-view-client-ids.js.map +1 -1
  133. package/build/components/list-view/use-list-view-drop-zone.js +163 -11
  134. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  135. package/build/components/media-placeholder/index.js +68 -7
  136. package/build/components/media-placeholder/index.js.map +1 -1
  137. package/build/components/multi-selection-inspector/index.js +2 -2
  138. package/build/components/multi-selection-inspector/index.js.map +1 -1
  139. package/build/components/preview-options/index.js +6 -1
  140. package/build/components/preview-options/index.js.map +1 -1
  141. package/build/components/publish-date-time-picker/index.js +0 -2
  142. package/build/components/publish-date-time-picker/index.js.map +1 -1
  143. package/build/components/spacing-sizes-control/spacing-input-control.js +1 -1
  144. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  145. package/build/components/url-input/index.js +4 -2
  146. package/build/components/url-input/index.js.map +1 -1
  147. package/build/components/use-block-drop-zone/index.js +25 -15
  148. package/build/components/use-block-drop-zone/index.js.map +1 -1
  149. package/build/components/use-resize-canvas/index.js +8 -1
  150. package/build/components/use-resize-canvas/index.js.map +1 -1
  151. package/build/components/writing-flow/use-arrow-nav.js +13 -7
  152. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  153. package/build/hooks/align.js +4 -8
  154. package/build/hooks/align.js.map +1 -1
  155. package/build/hooks/behaviors.js +115 -0
  156. package/build/hooks/behaviors.js.map +1 -0
  157. package/build/hooks/border.js +1 -1
  158. package/build/hooks/border.js.map +1 -1
  159. package/build/hooks/color.js +1 -1
  160. package/build/hooks/color.js.map +1 -1
  161. package/build/hooks/content-lock-ui.js +8 -12
  162. package/build/hooks/content-lock-ui.js.map +1 -1
  163. package/build/hooks/dimensions.js +0 -30
  164. package/build/hooks/dimensions.js.map +1 -1
  165. package/build/hooks/duotone.js +5 -9
  166. package/build/hooks/duotone.js.map +1 -1
  167. package/build/hooks/index.js +2 -0
  168. package/build/hooks/index.js.map +1 -1
  169. package/build/hooks/index.native.js +8 -0
  170. package/build/hooks/index.native.js.map +1 -1
  171. package/build/hooks/layout.js +10 -11
  172. package/build/hooks/layout.js.map +1 -1
  173. package/build/hooks/position.js +1 -1
  174. package/build/hooks/position.js.map +1 -1
  175. package/build/hooks/style.js +1 -1
  176. package/build/hooks/style.js.map +1 -1
  177. package/build/hooks/use-editor-wrapper-styles.native.js +255 -0
  178. package/build/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  179. package/build/hooks/use-typography-props.js +14 -10
  180. package/build/hooks/use-typography-props.js.map +1 -1
  181. package/build/index.native.js +31 -0
  182. package/build/index.native.js.map +1 -0
  183. package/build/private-apis.js +4 -7
  184. package/build/private-apis.js.map +1 -1
  185. package/build/store/private-actions.js +46 -0
  186. package/build/store/private-actions.js.map +1 -1
  187. package/build/store/private-selectors.js +88 -0
  188. package/build/store/private-selectors.js.map +1 -1
  189. package/build/store/reducer.js +36 -1
  190. package/build/store/reducer.js.map +1 -1
  191. package/build/store/selectors.js +28 -18
  192. package/build/store/selectors.js.map +1 -1
  193. package/build/utils/order-inserter-block-items.js +41 -0
  194. package/build/utils/order-inserter-block-items.js.map +1 -0
  195. package/build/utils/use-should-contextual-toolbar-show.js +16 -12
  196. package/build/utils/use-should-contextual-toolbar-show.js.map +1 -1
  197. package/build-module/autocompleters/block.js +12 -5
  198. package/build-module/autocompleters/block.js.map +1 -1
  199. package/build-module/components/block-breadcrumb/index.js +5 -3
  200. package/build-module/components/block-breadcrumb/index.js.map +1 -1
  201. package/build-module/components/block-controls/slot.js +11 -4
  202. package/build-module/components/block-controls/slot.js.map +1 -1
  203. package/build-module/components/block-controls/slot.native.js +9 -1
  204. package/build-module/components/block-controls/slot.native.js.map +1 -1
  205. package/build-module/components/block-draggable/index.js +10 -6
  206. package/build-module/components/block-draggable/index.js.map +1 -1
  207. package/build-module/components/block-draggable/use-scroll-when-dragging.js +2 -2
  208. package/build-module/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  209. package/build-module/components/block-editing-mode/index.js +72 -0
  210. package/build-module/components/block-editing-mode/index.js.map +1 -0
  211. package/build-module/components/block-list/block-invalid-warning.native.js +16 -8
  212. package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
  213. package/build-module/components/block-list/block-list-block-context.js +6 -0
  214. package/build-module/components/block-list/block-list-block-context.js.map +1 -0
  215. package/build-module/components/block-list/block-list-item-cell.native.js +13 -2
  216. package/build-module/components/block-list/block-list-item-cell.native.js.map +1 -1
  217. package/build-module/components/block-list/block-list-item.native.js +160 -190
  218. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  219. package/build-module/components/block-list/block-outline.native.js +44 -0
  220. package/build-module/components/block-list/block-outline.native.js.map +1 -0
  221. package/build-module/components/block-list/block.js +26 -34
  222. package/build-module/components/block-list/block.js.map +1 -1
  223. package/build-module/components/block-list/block.native.js +345 -310
  224. package/build-module/components/block-list/block.native.js.map +1 -1
  225. package/build-module/components/block-list/index.native.js +263 -355
  226. package/build-module/components/block-list/index.native.js.map +1 -1
  227. package/build-module/components/block-list/insertion-point.native.js +4 -2
  228. package/build-module/components/block-list/insertion-point.native.js.map +1 -1
  229. package/build-module/components/block-list/use-block-props/index.js +1 -1
  230. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  231. package/build-module/components/block-list/use-in-between-inserter.js +6 -5
  232. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  233. package/build-module/components/block-list-appender/index.js +15 -1
  234. package/build-module/components/block-list-appender/index.js.map +1 -1
  235. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +18 -4
  236. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  237. package/build-module/components/block-settings-menu/block-settings-dropdown.js +8 -9
  238. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  239. package/build-module/components/block-settings-menu-controls/index.js +13 -5
  240. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  241. package/build-module/components/block-styles/preview-panel.js +1 -2
  242. package/build-module/components/block-styles/preview-panel.js.map +1 -1
  243. package/build-module/components/block-switcher/block-transformations-menu.js +7 -0
  244. package/build-module/components/block-switcher/block-transformations-menu.js.map +1 -1
  245. package/build-module/components/block-switcher/block-variation-transformations.js +108 -0
  246. package/build-module/components/block-switcher/block-variation-transformations.js.map +1 -0
  247. package/build-module/components/block-switcher/index.js +33 -12
  248. package/build-module/components/block-switcher/index.js.map +1 -1
  249. package/build-module/components/block-switcher/pattern-transformations-menu.js +3 -3
  250. package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  251. package/build-module/components/block-toolbar/index.js +8 -7
  252. package/build-module/components/block-toolbar/index.js.map +1 -1
  253. package/build-module/components/block-tools/block-contextual-toolbar.js +22 -65
  254. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  255. package/build-module/components/block-tools/insertion-point.js +11 -5
  256. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  257. package/build-module/components/block-tools/selected-block-popover.js +3 -7
  258. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  259. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  260. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  261. package/build-module/components/convert-to-group-buttons/index.js +7 -2
  262. package/build-module/components/convert-to-group-buttons/index.js.map +1 -1
  263. package/build-module/components/convert-to-group-buttons/index.native.js +76 -1
  264. package/build-module/components/convert-to-group-buttons/index.native.js.map +1 -1
  265. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js +22 -36
  266. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  267. package/build-module/components/global-styles/advanced-panel.js +74 -0
  268. package/build-module/components/global-styles/advanced-panel.js.map +1 -0
  269. package/build-module/components/global-styles/color-panel.js +5 -2
  270. package/build-module/components/global-styles/color-panel.js.map +1 -1
  271. package/build-module/components/global-styles/dimensions-panel.js +9 -8
  272. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  273. package/build-module/components/global-styles/hooks.js +1 -2
  274. package/build-module/components/global-styles/hooks.js.map +1 -1
  275. package/build-module/components/global-styles/index.js +3 -1
  276. package/build-module/components/global-styles/index.js.map +1 -1
  277. package/build-module/components/global-styles/typography-panel.js +1 -1
  278. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  279. package/build-module/components/global-styles/use-global-styles-output.js +25 -4
  280. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  281. package/build-module/components/global-styles/utils.js +25 -0
  282. package/build-module/components/global-styles/utils.js.map +1 -1
  283. package/build-module/components/iframe/index.js +15 -8
  284. package/build-module/components/iframe/index.js.map +1 -1
  285. package/build-module/components/image-editor/use-save-image.js +24 -8
  286. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  287. package/build-module/components/inner-blocks/index.js +2 -1
  288. package/build-module/components/inner-blocks/index.js.map +1 -1
  289. package/build-module/components/inner-blocks/index.native.js +7 -6
  290. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  291. package/build-module/components/inner-blocks/use-nested-settings-update.js +13 -5
  292. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  293. package/build-module/components/inserter/index.js +3 -7
  294. package/build-module/components/inserter/index.js.map +1 -1
  295. package/build-module/components/inserter/quick-inserter.js +2 -4
  296. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  297. package/build-module/components/inserter/search-results.js +16 -6
  298. package/build-module/components/inserter/search-results.js.map +1 -1
  299. package/build-module/components/inserter-draggable-blocks/index.js +4 -0
  300. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  301. package/build-module/components/inspector-controls/fill.js +1 -1
  302. package/build-module/components/inspector-controls/fill.js.map +1 -1
  303. package/build-module/components/inspector-controls/fill.native.js +1 -1
  304. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  305. package/build-module/components/inspector-controls/slot.js +4 -7
  306. package/build-module/components/inspector-controls/slot.js.map +1 -1
  307. package/build-module/components/inspector-controls/slot.native.js +1 -1
  308. package/build-module/components/inspector-controls/slot.native.js.map +1 -1
  309. package/build-module/components/line-height-control/index.js +7 -2
  310. package/build-module/components/line-height-control/index.js.map +1 -1
  311. package/build-module/components/link-control/use-internal-input-value.js +9 -8
  312. package/build-module/components/link-control/use-internal-input-value.js.map +1 -1
  313. package/build-module/components/list-view/appender.js +6 -2
  314. package/build-module/components/list-view/appender.js.map +1 -1
  315. package/build-module/components/list-view/block-contents.js +9 -3
  316. package/build-module/components/list-view/block-contents.js.map +1 -1
  317. package/build-module/components/list-view/block-select-button.js +2 -1
  318. package/build-module/components/list-view/block-select-button.js.map +1 -1
  319. package/build-module/components/list-view/block.js +24 -29
  320. package/build-module/components/list-view/block.js.map +1 -1
  321. package/build-module/components/list-view/branch.js +1 -3
  322. package/build-module/components/list-view/branch.js.map +1 -1
  323. package/build-module/components/list-view/index.js +44 -23
  324. package/build-module/components/list-view/index.js.map +1 -1
  325. package/build-module/components/list-view/use-list-view-client-ids.js +26 -3
  326. package/build-module/components/list-view/use-list-view-client-ids.js.map +1 -1
  327. package/build-module/components/list-view/use-list-view-drop-zone.js +160 -11
  328. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  329. package/build-module/components/media-placeholder/index.js +66 -7
  330. package/build-module/components/media-placeholder/index.js.map +1 -1
  331. package/build-module/components/multi-selection-inspector/index.js +2 -2
  332. package/build-module/components/multi-selection-inspector/index.js.map +1 -1
  333. package/build-module/components/preview-options/index.js +7 -2
  334. package/build-module/components/preview-options/index.js.map +1 -1
  335. package/build-module/components/publish-date-time-picker/index.js +0 -2
  336. package/build-module/components/publish-date-time-picker/index.js.map +1 -1
  337. package/build-module/components/spacing-sizes-control/spacing-input-control.js +1 -1
  338. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  339. package/build-module/components/url-input/index.js +4 -2
  340. package/build-module/components/url-input/index.js.map +1 -1
  341. package/build-module/components/use-block-drop-zone/index.js +25 -16
  342. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  343. package/build-module/components/use-resize-canvas/index.js +8 -1
  344. package/build-module/components/use-resize-canvas/index.js.map +1 -1
  345. package/build-module/components/writing-flow/use-arrow-nav.js +13 -7
  346. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  347. package/build-module/hooks/align.js +4 -7
  348. package/build-module/hooks/align.js.map +1 -1
  349. package/build-module/hooks/behaviors.js +97 -0
  350. package/build-module/hooks/behaviors.js.map +1 -0
  351. package/build-module/hooks/border.js +1 -1
  352. package/build-module/hooks/border.js.map +1 -1
  353. package/build-module/hooks/color.js +1 -1
  354. package/build-module/hooks/color.js.map +1 -1
  355. package/build-module/hooks/content-lock-ui.js +8 -11
  356. package/build-module/hooks/content-lock-ui.js.map +1 -1
  357. package/build-module/hooks/dimensions.js +0 -28
  358. package/build-module/hooks/dimensions.js.map +1 -1
  359. package/build-module/hooks/duotone.js +4 -7
  360. package/build-module/hooks/duotone.js.map +1 -1
  361. package/build-module/hooks/index.js +1 -0
  362. package/build-module/hooks/index.js.map +1 -1
  363. package/build-module/hooks/index.native.js +1 -0
  364. package/build-module/hooks/index.native.js.map +1 -1
  365. package/build-module/hooks/layout.js +9 -11
  366. package/build-module/hooks/layout.js.map +1 -1
  367. package/build-module/hooks/position.js +1 -1
  368. package/build-module/hooks/position.js.map +1 -1
  369. package/build-module/hooks/style.js +1 -1
  370. package/build-module/hooks/style.js.map +1 -1
  371. package/build-module/hooks/use-editor-wrapper-styles.native.js +242 -0
  372. package/build-module/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  373. package/build-module/hooks/use-typography-props.js +14 -10
  374. package/build-module/hooks/use-typography-props.js.map +1 -1
  375. package/build-module/index.native.js +6 -0
  376. package/build-module/index.native.js.map +1 -0
  377. package/build-module/private-apis.js +3 -5
  378. package/build-module/private-apis.js.map +1 -1
  379. package/build-module/store/private-actions.js +42 -0
  380. package/build-module/store/private-actions.js.map +1 -1
  381. package/build-module/store/private-selectors.js +79 -0
  382. package/build-module/store/private-selectors.js.map +1 -1
  383. package/build-module/store/reducer.js +34 -1
  384. package/build-module/store/reducer.js.map +1 -1
  385. package/build-module/store/selectors.js +26 -17
  386. package/build-module/store/selectors.js.map +1 -1
  387. package/build-module/utils/order-inserter-block-items.js +32 -0
  388. package/build-module/utils/order-inserter-block-items.js.map +1 -0
  389. package/build-module/utils/use-should-contextual-toolbar-show.js +16 -12
  390. package/build-module/utils/use-should-contextual-toolbar-show.js.map +1 -1
  391. package/build-style/content-rtl.css +32 -14
  392. package/build-style/content.css +32 -14
  393. package/build-style/default-editor-styles-rtl.css +1 -1
  394. package/build-style/default-editor-styles.css +1 -1
  395. package/build-style/style-rtl.css +56 -77
  396. package/build-style/style.css +57 -77
  397. package/package.json +32 -31
  398. package/src/autocompleters/block.js +15 -7
  399. package/src/components/block-breadcrumb/index.js +11 -3
  400. package/src/components/block-breadcrumb/style.scss +2 -1
  401. package/src/components/block-controls/slot.js +8 -4
  402. package/src/components/block-controls/slot.native.js +6 -1
  403. package/src/components/block-draggable/index.js +10 -6
  404. package/src/components/block-draggable/use-scroll-when-dragging.js +8 -2
  405. package/src/components/block-editing-mode/index.js +71 -0
  406. package/src/components/block-list/block-invalid-warning.native.js +17 -9
  407. package/src/components/block-list/block-list-block-context.js +6 -0
  408. package/src/components/block-list/block-list-item-cell.native.js +10 -1
  409. package/src/components/block-list/block-list-item.native.js +180 -208
  410. package/src/components/block-list/block-outline.native.js +58 -0
  411. package/src/components/block-list/block.js +38 -56
  412. package/src/components/block-list/block.native.js +531 -501
  413. package/src/components/block-list/content.scss +5 -6
  414. package/src/components/block-list/index.native.js +324 -382
  415. package/src/components/block-list/insertion-point.native.js +2 -2
  416. package/src/components/block-list/test/block-invalid-warning.native.js +48 -0
  417. package/src/components/block-list/test/index.native.js +205 -0
  418. package/src/components/block-list/use-block-props/index.js +1 -1
  419. package/src/components/block-list/use-in-between-inserter.js +7 -3
  420. package/src/components/block-list-appender/index.js +22 -4
  421. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +26 -1
  422. package/src/components/block-mover/style.scss +1 -0
  423. package/src/components/block-pattern-setup/style.scss +1 -4
  424. package/src/components/block-patterns-list/style.scss +1 -4
  425. package/src/components/block-settings-menu/block-settings-dropdown.js +10 -17
  426. package/src/components/block-settings-menu-controls/index.js +24 -4
  427. package/src/components/block-styles/preview-panel.js +1 -3
  428. package/src/components/block-styles/style.scss +4 -4
  429. package/src/components/block-switcher/block-transformations-menu.js +12 -0
  430. package/src/components/block-switcher/block-variation-transformations.js +115 -0
  431. package/src/components/block-switcher/index.js +38 -5
  432. package/src/components/block-switcher/pattern-transformations-menu.js +5 -5
  433. package/src/components/block-switcher/style.scss +6 -5
  434. package/src/components/block-toolbar/index.js +10 -11
  435. package/src/components/block-tools/block-contextual-toolbar.js +32 -67
  436. package/src/components/block-tools/insertion-point.js +23 -9
  437. package/src/components/block-tools/selected-block-popover.js +3 -5
  438. package/src/components/block-tools/style.scss +8 -0
  439. package/src/components/button-block-appender/content.scss +22 -0
  440. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +16 -2
  441. package/src/components/convert-to-group-buttons/index.js +9 -2
  442. package/src/components/convert-to-group-buttons/index.native.js +79 -1
  443. package/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js +32 -38
  444. package/src/components/global-styles/advanced-panel.js +82 -0
  445. package/src/components/global-styles/color-panel.js +6 -1
  446. package/src/components/global-styles/dimensions-panel.js +9 -8
  447. package/src/components/global-styles/hooks.js +1 -5
  448. package/src/components/global-styles/index.js +6 -1
  449. package/src/components/global-styles/style.scss +17 -0
  450. package/src/components/global-styles/test/utils.js +57 -1
  451. package/src/components/global-styles/typography-panel.js +1 -1
  452. package/src/components/global-styles/use-global-styles-output.js +21 -3
  453. package/src/components/global-styles/utils.js +27 -0
  454. package/src/components/iframe/index.js +22 -12
  455. package/src/components/image-editor/use-save-image.js +20 -9
  456. package/src/components/inner-blocks/README.md +5 -0
  457. package/src/components/inner-blocks/index.js +2 -0
  458. package/src/components/inner-blocks/index.native.js +16 -6
  459. package/src/components/inner-blocks/use-nested-settings-update.js +20 -3
  460. package/src/components/inserter/index.js +1 -9
  461. package/src/components/inserter/quick-inserter.js +0 -2
  462. package/src/components/inserter/search-results.js +32 -6
  463. package/src/components/inserter-draggable-blocks/index.js +4 -0
  464. package/src/components/inspector-controls/fill.js +1 -1
  465. package/src/components/inspector-controls/fill.native.js +1 -1
  466. package/src/components/inspector-controls/slot.js +4 -9
  467. package/src/components/inspector-controls/slot.native.js +1 -1
  468. package/src/components/line-height-control/index.js +7 -2
  469. package/src/components/line-height-control/stories/index.js +1 -1
  470. package/src/components/link-control/test/index.js +42 -0
  471. package/src/components/link-control/use-internal-input-value.js +8 -7
  472. package/src/components/list-view/appender.js +3 -2
  473. package/src/components/list-view/block-contents.js +32 -20
  474. package/src/components/list-view/block-select-button.js +5 -1
  475. package/src/components/list-view/block.js +34 -37
  476. package/src/components/list-view/branch.js +1 -7
  477. package/src/components/list-view/index.js +42 -17
  478. package/src/components/list-view/style.scss +7 -7
  479. package/src/components/list-view/test/use-list-view-drop-zone.js +88 -12
  480. package/src/components/list-view/use-list-view-client-ids.js +21 -4
  481. package/src/components/list-view/use-list-view-drop-zone.js +194 -11
  482. package/src/components/media-placeholder/index.js +74 -1
  483. package/src/components/multi-selection-inspector/index.js +2 -2
  484. package/src/components/preview-options/index.js +9 -2
  485. package/src/components/publish-date-time-picker/index.js +0 -2
  486. package/src/components/spacing-sizes-control/spacing-input-control.js +1 -0
  487. package/src/components/url-input/README.md +6 -0
  488. package/src/components/url-input/index.js +2 -2
  489. package/src/components/use-block-drop-zone/index.js +31 -17
  490. package/src/components/use-resize-canvas/index.js +9 -1
  491. package/src/components/writing-flow/test/index.js +15 -0
  492. package/src/components/writing-flow/use-arrow-nav.js +17 -4
  493. package/src/hooks/align.js +5 -12
  494. package/src/hooks/behaviors.js +104 -0
  495. package/src/hooks/border.js +2 -1
  496. package/src/hooks/color.js +2 -1
  497. package/src/hooks/content-lock-ui.js +3 -15
  498. package/src/hooks/dimensions.js +0 -40
  499. package/src/hooks/duotone.js +4 -11
  500. package/src/hooks/index.js +1 -0
  501. package/src/hooks/index.native.js +1 -0
  502. package/src/hooks/layout.js +14 -20
  503. package/src/hooks/position.js +2 -1
  504. package/src/hooks/style.js +2 -1
  505. package/src/hooks/test/use-editor-wrapper-styles.native.js +282 -0
  506. package/src/hooks/test/use-typography-props.js +47 -2
  507. package/src/hooks/use-editor-wrapper-styles.native.js +250 -0
  508. package/src/hooks/use-editor-wrapper-styles.native.scss +11 -0
  509. package/src/hooks/use-typography-props.js +10 -11
  510. package/src/index.native.js +6 -0
  511. package/src/private-apis.js +2 -4
  512. package/src/store/private-actions.js +39 -0
  513. package/src/store/private-selectors.js +95 -0
  514. package/src/store/reducer.js +27 -0
  515. package/src/store/selectors.js +25 -15
  516. package/src/store/test/private-actions.js +32 -1
  517. package/src/store/test/private-selectors.js +158 -0
  518. package/src/store/test/reducer.js +48 -0
  519. package/src/style.scss +0 -3
  520. package/src/utils/order-inserter-block-items.js +26 -0
  521. package/src/utils/use-should-contextual-toolbar-show.js +19 -9
  522. package/tsconfig.json +1 -0
  523. package/tsconfig.tsbuildinfo +1 -1
  524. package/build/components/block-list/block-list-compact.native.js +0 -75
  525. package/build/components/block-list/block-list-compact.native.js.map +0 -1
  526. package/build/components/off-canvas-editor/appender.js +0 -125
  527. package/build/components/off-canvas-editor/appender.js.map +0 -1
  528. package/build/components/off-canvas-editor/block-contents.js +0 -141
  529. package/build/components/off-canvas-editor/block-contents.js.map +0 -1
  530. package/build/components/off-canvas-editor/block-select-button.js +0 -126
  531. package/build/components/off-canvas-editor/block-select-button.js.map +0 -1
  532. package/build/components/off-canvas-editor/block.js +0 -297
  533. package/build/components/off-canvas-editor/block.js.map +0 -1
  534. package/build/components/off-canvas-editor/branch.js +0 -197
  535. package/build/components/off-canvas-editor/branch.js.map +0 -1
  536. package/build/components/off-canvas-editor/context.js +0 -19
  537. package/build/components/off-canvas-editor/context.js.map +0 -1
  538. package/build/components/off-canvas-editor/drop-indicator.js +0 -118
  539. package/build/components/off-canvas-editor/drop-indicator.js.map +0 -1
  540. package/build/components/off-canvas-editor/expander.js +0 -41
  541. package/build/components/off-canvas-editor/expander.js.map +0 -1
  542. package/build/components/off-canvas-editor/index.js +0 -236
  543. package/build/components/off-canvas-editor/index.js.map +0 -1
  544. package/build/components/off-canvas-editor/leaf-more-menu.js +0 -146
  545. package/build/components/off-canvas-editor/leaf-more-menu.js.map +0 -1
  546. package/build/components/off-canvas-editor/leaf.js +0 -60
  547. package/build/components/off-canvas-editor/leaf.js.map +0 -1
  548. package/build/components/off-canvas-editor/link-ui.js +0 -186
  549. package/build/components/off-canvas-editor/link-ui.js.map +0 -1
  550. package/build/components/off-canvas-editor/update-attributes.js +0 -108
  551. package/build/components/off-canvas-editor/update-attributes.js.map +0 -1
  552. package/build/components/off-canvas-editor/use-block-selection.js +0 -139
  553. package/build/components/off-canvas-editor/use-block-selection.js.map +0 -1
  554. package/build/components/off-canvas-editor/use-inserted-block.js +0 -58
  555. package/build/components/off-canvas-editor/use-inserted-block.js.map +0 -1
  556. package/build/components/off-canvas-editor/use-list-view-client-ids.js +0 -33
  557. package/build/components/off-canvas-editor/use-list-view-client-ids.js.map +0 -1
  558. package/build/components/off-canvas-editor/use-list-view-drop-zone.js +0 -235
  559. package/build/components/off-canvas-editor/use-list-view-drop-zone.js.map +0 -1
  560. package/build/components/off-canvas-editor/use-list-view-expand-selected-item.js +0 -60
  561. package/build/components/off-canvas-editor/use-list-view-expand-selected-item.js.map +0 -1
  562. package/build/components/off-canvas-editor/utils.js +0 -60
  563. package/build/components/off-canvas-editor/utils.js.map +0 -1
  564. package/build-module/components/block-list/block-list-compact.native.js +0 -60
  565. package/build-module/components/block-list/block-list-compact.native.js.map +0 -1
  566. package/build-module/components/off-canvas-editor/appender.js +0 -108
  567. package/build-module/components/off-canvas-editor/appender.js.map +0 -1
  568. package/build-module/components/off-canvas-editor/block-contents.js +0 -121
  569. package/build-module/components/off-canvas-editor/block-contents.js.map +0 -1
  570. package/build-module/components/off-canvas-editor/block-select-button.js +0 -107
  571. package/build-module/components/off-canvas-editor/block-select-button.js.map +0 -1
  572. package/build-module/components/off-canvas-editor/block.js +0 -273
  573. package/build-module/components/off-canvas-editor/block.js.map +0 -1
  574. package/build-module/components/off-canvas-editor/branch.js +0 -179
  575. package/build-module/components/off-canvas-editor/branch.js.map +0 -1
  576. package/build-module/components/off-canvas-editor/context.js +0 -7
  577. package/build-module/components/off-canvas-editor/context.js.map +0 -1
  578. package/build-module/components/off-canvas-editor/drop-indicator.js +0 -111
  579. package/build-module/components/off-canvas-editor/drop-indicator.js.map +0 -1
  580. package/build-module/components/off-canvas-editor/expander.js +0 -32
  581. package/build-module/components/off-canvas-editor/expander.js.map +0 -1
  582. package/build-module/components/off-canvas-editor/index.js +0 -213
  583. package/build-module/components/off-canvas-editor/index.js.map +0 -1
  584. package/build-module/components/off-canvas-editor/leaf-more-menu.js +0 -128
  585. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +0 -1
  586. package/build-module/components/off-canvas-editor/leaf.js +0 -45
  587. package/build-module/components/off-canvas-editor/leaf.js.map +0 -1
  588. package/build-module/components/off-canvas-editor/link-ui.js +0 -166
  589. package/build-module/components/off-canvas-editor/link-ui.js.map +0 -1
  590. package/build-module/components/off-canvas-editor/update-attributes.js +0 -97
  591. package/build-module/components/off-canvas-editor/update-attributes.js.map +0 -1
  592. package/build-module/components/off-canvas-editor/use-block-selection.js +0 -124
  593. package/build-module/components/off-canvas-editor/use-block-selection.js.map +0 -1
  594. package/build-module/components/off-canvas-editor/use-inserted-block.js +0 -47
  595. package/build-module/components/off-canvas-editor/use-inserted-block.js.map +0 -1
  596. package/build-module/components/off-canvas-editor/use-list-view-client-ids.js +0 -24
  597. package/build-module/components/off-canvas-editor/use-list-view-client-ids.js.map +0 -1
  598. package/build-module/components/off-canvas-editor/use-list-view-drop-zone.js +0 -220
  599. package/build-module/components/off-canvas-editor/use-list-view-drop-zone.js.map +0 -1
  600. package/build-module/components/off-canvas-editor/use-list-view-expand-selected-item.js +0 -50
  601. package/build-module/components/off-canvas-editor/use-list-view-expand-selected-item.js.map +0 -1
  602. package/build-module/components/off-canvas-editor/utils.js +0 -44
  603. package/build-module/components/off-canvas-editor/utils.js.map +0 -1
  604. package/src/components/block-list/block-list-compact.native.js +0 -63
  605. package/src/components/off-canvas-editor/README.md +0 -5
  606. package/src/components/off-canvas-editor/appender.js +0 -124
  607. package/src/components/off-canvas-editor/block-contents.js +0 -156
  608. package/src/components/off-canvas-editor/block-select-button.js +0 -128
  609. package/src/components/off-canvas-editor/block.js +0 -347
  610. package/src/components/off-canvas-editor/branch.js +0 -238
  611. package/src/components/off-canvas-editor/context.js +0 -8
  612. package/src/components/off-canvas-editor/drop-indicator.js +0 -126
  613. package/src/components/off-canvas-editor/expander.js +0 -26
  614. package/src/components/off-canvas-editor/index.js +0 -271
  615. package/src/components/off-canvas-editor/leaf-more-menu.js +0 -157
  616. package/src/components/off-canvas-editor/leaf.js +0 -52
  617. package/src/components/off-canvas-editor/link-ui.js +0 -167
  618. package/src/components/off-canvas-editor/style.scss +0 -34
  619. package/src/components/off-canvas-editor/test/use-inserted-block.js +0 -108
  620. package/src/components/off-canvas-editor/test/utils.js +0 -50
  621. package/src/components/off-canvas-editor/update-attributes.js +0 -99
  622. package/src/components/off-canvas-editor/use-block-selection.js +0 -169
  623. package/src/components/off-canvas-editor/use-inserted-block.js +0 -47
  624. package/src/components/off-canvas-editor/use-list-view-client-ids.js +0 -29
  625. package/src/components/off-canvas-editor/use-list-view-drop-zone.js +0 -260
  626. package/src/components/off-canvas-editor/use-list-view-expand-selected-item.js +0 -58
  627. package/src/components/off-canvas-editor/utils.js +0 -58
@@ -38,9 +38,10 @@ import { getBlockPositionDescription } from './utils';
38
38
  import { store as blockEditorStore } from '../../store';
39
39
  import useBlockDisplayInformation from '../use-block-display-information';
40
40
  import { useBlockLock } from '../block-lock';
41
+ import { unlock } from '../../lock-unlock';
41
42
 
42
43
  function ListViewBlock( {
43
- block,
44
+ block: { clientId },
44
45
  isDragged,
45
46
  isSelected,
46
47
  isBranchSelected,
@@ -58,51 +59,42 @@ function ListViewBlock( {
58
59
  const cellRef = useRef( null );
59
60
  const rowRef = useRef( null );
60
61
  const [ isHovered, setIsHovered ] = useState( false );
61
- const { clientId } = block;
62
62
 
63
- const { isLocked, isContentLocked, canEdit } = useBlockLock( clientId );
64
- const forceSelectionContentLock = useSelect(
65
- ( select ) => {
66
- if ( isSelected ) {
67
- return false;
68
- }
69
- if ( ! isContentLocked ) {
70
- return false;
71
- }
72
- return select( blockEditorStore ).hasSelectedInnerBlock(
73
- clientId,
74
- true
75
- );
76
- },
77
- [ isContentLocked, clientId, isSelected ]
78
- );
63
+ const { isLocked, canEdit } = useBlockLock( clientId );
79
64
 
80
- const canExpand = isContentLocked ? false : canEdit;
81
65
  const isFirstSelectedBlock =
82
- forceSelectionContentLock ||
83
- ( isSelected && selectedClientIds[ 0 ] === clientId );
66
+ isSelected && selectedClientIds[ 0 ] === clientId;
84
67
  const isLastSelectedBlock =
85
- forceSelectionContentLock ||
86
- ( isSelected &&
87
- selectedClientIds[ selectedClientIds.length - 1 ] === clientId );
68
+ isSelected &&
69
+ selectedClientIds[ selectedClientIds.length - 1 ] === clientId;
88
70
 
89
71
  const { toggleBlockHighlight } = useDispatch( blockEditorStore );
90
72
 
91
73
  const blockInformation = useBlockDisplayInformation( clientId );
92
74
  const blockTitle = blockInformation?.title || __( 'Untitled' );
75
+ const block = useSelect(
76
+ ( select ) => select( blockEditorStore ).getBlock( clientId ),
77
+ [ clientId ]
78
+ );
93
79
  const blockName = useSelect(
94
80
  ( select ) => select( blockEditorStore ).getBlockName( clientId ),
95
81
  [ clientId ]
96
82
  );
97
-
98
- // When a block hides its toolbar it also hides the block settings menu,
99
- // since that menu is part of the toolbar in the editor canvas.
100
- // List View respects this by also hiding the block settings menu.
101
- const showBlockActions = hasBlockSupport(
102
- blockName,
103
- '__experimentalToolbar',
104
- true
83
+ const blockEditingMode = useSelect(
84
+ ( select ) =>
85
+ unlock( select( blockEditorStore ) ).getBlockEditingMode(
86
+ clientId
87
+ ),
88
+ [ clientId ]
105
89
  );
90
+
91
+ const showBlockActions =
92
+ // When a block hides its toolbar it also hides the block settings menu,
93
+ // since that menu is part of the toolbar in the editor canvas.
94
+ // List View respects this by also hiding the block settings menu.
95
+ hasBlockSupport( blockName, '__experimentalToolbar', true ) &&
96
+ // Don't show the settings menu if block is disabled or content only.
97
+ blockEditingMode === 'default';
106
98
  const instanceId = useInstanceId( ListViewBlock );
107
99
  const descriptionId = `list-view-block-select-button__${ instanceId }`;
108
100
  const blockPositionDescription = getBlockPositionDescription(
@@ -131,6 +123,8 @@ function ListViewBlock( {
131
123
  collapse,
132
124
  BlockSettingsMenu,
133
125
  listViewInstanceId,
126
+ expandedState,
127
+ setInsertedBlock,
134
128
  } = useListViewContext();
135
129
 
136
130
  const hasSiblings = siblingBlockCount > 0;
@@ -200,7 +194,7 @@ function ListViewBlock( {
200
194
  }
201
195
 
202
196
  const classes = classnames( {
203
- 'is-selected': isSelected || forceSelectionContentLock,
197
+ 'is-selected': isSelected,
204
198
  'is-first-selected': isFirstSelectedBlock,
205
199
  'is-last-selected': isLastSelectedBlock,
206
200
  'is-branch-selected': isBranchSelected,
@@ -244,14 +238,14 @@ function ListViewBlock( {
244
238
  path={ path }
245
239
  id={ `list-view-${ listViewInstanceId }-block-${ clientId }` }
246
240
  data-block={ clientId }
247
- data-expanded={ canExpand ? isExpanded : undefined }
241
+ data-expanded={ canEdit ? isExpanded : undefined }
248
242
  ref={ rowRef }
249
243
  >
250
244
  <TreeGridCell
251
245
  className="block-editor-list-view-block__contents-cell"
252
246
  colSpan={ colSpan }
253
247
  ref={ cellRef }
254
- aria-selected={ !! isSelected || forceSelectionContentLock }
248
+ aria-selected={ !! isSelected }
255
249
  >
256
250
  { ( { ref, tabIndex, onFocus } ) => (
257
251
  <div className="block-editor-list-view-block__contents-container">
@@ -268,7 +262,7 @@ function ListViewBlock( {
268
262
  currentlyEditingBlockInCanvas ? 0 : tabIndex
269
263
  }
270
264
  onFocus={ onFocus }
271
- isExpanded={ canExpand ? isExpanded : undefined }
265
+ isExpanded={ canEdit ? isExpanded : undefined }
272
266
  selectedClientIds={ selectedClientIds }
273
267
  ariaLabel={ blockAriaLabel }
274
268
  ariaDescribedBy={ descriptionId }
@@ -317,7 +311,7 @@ function ListViewBlock( {
317
311
  { showBlockActions && BlockSettingsMenu && (
318
312
  <TreeGridCell
319
313
  className={ listViewBlockSettingsClassName }
320
- aria-selected={ !! isSelected || forceSelectionContentLock }
314
+ aria-selected={ !! isSelected }
321
315
  >
322
316
  { ( { ref, tabIndex, onFocus } ) => (
323
317
  <BlockSettingsMenu
@@ -333,6 +327,9 @@ function ListViewBlock( {
333
327
  } }
334
328
  disableOpenOnArrowDown
335
329
  __experimentalSelectBlock={ updateSelection }
330
+ expand={ expand }
331
+ expandedState={ expandedState }
332
+ setInsertedBlock={ setInsertedBlock }
336
333
  />
337
334
  ) }
338
335
  </TreeGridCell>
@@ -109,13 +109,7 @@ function ListViewBranch( props ) {
109
109
  if ( ! parentId ) {
110
110
  return true;
111
111
  }
112
-
113
- const isContentLocked =
114
- select( blockEditorStore ).getTemplateLock( parentId ) ===
115
- 'contentOnly';
116
- const canEdit = select( blockEditorStore ).canEditBlock( parentId );
117
-
118
- return isContentLocked ? false : canEdit;
112
+ return select( blockEditorStore ).canEditBlock( parentId );
119
113
  },
120
114
  [ parentId ]
121
115
  );
@@ -16,6 +16,7 @@ import {
16
16
  useRef,
17
17
  useReducer,
18
18
  forwardRef,
19
+ useState,
19
20
  } from '@wordpress/element';
20
21
  import { __ } from '@wordpress/i18n';
21
22
 
@@ -56,16 +57,18 @@ export const BLOCK_LIST_ITEM_HEIGHT = 36;
56
57
  /**
57
58
  * Show a hierarchical list of blocks.
58
59
  *
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 {Ref} ref Forwarded ref
60
+ * @param {Object} props Components props.
61
+ * @param {string} props.id An HTML element id for the root element of ListView.
62
+ * @param {Array} props.blocks _deprecated_ Custom subset of block client IDs to be used instead of the default hierarchy.
63
+ * @param {?boolean} props.showBlockMovers Flag to enable block movers. Defaults to `false`.
64
+ * @param {?boolean} props.isExpanded Flag to determine whether nested levels are expanded by default. Defaults to `false`.
65
+ * @param {?boolean} props.showAppender Flag to show or hide the block appender. Defaults to `false`.
66
+ * @param {?ComponentType} props.blockSettingsMenu Optional more menu substitution. Defaults to the standard `BlockSettingsDropdown` component.
67
+ * @param {string} props.rootClientId The client id of the root block from which we determine the blocks to show in the list.
68
+ * @param {string} props.description Optional accessible description for the tree grid component.
69
+ * @param {?Function} props.onSelect Optional callback to be invoked when a block is selected. Receives the block object that was selected.
70
+ * @param {Function} props.renderAdditionalBlockUI Function that renders additional block content UI.
71
+ * @param {Ref} ref Forwarded ref
69
72
  */
70
73
  function ListViewComponent(
71
74
  {
@@ -77,6 +80,8 @@ function ListViewComponent(
77
80
  blockSettingsMenu: BlockSettingsMenu = BlockSettingsDropdown,
78
81
  rootClientId,
79
82
  description,
83
+ onSelect,
84
+ renderAdditionalBlockUI,
80
85
  },
81
86
  ref
82
87
  ) {
@@ -95,6 +100,7 @@ function ListViewComponent(
95
100
  const { clientIdsTree, draggedClientIds, selectedClientIds } =
96
101
  useListViewClientIds( { blocks, rootClientId } );
97
102
 
103
+ const { getBlock } = useSelect( blockEditorStore );
98
104
  const { visibleBlockCount, shouldShowInnerBlocks } = useSelect(
99
105
  ( select ) => {
100
106
  const {
@@ -123,16 +129,22 @@ function ListViewComponent(
123
129
  const treeGridRef = useMergeRefs( [ elementRef, dropZoneRef, ref ] );
124
130
 
125
131
  const isMounted = useRef( false );
132
+
133
+ const [ insertedBlock, setInsertedBlock ] = useState( null );
134
+
126
135
  const { setSelectedTreeId } = useListViewExpandSelectedItem( {
127
136
  firstSelectedBlockClientId: selectedClientIds[ 0 ],
128
137
  setExpandedState,
129
138
  } );
130
139
  const selectEditorBlock = useCallback(
131
- ( event, clientId ) => {
132
- updateBlockSelection( event, clientId );
133
- setSelectedTreeId( clientId );
140
+ ( event, blockClientId ) => {
141
+ updateBlockSelection( event, blockClientId );
142
+ setSelectedTreeId( blockClientId );
143
+ if ( onSelect ) {
144
+ onSelect( getBlock( blockClientId ) );
145
+ }
134
146
  },
135
- [ setSelectedTreeId, updateBlockSelection ]
147
+ [ setSelectedTreeId, updateBlockSelection, onSelect, getBlock ]
136
148
  );
137
149
  useEffect( () => {
138
150
  isMounted.current = true;
@@ -203,6 +215,9 @@ function ListViewComponent(
203
215
  collapse,
204
216
  BlockSettingsMenu,
205
217
  listViewInstanceId: instanceId,
218
+ renderAdditionalBlockUI,
219
+ insertedBlock,
220
+ setInsertedBlock,
206
221
  } ),
207
222
  [
208
223
  draggedClientIds,
@@ -211,11 +226,14 @@ function ListViewComponent(
211
226
  collapse,
212
227
  BlockSettingsMenu,
213
228
  instanceId,
229
+ renderAdditionalBlockUI,
230
+ insertedBlock,
231
+ setInsertedBlock,
214
232
  ]
215
233
  );
216
234
 
217
- // If there are no blocks to show, do not render the list view.
218
- if ( ! clientIdsTree.length ) {
235
+ // If there are no blocks to show and we're not showing the appender, do not render the list view.
236
+ if ( ! clientIdsTree.length && ! showAppender ) {
219
237
  return null;
220
238
  }
221
239
 
@@ -254,16 +272,23 @@ function ListViewComponent(
254
272
  </AsyncModeProvider>
255
273
  );
256
274
  }
275
+
276
+ // This is the private API for the ListView component.
277
+ // It allows access to all props, not just the public ones.
257
278
  export const PrivateListView = forwardRef( ListViewComponent );
258
279
 
280
+ // This is the public API for the ListView component.
281
+ // We wrap the PrivateListView component to hide some props from the public API.
259
282
  export default forwardRef( ( props, ref ) => {
260
283
  return (
261
284
  <PrivateListView
262
285
  ref={ ref }
263
286
  { ...props }
264
287
  showAppender={ false }
265
- blockSettingsMenu={ BlockSettingsDropdown }
266
288
  rootClientId={ null }
289
+ onSelect={ null }
290
+ renderAdditionalBlockUI={ null }
291
+ blockSettingsMenu={ undefined }
267
292
  />
268
293
  );
269
294
  } );
@@ -15,10 +15,10 @@
15
15
  // Use position relative for row animation.
16
16
  position: relative;
17
17
 
18
- .components-button {
18
+ .block-editor-list-view-block-select-button {
19
19
  // When a row is expanded, retain the dark color.
20
20
  &[aria-expanded="true"] {
21
- color: $gray-900;
21
+ color: inherit;
22
22
  }
23
23
 
24
24
  // Ensure that on hover, the admin color is still used.
@@ -123,7 +123,6 @@
123
123
  border-radius: 0;
124
124
  }
125
125
 
126
-
127
126
  // List View renders a fixed number of items and relies on each item having a fixed height of 36px.
128
127
  // If this value changes, we should also change the itemHeight value set in useFixedWindowList.
129
128
  // See: https://github.com/WordPress/gutenberg/pull/35230 for additional context.
@@ -214,19 +213,17 @@
214
213
  line-height: 0;
215
214
  width: $button-size;
216
215
  vertical-align: middle;
217
- @include reduce-motion("transition");
218
216
 
219
217
  > * {
220
- will-change: opacity;
221
218
  opacity: 0;
222
219
  }
223
220
 
224
- // Show on hover, visible, and show above to keep the hit area size.
221
+ // Show on hover, visible, when focused, and show above to keep the hit area size.
225
222
  &:hover,
223
+ &:focus-within,
226
224
  &.is-visible {
227
225
  > * {
228
226
  opacity: 1;
229
- @include edit-post__fade-in-animation;
230
227
  }
231
228
  }
232
229
 
@@ -376,6 +373,9 @@ $block-navigation-max-indent: 8;
376
373
  }
377
374
  }
378
375
 
376
+ // When updating the margin for each indentation level, the corresponding
377
+ // indentation in `use-list-view-drop-zone.js` must be updated as well
378
+ // to ensure the drop zone is aligned with the indentation.
379
379
  @for $i from 0 to $block-navigation-max-indent {
380
380
  .block-editor-list-view-leaf[aria-level="#{ $i + 1 }"] .block-editor-list-view__expander {
381
381
  @if $i - 1 >= 0 {
@@ -1,7 +1,10 @@
1
1
  /**
2
2
  * Internal dependencies
3
3
  */
4
- import { getListViewDropTarget } from '../use-list-view-drop-zone';
4
+ import {
5
+ getListViewDropTarget,
6
+ NESTING_LEVEL_INDENTATION,
7
+ } from '../use-list-view-drop-zone';
5
8
 
6
9
  describe( 'getListViewDropTarget', () => {
7
10
  const blocksData = [
@@ -15,10 +18,10 @@ describe( 'getListViewDropTarget', () => {
15
18
  top: 50,
16
19
  bottom: 100,
17
20
  left: 10,
18
- right: 100,
21
+ right: 300,
19
22
  x: 10,
20
23
  y: 50,
21
- width: 90,
24
+ width: 290,
22
25
  height: 50,
23
26
  } ),
24
27
  },
@@ -26,6 +29,7 @@ describe( 'getListViewDropTarget', () => {
26
29
  isDraggedBlock: false,
27
30
  isExpanded: true,
28
31
  rootClientId: '',
32
+ nestingLevel: 1,
29
33
  },
30
34
  {
31
35
  blockIndex: 0,
@@ -37,32 +41,56 @@ describe( 'getListViewDropTarget', () => {
37
41
  top: 100,
38
42
  bottom: 150,
39
43
  left: 10,
40
- right: 100,
44
+ right: 300,
41
45
  x: 10,
42
46
  y: 100,
43
- width: 90,
47
+ width: 290,
44
48
  height: 50,
45
49
  } ),
46
50
  },
47
- innerBlockCount: 0,
51
+ innerBlockCount: 1,
48
52
  isDraggedBlock: false,
49
- isExpanded: false,
53
+ isExpanded: true,
50
54
  rootClientId: 'block-1',
55
+ nestingLevel: 2,
51
56
  },
52
57
  {
53
- blockIndex: 1,
58
+ blockIndex: 0,
54
59
  canInsertDraggedBlocksAsChild: true,
55
60
  canInsertDraggedBlocksAsSibling: true,
56
61
  clientId: 'block-3',
57
62
  element: {
58
63
  getBoundingClientRect: () => ( {
59
64
  top: 150,
60
- bottom: 150,
65
+ bottom: 200,
61
66
  left: 10,
62
- right: 100,
67
+ right: 300,
63
68
  x: 10,
64
69
  y: 150,
65
- width: 90,
70
+ width: 290,
71
+ height: 50,
72
+ } ),
73
+ },
74
+ innerBlockCount: 0,
75
+ isDraggedBlock: false,
76
+ isExpanded: true,
77
+ rootClientId: 'block-2',
78
+ nestingLevel: 3,
79
+ },
80
+ {
81
+ blockIndex: 1,
82
+ canInsertDraggedBlocksAsChild: true,
83
+ canInsertDraggedBlocksAsSibling: true,
84
+ clientId: 'block-4',
85
+ element: {
86
+ getBoundingClientRect: () => ( {
87
+ top: 200,
88
+ bottom: 250,
89
+ left: 10,
90
+ right: 300,
91
+ x: 10,
92
+ y: 200,
93
+ width: 290,
66
94
  height: 50,
67
95
  } ),
68
96
  },
@@ -70,6 +98,7 @@ describe( 'getListViewDropTarget', () => {
70
98
  isDraggedBlock: false,
71
99
  isExpanded: false,
72
100
  rootClientId: '',
101
+ nestingLevel: 1,
73
102
  },
74
103
  ];
75
104
 
@@ -96,8 +125,55 @@ describe( 'getListViewDropTarget', () => {
96
125
  } );
97
126
  } );
98
127
 
128
+ it( 'should nest when dragging a block over the right side of the bottom half of a block nested to three levels', () => {
129
+ const position = { x: 250, y: 180 };
130
+ const target = getListViewDropTarget( blocksData, position );
131
+
132
+ expect( target ).toEqual( {
133
+ blockIndex: 0,
134
+ dropPosition: 'inside',
135
+ rootClientId: 'block-3',
136
+ } );
137
+ } );
138
+
139
+ it( 'should drag below when positioned at the bottom half of a block nested to three levels, and over the third level horizontally', () => {
140
+ const position = { x: 10 + NESTING_LEVEL_INDENTATION * 3, y: 180 };
141
+ const target = getListViewDropTarget( blocksData, position );
142
+
143
+ expect( target ).toEqual( {
144
+ blockIndex: 1,
145
+ clientId: 'block-3',
146
+ dropPosition: 'bottom',
147
+ rootClientId: 'block-2',
148
+ } );
149
+ } );
150
+
151
+ it( 'should drag one level up below when positioned at the bottom half of a block nested to three levels, and over the second level horizontally', () => {
152
+ const position = { x: 10 + NESTING_LEVEL_INDENTATION * 2, y: 180 };
153
+ const target = getListViewDropTarget( blocksData, position );
154
+
155
+ expect( target ).toEqual( {
156
+ blockIndex: 1,
157
+ clientId: 'block-3',
158
+ dropPosition: 'bottom',
159
+ rootClientId: 'block-1',
160
+ } );
161
+ } );
162
+
163
+ it( 'should drag two levels up below when positioned at the bottom half of a block nested to three levels, and over the first level horizontally', () => {
164
+ const position = { x: 10 + NESTING_LEVEL_INDENTATION, y: 180 };
165
+ const target = getListViewDropTarget( blocksData, position );
166
+
167
+ expect( target ).toEqual( {
168
+ blockIndex: 1,
169
+ clientId: 'block-3',
170
+ dropPosition: 'bottom',
171
+ rootClientId: '',
172
+ } );
173
+ } );
174
+
99
175
  it( 'should nest when dragging a block over the right side and bottom half of a collapsed block with children', () => {
100
- const position = { x: 70, y: 90 };
176
+ const position = { x: 160, y: 90 };
101
177
 
102
178
  const collapsedBlockData = [ ...blocksData ];
103
179
 
@@ -8,6 +8,7 @@ import { useSelect } from '@wordpress/data';
8
8
  * Internal dependencies
9
9
  */
10
10
  import { store as blockEditorStore } from '../../store';
11
+ import { unlock } from '../../lock-unlock';
11
12
 
12
13
  export default function useListViewClientIds( { blocks, rootClientId } ) {
13
14
  return useSelect(
@@ -16,14 +17,30 @@ export default function useListViewClientIds( { blocks, rootClientId } ) {
16
17
  getDraggedBlockClientIds,
17
18
  getSelectedBlockClientIds,
18
19
  __unstableGetClientIdsTree,
19
- } = select( blockEditorStore );
20
+ getBlockEditingMode,
21
+ } = unlock( select( blockEditorStore ) );
22
+
23
+ const removeDisabledBlocks = ( tree ) => {
24
+ return tree.flatMap( ( { clientId, innerBlocks, ...rest } ) => {
25
+ if ( getBlockEditingMode( clientId ) === 'disabled' ) {
26
+ return removeDisabledBlocks( innerBlocks );
27
+ }
28
+ return [
29
+ {
30
+ clientId,
31
+ innerBlocks: removeDisabledBlocks( innerBlocks ),
32
+ ...rest,
33
+ },
34
+ ];
35
+ } );
36
+ };
20
37
 
21
38
  return {
22
39
  selectedClientIds: getSelectedBlockClientIds(),
23
40
  draggedClientIds: getDraggedBlockClientIds(),
24
- clientIdsTree: blocks
25
- ? blocks
26
- : __unstableGetClientIdsTree( rootClientId ),
41
+ clientIdsTree: removeDisabledBlocks(
42
+ blocks ?? __unstableGetClientIdsTree( rootClientId )
43
+ ),
27
44
  };
28
45
  },
29
46
  [ blocks, rootClientId ]