@wordpress/block-editor 12.15.0 → 12.16.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 (500) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +9 -4
  3. package/build/components/block-canvas/index.js +22 -6
  4. package/build/components/block-canvas/index.js.map +1 -1
  5. package/build/components/block-card/index.js +1 -1
  6. package/build/components/block-card/index.js.map +1 -1
  7. package/build/components/block-controls/hook.js +3 -23
  8. package/build/components/block-controls/hook.js.map +1 -1
  9. package/build/components/block-edit/context.js +5 -1
  10. package/build/components/block-edit/context.js.map +1 -1
  11. package/build/components/block-edit/index.js +18 -9
  12. package/build/components/block-edit/index.js.map +1 -1
  13. package/build/components/block-info-slot-fill/index.js +3 -4
  14. package/build/components/block-info-slot-fill/index.js.map +1 -1
  15. package/build/components/block-list/block.js +28 -9
  16. package/build/components/block-list/block.js.map +1 -1
  17. package/build/components/block-list/block.native.js +14 -5
  18. package/build/components/block-list/block.native.js.map +1 -1
  19. package/build/components/block-list/use-block-props/index.js +61 -18
  20. package/build/components/block-list/use-block-props/index.js.map +1 -1
  21. package/build/components/block-list/use-block-props/use-focus-first-element.js +4 -29
  22. package/build/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  23. package/build/components/block-list/use-block-props/use-is-hovered.js +4 -14
  24. package/build/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  25. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js +4 -2
  26. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  27. package/build/components/block-patterns-list/index.js +1 -1
  28. package/build/components/block-patterns-list/index.js.map +1 -1
  29. package/build/components/block-removal-warning-modal/index.js +2 -9
  30. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  31. package/build/components/block-rename/modal.js +3 -0
  32. package/build/components/block-rename/modal.js.map +1 -1
  33. package/build/components/block-settings/container.native.js +6 -4
  34. package/build/components/block-settings/container.native.js.map +1 -1
  35. package/build/components/block-styles/index.js +1 -1
  36. package/build/components/block-styles/index.js.map +1 -1
  37. package/build/components/block-styles/index.native.js +3 -2
  38. package/build/components/block-styles/index.native.js.map +1 -1
  39. package/build/components/block-toolbar/index.js +89 -27
  40. package/build/components/block-toolbar/index.js.map +1 -1
  41. package/build/components/block-tools/block-toolbar-breadcrumb.js +49 -0
  42. package/build/components/block-tools/block-toolbar-breadcrumb.js.map +1 -0
  43. package/build/components/block-tools/block-toolbar-popover.js +86 -0
  44. package/build/components/block-tools/block-toolbar-popover.js.map +1 -0
  45. package/build/components/block-tools/index.js +27 -24
  46. package/build/components/block-tools/index.js.map +1 -1
  47. package/build/components/block-types-list/index.native.js +4 -3
  48. package/build/components/block-types-list/index.native.js.map +1 -1
  49. package/build/components/block-variation-picker/index.native.js +2 -1
  50. package/build/components/block-variation-picker/index.native.js.map +1 -1
  51. package/build/components/colors-gradients/control.js +28 -17
  52. package/build/components/colors-gradients/control.js.map +1 -1
  53. package/build/components/duotone-control/index.js +1 -4
  54. package/build/components/duotone-control/index.js.map +1 -1
  55. package/build/components/global-styles/color-panel.js +22 -20
  56. package/build/components/global-styles/color-panel.js.map +1 -1
  57. package/build/components/global-styles/filters-panel.js +9 -3
  58. package/build/components/global-styles/filters-panel.js.map +1 -1
  59. package/build/components/global-styles/typography-panel.js +20 -31
  60. package/build/components/global-styles/typography-panel.js.map +1 -1
  61. package/build/components/image-link-destinations/index.native.js +118 -0
  62. package/build/components/image-link-destinations/index.native.js.map +1 -0
  63. package/build/components/index.native.js +8 -0
  64. package/build/components/index.native.js.map +1 -1
  65. package/build/components/inserter/media-tab/media-panel.js +2 -2
  66. package/build/components/inserter/media-tab/media-panel.js.map +1 -1
  67. package/build/components/inserter/menu.js +14 -7
  68. package/build/components/inserter/menu.js.map +1 -1
  69. package/build/components/inserter/preview-panel.js +2 -2
  70. package/build/components/inserter/preview-panel.js.map +1 -1
  71. package/build/components/inserter-button/index.native.js +98 -0
  72. package/build/components/inserter-button/index.native.js.map +1 -0
  73. package/build/components/inserter-button/sparkles.js +23 -0
  74. package/build/components/inserter-button/sparkles.js.map +1 -0
  75. package/build/components/inserter-draggable-blocks/index.js +8 -4
  76. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  77. package/build/components/inspector-controls/fill.js +3 -3
  78. package/build/components/inspector-controls/fill.js.map +1 -1
  79. package/build/components/inspector-controls/fill.native.js +3 -3
  80. package/build/components/inspector-controls/fill.native.js.map +1 -1
  81. package/build/components/navigable-toolbar/index.js +2 -2
  82. package/build/components/navigable-toolbar/index.js.map +1 -1
  83. package/build/components/preview-options/index.js +6 -62
  84. package/build/components/preview-options/index.js.map +1 -1
  85. package/build/components/rich-text/content.js +26 -23
  86. package/build/components/rich-text/content.js.map +1 -1
  87. package/build/components/rich-text/get-rich-text-values.js +2 -1
  88. package/build/components/rich-text/get-rich-text-values.js.map +1 -1
  89. package/build/components/rich-text/index.js +2 -30
  90. package/build/components/rich-text/index.js.map +1 -1
  91. package/build/components/rich-text/index.native.js +9 -16
  92. package/build/components/rich-text/index.native.js.map +1 -1
  93. package/build/components/rich-text/native/get-format-colors.native.js +22 -24
  94. package/build/components/rich-text/native/get-format-colors.native.js.map +1 -1
  95. package/build/components/rich-text/native/index.native.js +7 -34
  96. package/build/components/rich-text/native/index.native.js.map +1 -1
  97. package/build/components/rich-text/use-input-rules.js +5 -1
  98. package/build/components/rich-text/use-input-rules.js.map +1 -1
  99. package/build/components/rich-text/with-deprecations.js +50 -0
  100. package/build/components/rich-text/with-deprecations.js.map +1 -0
  101. package/build/components/use-block-drop-zone/index.js +70 -8
  102. package/build/components/use-block-drop-zone/index.js.map +1 -1
  103. package/build/components/use-on-block-drop/index.js +1 -1
  104. package/build/components/use-on-block-drop/index.js.map +1 -1
  105. package/build/components/use-resize-canvas/index.js +4 -1
  106. package/build/components/use-resize-canvas/index.js.map +1 -1
  107. package/build/components/use-settings/index.js +14 -0
  108. package/build/components/use-settings/index.js.map +1 -1
  109. package/build/hooks/align.js +20 -68
  110. package/build/hooks/align.js.map +1 -1
  111. package/build/hooks/align.native.js +11 -1
  112. package/build/hooks/align.native.js.map +1 -1
  113. package/build/hooks/anchor.js +13 -29
  114. package/build/hooks/anchor.js.map +1 -1
  115. package/build/hooks/background.js +28 -31
  116. package/build/hooks/background.js.map +1 -1
  117. package/build/hooks/block-hooks.js +24 -32
  118. package/build/hooks/block-hooks.js.map +1 -1
  119. package/build/hooks/block-renaming.js +18 -22
  120. package/build/hooks/block-renaming.js.map +1 -1
  121. package/build/hooks/border.js +58 -80
  122. package/build/hooks/border.js.map +1 -1
  123. package/build/hooks/color.js +76 -89
  124. package/build/hooks/color.js.map +1 -1
  125. package/build/hooks/content-lock-ui.js +29 -29
  126. package/build/hooks/content-lock-ui.js.map +1 -1
  127. package/build/hooks/custom-class-name.js +12 -29
  128. package/build/hooks/custom-class-name.js.map +1 -1
  129. package/build/hooks/custom-fields.js +24 -38
  130. package/build/hooks/custom-fields.js.map +1 -1
  131. package/build/hooks/dimensions.js +21 -17
  132. package/build/hooks/dimensions.js.map +1 -1
  133. package/build/hooks/duotone.js +31 -61
  134. package/build/hooks/duotone.js.map +1 -1
  135. package/build/hooks/font-family.js +16 -25
  136. package/build/hooks/font-family.js.map +1 -1
  137. package/build/hooks/font-size.js +51 -119
  138. package/build/hooks/font-size.js.map +1 -1
  139. package/build/hooks/index.js +25 -14
  140. package/build/hooks/index.js.map +1 -1
  141. package/build/hooks/index.native.js +10 -3
  142. package/build/hooks/index.native.js.map +1 -1
  143. package/build/hooks/layout-child.js +68 -0
  144. package/build/hooks/layout-child.js.map +1 -0
  145. package/build/hooks/layout.js +16 -101
  146. package/build/hooks/layout.js.map +1 -1
  147. package/build/hooks/padding.js +2 -2
  148. package/build/hooks/padding.js.map +1 -1
  149. package/build/hooks/position.js +40 -62
  150. package/build/hooks/position.js.map +1 -1
  151. package/build/hooks/style.js +51 -88
  152. package/build/hooks/style.js.map +1 -1
  153. package/build/hooks/typography.js +34 -14
  154. package/build/hooks/typography.js.map +1 -1
  155. package/build/hooks/utils.js +154 -7
  156. package/build/hooks/utils.js.map +1 -1
  157. package/build/private-apis.js +0 -2
  158. package/build/private-apis.js.map +1 -1
  159. package/build/store/private-actions.js +8 -0
  160. package/build/store/private-actions.js.map +1 -1
  161. package/build/store/private-selectors.js +34 -0
  162. package/build/store/private-selectors.js.map +1 -1
  163. package/build/store/reducer.js +8 -0
  164. package/build/store/reducer.js.map +1 -1
  165. package/build/store/selectors.js +10 -60
  166. package/build/store/selectors.js.map +1 -1
  167. package/build/store/utils.js +66 -0
  168. package/build/store/utils.js.map +1 -0
  169. package/build/utils/object.js +21 -61
  170. package/build/utils/object.js.map +1 -1
  171. package/build/utils/selection.js +9 -1
  172. package/build/utils/selection.js.map +1 -1
  173. package/build-module/components/block-canvas/index.js +23 -7
  174. package/build-module/components/block-canvas/index.js.map +1 -1
  175. package/build-module/components/block-card/index.js +1 -1
  176. package/build-module/components/block-card/index.js.map +1 -1
  177. package/build-module/components/block-controls/hook.js +4 -24
  178. package/build-module/components/block-controls/hook.js.map +1 -1
  179. package/build-module/components/block-edit/context.js +2 -0
  180. package/build-module/components/block-edit/context.js.map +1 -1
  181. package/build-module/components/block-edit/index.js +19 -10
  182. package/build-module/components/block-edit/index.js.map +1 -1
  183. package/build-module/components/block-info-slot-fill/index.js +3 -3
  184. package/build-module/components/block-info-slot-fill/index.js.map +1 -1
  185. package/build-module/components/block-list/block.js +29 -10
  186. package/build-module/components/block-list/block.js.map +1 -1
  187. package/build-module/components/block-list/block.native.js +14 -5
  188. package/build-module/components/block-list/block.native.js.map +1 -1
  189. package/build-module/components/block-list/use-block-props/index.js +62 -19
  190. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  191. package/build-module/components/block-list/use-block-props/use-focus-first-element.js +4 -29
  192. package/build-module/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  193. package/build-module/components/block-list/use-block-props/use-is-hovered.js +4 -14
  194. package/build-module/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  195. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js +4 -2
  196. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  197. package/build-module/components/block-patterns-list/index.js +1 -1
  198. package/build-module/components/block-patterns-list/index.js.map +1 -1
  199. package/build-module/components/block-removal-warning-modal/index.js +3 -10
  200. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  201. package/build-module/components/block-rename/modal.js +3 -0
  202. package/build-module/components/block-rename/modal.js.map +1 -1
  203. package/build-module/components/block-settings/container.native.js +4 -2
  204. package/build-module/components/block-settings/container.native.js.map +1 -1
  205. package/build-module/components/block-styles/index.js +1 -1
  206. package/build-module/components/block-styles/index.js.map +1 -1
  207. package/build-module/components/block-styles/index.native.js +3 -2
  208. package/build-module/components/block-styles/index.native.js.map +1 -1
  209. package/build-module/components/block-toolbar/index.js +88 -25
  210. package/build-module/components/block-toolbar/index.js.map +1 -1
  211. package/build-module/components/block-tools/block-toolbar-breadcrumb.js +41 -0
  212. package/build-module/components/block-tools/block-toolbar-breadcrumb.js.map +1 -0
  213. package/build-module/components/block-tools/block-toolbar-popover.js +76 -0
  214. package/build-module/components/block-tools/block-toolbar-popover.js.map +1 -0
  215. package/build-module/components/block-tools/index.js +27 -24
  216. package/build-module/components/block-tools/index.js.map +1 -1
  217. package/build-module/components/block-types-list/index.native.js +2 -1
  218. package/build-module/components/block-types-list/index.native.js.map +1 -1
  219. package/build-module/components/block-variation-picker/index.native.js +2 -1
  220. package/build-module/components/block-variation-picker/index.native.js.map +1 -1
  221. package/build-module/components/colors-gradients/control.js +29 -18
  222. package/build-module/components/colors-gradients/control.js.map +1 -1
  223. package/build-module/components/duotone-control/index.js +1 -4
  224. package/build-module/components/duotone-control/index.js.map +1 -1
  225. package/build-module/components/global-styles/color-panel.js +23 -21
  226. package/build-module/components/global-styles/color-panel.js.map +1 -1
  227. package/build-module/components/global-styles/filters-panel.js +10 -4
  228. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  229. package/build-module/components/global-styles/typography-panel.js +20 -31
  230. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  231. package/build-module/components/image-link-destinations/index.native.js +109 -0
  232. package/build-module/components/image-link-destinations/index.native.js.map +1 -0
  233. package/build-module/components/index.native.js +1 -0
  234. package/build-module/components/index.native.js.map +1 -1
  235. package/build-module/components/inserter/media-tab/media-panel.js +1 -1
  236. package/build-module/components/inserter/media-tab/media-panel.js.map +1 -1
  237. package/build-module/components/inserter/menu.js +14 -7
  238. package/build-module/components/inserter/menu.js.map +1 -1
  239. package/build-module/components/inserter/preview-panel.js +2 -2
  240. package/build-module/components/inserter/preview-panel.js.map +1 -1
  241. package/build-module/components/inserter-button/index.native.js +89 -0
  242. package/build-module/components/inserter-button/index.native.js.map +1 -0
  243. package/build-module/components/inserter-button/sparkles.js +15 -0
  244. package/build-module/components/inserter-button/sparkles.js.map +1 -0
  245. package/build-module/components/inserter-draggable-blocks/index.js +9 -5
  246. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  247. package/build-module/components/inspector-controls/fill.js +3 -3
  248. package/build-module/components/inspector-controls/fill.js.map +1 -1
  249. package/build-module/components/inspector-controls/fill.native.js +3 -3
  250. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  251. package/build-module/components/navigable-toolbar/index.js +2 -2
  252. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  253. package/build-module/components/preview-options/index.js +6 -62
  254. package/build-module/components/preview-options/index.js.map +1 -1
  255. package/build-module/components/rich-text/content.js +25 -21
  256. package/build-module/components/rich-text/content.js.map +1 -1
  257. package/build-module/components/rich-text/get-rich-text-values.js +2 -1
  258. package/build-module/components/rich-text/get-rich-text-values.js.map +1 -1
  259. package/build-module/components/rich-text/index.js +4 -32
  260. package/build-module/components/rich-text/index.js.map +1 -1
  261. package/build-module/components/rich-text/index.native.js +10 -18
  262. package/build-module/components/rich-text/index.native.js.map +1 -1
  263. package/build-module/components/rich-text/native/get-format-colors.native.js +22 -24
  264. package/build-module/components/rich-text/native/get-format-colors.native.js.map +1 -1
  265. package/build-module/components/rich-text/native/index.native.js +7 -34
  266. package/build-module/components/rich-text/native/index.native.js.map +1 -1
  267. package/build-module/components/rich-text/use-input-rules.js +5 -1
  268. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  269. package/build-module/components/rich-text/with-deprecations.js +42 -0
  270. package/build-module/components/rich-text/with-deprecations.js.map +1 -0
  271. package/build-module/components/use-block-drop-zone/index.js +69 -8
  272. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  273. package/build-module/components/use-on-block-drop/index.js +1 -1
  274. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  275. package/build-module/components/use-resize-canvas/index.js +4 -1
  276. package/build-module/components/use-resize-canvas/index.js.map +1 -1
  277. package/build-module/components/use-settings/index.js +13 -1
  278. package/build-module/components/use-settings/index.js.map +1 -1
  279. package/build-module/hooks/align.js +19 -66
  280. package/build-module/hooks/align.js.map +1 -1
  281. package/build-module/hooks/align.native.js +1 -0
  282. package/build-module/hooks/align.native.js.map +1 -1
  283. package/build-module/hooks/anchor.js +11 -26
  284. package/build-module/hooks/anchor.js.map +1 -1
  285. package/build-module/hooks/background.js +26 -28
  286. package/build-module/hooks/background.js.map +1 -1
  287. package/build-module/hooks/block-hooks.js +22 -30
  288. package/build-module/hooks/block-hooks.js.map +1 -1
  289. package/build-module/hooks/block-renaming.js +17 -21
  290. package/build-module/hooks/block-renaming.js.map +1 -1
  291. package/build-module/hooks/border.js +57 -78
  292. package/build-module/hooks/border.js.map +1 -1
  293. package/build-module/hooks/color.js +74 -86
  294. package/build-module/hooks/color.js.map +1 -1
  295. package/build-module/hooks/content-lock-ui.js +27 -27
  296. package/build-module/hooks/content-lock-ui.js.map +1 -1
  297. package/build-module/hooks/custom-class-name.js +11 -27
  298. package/build-module/hooks/custom-class-name.js.map +1 -1
  299. package/build-module/hooks/custom-fields.js +20 -39
  300. package/build-module/hooks/custom-fields.js.map +1 -1
  301. package/build-module/hooks/dimensions.js +21 -16
  302. package/build-module/hooks/dimensions.js.map +1 -1
  303. package/build-module/hooks/duotone.js +30 -61
  304. package/build-module/hooks/duotone.js.map +1 -1
  305. package/build-module/hooks/font-family.js +14 -23
  306. package/build-module/hooks/font-family.js.map +1 -1
  307. package/build-module/hooks/font-size.js +49 -119
  308. package/build-module/hooks/font-size.js.map +1 -1
  309. package/build-module/hooks/index.js +18 -14
  310. package/build-module/hooks/index.js.map +1 -1
  311. package/build-module/hooks/index.native.js +5 -3
  312. package/build-module/hooks/index.native.js.map +1 -1
  313. package/build-module/hooks/layout-child.js +60 -0
  314. package/build-module/hooks/layout-child.js.map +1 -0
  315. package/build-module/hooks/layout.js +13 -98
  316. package/build-module/hooks/layout.js.map +1 -1
  317. package/build-module/hooks/padding.js +2 -2
  318. package/build-module/hooks/padding.js.map +1 -1
  319. package/build-module/hooks/position.js +38 -59
  320. package/build-module/hooks/position.js.map +1 -1
  321. package/build-module/hooks/style.js +51 -84
  322. package/build-module/hooks/style.js.map +1 -1
  323. package/build-module/hooks/typography.js +33 -12
  324. package/build-module/hooks/typography.js.map +1 -1
  325. package/build-module/hooks/utils.js +149 -6
  326. package/build-module/hooks/utils.js.map +1 -1
  327. package/build-module/private-apis.js +0 -2
  328. package/build-module/private-apis.js.map +1 -1
  329. package/build-module/store/private-actions.js +7 -0
  330. package/build-module/store/private-actions.js.map +1 -1
  331. package/build-module/store/private-selectors.js +33 -1
  332. package/build-module/store/private-selectors.js.map +1 -1
  333. package/build-module/store/reducer.js +8 -0
  334. package/build-module/store/reducer.js.map +1 -1
  335. package/build-module/store/selectors.js +3 -53
  336. package/build-module/store/selectors.js.map +1 -1
  337. package/build-module/store/utils.js +56 -0
  338. package/build-module/store/utils.js.map +1 -0
  339. package/build-module/utils/object.js +21 -60
  340. package/build-module/utils/object.js.map +1 -1
  341. package/build-module/utils/selection.js +9 -1
  342. package/build-module/utils/selection.js.map +1 -1
  343. package/build-style/style-rtl.css +113 -293
  344. package/build-style/style.css +113 -293
  345. package/package.json +31 -31
  346. package/src/components/block-canvas/index.js +31 -17
  347. package/src/components/block-caption/README.md +2 -2
  348. package/src/components/block-card/index.js +5 -3
  349. package/src/components/block-card/style.scss +7 -3
  350. package/src/components/block-controls/hook.js +8 -30
  351. package/src/components/block-controls/test/index.js +3 -3
  352. package/src/components/block-edit/context.js +3 -0
  353. package/src/components/block-edit/index.js +36 -10
  354. package/src/components/block-info-slot-fill/index.js +6 -3
  355. package/src/components/block-inspector/style.scss +0 -4
  356. package/src/components/block-list/block.js +39 -5
  357. package/src/components/block-list/block.native.js +18 -4
  358. package/src/components/block-list/use-block-props/index.js +74 -21
  359. package/src/components/block-list/use-block-props/use-focus-first-element.js +1 -34
  360. package/src/components/block-list/use-block-props/use-is-hovered.js +2 -13
  361. package/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +1 -5
  362. package/src/components/block-patterns-list/index.js +1 -1
  363. package/src/components/block-removal-warning-modal/index.js +7 -14
  364. package/src/components/block-rename/modal.js +7 -1
  365. package/src/components/block-settings/container.native.js +3 -5
  366. package/src/components/block-styles/index.js +1 -1
  367. package/src/components/block-styles/index.native.js +4 -2
  368. package/src/components/block-styles/style.scss +0 -11
  369. package/src/components/block-switcher/test/__snapshots__/index.js.snap +3 -1
  370. package/src/components/block-toolbar/index.js +180 -95
  371. package/src/components/block-toolbar/style.scss +50 -66
  372. package/src/components/block-tools/block-toolbar-breadcrumb.js +46 -0
  373. package/src/components/block-tools/block-toolbar-popover.js +90 -0
  374. package/src/components/block-tools/index.js +42 -29
  375. package/src/components/block-tools/style.scss +60 -172
  376. package/src/components/block-types-list/index.native.js +2 -1
  377. package/src/components/block-variation-picker/index.native.js +1 -1
  378. package/src/components/colors-gradients/control.js +49 -30
  379. package/src/components/colors-gradients/style.scss +0 -7
  380. package/src/components/duotone-control/index.js +2 -5
  381. package/src/components/duotone-control/style.scss +1 -6
  382. package/src/components/global-styles/color-panel.js +34 -25
  383. package/src/components/global-styles/filters-panel.js +8 -4
  384. package/src/components/global-styles/typography-panel.js +23 -43
  385. package/src/components/image-link-destinations/index.native.js +152 -0
  386. package/src/components/image-link-destinations/style.native.scss +16 -0
  387. package/src/components/index.native.js +1 -0
  388. package/src/components/inner-blocks/README.md +13 -2
  389. package/src/components/inserter/media-tab/media-panel.js +1 -1
  390. package/src/components/inserter/menu.js +16 -8
  391. package/src/components/inserter/preview-panel.js +2 -2
  392. package/src/components/inserter/style.scss +15 -17
  393. package/src/components/inserter-button/README.md +62 -0
  394. package/src/components/inserter-button/index.native.js +116 -0
  395. package/src/components/inserter-button/sparkles.js +15 -0
  396. package/src/components/inserter-button/style.native.scss +72 -0
  397. package/src/components/inserter-draggable-blocks/index.js +18 -5
  398. package/src/components/inspector-controls/fill.js +6 -3
  399. package/src/components/inspector-controls/fill.native.js +6 -3
  400. package/src/components/link-control/style.scss +1 -1
  401. package/src/components/link-control/test/index.js +1 -1
  402. package/src/components/navigable-toolbar/README.md +2 -0
  403. package/src/components/navigable-toolbar/index.js +2 -2
  404. package/src/components/preview-options/index.js +6 -86
  405. package/src/components/rich-text/content.js +27 -20
  406. package/src/components/rich-text/get-rich-text-values.js +6 -1
  407. package/src/components/rich-text/index.js +5 -46
  408. package/src/components/rich-text/index.native.js +8 -25
  409. package/src/components/rich-text/native/get-format-colors.native.js +33 -40
  410. package/src/components/rich-text/native/index.native.js +7 -48
  411. package/src/components/rich-text/use-input-rules.js +6 -1
  412. package/src/components/rich-text/with-deprecations.js +51 -0
  413. package/src/components/use-block-drop-zone/index.js +114 -14
  414. package/src/components/use-on-block-drop/index.js +2 -1
  415. package/src/components/use-resize-canvas/README.md +3 -3
  416. package/src/components/use-resize-canvas/index.js +4 -1
  417. package/src/components/use-settings/index.js +15 -1
  418. package/src/hooks/align.js +15 -76
  419. package/src/hooks/align.native.js +1 -0
  420. package/src/hooks/anchor.js +13 -33
  421. package/src/hooks/background.js +28 -23
  422. package/src/hooks/block-hooks.js +22 -51
  423. package/src/hooks/block-renaming.js +23 -37
  424. package/src/hooks/border.js +67 -118
  425. package/src/hooks/color.js +100 -132
  426. package/src/hooks/content-lock-ui.js +110 -122
  427. package/src/hooks/custom-class-name.js +8 -40
  428. package/src/hooks/custom-fields.js +20 -47
  429. package/src/hooks/dimensions.js +20 -16
  430. package/src/hooks/duotone.js +70 -127
  431. package/src/hooks/font-family.js +10 -29
  432. package/src/hooks/font-size.js +66 -162
  433. package/src/hooks/index.js +42 -14
  434. package/src/hooks/index.native.js +6 -3
  435. package/src/hooks/layout-child.js +53 -0
  436. package/src/hooks/layout.js +13 -102
  437. package/src/hooks/padding.js +2 -2
  438. package/src/hooks/position.js +50 -90
  439. package/src/hooks/style.js +117 -187
  440. package/src/hooks/test/align.js +1 -178
  441. package/src/hooks/typography.js +20 -16
  442. package/src/hooks/utils.js +187 -6
  443. package/src/private-apis.js +0 -2
  444. package/src/store/private-actions.js +8 -0
  445. package/src/store/private-selectors.js +45 -0
  446. package/src/store/reducer.js +8 -0
  447. package/src/store/selectors.js +5 -69
  448. package/src/store/utils.js +74 -0
  449. package/src/style.scss +0 -2
  450. package/src/utils/object.js +18 -69
  451. package/src/utils/selection.js +9 -2
  452. package/build/components/block-list/use-block-props/use-block-class-names.js +0 -67
  453. package/build/components/block-list/use-block-props/use-block-class-names.js.map +0 -1
  454. package/build/components/block-list/use-block-props/use-block-custom-class-name.js +0 -46
  455. package/build/components/block-list/use-block-props/use-block-custom-class-name.js.map +0 -1
  456. package/build/components/block-list/use-block-props/use-block-default-class-name.js +0 -37
  457. package/build/components/block-list/use-block-props/use-block-default-class-name.js.map +0 -1
  458. package/build/components/block-tools/back-compat.js +0 -45
  459. package/build/components/block-tools/back-compat.js.map +0 -1
  460. package/build/components/block-tools/block-contextual-toolbar.js +0 -91
  461. package/build/components/block-tools/block-contextual-toolbar.js.map +0 -1
  462. package/build/components/block-tools/selected-block-tools.js +0 -113
  463. package/build/components/block-tools/selected-block-tools.js.map +0 -1
  464. package/build/components/inserter/hooks/use-debounced-input.js +0 -22
  465. package/build/components/inserter/hooks/use-debounced-input.js.map +0 -1
  466. package/build/components/use-display-block-controls/index.js +0 -39
  467. package/build/components/use-display-block-controls/index.js.map +0 -1
  468. package/build/components/use-display-block-controls/index.native.js +0 -39
  469. package/build/components/use-display-block-controls/index.native.js.map +0 -1
  470. package/build-module/components/block-list/use-block-props/use-block-class-names.js +0 -60
  471. package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +0 -1
  472. package/build-module/components/block-list/use-block-props/use-block-custom-class-name.js +0 -40
  473. package/build-module/components/block-list/use-block-props/use-block-custom-class-name.js.map +0 -1
  474. package/build-module/components/block-list/use-block-props/use-block-default-class-name.js +0 -31
  475. package/build-module/components/block-list/use-block-props/use-block-default-class-name.js.map +0 -1
  476. package/build-module/components/block-tools/back-compat.js +0 -35
  477. package/build-module/components/block-tools/back-compat.js.map +0 -1
  478. package/build-module/components/block-tools/block-contextual-toolbar.js +0 -83
  479. package/build-module/components/block-tools/block-contextual-toolbar.js.map +0 -1
  480. package/build-module/components/block-tools/selected-block-tools.js +0 -105
  481. package/build-module/components/block-tools/selected-block-tools.js.map +0 -1
  482. package/build-module/components/inserter/hooks/use-debounced-input.js +0 -15
  483. package/build-module/components/inserter/hooks/use-debounced-input.js.map +0 -1
  484. package/build-module/components/use-display-block-controls/index.js +0 -32
  485. package/build-module/components/use-display-block-controls/index.js.map +0 -1
  486. package/build-module/components/use-display-block-controls/index.native.js +0 -32
  487. package/build-module/components/use-display-block-controls/index.native.js.map +0 -1
  488. package/src/components/block-list/use-block-props/use-block-class-names.js +0 -66
  489. package/src/components/block-list/use-block-props/use-block-custom-class-name.js +0 -44
  490. package/src/components/block-list/use-block-props/use-block-default-class-name.js +0 -35
  491. package/src/components/block-parent-selector/style.scss +0 -11
  492. package/src/components/block-tools/back-compat.js +0 -35
  493. package/src/components/block-tools/block-contextual-toolbar.js +0 -100
  494. package/src/components/block-tools/selected-block-tools.js +0 -127
  495. package/src/components/inserter/hooks/use-debounced-input.js +0 -18
  496. package/src/components/preview-options/README.md +0 -94
  497. package/src/components/preview-options/style.scss +0 -64
  498. package/src/components/use-display-block-controls/index.js +0 -36
  499. package/src/components/use-display-block-controls/index.native.js +0 -37
  500. package/src/hooks/test/color.js +0 -112
