@wordpress/block-editor 12.5.0 → 12.6.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 (298) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +0 -4
  3. package/build/components/block-draggable/index.js +6 -3
  4. package/build/components/block-draggable/index.js.map +1 -1
  5. package/build/components/block-draggable/index.native.js +2 -2
  6. package/build/components/block-draggable/index.native.js.map +1 -1
  7. package/build/components/block-edit/edit.js +25 -13
  8. package/build/components/block-edit/edit.js.map +1 -1
  9. package/build/components/block-list/block-outline.native.js +14 -18
  10. package/build/components/block-list/block-outline.native.js.map +1 -1
  11. package/build/components/block-list/block.native.js +21 -42
  12. package/build/components/block-list/block.native.js.map +1 -1
  13. package/build/components/block-mover/index.native.js +1 -1
  14. package/build/components/block-mover/index.native.js.map +1 -1
  15. package/build/components/block-removal-warning-modal/index.js +1 -4
  16. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  17. package/build/components/block-settings/button.native.js +2 -2
  18. package/build/components/block-settings/button.native.js.map +1 -1
  19. package/build/components/{block-mobile-toolbar/block-actions-menu.native.js → block-toolbar/block-toolbar-menu.native.js} +7 -5
  20. package/build/components/block-toolbar/block-toolbar-menu.native.js.map +1 -0
  21. package/build/components/block-toolbar/index.js +4 -3
  22. package/build/components/block-toolbar/index.js.map +1 -1
  23. package/build/components/block-toolbar/index.native.js +62 -3
  24. package/build/components/block-toolbar/index.native.js.map +1 -1
  25. package/build/components/colors-gradients/control.js +4 -2
  26. package/build/components/colors-gradients/control.js.map +1 -1
  27. package/build/components/global-styles/color-panel.js +21 -15
  28. package/build/components/global-styles/color-panel.js.map +1 -1
  29. package/build/components/global-styles/dimensions-panel.js +13 -2
  30. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  31. package/build/components/global-styles/get-block-css-selector.js +4 -8
  32. package/build/components/global-styles/get-block-css-selector.js.map +1 -1
  33. package/build/components/global-styles/hooks.js +13 -23
  34. package/build/components/global-styles/hooks.js.map +1 -1
  35. package/build/components/global-styles/typography-panel.js +18 -3
  36. package/build/components/global-styles/typography-panel.js.map +1 -1
  37. package/build/components/global-styles/use-global-styles-output.js +12 -18
  38. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  39. package/build/components/global-styles/utils.js +6 -6
  40. package/build/components/global-styles/utils.js.map +1 -1
  41. package/build/components/iframe/index.js +36 -48
  42. package/build/components/iframe/index.js.map +1 -1
  43. package/build/components/iframe/use-compatibility-styles.js +5 -0
  44. package/build/components/iframe/use-compatibility-styles.js.map +1 -1
  45. package/build/components/index.js +1 -10
  46. package/build/components/index.js.map +1 -1
  47. package/build/components/inner-blocks/index.js +3 -1
  48. package/build/components/inner-blocks/index.js.map +1 -1
  49. package/build/components/inner-blocks/index.native.js +3 -1
  50. package/build/components/inner-blocks/index.native.js.map +1 -1
  51. package/build/components/inner-blocks/use-nested-settings-update.js +33 -7
  52. package/build/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  53. package/build/components/inserter/index.js +2 -4
  54. package/build/components/inserter/index.js.map +1 -1
  55. package/build/components/inserter/index.native.js +21 -32
  56. package/build/components/inserter/index.native.js.map +1 -1
  57. package/build/components/inserter/reusable-block-rename-hint.js +23 -3
  58. package/build/components/inserter/reusable-block-rename-hint.js.map +1 -1
  59. package/build/components/link-control/index.js +4 -1
  60. package/build/components/link-control/index.js.map +1 -1
  61. package/build/components/link-control/search-item.js +1 -1
  62. package/build/components/link-control/search-item.js.map +1 -1
  63. package/build/components/list-view/use-list-view-client-ids.js +2 -2
  64. package/build/components/list-view/use-list-view-client-ids.js.map +1 -1
  65. package/build/components/media-placeholder/index.native.js +65 -31
  66. package/build/components/media-placeholder/index.native.js.map +1 -1
  67. package/build/components/preview-options/index.js +2 -2
  68. package/build/components/preview-options/index.js.map +1 -1
  69. package/build/components/rich-text/content.js +0 -36
  70. package/build/components/rich-text/content.js.map +1 -1
  71. package/build/components/rich-text/get-rich-text-values.js +118 -0
  72. package/build/components/rich-text/get-rich-text-values.js.map +1 -0
  73. package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.js +1 -1
  74. package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.js.map +1 -1
  75. package/build/components/spacing-sizes-control/input-controls/axial.js +6 -2
  76. package/build/components/spacing-sizes-control/input-controls/axial.js.map +1 -1
  77. package/build/components/spacing-sizes-control/input-controls/separated.js +5 -1
  78. package/build/components/spacing-sizes-control/input-controls/separated.js.map +1 -1
  79. package/build/components/spacing-sizes-control/input-controls/single.js +5 -1
  80. package/build/components/spacing-sizes-control/input-controls/single.js.map +1 -1
  81. package/build/components/spacing-sizes-control/utils.js +1 -1
  82. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  83. package/build/components/use-block-display-information/index.js +7 -3
  84. package/build/components/use-block-display-information/index.js.map +1 -1
  85. package/build/components/use-block-drop-zone/index.native.js +49 -8
  86. package/build/components/use-block-drop-zone/index.native.js.map +1 -1
  87. package/build/components/use-setting/index.js +5 -9
  88. package/build/components/use-setting/index.js.map +1 -1
  89. package/build/hooks/margin.js +1 -1
  90. package/build/hooks/margin.js.map +1 -1
  91. package/build/hooks/padding.js +1 -1
  92. package/build/hooks/padding.js.map +1 -1
  93. package/build/hooks/utils.js +1 -7
  94. package/build/hooks/utils.js.map +1 -1
  95. package/build/private-apis.js +7 -3
  96. package/build/private-apis.js.map +1 -1
  97. package/build/store/actions.js +1 -1
  98. package/build/store/actions.js.map +1 -1
  99. package/build/store/private-selectors.js +5 -6
  100. package/build/store/private-selectors.js.map +1 -1
  101. package/build/store/reducer.js +0 -1
  102. package/build/store/reducer.js.map +1 -1
  103. package/build/store/selectors.js +19 -8
  104. package/build/store/selectors.js.map +1 -1
  105. package/build/utils/object.js +38 -2
  106. package/build/utils/object.js.map +1 -1
  107. package/build-module/components/block-draggable/index.js +6 -3
  108. package/build-module/components/block-draggable/index.js.map +1 -1
  109. package/build-module/components/block-draggable/index.native.js +2 -2
  110. package/build-module/components/block-draggable/index.native.js.map +1 -1
  111. package/build-module/components/block-edit/edit.js +27 -10
  112. package/build-module/components/block-edit/edit.js.map +1 -1
  113. package/build-module/components/block-list/block-outline.native.js +14 -18
  114. package/build-module/components/block-list/block-outline.native.js.map +1 -1
  115. package/build-module/components/block-list/block.native.js +24 -43
  116. package/build-module/components/block-list/block.native.js.map +1 -1
  117. package/build-module/components/block-mover/index.native.js +3 -3
  118. package/build-module/components/block-mover/index.native.js.map +1 -1
  119. package/build-module/components/block-removal-warning-modal/index.js +1 -4
  120. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  121. package/build-module/components/block-settings/button.native.js +3 -3
  122. package/build-module/components/block-settings/button.native.js.map +1 -1
  123. package/build-module/components/{block-mobile-toolbar/block-actions-menu.native.js → block-toolbar/block-toolbar-menu.native.js} +9 -7
  124. package/build-module/components/block-toolbar/block-toolbar-menu.native.js.map +1 -0
  125. package/build-module/components/block-toolbar/index.js +4 -3
  126. package/build-module/components/block-toolbar/index.js.map +1 -1
  127. package/build-module/components/block-toolbar/index.native.js +60 -4
  128. package/build-module/components/block-toolbar/index.native.js.map +1 -1
  129. package/build-module/components/colors-gradients/control.js +3 -2
  130. package/build-module/components/colors-gradients/control.js.map +1 -1
  131. package/build-module/components/global-styles/color-panel.js +21 -15
  132. package/build-module/components/global-styles/color-panel.js.map +1 -1
  133. package/build-module/components/global-styles/dimensions-panel.js +13 -2
  134. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  135. package/build-module/components/global-styles/get-block-css-selector.js +4 -8
  136. package/build-module/components/global-styles/get-block-css-selector.js.map +1 -1
  137. package/build-module/components/global-styles/hooks.js +12 -22
  138. package/build-module/components/global-styles/hooks.js.map +1 -1
  139. package/build-module/components/global-styles/typography-panel.js +18 -3
  140. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  141. package/build-module/components/global-styles/use-global-styles-output.js +13 -18
  142. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  143. package/build-module/components/global-styles/utils.js +5 -5
  144. package/build-module/components/global-styles/utils.js.map +1 -1
  145. package/build-module/components/iframe/index.js +37 -49
  146. package/build-module/components/iframe/index.js.map +1 -1
  147. package/build-module/components/iframe/use-compatibility-styles.js +5 -0
  148. package/build-module/components/iframe/use-compatibility-styles.js.map +1 -1
  149. package/build-module/components/index.js +0 -5
  150. package/build-module/components/index.js.map +1 -1
  151. package/build-module/components/inner-blocks/index.js +3 -1
  152. package/build-module/components/inner-blocks/index.js.map +1 -1
  153. package/build-module/components/inner-blocks/index.native.js +3 -1
  154. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  155. package/build-module/components/inner-blocks/use-nested-settings-update.js +30 -7
  156. package/build-module/components/inner-blocks/use-nested-settings-update.js.map +1 -1
  157. package/build-module/components/inserter/index.js +2 -4
  158. package/build-module/components/inserter/index.js.map +1 -1
  159. package/build-module/components/inserter/index.native.js +22 -33
  160. package/build-module/components/inserter/index.native.js.map +1 -1
  161. package/build-module/components/inserter/reusable-block-rename-hint.js +22 -3
  162. package/build-module/components/inserter/reusable-block-rename-hint.js.map +1 -1
  163. package/build-module/components/link-control/index.js +4 -1
  164. package/build-module/components/link-control/index.js.map +1 -1
  165. package/build-module/components/link-control/search-item.js +1 -1
  166. package/build-module/components/link-control/search-item.js.map +1 -1
  167. package/build-module/components/list-view/use-list-view-client-ids.js +2 -2
  168. package/build-module/components/list-view/use-list-view-client-ids.js.map +1 -1
  169. package/build-module/components/media-placeholder/index.native.js +66 -33
  170. package/build-module/components/media-placeholder/index.native.js.map +1 -1
  171. package/build-module/components/preview-options/index.js +2 -2
  172. package/build-module/components/preview-options/index.js.map +1 -1
  173. package/build-module/components/rich-text/content.js +1 -36
  174. package/build-module/components/rich-text/content.js.map +1 -1
  175. package/build-module/components/rich-text/get-rich-text-values.js +105 -0
  176. package/build-module/components/rich-text/get-rich-text-values.js.map +1 -0
  177. package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js +1 -1
  178. package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js.map +1 -1
  179. package/build-module/components/spacing-sizes-control/input-controls/axial.js +7 -3
  180. package/build-module/components/spacing-sizes-control/input-controls/axial.js.map +1 -1
  181. package/build-module/components/spacing-sizes-control/input-controls/separated.js +6 -2
  182. package/build-module/components/spacing-sizes-control/input-controls/separated.js.map +1 -1
  183. package/build-module/components/spacing-sizes-control/input-controls/single.js +6 -2
  184. package/build-module/components/spacing-sizes-control/input-controls/single.js.map +1 -1
  185. package/build-module/components/spacing-sizes-control/utils.js +1 -1
  186. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  187. package/build-module/components/use-block-display-information/index.js +7 -3
  188. package/build-module/components/use-block-display-information/index.js.map +1 -1
  189. package/build-module/components/use-block-drop-zone/index.native.js +50 -8
  190. package/build-module/components/use-block-drop-zone/index.native.js.map +1 -1
  191. package/build-module/components/use-setting/index.js +5 -9
  192. package/build-module/components/use-setting/index.js.map +1 -1
  193. package/build-module/hooks/margin.js +1 -1
  194. package/build-module/hooks/margin.js.map +1 -1
  195. package/build-module/hooks/padding.js +1 -1
  196. package/build-module/hooks/padding.js.map +1 -1
  197. package/build-module/hooks/utils.js +2 -7
  198. package/build-module/hooks/utils.js.map +1 -1
  199. package/build-module/private-apis.js +5 -2
  200. package/build-module/private-apis.js.map +1 -1
  201. package/build-module/store/actions.js +2 -2
  202. package/build-module/store/actions.js.map +1 -1
  203. package/build-module/store/private-selectors.js +3 -3
  204. package/build-module/store/private-selectors.js.map +1 -1
  205. package/build-module/store/reducer.js +0 -1
  206. package/build-module/store/reducer.js.map +1 -1
  207. package/build-module/store/selectors.js +16 -6
  208. package/build-module/store/selectors.js.map +1 -1
  209. package/build-module/utils/object.js +34 -2
  210. package/build-module/utils/object.js.map +1 -1
  211. package/build-style/content-rtl.css +2 -1
  212. package/build-style/content.css +2 -1
  213. package/build-style/style-rtl.css +7 -1
  214. package/build-style/style.css +7 -1
  215. package/package.json +32 -32
  216. package/src/components/block-controls/README.md +89 -0
  217. package/src/components/block-draggable/index.js +13 -4
  218. package/src/components/block-draggable/index.native.js +7 -3
  219. package/src/components/block-draggable/test/index.native.js +0 -54
  220. package/src/components/block-edit/edit.js +26 -9
  221. package/src/components/block-edit/test/edit.js +1 -1
  222. package/src/components/block-list/block-outline.native.js +26 -25
  223. package/src/components/block-list/block.native.js +24 -38
  224. package/src/components/block-list/block.native.scss +18 -40
  225. package/src/components/block-list/style.native.scss +3 -3
  226. package/src/components/block-mover/index.native.js +3 -3
  227. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +16 -6
  228. package/src/components/block-removal-warning-modal/index.js +0 -3
  229. package/src/components/block-settings/button.native.js +12 -6
  230. package/src/components/{block-mobile-toolbar/block-actions-menu.native.js → block-toolbar/block-toolbar-menu.native.js} +15 -10
  231. package/src/components/block-toolbar/index.js +2 -3
  232. package/src/components/block-toolbar/index.native.js +86 -6
  233. package/src/components/{block-mobile-toolbar/test/block-actions-menu.native.js → block-toolbar/test/block-toolbar-menu.native.js} +20 -54
  234. package/src/components/block-toolbar/test/index.native.js +42 -0
  235. package/src/components/button-block-appender/styles.native.scss +2 -2
  236. package/src/components/caption/README.md +49 -0
  237. package/src/components/colors-gradients/control.js +3 -2
  238. package/src/components/global-styles/color-panel.js +23 -16
  239. package/src/components/global-styles/dimensions-panel.js +8 -2
  240. package/src/components/global-styles/get-block-css-selector.js +5 -9
  241. package/src/components/global-styles/hooks.js +20 -26
  242. package/src/components/global-styles/typography-panel.js +17 -5
  243. package/src/components/global-styles/use-global-styles-output.js +36 -18
  244. package/src/components/global-styles/utils.js +15 -6
  245. package/src/components/iframe/index.js +30 -56
  246. package/src/components/iframe/use-compatibility-styles.js +5 -0
  247. package/src/components/index.js +0 -5
  248. package/src/components/inner-blocks/README.md +10 -0
  249. package/src/components/inner-blocks/index.js +4 -0
  250. package/src/components/inner-blocks/index.native.js +4 -0
  251. package/src/components/inner-blocks/use-nested-settings-update.js +32 -5
  252. package/src/components/inserter/index.js +2 -3
  253. package/src/components/inserter/index.native.js +17 -36
  254. package/src/components/inserter/reusable-block-rename-hint.js +18 -1
  255. package/src/components/inserter/style.native.scss +10 -15
  256. package/src/components/link-control/index.js +4 -1
  257. package/src/components/link-control/search-item.js +1 -1
  258. package/src/components/link-control/style.scss +8 -1
  259. package/src/components/link-control/test/index.js +26 -0
  260. package/src/components/list-view/use-list-view-client-ids.js +2 -2
  261. package/src/components/media-placeholder/index.native.js +108 -59
  262. package/src/components/media-placeholder/styles.native.scss +59 -24
  263. package/src/components/preview-options/README.md +18 -17
  264. package/src/components/preview-options/index.js +2 -2
  265. package/src/components/rich-text/content.js +1 -46
  266. package/src/components/rich-text/get-rich-text-values.js +105 -0
  267. package/src/components/spacing-sizes-control/hooks/use-spacing-sizes.js +1 -1
  268. package/src/components/spacing-sizes-control/input-controls/axial.js +17 -2
  269. package/src/components/spacing-sizes-control/input-controls/separated.js +17 -2
  270. package/src/components/spacing-sizes-control/input-controls/single.js +12 -2
  271. package/src/components/spacing-sizes-control/utils.js +1 -1
  272. package/src/components/text-transform-control/README.md +44 -0
  273. package/src/components/use-block-display-information/index.js +12 -5
  274. package/src/components/use-block-drop-zone/index.native.js +65 -28
  275. package/src/components/use-setting/index.js +8 -8
  276. package/src/hooks/margin.js +4 -1
  277. package/src/hooks/padding.js +4 -1
  278. package/src/hooks/utils.js +5 -7
  279. package/src/private-apis.js +7 -1
  280. package/src/store/actions.js +1 -2
  281. package/src/store/private-selectors.js +3 -6
  282. package/src/store/reducer.js +0 -1
  283. package/src/store/selectors.js +33 -5
  284. package/src/store/test/actions.js +3 -0
  285. package/src/store/test/private-selectors.js +5 -5
  286. package/src/store/test/reducer.js +14 -7
  287. package/src/store/test/selectors.js +1 -1
  288. package/src/utils/object.js +32 -2
  289. package/src/utils/test/object.js +36 -0
  290. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +0 -1
  291. package/build/components/block-mobile-toolbar/index.native.js +0 -135
  292. package/build/components/block-mobile-toolbar/index.native.js.map +0 -1
  293. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +0 -1
  294. package/build-module/components/block-mobile-toolbar/index.native.js +0 -116
  295. package/build-module/components/block-mobile-toolbar/index.native.js.map +0 -1
  296. package/src/components/block-mobile-toolbar/index.native.js +0 -127
  297. package/src/components/block-mobile-toolbar/style.native.scss +0 -16
  298. /package/src/components/{block-mobile-toolbar/test/__snapshots__/block-actions-menu.native.js.snap → block-toolbar/test/__snapshots__/block-toolbar-menu.native.js.snap} +0 -0
@@ -1,17 +1,16 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { Pressable, useWindowDimensions, View } from 'react-native';
4
+ import { Pressable, View } from 'react-native';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { useCallback, useMemo, useRef, useState } from '@wordpress/element';
9
+ import { useCallback, useMemo, useState } from '@wordpress/element';
10
10
  import {
11
11
  GlobalStylesContext,
12
12
  getMergedGlobalStyles,
13
13
  useMobileGlobalStylesColors,
14
- alignmentHelpers,
15
14
  useGlobalStyles,
16
15
  } from '@wordpress/components';
17
16
  import {
@@ -36,9 +35,7 @@ import { compose, ifCondition, pure } from '@wordpress/compose';
36
35
  import BlockEdit from '../block-edit';
37
36
  import BlockDraggable from '../block-draggable';
38
37
  import BlockInvalidWarning from './block-invalid-warning';
39
- import BlockMobileToolbar from '../block-mobile-toolbar';
40
38
  import BlockOutline from './block-outline';
41
- import styles from './block.scss';
42
39
  import { store as blockEditorStore } from '../../store';
43
40
  import { useLayout } from './layout';
44
41
  import useSetting from '../use-setting';
@@ -63,27 +60,21 @@ function getWrapperProps( value, getWrapperPropsFunction ) {
63
60
 
64
61
  function BlockWrapper( {
65
62
  accessibilityLabel,
66
- align,
67
- blockWidth,
63
+ blockCategory,
68
64
  children,
69
65
  clientId,
70
66
  draggingClientId,
71
67
  draggingEnabled,
68
+ hasInnerBlocks,
72
69
  isDescendentBlockSelected,
73
- isParentSelected,
70
+ isRootList,
74
71
  isSelected,
75
- isStackedHorizontally,
76
72
  isTouchable,
77
73
  marginHorizontal,
78
74
  marginVertical,
79
- onDeleteBlock,
75
+ name,
80
76
  onFocus,
81
77
  } ) {
82
- const { width: screenWidth } = useWindowDimensions();
83
- const anchorNodeRef = useRef();
84
- const { isFullWidth } = alignmentHelpers;
85
- const isScreenWidthEqual = blockWidth === screenWidth;
86
- const isFullWidthToolbar = isFullWidth( align ) || isScreenWidthEqual;
87
78
  const blockWrapperStyles = { flex: 1 };
88
79
  const blockWrapperStyle = [
89
80
  blockWrapperStyles,
@@ -104,9 +95,11 @@ function BlockWrapper( {
104
95
  style={ blockWrapperStyle }
105
96
  >
106
97
  <BlockOutline
98
+ blockCategory={ blockCategory }
99
+ hasInnerBlocks={ hasInnerBlocks }
100
+ isRootList={ isRootList }
107
101
  isSelected={ isSelected }
108
- isParentSelected={ isParentSelected }
109
- screenWidth={ screenWidth }
102
+ name={ name }
110
103
  />
111
104
  <BlockDraggable
112
105
  clientId={ clientId }
@@ -116,19 +109,6 @@ function BlockWrapper( {
116
109
  >
117
110
  { children }
118
111
  </BlockDraggable>
119
- <View style={ styles.neutralToolbar } ref={ anchorNodeRef }>
120
- { isSelected && (
121
- <BlockMobileToolbar
122
- anchorNodeRef={ anchorNodeRef.current }
123
- blockWidth={ blockWidth }
124
- clientId={ clientId }
125
- draggingClientId={ draggingClientId }
126
- isFullWidth={ isFullWidthToolbar }
127
- isStackedHorizontally={ isStackedHorizontally }
128
- onDelete={ onDeleteBlock }
129
- />
130
- ) }
131
- </View>
132
112
  </Pressable>
133
113
  );
134
114
  }
@@ -159,9 +139,11 @@ function BlockListBlock( {
159
139
  } ) {
160
140
  const {
161
141
  baseGlobalStyles,
142
+ blockCategory,
162
143
  blockType,
163
144
  draggingClientId,
164
145
  draggingEnabled,
146
+ hasInnerBlocks,
165
147
  isDescendantOfParentSelected,
166
148
  isDescendentBlockSelected,
167
149
  isParentSelected,
@@ -178,6 +160,7 @@ function BlockListBlock( {
178
160
  hasSelectedInnerBlock,
179
161
  } = select( blockEditorStore );
180
162
  const currentBlockType = getBlockType( name || 'core/missing' );
163
+ const currentBlockCategory = currentBlockType?.category;
181
164
  const blockOrder = getBlockIndex( clientId );
182
165
  const descendentBlockSelected = hasSelectedInnerBlock(
183
166
  clientId,
@@ -194,13 +177,15 @@ function BlockListBlock( {
194
177
  const selectedParents = clientId ? parents : [];
195
178
  const descendantOfParentSelected =
196
179
  selectedParents.includes( rootClientId );
197
- const hasInnerBlocks = getBlockCount( clientId ) > 0;
180
+ const blockHasInnerBlocks = getBlockCount( clientId ) > 0;
198
181
 
199
182
  // For blocks with inner blocks, we only enable the dragging in the nested
200
183
  // blocks if any of them are selected. This way we prevent the long-press
201
184
  // gesture from being disabled for elements within the block UI.
202
185
  const isDraggingEnabled =
203
- ! hasInnerBlocks || isSelected || ! descendentBlockSelected;
186
+ ! blockHasInnerBlocks ||
187
+ isSelected ||
188
+ ! descendentBlockSelected;
204
189
  // Dragging nested blocks is not supported yet. For this reason, the block to be dragged
205
190
  // will be the top in the hierarchy.
206
191
  const currentDraggingClientId =
@@ -211,9 +196,11 @@ function BlockListBlock( {
211
196
 
212
197
  return {
213
198
  baseGlobalStyles: globalStylesBaseStyles,
199
+ blockCategory: currentBlockCategory,
214
200
  blockType: currentBlockType,
215
201
  draggingClientId: currentDraggingClientId,
216
202
  draggingEnabled: isDraggingEnabled,
203
+ hasInnerBlocks: blockHasInnerBlocks,
217
204
  isDescendantOfParentSelected: descendantOfParentSelected,
218
205
  isDescendentBlockSelected: descendentBlockSelected,
219
206
  isParentSelected: parentSelected,
@@ -295,7 +282,6 @@ function BlockListBlock( {
295
282
  ),
296
283
  ] );
297
284
 
298
- const { align } = attributes;
299
285
  const isFocused = isSelected || isDescendentBlockSelected;
300
286
  const isTouchable =
301
287
  isSelected ||
@@ -312,20 +298,20 @@ function BlockListBlock( {
312
298
  return (
313
299
  <BlockWrapper
314
300
  accessibilityLabel={ accessibilityLabel }
315
- align={ align }
316
- blockWidth={ blockWidth }
301
+ blockCategory={ blockCategory }
317
302
  clientId={ clientId }
318
303
  draggingClientId={ draggingClientId }
319
304
  draggingEnabled={ draggingEnabled }
320
- isFocused={ isFocused }
305
+ hasInnerBlocks={ hasInnerBlocks }
321
306
  isDescendentBlockSelected={ isDescendentBlockSelected }
322
- isParentSelected={ isParentSelected }
307
+ isFocused={ isFocused }
308
+ isRootList={ ! rootClientId }
323
309
  isSelected={ isSelected }
324
310
  isStackedHorizontally={ isStackedHorizontally }
325
311
  isTouchable={ isTouchable }
326
312
  marginHorizontal={ marginHorizontal }
327
313
  marginVertical={ marginVertical }
328
- onDeleteBlock={ onDeleteBlock }
314
+ name={ name }
329
315
  onFocus={ onFocus }
330
316
  >
331
317
  { () =>
@@ -3,29 +3,11 @@
3
3
  }
4
4
 
5
5
  .solidBorderColor {
6
- border-color: $blue-wordpress;
6
+ border-color: $blue-40;
7
7
  }
8
8
 
9
9
  .solidBorderColorDark {
10
- border-color: $blue-30;
11
- }
12
-
13
- .dashedBorderColor {
14
- border-color: $gray;
15
- }
16
-
17
- .dashedBorderColorDark {
18
- border-color: $gray-70;
19
- }
20
-
21
- .borderFullWidth {
22
- left: 0;
23
- right: 0;
24
- }
25
-
26
- .containerBorderFullWidth {
27
- left: -$solid-border-space * 0.5;
28
- right: -$solid-border-space * 0.5;
10
+ border-color: $blue-50;
29
11
  }
30
12
 
31
13
  .dimmed {
@@ -51,32 +33,28 @@
51
33
  min-height: 50px;
52
34
  }
53
35
 
54
- .neutralToolbar {
55
- margin-left: -$block-edge-to-content;
56
- margin-right: -$block-edge-to-content;
57
- }
58
-
59
36
  .solidBorder {
60
37
  position: absolute;
61
- top: -$solid-border-space;
62
- bottom: 0;
63
- left: -$solid-border-space;
64
- right: -$solid-border-space;
65
- border-width: $block-selected-border-width;
66
- border-radius: 4px;
38
+ top: -6px;
39
+ bottom: -6px;
40
+ left: -6px;
41
+ right: -6px;
42
+ border-width: 2px;
43
+ border-radius: 2px;
67
44
  border-style: solid;
68
45
  z-index: 1;
69
46
  }
70
47
 
71
- .dashedBorder {
72
- position: absolute;
73
- top: -$dashed-border-space;
74
- bottom: -$dashed-border-space;
75
- left: -$dashed-border-space;
76
- right: -$dashed-border-space;
77
- border-width: $block-selected-border-width;
78
- border-radius: 2px;
79
- border-style: dashed;
48
+ .solidBorderCompact {
49
+ top: 0;
50
+ bottom: 0;
51
+ left: 0;
52
+ right: 0;
53
+ }
54
+
55
+ .solidBorderTextContent {
56
+ left: 0;
57
+ right: 0;
80
58
  }
81
59
 
82
60
  .fullWidthPadding {
@@ -66,12 +66,12 @@
66
66
  }
67
67
 
68
68
  .defaultBlock {
69
- margin: $block-edge-to-content;
69
+ margin: $block-edge-to-content * 0.5 $block-edge-to-content;
70
70
  }
71
71
 
72
72
  .defaultAppender {
73
- margin-top: $block-edge-to-content;
74
- margin-bottom: $block-edge-to-content;
73
+ margin-top: $grid-unit;
74
+ margin-bottom: $grid-unit;
75
75
  width: 100%;
76
76
  }
77
77
 
@@ -7,7 +7,7 @@ import { Platform } from 'react-native';
7
7
  * WordPress dependencies
8
8
  */
9
9
  import { __ } from '@wordpress/i18n';
10
- import { Picker, ToolbarButton } from '@wordpress/components';
10
+ import { Picker, ToolbarButton, ToolbarGroup } from '@wordpress/components';
11
11
  import { withInstanceId, compose } from '@wordpress/compose';
12
12
  import { withSelect, withDispatch } from '@wordpress/data';
13
13
  import { useCallback, useEffect, useRef, useState } from '@wordpress/element';
@@ -107,7 +107,7 @@ export const BlockMover = ( {
107
107
  }
108
108
 
109
109
  return (
110
- <>
110
+ <ToolbarGroup>
111
111
  <ToolbarButton
112
112
  title={ ! isFirst ? backwardButtonTitle : firstBlockTitle }
113
113
  isDisabled={ isFirst }
@@ -136,7 +136,7 @@ export const BlockMover = ( {
136
136
  leftAlign={ true }
137
137
  hideCancelButton={ Platform.OS !== 'ios' }
138
138
  />
139
- </>
139
+ </ToolbarGroup>
140
140
  );
141
141
  };
142
142
 
@@ -43,7 +43,19 @@ exports[`Block Mover Picker moving blocks moves blocks up and down 1`] = `
43
43
  `;
44
44
 
45
45
  exports[`Block Mover Picker should render without crashing and match snapshot 1`] = `
46
- [
46
+ <View
47
+ style={
48
+ [
49
+ {
50
+ "height": 44,
51
+ },
52
+ {
53
+ "borderLeftWidth": 0.5,
54
+ },
55
+ undefined,
56
+ ]
57
+ }
58
+ >
47
59
  <View>
48
60
  <View
49
61
  accessibilityHint="Double tap to move the block to the left"
@@ -99,7 +111,6 @@ exports[`Block Mover Picker should render without crashing and match snapshot 1`
99
111
  }
100
112
  >
101
113
  <Svg
102
- colorScheme="light"
103
114
  height={24}
104
115
  style={{}}
105
116
  viewBox="0 0 24 24"
@@ -111,7 +122,7 @@ exports[`Block Mover Picker should render without crashing and match snapshot 1`
111
122
  </View>
112
123
  </View>
113
124
  </View>
114
- </View>,
125
+ </View>
115
126
  <View>
116
127
  <View
117
128
  accessibilityHint="Double tap to move the block to the right"
@@ -167,7 +178,6 @@ exports[`Block Mover Picker should render without crashing and match snapshot 1`
167
178
  }
168
179
  >
169
180
  <Svg
170
- colorScheme="light"
171
181
  height={24}
172
182
  style={{}}
173
183
  viewBox="0 0 24 24"
@@ -179,6 +189,6 @@ exports[`Block Mover Picker should render without crashing and match snapshot 1`
179
189
  </View>
180
190
  </View>
181
191
  </View>
182
- </View>,
183
- ]
192
+ </View>
193
+ </View>
184
194
  `;
@@ -50,9 +50,6 @@ export function BlockRemovalWarningModal( { rules } ) {
50
50
  <Modal
51
51
  title={ __( 'Are you sure?' ) }
52
52
  onRequestClose={ clearBlockRemovalPrompt }
53
- style={ {
54
- maxWidth: '40rem',
55
- } }
56
53
  >
57
54
  { blockNamesForPrompt.length === 1 ? (
58
55
  <p>{ rules[ blockNamesForPrompt[ 0 ] ] }</p>
@@ -1,7 +1,11 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { createSlotFill, ToolbarButton } from '@wordpress/components';
4
+ import {
5
+ createSlotFill,
6
+ ToolbarButton,
7
+ ToolbarGroup,
8
+ } from '@wordpress/components';
5
9
  import { __ } from '@wordpress/i18n';
6
10
  import { withDispatch } from '@wordpress/data';
7
11
  import { cog } from '@wordpress/icons';
@@ -9,11 +13,13 @@ import { cog } from '@wordpress/icons';
9
13
  const { Fill, Slot } = createSlotFill( 'SettingsToolbarButton' );
10
14
 
11
15
  const SettingsButton = ( { openGeneralSidebar } ) => (
12
- <ToolbarButton
13
- title={ __( 'Open Settings' ) }
14
- icon={ cog }
15
- onClick={ openGeneralSidebar }
16
- />
16
+ <ToolbarGroup>
17
+ <ToolbarButton
18
+ title={ __( 'Open Settings' ) }
19
+ icon={ cog }
20
+ onClick={ openGeneralSidebar }
21
+ />
22
+ </ToolbarGroup>
17
23
  );
18
24
 
19
25
  const SettingsButtonFill = ( props ) => (
@@ -9,6 +9,7 @@ import { Platform, findNodeHandle } from 'react-native';
9
9
  import {
10
10
  getClipboard,
11
11
  setClipboard,
12
+ ToolbarGroup,
12
13
  ToolbarButton,
13
14
  Picker,
14
15
  } from '@wordpress/components';
@@ -99,9 +100,11 @@ const BlockActionsMenu = ( {
99
100
  } = getMoversSetup( isStackedHorizontally, moversOptions );
100
101
 
101
102
  // Check if selected block is Groupable and/or Ungroupable.
102
- const convertToGroupButtonProps = useConvertToGroupButtonProps( [
103
- selectedBlockClientId,
104
- ] );
103
+ const convertToGroupButtonProps = useConvertToGroupButtonProps(
104
+ // `selectedBlockClientId` can be undefined in some cases where this
105
+ // component gets re-rendered right after the block is removed.
106
+ selectedBlockClientId ? [ selectedBlockClientId ] : []
107
+ );
105
108
  const { isGroupable, isUngroupable } = convertToGroupButtonProps;
106
109
  const showConvertToGroupButton =
107
110
  ( isGroupable || isUngroupable ) && canRemove;
@@ -254,11 +257,13 @@ const BlockActionsMenu = ( {
254
257
  // End early if there are no options to show.
255
258
  if ( ! options.length ) {
256
259
  return (
257
- <ToolbarButton
258
- title={ __( 'Open Block Actions Menu' ) }
259
- icon={ moreHorizontalMobile }
260
- disabled={ true }
261
- />
260
+ <ToolbarGroup>
261
+ <ToolbarButton
262
+ title={ __( 'Open Block Actions Menu' ) }
263
+ icon={ moreHorizontalMobile }
264
+ disabled={ true }
265
+ />
266
+ </ToolbarGroup>
262
267
  );
263
268
  }
264
269
 
@@ -294,7 +299,7 @@ const BlockActionsMenu = ( {
294
299
  anchorNodeRef ? findNodeHandle( anchorNodeRef ) : undefined;
295
300
 
296
301
  return (
297
- <>
302
+ <ToolbarGroup>
298
303
  <ToolbarButton
299
304
  title={ __( 'Open Block Actions Menu' ) }
300
305
  onClick={ onPickerPresent }
@@ -324,7 +329,7 @@ const BlockActionsMenu = ( {
324
329
  selectedBlock={ getBlocksByClientId( selectedBlockClientId ) }
325
330
  selectedBlockClientId={ selectedBlockClientId }
326
331
  />
327
- </>
332
+ </ToolbarGroup>
328
333
  );
329
334
  };
330
335
 
@@ -35,9 +35,9 @@ import __unstableBlockNameContext from './block-name-context';
35
35
  import { unlock } from '../../lock-unlock';
36
36
 
37
37
  const BlockToolbar = ( { hideDragHandle } ) => {
38
+ const { getSelectedBlockClientId } = useSelect( blockEditorStore );
38
39
  const {
39
40
  blockClientIds,
40
- blockClientId,
41
41
  blockType,
42
42
  hasFixedToolbar,
43
43
  isDistractionFree,
@@ -61,7 +61,6 @@ const BlockToolbar = ( { hideDragHandle } ) => {
61
61
 
62
62
  return {
63
63
  blockClientIds: selectedBlockClientIds,
64
- blockClientId: selectedBlockClientId,
65
64
  blockType:
66
65
  selectedBlockClientId &&
67
66
  getBlockType( getBlockName( selectedBlockClientId ) ),
@@ -91,7 +90,7 @@ const BlockToolbar = ( { hideDragHandle } ) => {
91
90
  if ( isFocused && isDistractionFree ) {
92
91
  return;
93
92
  }
94
- toggleBlockHighlight( blockClientId, isFocused );
93
+ toggleBlockHighlight( getSelectedBlockClientId(), isFocused );
95
94
  },
96
95
  }
97
96
  );
@@ -1,23 +1,60 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { useSelect } from '@wordpress/data';
4
+ import { useSelect, useDispatch } from '@wordpress/data';
5
+ import { useCallback } from '@wordpress/element';
5
6
 
6
7
  /**
7
8
  * Internal dependencies
8
9
  */
10
+ import BlockActionsMenu from './block-toolbar-menu';
9
11
  import BlockControls from '../block-controls';
12
+ import BlockMover from '../block-mover';
10
13
  import UngroupButton from '../ungroup-button';
14
+ import { BlockSettingsButton } from '../block-settings';
11
15
  import { store as blockEditorStore } from '../../store';
12
16
 
13
- export default function BlockToolbar() {
14
- const { isSelected, isValidAndVisual } = useSelect( ( select ) => {
15
- const { getBlockMode, getSelectedBlockClientIds, isBlockValid } =
16
- select( blockEditorStore );
17
+ const REMOVE_EMPY_PARENT_BLOCKS = [
18
+ 'core/buttons',
19
+ 'core/columns',
20
+ 'core/social-links',
21
+ ];
22
+
23
+ export default function BlockToolbar( { anchorNodeRef } ) {
24
+ const {
25
+ rootClientId,
26
+ blockClientId,
27
+ isSelected,
28
+ isValidAndVisual,
29
+ isStackedHorizontally,
30
+ parentBlockName,
31
+ parentNumberOfInnerBlocks,
32
+ } = useSelect( ( select ) => {
33
+ const {
34
+ getBlockListSettings,
35
+ getBlockMode,
36
+ getBlockName,
37
+ getBlockCount,
38
+ getBlockRootClientId,
39
+ getSelectedBlockClientIds,
40
+ isBlockValid,
41
+ } = select( blockEditorStore );
17
42
  const selectedBlockClientIds = getSelectedBlockClientIds();
43
+ const selectedBlockClientId = selectedBlockClientIds[ 0 ];
44
+ const blockRootClientId = getBlockRootClientId( selectedBlockClientId );
45
+ const blockListSettings = getBlockListSettings( blockRootClientId );
46
+ const orientation = blockListSettings?.orientation;
47
+ const isBlockStackedHorizontally = orientation === 'horizontal';
48
+ const parentName = getBlockName( blockRootClientId );
49
+ const numberOfInnerBlocks = getBlockCount( blockRootClientId );
18
50
 
19
51
  return {
52
+ rootClientId: blockRootClientId,
53
+ blockClientId: selectedBlockClientId,
20
54
  isSelected: selectedBlockClientIds.length > 0,
55
+ isStackedHorizontally: isBlockStackedHorizontally,
56
+ parentBlockName: parentName,
57
+ parentNumberOfInnerBlocks: numberOfInnerBlocks,
21
58
  isValidAndVisual:
22
59
  selectedBlockClientIds.length === 1
23
60
  ? isBlockValid( selectedBlockClientIds[ 0 ] ) &&
@@ -26,6 +63,28 @@ export default function BlockToolbar() {
26
63
  };
27
64
  }, [] );
28
65
 
66
+ const { removeBlock } = useDispatch( blockEditorStore );
67
+ const onRemove = useCallback( () => {
68
+ // Temp: remove parent block for specific cases where they don't
69
+ // have inner blocks, ideally we should match the behavior as in
70
+ // the Web editor and show a placeholder instead of removing the parent.
71
+ if (
72
+ REMOVE_EMPY_PARENT_BLOCKS.includes( parentBlockName ) &&
73
+ parentNumberOfInnerBlocks === 1
74
+ ) {
75
+ removeBlock( rootClientId );
76
+ return;
77
+ }
78
+
79
+ removeBlock( blockClientId );
80
+ }, [
81
+ blockClientId,
82
+ parentBlockName,
83
+ parentNumberOfInnerBlocks,
84
+ removeBlock,
85
+ rootClientId,
86
+ ] );
87
+
29
88
  if ( ! isSelected ) {
30
89
  return null;
31
90
  }
@@ -34,11 +93,32 @@ export default function BlockToolbar() {
34
93
  <>
35
94
  { isValidAndVisual && (
36
95
  <>
37
- <UngroupButton />
96
+ <BlockSettingsButton.Slot>
97
+ { /* Render only one settings icon even if we have more than one fill - need for hooks with controls. */ }
98
+ { ( fills = [ null ] ) => {
99
+ if ( ! fills?.length > 0 ) {
100
+ return null;
101
+ }
102
+ return fills[ 0 ];
103
+ } }
104
+ </BlockSettingsButton.Slot>
38
105
  <BlockControls.Slot group="block" />
39
106
  <BlockControls.Slot />
40
107
  <BlockControls.Slot group="inline" />
41
108
  <BlockControls.Slot group="other" />
109
+ <UngroupButton />
110
+
111
+ <BlockMover
112
+ clientIds={ [ blockClientId ] }
113
+ isStackedHorizontally={ isStackedHorizontally }
114
+ />
115
+
116
+ <BlockActionsMenu
117
+ clientId={ blockClientId }
118
+ isStackedHorizontally={ isStackedHorizontally }
119
+ onDelete={ onRemove }
120
+ anchorNodeRef={ anchorNodeRef }
121
+ />
42
122
  </>
43
123
  ) }
44
124
  </>