@@ -18,38 +18,6 @@ import { store as blockEditorStore } from '../../../store';
18
18
 
19
19
  /** @typedef {import('@wordpress/element').RefObject} RefObject */
20
20
 
21
- /**
22
- * Returns the initial position if the block needs to be focussed, `undefined`
23
- * otherwise. The initial position is either 0 (start) or -1 (end).
24
- *
25
- * @param {string} clientId Block client ID.
26
- *
27
- * @return {number} The initial position, either 0 (start) or -1 (end).
28
- */
29
- function useInitialPosition( clientId ) {
30
- return useSelect(
31
- ( select ) => {
32
- const {
33
- getSelectedBlocksInitialCaretPosition,
34
- __unstableGetEditorMode,
35
- isBlockSelected,
36
- } = select( blockEditorStore );
37
-
38
- if ( ! isBlockSelected( clientId ) ) {
39
- return;
40
- }
41
-
42
- if ( __unstableGetEditorMode() !== 'edit' ) {
43
- return;
44
- }
45
-
46
- // If there's no initial position, return 0 to focus the start.
47
- return getSelectedBlocksInitialCaretPosition();
48
- },
49
- [ clientId ]
50
- );
51
- }
52
-
53
21
  /**
54
22
  * Transitions focus to the block or inner tabbable when the block becomes
55
23
  * selected and an initial position is set.
@@ -58,9 +26,8 @@ function useInitialPosition( clientId ) {
58
26
  *
59
27
  * @return {RefObject} React ref with the block element.
60
28
  */
61
- export function useFocusFirstElement( clientId ) {
29
+ export function useFocusFirstElement( { clientId, initialPosition } ) {
62
30
  const ref = useRef();
63
- const initialPosition = useInitialPosition( clientId );
64
31
  const { isBlockSelected, isMultiSelecting } = useSelect( blockEditorStore );
65
32
 
66
33
  useEffect( () => {
@@ -1,14 +1,8 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { useSelect } from '@wordpress/data';
5
4
  import { useRefEffect } from '@wordpress/compose';
6
5
 
7
- /**
8
- * Internal dependencies
9
- */
10
- import { store as blockEditorStore } from '../../../store';
11
-
12
6
  function listener( event ) {
13
7
  if ( event.defaultPrevented ) {
14
8
  return;
@@ -20,16 +14,11 @@ function listener( event ) {
20
14
  event.currentTarget.classList[ action ]( 'is-hovered' );
21
15
  }
22
16
 
23
- /**
17
+ /*
24
18
  * Adds `is-hovered` class when the block is hovered and in navigation or
25
19
  * outline mode.
26
20
  */
27
- export function useIsHovered() {
28
- const isEnabled = useSelect( ( select ) => {
29
- const { getSettings } = select( blockEditorStore );
30
- return getSettings().outlineMode;
31
- }, [] );
32
-
21
+ export function useIsHovered( { isEnabled } ) {
33
22
  return useRefEffect(
34
23
  ( node ) => {
35
24
  if ( isEnabled ) {
@@ -19,11 +19,7 @@ import { store as blockEditorStore } from '../../../store';
19
19
  *
20
20
  * @param {string} clientId Block client ID.
21
21
  */
22
- export function useEventHandlers( clientId ) {
23
- const isSelected = useSelect(
24
- ( select ) => select( blockEditorStore ).isBlockSelected( clientId ),
25
- [ clientId ]
26
- );
22
+ export function useEventHandlers( { clientId, isSelected } ) {
27
23
  const { getBlockRootClientId, getBlockIndex } =
28
24
  useSelect( blockEditorStore );
29
25
  const { insertDefaultBlock, removeBlock } = useDispatch( blockEditorStore );
@@ -56,7 +56,7 @@ function BlockPattern( {
56
56
  <InserterDraggableBlocks
57
57
  isEnabled={ isDraggable }
58
58
  blocks={ blocks }
59
- isPattern={ !! pattern }
59
+ pattern={ pattern }
60
60
  >
61
61
  { ( { draggable, onDragStart, onDragEnd } ) => (
62
62
  <div
@@ -8,7 +8,7 @@ import {
8
8
  Button,
9
9
  __experimentalHStack as HStack,
10
10
  } from '@wordpress/components';
11
- import { __ } from '@wordpress/i18n';
11
+ import { __, _n } from '@wordpress/i18n';
12
12
 
13
13
  /**
14
14
  * Internal dependencies
@@ -48,22 +48,15 @@ export function BlockRemovalWarningModal( { rules } ) {
48
48
 
49
49
  return (
50
50
  <Modal
51
- title={ __( 'Are you sure?' ) }
51
+ title={ __( 'Be careful!' ) }
52
52
  onRequestClose={ clearBlockRemovalPrompt }
53
53
  >
54
- { blockNamesForPrompt.length === 1 ? (
55
- <p>{ rules[ blockNamesForPrompt[ 0 ] ] }</p>
56
- ) : (
57
- <ul style={ { listStyleType: 'disc', paddingLeft: '1rem' } }>
58
- { blockNamesForPrompt.map( ( name ) => (
59
- <li key={ name }>{ rules[ name ] }</li>
60
- ) ) }
61
- </ul>
62
- ) }
63
54
  <p>
64
- { blockNamesForPrompt.length > 1
65
- ? __( 'Removing these blocks is not advised.' )
66
- : __( 'Removing this block is not advised.' ) }
55
+ { _n(
56
+ 'Post or page content will not be displayed if you delete this block.',
57
+ 'Post or page content will not be displayed if you delete these blocks.',
58
+ blockNamesForPrompt.length
59
+ ) }
67
60
  </p>
68
61
  <HStack justify="right">
69
62
  <Button variant="tertiary" onClick={ clearBlockRemovalPrompt }>
@@ -88,6 +88,7 @@ export default function BlockRenameModal( {
88
88
  <VStack spacing="3">
89
89
  <TextControl
90
90
  __nextHasNoMarginBottom
91
+ __next40pxDefaultSize
91
92
  value={ editedBlockName }
92
93
  label={ __( 'Block name' ) }
93
94
  hideLabelFromVision={ true }
@@ -96,11 +97,16 @@ export default function BlockRenameModal( {
96
97
  onFocus={ autoSelectInputText }
97
98
  />
98
99
  <HStack justify="right">
99
- <Button variant="tertiary" onClick={ onClose }>
100
+ <Button
101
+ __next40pxDefaultSize
102
+ variant="tertiary"
103
+ onClick={ onClose }
104
+ >
100
105
  { __( 'Cancel' ) }
101
106
  </Button>
102
107
 
103
108
  <Button
109
+ __next40pxDefaultSize
104
110
  aria-disabled={ ! isNameValid }
105
111
  variant="primary"
106
112
  type="submit"
@@ -1,15 +1,10 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import {
5
- InspectorControls,
6
- useMultipleOriginColorsAndGradients,
7
- } from '@wordpress/block-editor';
8
4
  import {
9
5
  BottomSheet,
10
6
  ColorSettings,
11
7
  FocalPointSettingsPanel,
12
- ImageLinkDestinationsScreen,
13
8
  LinkPickerScreen,
14
9
  } from '@wordpress/components';
15
10
  import { useDispatch, useSelect } from '@wordpress/data';
@@ -18,6 +13,9 @@ import { useDispatch, useSelect } from '@wordpress/data';
18
13
  * Internal dependencies
19
14
  */
20
15
  import styles from './container.native.scss';
16
+ import InspectorControls from '../inspector-controls';
17
+ import ImageLinkDestinationsScreen from '../image-link-destinations';
18
+ import useMultipleOriginColorsAndGradients from '../colors-gradients/use-multiple-origin-colors-and-gradients';
21
19
 
22
20
  export const blockSettingsScreens = {
23
21
  settings: 'Settings',
@@ -98,7 +98,7 @@ function BlockStyles( { clientId, onSwitch = noop, onHoverClassName = noop } ) {
98
98
  { hoveredStyle && ! isMobileViewport && (
99
99
  <Popover
100
100
  placement="left-start"
101
- offset={ 20 }
101
+ offset={ 34 }
102
102
  focusOnMount={ false }
103
103
  >
104
104
  <div
@@ -19,14 +19,16 @@ import StylePreview from './preview';
19
19
  import containerStyles from './style.scss';
20
20
  import { store as blockEditorStore } from '../../store';
21
21
 
22
+ const EMPTY_ARRAY = [];
23
+
22
24
  function BlockStyles( { clientId, url } ) {
23
25
  const selector = ( select ) => {
24
26
  const { getBlock } = select( blockEditorStore );
25
27
  const { getBlockStyles } = select( blocksStore );
26
28
  const block = getBlock( clientId );
27
29
  return {
28
- styles: getBlockStyles( block.name ),
29
- className: block.attributes.className || '',
30
+ styles: getBlockStyles( block?.name ) || EMPTY_ARRAY,
31
+ className: block?.attributes?.className || '',
30
32
  };
31
33
  };
32
34
 
@@ -12,17 +12,6 @@
12
12
  display: block;
13
13
  }
14
14
 
15
- // Overrides for InserterPreviewPanel.
16
- .block-editor-inserter__preview-container {
17
- left: auto;
18
- right: auto;
19
- top: auto;
20
- position: static;
21
- }
22
-
23
- .block-editor-block-card__title.block-editor-block-card__title {
24
- margin: 0;
25
- }
26
15
  .block-editor-block-icon {
27
16
  display: none;
28
17
  }
@@ -25,7 +25,9 @@ exports[`BlockSwitcherDropdownMenu should render disabled block switcher with mu
25
25
  xmlns="http://www.w3.org/2000/svg"
26
26
  >
27
27
  <path
28
- d="M20.2 8v11c0 .7-.6 1.2-1.2 1.2H6v1.5h13c1.5 0 2.7-1.2 2.7-2.8V8zM18 16.4V4.6c0-.9-.7-1.6-1.6-1.6H4.6C3.7 3 3 3.7 3 4.6v11.8c0 .9.7 1.6 1.6 1.6h11.8c.9 0 1.6-.7 1.6-1.6zm-13.5 0V4.6c0-.1.1-.1.1-.1h11.8c.1 0 .1.1.1.1v11.8c0 .1-.1.1-.1.1H4.6l-.1-.1z"
28
+ clip-rule="evenodd"
29
+ d="M5 4.5h11a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V5a.5.5 0 0 1 .5-.5ZM3 5a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5Zm17 3v10.75c0 .69-.56 1.25-1.25 1.25H6v1.5h12.75a2.75 2.75 0 0 0 2.75-2.75V8H20Z"
30
+ fill-rule="evenodd"
29
31
  />
30
32
  </svg>
31
33
  </span>
@@ -6,6 +6,7 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
+ import { __ } from '@wordpress/i18n';
9
10
  import { useSelect } from '@wordpress/data';
10
11
  import { useRef } from '@wordpress/element';
11
12
  import { useViewportMatch } from '@wordpress/compose';
@@ -32,38 +33,82 @@ import BlockEditVisuallyButton from '../block-edit-visually-button';
32
33
  import { useShowHoveredOrFocusedGestures } from './utils';
33
34
  import { store as blockEditorStore } from '../../store';
34
35
  import __unstableBlockNameContext from './block-name-context';
36
+ import NavigableToolbar from '../navigable-toolbar';
37
+ import { useHasAnyBlockControls } from '../block-controls/use-has-block-controls';
35
38
 
36
- const BlockToolbar = ( { hideDragHandle } ) => {
37
- const { blockClientIds, blockType, isValid, isVisual, blockEditingMode } =
38
- useSelect( ( select ) => {
39
- const {
40
- getBlockName,
41
- getBlockMode,
42
- getSelectedBlockClientIds,
43
- isBlockValid,
44
- getBlockRootClientId,
45
- getBlockEditingMode,
46
- } = select( blockEditorStore );
47
- const selectedBlockClientIds = getSelectedBlockClientIds();
48
- const selectedBlockClientId = selectedBlockClientIds[ 0 ];
49
- const blockRootClientId = getBlockRootClientId(
50
- selectedBlockClientId
51
- );
52
- return {
53
- blockClientIds: selectedBlockClientIds,
54
- blockType:
55
- selectedBlockClientId &&
56
- getBlockType( getBlockName( selectedBlockClientId ) ),
57
- rootClientId: blockRootClientId,
58
- isValid: selectedBlockClientIds.every( ( id ) =>
59
- isBlockValid( id )
60
- ),
61
- isVisual: selectedBlockClientIds.every(
62
- ( id ) => getBlockMode( id ) === 'visual'
63
- ),
64
- blockEditingMode: getBlockEditingMode( selectedBlockClientId ),
65
- };
66
- }, [] );
39
+ /**
40
+ * Renders the block toolbar.
41
+ *
42
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-toolbar/README.md
43
+ *
44
+ * @param {Object} props Components props.
45
+ * @param {boolean} props.hideDragHandle Show or hide the Drag Handle for drag and drop functionality.
46
+ * @param {boolean} props.focusOnMount Focus the toolbar when mounted.
47
+ * @param {number} props.__experimentalInitialIndex The initial index of the toolbar item to focus.
48
+ * @param {Function} props.__experimentalOnIndexChange Callback function to be called when the index of the focused toolbar item changes.
49
+ * @param {string} props.variant Style variant of the toolbar, also passed to the Dropdowns rendered from Block Toolbar Buttons.
50
+ */
51
+ export function PrivateBlockToolbar( {
52
+ hideDragHandle,
53
+ focusOnMount,
54
+ __experimentalInitialIndex,
55
+ __experimentalOnIndexChange,
56
+ variant = 'unstyled',
57
+ } ) {
58
+ const {
59
+ blockClientId,
60
+ blockClientIds,
61
+ isDefaultEditingMode,
62
+ blockType,
63
+ shouldShowVisualToolbar,
64
+ showParentSelector,
65
+ } = useSelect( ( select ) => {
66
+ const {
67
+ getBlockName,
68
+ getBlockMode,
69
+ getBlockParents,
70
+ getSelectedBlockClientIds,
71
+ isBlockValid,
72
+ getBlockRootClientId,
73
+ getBlockEditingMode,
74
+ } = select( blockEditorStore );
75
+ const selectedBlockClientIds = getSelectedBlockClientIds();
76
+ const selectedBlockClientId = selectedBlockClientIds[ 0 ];
77
+ const blockRootClientId = getBlockRootClientId( selectedBlockClientId );
78
+ const parents = getBlockParents( selectedBlockClientId );
79
+ const firstParentClientId = parents[ parents.length - 1 ];
80
+ const parentBlockName = getBlockName( firstParentClientId );
81
+ const parentBlockType = getBlockType( parentBlockName );
82
+ const _isDefaultEditingMode =
83
+ getBlockEditingMode( selectedBlockClientId ) === 'default';
84
+ const isValid = selectedBlockClientIds.every( ( id ) =>
85
+ isBlockValid( id )
86
+ );
87
+ const isVisual = selectedBlockClientIds.every(
88
+ ( id ) => getBlockMode( id ) === 'visual'
89
+ );
90
+ return {
91
+ blockClientId: selectedBlockClientId,
92
+ blockClientIds: selectedBlockClientIds,
93
+ isDefaultEditingMode: _isDefaultEditingMode,
94
+ blockType:
95
+ selectedBlockClientId &&
96
+ getBlockType( getBlockName( selectedBlockClientId ) ),
97
+
98
+ shouldShowVisualToolbar: isValid && isVisual,
99
+ rootClientId: blockRootClientId,
100
+ showParentSelector:
101
+ parentBlockType &&
102
+ getBlockEditingMode( firstParentClientId ) === 'default' &&
103
+ hasBlockSupport(
104
+ parentBlockType,
105
+ '__experimentalParentSelector',
106
+ true
107
+ ) &&
108
+ selectedBlockClientIds.length === 1 &&
109
+ _isDefaultEditingMode,
110
+ };
111
+ }, [] );
67
112
 
68
113
  const toolbarWrapperRef = useRef( null );
69
114
 
@@ -76,86 +121,126 @@ const BlockToolbar = ( { hideDragHandle } ) => {
76
121
 
77
122
  const isLargeViewport = ! useViewportMatch( 'medium', '<' );
78
123
 
79
- if ( blockType ) {
80
- if ( ! hasBlockSupport( blockType, '__experimentalToolbar', true ) ) {
81
- return null;
82
- }
83
- }
124
+ const isToolbarEnabled =
125
+ blockType &&
126
+ hasBlockSupport( blockType, '__experimentalToolbar', true );
127
+ const hasAnyBlockControls = useHasAnyBlockControls();
84
128
 
85
- if ( blockClientIds.length === 0 ) {
129
+ if (
130
+ ! isToolbarEnabled ||
131
+ ( ! isDefaultEditingMode && ! hasAnyBlockControls )
132
+ ) {
86
133
  return null;
87
134
  }
88
135
 
89
- const shouldShowVisualToolbar = isValid && isVisual;
90
136
  const isMultiToolbar = blockClientIds.length > 1;
91
137
  const isSynced =
92
138
  isReusableBlock( blockType ) || isTemplatePart( blockType );
93
139
 
94
- const classes = classnames( 'block-editor-block-toolbar', {
140
+ // Shifts the toolbar to make room for the parent block selector.
141
+ const classes = classnames( 'block-editor-block-contextual-toolbar', {
142
+ 'has-parent': showParentSelector,
143
+ } );
144
+
145
+ const innerClasses = classnames( 'block-editor-block-toolbar', {
95
146
  'is-synced': isSynced,
96
147
  } );
97
148
 
98
149
  return (
99
- <div className={ classes } ref={ toolbarWrapperRef }>
100
- { ! isMultiToolbar &&
101
- isLargeViewport &&
102
- blockEditingMode === 'default' && <BlockParentSelector /> }
103
- { ( shouldShowVisualToolbar || isMultiToolbar ) &&
104
- blockEditingMode === 'default' && (
105
- <div ref={ nodeRef } { ...showHoveredOrFocusedGestures }>
106
- <ToolbarGroup className="block-editor-block-toolbar__block-controls">
107
- <BlockSwitcher clientIds={ blockClientIds } />
108
- { ! isMultiToolbar && (
109
- <BlockLockToolbar
110
- clientId={ blockClientIds[ 0 ] }
111
- wrapperRef={ toolbarWrapperRef }
150
+ <NavigableToolbar
151
+ focusEditorOnEscape
152
+ className={ classes }
153
+ /* translators: accessibility text for the block toolbar */
154
+ aria-label={ __( 'Block tools' ) }
155
+ // The variant is applied as "toolbar" when undefined, which is the black border style of the dropdown from the toolbar popover.
156
+ variant={ variant === 'toolbar' ? undefined : variant }
157
+ focusOnMount={ focusOnMount }
158
+ __experimentalInitialIndex={ __experimentalInitialIndex }
159
+ __experimentalOnIndexChange={ __experimentalOnIndexChange }
160
+ // Resets the index whenever the active block changes so
161
+ // this is not persisted. See https://github.com/WordPress/gutenberg/pull/25760#issuecomment-717906169
162
+ key={ blockClientId }
163
+ >
164
+ <div ref={ toolbarWrapperRef } className={ innerClasses }>
165
+ { ! isMultiToolbar &&
166
+ isLargeViewport &&
167
+ isDefaultEditingMode && <BlockParentSelector /> }
168
+ { ( shouldShowVisualToolbar || isMultiToolbar ) &&
169
+ isDefaultEditingMode && (
170
+ <div
171
+ ref={ nodeRef }
172
+ { ...showHoveredOrFocusedGestures }
173
+ >
174
+ <ToolbarGroup className="block-editor-block-toolbar__block-controls">
175
+ <BlockSwitcher clientIds={ blockClientIds } />
176
+ { ! isMultiToolbar && (
177
+ <BlockLockToolbar
178
+ clientId={ blockClientIds[ 0 ] }
179
+ wrapperRef={ toolbarWrapperRef }
180
+ />
181
+ ) }
182
+ <BlockMover
183
+ clientIds={ blockClientIds }
184
+ hideDragHandle={ hideDragHandle }
112
185
  />
113
- ) }
114
- <BlockMover
115
- clientIds={ blockClientIds }
116
- hideDragHandle={ hideDragHandle }
117
- />
118
- </ToolbarGroup>
119
- </div>
186
+ </ToolbarGroup>
187
+ </div>
188
+ ) }
189
+ { shouldShowVisualToolbar && isMultiToolbar && (
190
+ <BlockGroupToolbar />
191
+ ) }
192
+ { shouldShowVisualToolbar && (
193
+ <>
194
+ <BlockControls.Slot
195
+ group="parent"
196
+ className="block-editor-block-toolbar__slot"
197
+ />
198
+ <BlockControls.Slot
199
+ group="block"
200
+ className="block-editor-block-toolbar__slot"
201
+ />
202
+ <BlockControls.Slot className="block-editor-block-toolbar__slot" />
203
+ <BlockControls.Slot
204
+ group="inline"
205
+ className="block-editor-block-toolbar__slot"
206
+ />
207
+ <BlockControls.Slot
208
+ group="other"
209
+ className="block-editor-block-toolbar__slot"
210
+ />
211
+ <__unstableBlockNameContext.Provider
212
+ value={ blockType?.name }
213
+ >
214
+ <__unstableBlockToolbarLastItem.Slot />
215
+ </__unstableBlockNameContext.Provider>
216
+ </>
217
+ ) }
218
+ <BlockEditVisuallyButton clientIds={ blockClientIds } />
219
+ { isDefaultEditingMode && (
220
+ <BlockSettingsMenu clientIds={ blockClientIds } />
120
221
  ) }
121
- { shouldShowVisualToolbar && isMultiToolbar && (
122
- <BlockGroupToolbar />
123
- ) }
124
- { shouldShowVisualToolbar && (
125
- <>
126
- <BlockControls.Slot
127
- group="parent"
128
- className="block-editor-block-toolbar__slot"
129
- />
130
- <BlockControls.Slot
131
- group="block"
132
- className="block-editor-block-toolbar__slot"
133
- />
134
- <BlockControls.Slot className="block-editor-block-toolbar__slot" />
135
- <BlockControls.Slot
136
- group="inline"
137
- className="block-editor-block-toolbar__slot"
138
- />
139
- <BlockControls.Slot
140
- group="other"
141
- className="block-editor-block-toolbar__slot"
142
- />
143
- <__unstableBlockNameContext.Provider
144
- value={ blockType?.name }
145
- >
146
- <__unstableBlockToolbarLastItem.Slot />
147
- </__unstableBlockNameContext.Provider>
148
- </>
149
- ) }
150
- <BlockEditVisuallyButton clientIds={ blockClientIds } />
151
- { blockEditingMode === 'default' && (
152
- <BlockSettingsMenu clientIds={ blockClientIds } />
153
- ) }
154
- </div>
222
+ </div>
223
+ </NavigableToolbar>
155
224
  );
156
- };
225
+ }
157
226
 
158
227
  /**
228
+ * Renders the block toolbar.
229
+ *
159
230
  * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-toolbar/README.md
231
+ *
232
+ * @param {Object} props Components props.
233
+ * @param {boolean} props.hideDragHandle Show or hide the Drag Handle for drag and drop functionality.
234
+ * @param {string} props.variant Style variant of the toolbar, also passed to the Dropdowns rendered from Block Toolbar Buttons.
160
235
  */
161
- export default BlockToolbar;
236
+ export default function BlockToolbar( { hideDragHandle, variant } ) {
237
+ return (
238
+ <PrivateBlockToolbar
239
+ hideDragHandle={ hideDragHandle }
240
+ variant={ variant }
241
+ focusOnMount={ undefined }
242
+ __experimentalInitialIndex={ undefined }
243
+ __experimentalOnIndexChange={ undefined }
244
+ />
245
+ );
246
+ }