@wordpress/block-editor 11.0.0 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/README.md +2 -1
  3. package/build/components/alignment-control/ui.js +1 -7
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/block-alignment-control/use-available-alignments.js +4 -3
  6. package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
  7. package/build/components/block-icon/index.js +4 -2
  8. package/build/components/block-icon/index.js.map +1 -1
  9. package/build/components/block-inspector/index.js +55 -4
  10. package/build/components/block-inspector/index.js.map +1 -1
  11. package/build/components/block-list-appender/index.js +46 -34
  12. package/build/components/block-list-appender/index.js.map +1 -1
  13. package/build/components/block-list-appender/index.native.js +39 -34
  14. package/build/components/block-list-appender/index.native.js.map +1 -1
  15. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +18 -18
  16. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  17. package/build/components/block-mobile-toolbar/index.native.js +1 -1
  18. package/build/components/block-mobile-toolbar/index.native.js.map +1 -1
  19. package/build/components/block-pattern-setup/index.js +14 -7
  20. package/build/components/block-pattern-setup/index.js.map +1 -1
  21. package/build/components/block-styles/index.native.js +1 -3
  22. package/build/components/block-styles/index.native.js.map +1 -1
  23. package/build/components/block-styles/utils.js +7 -10
  24. package/build/components/block-styles/utils.js.map +1 -1
  25. package/build/components/block-toolbar/index.native.js +6 -8
  26. package/build/components/block-toolbar/index.native.js.map +1 -1
  27. package/build/components/block-tools/selected-block-popover.js +1 -3
  28. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  29. package/build/components/block-variation-picker/index.js +1 -1
  30. package/build/components/block-variation-picker/index.js.map +1 -1
  31. package/build/components/colors/utils.js +2 -6
  32. package/build/components/colors/utils.js.map +1 -1
  33. package/build/components/colors-gradients/control.js +0 -3
  34. package/build/components/colors-gradients/control.js.map +1 -1
  35. package/build/components/colors-gradients/dropdown.js +0 -2
  36. package/build/components/colors-gradients/dropdown.js.map +1 -1
  37. package/build/components/colors-gradients/panel-color-gradient-settings.js +2 -19
  38. package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  39. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +4 -3
  40. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  41. package/build/components/copy-handler/index.js +37 -9
  42. package/build/components/copy-handler/index.js.map +1 -1
  43. package/build/components/font-sizes/fluid-utils.js +5 -2
  44. package/build/components/font-sizes/fluid-utils.js.map +1 -1
  45. package/build/components/font-sizes/utils.js +10 -4
  46. package/build/components/font-sizes/utils.js.map +1 -1
  47. package/build/components/font-sizes/with-font-sizes.js +11 -6
  48. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  49. package/build/components/gradients/use-gradient.js +2 -8
  50. package/build/components/gradients/use-gradient.js.map +1 -1
  51. package/build/components/iframe/index.js +13 -95
  52. package/build/components/iframe/index.js.map +1 -1
  53. package/build/components/iframe/use-compatibility-styles.js +93 -0
  54. package/build/components/iframe/use-compatibility-styles.js.map +1 -0
  55. package/build/components/inner-blocks/index.js +6 -2
  56. package/build/components/inner-blocks/index.js.map +1 -1
  57. package/build/components/inserter/hooks/use-insertion-point.js +4 -3
  58. package/build/components/inserter/hooks/use-insertion-point.js.map +1 -1
  59. package/build/components/inserter/index.js +13 -4
  60. package/build/components/inserter/index.js.map +1 -1
  61. package/build/components/inserter/media-tab/hooks.js +8 -5
  62. package/build/components/inserter/media-tab/hooks.js.map +1 -1
  63. package/build/components/inserter/quick-inserter.js +6 -3
  64. package/build/components/inserter/quick-inserter.js.map +1 -1
  65. package/build/components/inserter/search-items.js +15 -14
  66. package/build/components/inserter/search-items.js.map +1 -1
  67. package/build/components/inserter/search-results.js +4 -2
  68. package/build/components/inserter/search-results.js.map +1 -1
  69. package/build/components/list-view/block-select-button.js +1 -1
  70. package/build/components/list-view/block-select-button.js.map +1 -1
  71. package/build/components/off-canvas-editor/appender.js +21 -26
  72. package/build/components/off-canvas-editor/appender.js.map +1 -1
  73. package/build/components/off-canvas-editor/block-select-button.js +3 -2
  74. package/build/components/off-canvas-editor/block-select-button.js.map +1 -1
  75. package/build/components/off-canvas-editor/block.js +57 -45
  76. package/build/components/off-canvas-editor/block.js.map +1 -1
  77. package/build/components/off-canvas-editor/index.js +5 -1
  78. package/build/components/off-canvas-editor/index.js.map +1 -1
  79. package/build/components/off-canvas-editor/use-inserted-block.js +58 -0
  80. package/build/components/off-canvas-editor/use-inserted-block.js.map +1 -0
  81. package/build/components/responsive-block-control/label.js.map +1 -1
  82. package/build/components/rich-text/format-edit.js +12 -10
  83. package/build/components/rich-text/format-edit.js.map +1 -1
  84. package/build/components/rich-text/index.js.map +1 -1
  85. package/build/components/rich-text/use-paste-handler.js +21 -12
  86. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  87. package/build/components/spacing-sizes-control/index.js +0 -1
  88. package/build/components/spacing-sizes-control/index.js.map +1 -1
  89. package/build/components/spacing-sizes-control/utils.js +1 -1
  90. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  91. package/build/components/typewriter/index.js +1 -1
  92. package/build/components/typewriter/index.js.map +1 -1
  93. package/build/components/url-popover/image-url-input-ui.js +2 -2
  94. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  95. package/build/components/writing-flow/index.js +1 -1
  96. package/build/components/writing-flow/index.js.map +1 -1
  97. package/build/hooks/border.js +0 -1
  98. package/build/hooks/border.js.map +1 -1
  99. package/build/hooks/color-panel.js +0 -1
  100. package/build/hooks/color-panel.js.map +1 -1
  101. package/build/hooks/color.js +1 -2
  102. package/build/hooks/color.js.map +1 -1
  103. package/build/hooks/font-family.js +4 -4
  104. package/build/hooks/font-family.js.map +1 -1
  105. package/build/hooks/font-size.js +5 -3
  106. package/build/hooks/font-size.js.map +1 -1
  107. package/build/hooks/use-typography-props.js +11 -8
  108. package/build/hooks/use-typography-props.js.map +1 -1
  109. package/build/store/reducer.js +21 -7
  110. package/build/store/reducer.js.map +1 -1
  111. package/build/store/selectors.js +1 -1
  112. package/build/store/selectors.js.map +1 -1
  113. package/build/utils/pasting.js +6 -11
  114. package/build/utils/pasting.js.map +1 -1
  115. package/build-module/components/alignment-control/ui.js +1 -6
  116. package/build-module/components/alignment-control/ui.js.map +1 -1
  117. package/build-module/components/block-alignment-control/use-available-alignments.js +4 -3
  118. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  119. package/build-module/components/block-icon/index.js +4 -2
  120. package/build-module/components/block-icon/index.js.map +1 -1
  121. package/build-module/components/block-inspector/index.js +56 -5
  122. package/build-module/components/block-inspector/index.js.map +1 -1
  123. package/build-module/components/block-list-appender/index.js +46 -34
  124. package/build-module/components/block-list-appender/index.js.map +1 -1
  125. package/build-module/components/block-list-appender/index.native.js +39 -32
  126. package/build-module/components/block-list-appender/index.native.js.map +1 -1
  127. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +18 -18
  128. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  129. package/build-module/components/block-mobile-toolbar/index.native.js +1 -1
  130. package/build-module/components/block-mobile-toolbar/index.native.js.map +1 -1
  131. package/build-module/components/block-pattern-setup/index.js +14 -7
  132. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  133. package/build-module/components/block-styles/index.native.js +1 -2
  134. package/build-module/components/block-styles/index.native.js.map +1 -1
  135. package/build-module/components/block-styles/utils.js +7 -9
  136. package/build-module/components/block-styles/utils.js.map +1 -1
  137. package/build-module/components/block-toolbar/index.native.js +6 -8
  138. package/build-module/components/block-toolbar/index.native.js.map +1 -1
  139. package/build-module/components/block-tools/selected-block-popover.js +1 -2
  140. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  141. package/build-module/components/block-variation-picker/index.js +1 -1
  142. package/build-module/components/block-variation-picker/index.js.map +1 -1
  143. package/build-module/components/colors/utils.js +3 -7
  144. package/build-module/components/colors/utils.js.map +1 -1
  145. package/build-module/components/colors-gradients/control.js +0 -3
  146. package/build-module/components/colors-gradients/control.js.map +1 -1
  147. package/build-module/components/colors-gradients/dropdown.js +0 -2
  148. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  149. package/build-module/components/colors-gradients/panel-color-gradient-settings.js +4 -19
  150. package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  151. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +4 -2
  152. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  153. package/build-module/components/copy-handler/index.js +38 -10
  154. package/build-module/components/copy-handler/index.js.map +1 -1
  155. package/build-module/components/font-sizes/fluid-utils.js +5 -2
  156. package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
  157. package/build-module/components/font-sizes/utils.js +11 -5
  158. package/build-module/components/font-sizes/utils.js.map +1 -1
  159. package/build-module/components/font-sizes/with-font-sizes.js +12 -7
  160. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  161. package/build-module/components/gradients/use-gradient.js +2 -7
  162. package/build-module/components/gradients/use-gradient.js.map +1 -1
  163. package/build-module/components/iframe/index.js +12 -95
  164. package/build-module/components/iframe/index.js.map +1 -1
  165. package/build-module/components/iframe/use-compatibility-styles.js +85 -0
  166. package/build-module/components/iframe/use-compatibility-styles.js.map +1 -0
  167. package/build-module/components/inner-blocks/index.js +6 -2
  168. package/build-module/components/inner-blocks/index.js.map +1 -1
  169. package/build-module/components/inserter/hooks/use-insertion-point.js +4 -3
  170. package/build-module/components/inserter/hooks/use-insertion-point.js.map +1 -1
  171. package/build-module/components/inserter/index.js +13 -4
  172. package/build-module/components/inserter/index.js.map +1 -1
  173. package/build-module/components/inserter/media-tab/hooks.js +8 -5
  174. package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
  175. package/build-module/components/inserter/quick-inserter.js +6 -3
  176. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  177. package/build-module/components/inserter/search-items.js +15 -13
  178. package/build-module/components/inserter/search-items.js.map +1 -1
  179. package/build-module/components/inserter/search-results.js +4 -2
  180. package/build-module/components/inserter/search-results.js.map +1 -1
  181. package/build-module/components/list-view/block-select-button.js +1 -1
  182. package/build-module/components/list-view/block-select-button.js.map +1 -1
  183. package/build-module/components/off-canvas-editor/appender.js +21 -27
  184. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  185. package/build-module/components/off-canvas-editor/block-select-button.js +3 -2
  186. package/build-module/components/off-canvas-editor/block-select-button.js.map +1 -1
  187. package/build-module/components/off-canvas-editor/block.js +58 -46
  188. package/build-module/components/off-canvas-editor/block.js.map +1 -1
  189. package/build-module/components/off-canvas-editor/index.js +5 -1
  190. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  191. package/build-module/components/off-canvas-editor/use-inserted-block.js +47 -0
  192. package/build-module/components/off-canvas-editor/use-inserted-block.js.map +1 -0
  193. package/build-module/components/responsive-block-control/label.js +1 -2
  194. package/build-module/components/responsive-block-control/label.js.map +1 -1
  195. package/build-module/components/rich-text/format-edit.js +12 -9
  196. package/build-module/components/rich-text/format-edit.js.map +1 -1
  197. package/build-module/components/rich-text/index.js.map +1 -1
  198. package/build-module/components/rich-text/use-paste-handler.js +22 -12
  199. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  200. package/build-module/components/spacing-sizes-control/index.js +0 -1
  201. package/build-module/components/spacing-sizes-control/index.js.map +1 -1
  202. package/build-module/components/spacing-sizes-control/utils.js +1 -1
  203. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  204. package/build-module/components/typewriter/index.js +1 -1
  205. package/build-module/components/typewriter/index.js.map +1 -1
  206. package/build-module/components/url-popover/image-url-input-ui.js +3 -3
  207. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  208. package/build-module/components/writing-flow/index.js +1 -1
  209. package/build-module/components/writing-flow/index.js.map +1 -1
  210. package/build-module/hooks/border.js +0 -1
  211. package/build-module/hooks/border.js.map +1 -1
  212. package/build-module/hooks/color-panel.js +0 -1
  213. package/build-module/hooks/color-panel.js.map +1 -1
  214. package/build-module/hooks/color.js +1 -2
  215. package/build-module/hooks/color.js.map +1 -1
  216. package/build-module/hooks/font-family.js +5 -5
  217. package/build-module/hooks/font-family.js.map +1 -1
  218. package/build-module/hooks/font-size.js +5 -3
  219. package/build-module/hooks/font-size.js.map +1 -1
  220. package/build-module/hooks/use-typography-props.js +11 -8
  221. package/build-module/hooks/use-typography-props.js.map +1 -1
  222. package/build-module/store/reducer.js +21 -6
  223. package/build-module/store/reducer.js.map +1 -1
  224. package/build-module/store/selectors.js +2 -2
  225. package/build-module/store/selectors.js.map +1 -1
  226. package/build-module/utils/pasting.js +6 -10
  227. package/build-module/utils/pasting.js.map +1 -1
  228. package/build-style/content-rtl.css +3 -3
  229. package/build-style/content.css +3 -3
  230. package/build-style/default-editor-styles-rtl.css +3 -3
  231. package/build-style/default-editor-styles.css +3 -3
  232. package/build-style/style-rtl.css +35 -11
  233. package/build-style/style.css +35 -11
  234. package/package.json +29 -29
  235. package/src/components/alignment-control/test/index.js +2 -0
  236. package/src/components/alignment-control/ui.js +1 -7
  237. package/src/components/block-alignment-control/test/index.js +2 -0
  238. package/src/components/block-alignment-control/use-available-alignments.js +4 -3
  239. package/src/components/block-icon/index.js +4 -2
  240. package/src/components/block-icon/test/index.js +9 -5
  241. package/src/components/block-inspector/index.js +77 -4
  242. package/src/components/block-inspector/style.scss +7 -0
  243. package/src/components/block-list-appender/index.js +65 -54
  244. package/src/components/block-list-appender/index.native.js +45 -34
  245. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +18 -22
  246. package/src/components/block-mobile-toolbar/index.native.js +1 -1
  247. package/src/components/block-mobile-toolbar/test/__snapshots__/block-actions-menu.native.js.snap +125 -0
  248. package/src/components/block-mobile-toolbar/test/block-actions-menu.native.js +439 -0
  249. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +42 -0
  250. package/src/components/block-mover/test/index.native.js +157 -1
  251. package/src/components/block-pattern-setup/index.js +15 -6
  252. package/src/components/block-pattern-setup/style.scss +29 -1
  253. package/src/components/block-styles/index.native.js +1 -2
  254. package/src/components/block-styles/utils.js +5 -7
  255. package/src/components/block-switcher/test/index.js +3 -2
  256. package/src/components/block-toolbar/index.native.js +8 -11
  257. package/src/components/block-tools/selected-block-popover.js +1 -3
  258. package/src/components/block-variation-picker/index.js +5 -1
  259. package/src/components/block-vertical-alignment-control/test/index.js +2 -0
  260. package/src/components/colors/test/with-colors.js +2 -0
  261. package/src/components/colors/utils.js +5 -3
  262. package/src/components/colors-gradients/control.js +0 -7
  263. package/src/components/colors-gradients/dropdown.js +0 -2
  264. package/src/components/colors-gradients/panel-color-gradient-settings.js +4 -22
  265. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +4 -2
  266. package/src/components/copy-handler/index.js +53 -7
  267. package/src/components/default-block-appender/test/index.js +2 -0
  268. package/src/components/font-sizes/fluid-utils.js +7 -1
  269. package/src/components/font-sizes/utils.js +5 -3
  270. package/src/components/font-sizes/with-font-sizes.js +4 -4
  271. package/src/components/gradients/use-gradient.js +2 -7
  272. package/src/components/iframe/index.js +8 -103
  273. package/src/components/iframe/use-compatibility-styles.js +95 -0
  274. package/src/components/image-size-control/test/index.js +147 -79
  275. package/src/components/inner-blocks/index.js +4 -2
  276. package/src/components/inserter/hooks/use-insertion-point.js +3 -2
  277. package/src/components/inserter/index.js +15 -2
  278. package/src/components/inserter/media-tab/hooks.js +5 -4
  279. package/src/components/inserter/quick-inserter.js +3 -0
  280. package/src/components/inserter/search-items.js +1 -2
  281. package/src/components/inserter/search-results.js +2 -0
  282. package/src/components/link-control/test/index.js +18 -4
  283. package/src/components/list-view/block-select-button.js +1 -1
  284. package/src/components/list-view/style.scss +1 -7
  285. package/src/components/media-replace-flow/test/index.js +2 -0
  286. package/src/components/off-canvas-editor/appender.js +30 -25
  287. package/src/components/off-canvas-editor/block-select-button.js +6 -2
  288. package/src/components/off-canvas-editor/block.js +93 -76
  289. package/src/components/off-canvas-editor/index.js +9 -0
  290. package/src/components/off-canvas-editor/style.scss +5 -1
  291. package/src/components/off-canvas-editor/test/use-inserted-block.js +108 -0
  292. package/src/components/off-canvas-editor/use-inserted-block.js +47 -0
  293. package/src/components/responsive-block-control/label.js +2 -3
  294. package/src/components/responsive-block-control/test/index.js +4 -2
  295. package/src/components/rich-text/format-edit.js +6 -10
  296. package/src/components/rich-text/index.js +1 -0
  297. package/src/components/rich-text/use-paste-handler.js +33 -14
  298. package/src/components/spacing-sizes-control/index.js +0 -1
  299. package/src/components/spacing-sizes-control/utils.js +1 -1
  300. package/src/components/typewriter/index.js +3 -1
  301. package/src/components/url-input/test/button.js +2 -0
  302. package/src/components/url-popover/image-url-input-ui.js +5 -4
  303. package/src/components/url-popover/test/index.js +21 -5
  304. package/src/components/warning/test/index.js +2 -0
  305. package/src/components/writing-flow/index.js +1 -1
  306. package/src/hooks/border.js +0 -1
  307. package/src/hooks/color-panel.js +0 -1
  308. package/src/hooks/color.js +0 -2
  309. package/src/hooks/font-family.js +3 -5
  310. package/src/hooks/font-size.js +13 -4
  311. package/src/hooks/test/use-typography-props.js +26 -0
  312. package/src/hooks/use-typography-props.js +15 -7
  313. package/src/store/reducer.js +13 -6
  314. package/src/store/selectors.js +2 -3
  315. package/src/utils/pasting.js +3 -9
  316. package/tsconfig.tsbuildinfo +1 -1
  317. package/build/components/colors-gradients/use-common-single-multiple-selects.js +0 -21
  318. package/build/components/colors-gradients/use-common-single-multiple-selects.js.map +0 -1
  319. package/build/components/rich-text/file-paste-handler.js +0 -21
  320. package/build/components/rich-text/file-paste-handler.js.map +0 -1
  321. package/build-module/components/colors-gradients/use-common-single-multiple-selects.js +0 -11
  322. package/build-module/components/colors-gradients/use-common-single-multiple-selects.js.map +0 -1
  323. package/build-module/components/rich-text/file-paste-handler.js +0 -13
  324. package/build-module/components/rich-text/file-paste-handler.js.map +0 -1
  325. package/src/components/colors-gradients/use-common-single-multiple-selects.js +0 -11
  326. package/src/components/rich-text/file-paste-handler.js +0 -13
@@ -14,6 +14,7 @@ import {
14
14
  __experimentalHStack as HStack,
15
15
  __experimentalVStack as VStack,
16
16
  Button,
17
+ __unstableMotion as motion,
17
18
  } from '@wordpress/components';
18
19
  import { useSelect, useDispatch } from '@wordpress/data';
19
20
  import { useMemo, useCallback } from '@wordpress/element';
@@ -171,6 +172,24 @@ const BlockInspector = ( { showNoBlockSelectedMessage = true } ) => {
171
172
  const availableTabs = useInspectorControlsTabs( blockType?.name );
172
173
  const showTabs = availableTabs?.length > 1;
173
174
 
175
+ const isOffCanvasNavigationEditorEnabled =
176
+ window?.__experimentalEnableOffCanvasNavigationEditor === true;
177
+
178
+ const blockInspectorAnimationSettings = useSelect(
179
+ ( select ) => {
180
+ if ( isOffCanvasNavigationEditorEnabled ) {
181
+ const globalBlockInspectorAnimationSettings =
182
+ select( blockEditorStore ).getSettings()
183
+ .__experimentalBlockInspectorAnimation;
184
+ return globalBlockInspectorAnimationSettings?.[
185
+ blockType.name
186
+ ];
187
+ }
188
+ return null;
189
+ },
190
+ [ selectedBlockClientId, isOffCanvasNavigationEditorEnabled, blockType ]
191
+ );
192
+
174
193
  if ( count > 1 ) {
175
194
  return (
176
195
  <div className="block-editor-block-inspector">
@@ -231,11 +250,65 @@ const BlockInspector = ( { showNoBlockSelectedMessage = true } ) => {
231
250
  />
232
251
  );
233
252
  }
253
+
234
254
  return (
235
- <BlockInspectorSingleBlock
236
- clientId={ selectedBlockClientId }
237
- blockName={ blockType.name }
238
- />
255
+ <BlockInspectorSingleBlockWrapper
256
+ animate={
257
+ isOffCanvasNavigationEditorEnabled &&
258
+ blockInspectorAnimationSettings
259
+ }
260
+ wrapper={ ( children ) => (
261
+ <AnimatedContainer
262
+ blockInspectorAnimationSettings={
263
+ blockInspectorAnimationSettings
264
+ }
265
+ selectedBlockClientId={ selectedBlockClientId }
266
+ >
267
+ { children }
268
+ </AnimatedContainer>
269
+ ) }
270
+ >
271
+ <BlockInspectorSingleBlock
272
+ clientId={ selectedBlockClientId }
273
+ blockName={ blockType.name }
274
+ />
275
+ </BlockInspectorSingleBlockWrapper>
276
+ );
277
+ };
278
+
279
+ const BlockInspectorSingleBlockWrapper = ( { animate, wrapper, children } ) => {
280
+ return animate ? wrapper( children ) : children;
281
+ };
282
+
283
+ const AnimatedContainer = ( {
284
+ blockInspectorAnimationSettings,
285
+ selectedBlockClientId,
286
+ children,
287
+ } ) => {
288
+ const animationOrigin =
289
+ blockInspectorAnimationSettings &&
290
+ blockInspectorAnimationSettings.enterDirection === 'leftToRight'
291
+ ? -50
292
+ : 50;
293
+
294
+ return (
295
+ <motion.div
296
+ animate={ {
297
+ x: 0,
298
+ opacity: 1,
299
+ transition: {
300
+ ease: 'easeInOut',
301
+ duration: 0.14,
302
+ },
303
+ } }
304
+ initial={ {
305
+ x: animationOrigin,
306
+ opacity: 0,
307
+ } }
308
+ key={ selectedBlockClientId }
309
+ >
310
+ { children }
311
+ </motion.div>
239
312
  );
240
313
  };
241
314
 
@@ -17,6 +17,13 @@
17
17
  margin-bottom: $grid-unit-10;
18
18
  }
19
19
  }
20
+
21
+ // Reset unexpected margin-bottom from being applied to the `BaseControl`
22
+ // component of the `FocalPointPicker` component.
23
+ .components-focal-point-picker-control .components-base-control {
24
+ margin-bottom: 0;
25
+ }
26
+
20
27
  .components-panel__body {
21
28
  border: none;
22
29
  border-top: $border-width solid $gray-200;
@@ -16,67 +16,78 @@ import DefaultBlockAppender from '../default-block-appender';
16
16
  import ButtonBlockAppender from '../button-block-appender';
17
17
  import { store as blockEditorStore } from '../../store';
18
18
 
19
- function BlockListAppender( {
20
- rootClientId,
21
- renderAppender: CustomAppender,
22
- className,
23
- tagName: TagName = 'div',
24
- } ) {
25
- const { hideInserter, canInsertDefaultBlock, selectedBlockClientId } =
26
- useSelect(
27
- ( select ) => {
28
- const {
29
- canInsertBlockType,
30
- getTemplateLock,
31
- getSelectedBlockClientId,
32
- __unstableGetEditorMode,
33
- } = select( blockEditorStore );
34
-
35
- return {
36
- hideInserter:
37
- !! getTemplateLock( rootClientId ) ||
38
- __unstableGetEditorMode() === 'zoom-out',
39
- canInsertDefaultBlock: canInsertBlockType(
40
- getDefaultBlockName(),
41
- rootClientId
42
- ),
43
- selectedBlockClientId: getSelectedBlockClientId(),
44
- };
45
- },
46
- [ rootClientId ]
47
- );
19
+ function DefaultAppender( { rootClientId } ) {
20
+ const canInsertDefaultBlock = useSelect( ( select ) =>
21
+ select( blockEditorStore ).canInsertBlockType(
22
+ getDefaultBlockName(),
23
+ rootClientId
24
+ )
25
+ );
26
+
27
+ if ( canInsertDefaultBlock ) {
28
+ // Render the default block appender if the context supports use
29
+ // of the default appender.
30
+ return <DefaultBlockAppender rootClientId={ rootClientId } />;
31
+ }
32
+
33
+ // Fallback in case the default block can't be inserted.
34
+ return (
35
+ <ButtonBlockAppender
36
+ rootClientId={ rootClientId }
37
+ className="block-list-appender__toggle"
38
+ />
39
+ );
40
+ }
41
+
42
+ function useAppender( rootClientId, CustomAppender ) {
43
+ const { hideInserter, isParentSelected } = useSelect(
44
+ ( select ) => {
45
+ const {
46
+ getTemplateLock,
47
+ getSelectedBlockClientId,
48
+ __unstableGetEditorMode,
49
+ } = select( blockEditorStore );
50
+
51
+ const selectedBlockClientId = getSelectedBlockClientId();
52
+
53
+ return {
54
+ hideInserter:
55
+ !! getTemplateLock( rootClientId ) ||
56
+ __unstableGetEditorMode() === 'zoom-out',
57
+ isParentSelected:
58
+ rootClientId === selectedBlockClientId ||
59
+ ( ! rootClientId && ! selectedBlockClientId ),
60
+ };
61
+ },
62
+ [ rootClientId ]
63
+ );
48
64
 
49
65
  if ( hideInserter || CustomAppender === false ) {
50
66
  return null;
51
67
  }
52
68
 
53
- let appender;
54
69
  if ( CustomAppender ) {
55
70
  // Prefer custom render prop if provided.
56
- appender = <CustomAppender />;
57
- } else {
58
- const isParentSelected =
59
- selectedBlockClientId === rootClientId ||
60
- ( ! rootClientId && ! selectedBlockClientId );
61
-
62
- if ( ! isParentSelected ) {
63
- return null;
64
- }
65
-
66
- if ( canInsertDefaultBlock ) {
67
- // Render the default block appender when renderAppender has not been
68
- // provided and the context supports use of the default appender.
69
- appender = <DefaultBlockAppender rootClientId={ rootClientId } />;
70
- } else {
71
- // Fallback in the case no renderAppender has been provided and the
72
- // default block can't be inserted.
73
- appender = (
74
- <ButtonBlockAppender
75
- rootClientId={ rootClientId }
76
- className="block-list-appender__toggle"
77
- />
78
- );
79
- }
71
+ return <CustomAppender />;
72
+ }
73
+
74
+ if ( ! isParentSelected ) {
75
+ return null;
76
+ }
77
+
78
+ return <DefaultAppender rootClientId={ rootClientId } />;
79
+ }
80
+
81
+ function BlockListAppender( {
82
+ rootClientId,
83
+ renderAppender,
84
+ className,
85
+ tagName: TagName = 'div',
86
+ } ) {
87
+ const appender = useAppender( rootClientId, renderAppender );
88
+
89
+ if ( ! appender ) {
90
+ return null;
80
91
  }
81
92
 
82
93
  return (
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { withSelect } from '@wordpress/data';
4
+ import { useSelect } from '@wordpress/data';
5
5
  import { getDefaultBlockName } from '@wordpress/blocks';
6
6
 
7
7
  /**
@@ -11,14 +11,48 @@ import DefaultBlockAppender from '../default-block-appender';
11
11
  import styles from './style.scss';
12
12
  import { store as blockEditorStore } from '../../store';
13
13
 
14
- function BlockListAppender( {
15
- blockClientIds,
14
+ function DefaultAppender( { rootClientId, showSeparator } ) {
15
+ const { blockClientIds, canInsertDefaultBlock } = useSelect(
16
+ ( select ) => {
17
+ const { getBlockOrder, canInsertBlockType } =
18
+ select( blockEditorStore );
19
+ return {
20
+ blockClientIds: getBlockOrder( rootClientId ),
21
+ canInsertDefaultBlock: canInsertBlockType(
22
+ getDefaultBlockName(),
23
+ rootClientId
24
+ ),
25
+ };
26
+ },
27
+ [ rootClientId ]
28
+ );
29
+
30
+ if ( ! canInsertDefaultBlock ) {
31
+ return null;
32
+ }
33
+
34
+ return (
35
+ <DefaultBlockAppender
36
+ rootClientId={ rootClientId }
37
+ lastBlockClientId={ blockClientIds[ blockClientIds.length - 1 ] }
38
+ containerStyle={ styles.blockListAppender }
39
+ placeholder={ blockClientIds.length > 0 ? '' : null }
40
+ showSeparator={ showSeparator }
41
+ />
42
+ );
43
+ }
44
+
45
+ export default function BlockListAppender( {
16
46
  rootClientId,
17
- canInsertDefaultBlock,
18
- isLocked,
19
47
  renderAppender: CustomAppender,
20
48
  showSeparator,
21
49
  } ) {
50
+ const isLocked = useSelect(
51
+ ( select ) =>
52
+ !! select( blockEditorStore ).getTemplateLock( rootClientId ),
53
+ [ rootClientId ]
54
+ );
55
+
22
56
  if ( isLocked ) {
23
57
  return null;
24
58
  }
@@ -27,33 +61,10 @@ function BlockListAppender( {
27
61
  return <CustomAppender showSeparator={ showSeparator } />;
28
62
  }
29
63
 
30
- if ( canInsertDefaultBlock ) {
31
- return (
32
- <DefaultBlockAppender
33
- rootClientId={ rootClientId }
34
- lastBlockClientId={
35
- blockClientIds[ blockClientIds.length - 1 ]
36
- }
37
- containerStyle={ styles.blockListAppender }
38
- placeholder={ blockClientIds.length > 0 ? '' : null }
39
- showSeparator={ showSeparator }
40
- />
41
- );
42
- }
43
-
44
- return null;
64
+ return (
65
+ <DefaultAppender
66
+ rootClientId={ rootClientId }
67
+ showSeparator={ showSeparator }
68
+ />
69
+ );
45
70
  }
46
-
47
- export default withSelect( ( select, { rootClientId } ) => {
48
- const { getBlockOrder, canInsertBlockType, getTemplateLock } =
49
- select( blockEditorStore );
50
-
51
- return {
52
- isLocked: !! getTemplateLock( rootClientId ),
53
- blockClientIds: getBlockOrder( rootClientId ),
54
- canInsertDefaultBlock: canInsertBlockType(
55
- getDefaultBlockName(),
56
- rootClientId
57
- ),
58
- };
59
- } )( BlockListAppender );
@@ -286,6 +286,7 @@ const BlockActionsMenu = ( {
286
286
  } }
287
287
  />
288
288
  <Picker
289
+ testID="block-actions-menu"
289
290
  ref={ blockActionsMenuPickerRef }
290
291
  options={ options }
291
292
  onChange={ onPickerSelect }
@@ -312,7 +313,7 @@ const BlockActionsMenu = ( {
312
313
  const EMPTY_BLOCK_LIST = [];
313
314
 
314
315
  export default compose(
315
- withSelect( ( select, { clientIds } ) => {
316
+ withSelect( ( select, { clientId } ) => {
316
317
  const {
317
318
  getBlockIndex,
318
319
  getBlockRootClientId,
@@ -325,23 +326,18 @@ export default compose(
325
326
  canInsertBlockType,
326
327
  getTemplateLock,
327
328
  } = select( blockEditorStore );
328
- const normalizedClientIds = Array.isArray( clientIds )
329
- ? clientIds
330
- : [ clientIds ];
331
- const block = getBlock( normalizedClientIds );
332
- const blockName = getBlockName( normalizedClientIds );
329
+ const block = getBlock( clientId );
330
+ const blockName = getBlockName( clientId );
333
331
  const blockType = getBlockType( blockName );
334
332
  const blockTitle = blockType?.title;
335
- const firstClientId = normalizedClientIds[ 0 ];
336
- const rootClientId = getBlockRootClientId( firstClientId );
333
+ const rootClientId = getBlockRootClientId( clientId );
337
334
  const blockOrder = getBlockOrder( rootClientId );
338
335
 
339
- const firstIndex = getBlockIndex( firstClientId );
340
- const lastIndex = getBlockIndex(
341
- normalizedClientIds[ normalizedClientIds.length - 1 ]
342
- );
336
+ const currentBlockIndex = getBlockIndex( clientId );
337
+ const isFirst = currentBlockIndex === 0;
338
+ const isLast = currentBlockIndex === blockOrder.length - 1;
343
339
 
344
- const innerBlocks = getBlocksByClientId( clientIds );
340
+ const innerBlocks = getBlocksByClientId( clientId );
345
341
 
346
342
  const canDuplicate = innerBlocks.every( ( innerBlock ) => {
347
343
  return (
@@ -378,13 +374,13 @@ export default compose(
378
374
  return {
379
375
  blockTitle,
380
376
  canInsertBlockType,
381
- currentIndex: firstIndex,
377
+ currentIndex: currentBlockIndex,
382
378
  getBlocksByClientId,
383
379
  isEmptyDefaultBlock,
384
380
  isLocked,
385
381
  canDuplicate,
386
- isFirst: firstIndex === 0,
387
- isLast: lastIndex === blockOrder.length - 1,
382
+ isFirst,
383
+ isLast,
388
384
  isReusableBlockType,
389
385
  reusableBlock,
390
386
  rootClientId,
@@ -395,7 +391,7 @@ export default compose(
395
391
  withDispatch(
396
392
  (
397
393
  dispatch,
398
- { clientIds, rootClientId, currentIndex, selectedBlockClientId },
394
+ { clientId, rootClientId, currentIndex, selectedBlockClientId },
399
395
  { select }
400
396
  ) => {
401
397
  const {
@@ -404,7 +400,7 @@ export default compose(
404
400
  duplicateBlocks,
405
401
  removeBlocks,
406
402
  insertBlock,
407
- replaceBlocks,
403
+ replaceBlock,
408
404
  clearSelectedBlock,
409
405
  } = dispatch( blockEditorStore );
410
406
  const { openGeneralSidebar } = dispatch( 'core/edit-post' );
@@ -426,12 +422,12 @@ export default compose(
426
422
  );
427
423
  },
428
424
  duplicateBlock() {
429
- return duplicateBlocks( clientIds );
425
+ return duplicateBlocks( [ clientId ] );
430
426
  },
431
427
  onMoveDown: ( ...args ) =>
432
- moveBlocksDown( clientIds, rootClientId, ...args ),
428
+ moveBlocksDown( [ clientId ], rootClientId, ...args ),
433
429
  onMoveUp: ( ...args ) =>
434
- moveBlocksUp( clientIds, rootClientId, ...args ),
430
+ moveBlocksUp( [ clientId ], rootClientId, ...args ),
435
431
  openGeneralSidebar: () =>
436
432
  openGeneralSidebar( 'edit-post/block' ),
437
433
  pasteBlock: ( clipboardBlock ) => {
@@ -452,7 +448,7 @@ export default compose(
452
448
  rootClientId
453
449
  );
454
450
  } else {
455
- replaceBlocks( clientIds, clipboardBlock );
451
+ replaceBlock( clientId, clipboardBlock );
456
452
  }
457
453
  },
458
454
  removeBlocks,
@@ -98,7 +98,7 @@ const BlockMobileToolbar = ( {
98
98
  </BlockSettingsButton.Slot>
99
99
 
100
100
  <BlockActionsMenu
101
- clientIds={ [ clientId ] }
101
+ clientId={ clientId }
102
102
  wrapBlockMover={ wrapBlockMover }
103
103
  wrapBlockSettings={ wrapBlockSettings && fillsLength }
104
104
  isStackedHorizontally={ isStackedHorizontally }
@@ -0,0 +1,125 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Block Actions Menu block options copies and pastes a block 1`] = `
4
+ "<!-- wp:paragraph -->
5
+ <p>Hello!</p>
6
+ <!-- /wp:paragraph -->
7
+
8
+ <!-- wp:heading -->
9
+ <h2 class=\\"wp-block-heading\\"></h2>
10
+ <!-- /wp:heading -->
11
+
12
+ <!-- wp:spacer -->
13
+ <div style=\\"height:100px\\" aria-hidden=\\"true\\" class=\\"wp-block-spacer\\"></div>
14
+ <!-- /wp:spacer -->
15
+
16
+ <!-- wp:heading -->
17
+ <h2 class=\\"wp-block-heading\\"></h2>
18
+ <!-- /wp:heading -->"
19
+ `;
20
+
21
+ exports[`Block Actions Menu block options cuts and pastes a block 1`] = `
22
+ "<!-- wp:spacer -->
23
+ <div style=\\"height:100px\\" aria-hidden=\\"true\\" class=\\"wp-block-spacer\\"></div>
24
+ <!-- /wp:spacer -->
25
+
26
+ <!-- wp:heading -->
27
+ <h2 class=\\"wp-block-heading\\"></h2>
28
+ <!-- /wp:heading -->
29
+
30
+ <!-- wp:paragraph -->
31
+ <p>Hello!</p>
32
+ <!-- /wp:paragraph -->"
33
+ `;
34
+
35
+ exports[`Block Actions Menu block options does not replace a non empty Paragraph block when pasting another block 1`] = `
36
+ "<!-- wp:paragraph -->
37
+ <p>Hello!</p>
38
+ <!-- /wp:paragraph -->
39
+
40
+ <!-- wp:heading -->
41
+ <h2 class=\\"wp-block-heading\\"></h2>
42
+ <!-- /wp:heading -->
43
+
44
+ <!-- wp:spacer -->
45
+ <div style=\\"height:100px\\" aria-hidden=\\"true\\" class=\\"wp-block-spacer\\"></div>
46
+ <!-- /wp:spacer -->
47
+
48
+ <!-- wp:heading -->
49
+ <h2 class=\\"wp-block-heading\\"></h2>
50
+ <!-- /wp:heading -->"
51
+ `;
52
+
53
+ exports[`Block Actions Menu block options duplicates a block 1`] = `
54
+ "<!-- wp:paragraph -->
55
+ <p>Hello!</p>
56
+ <!-- /wp:paragraph -->
57
+
58
+ <!-- wp:spacer -->
59
+ <div style=\\"height:100px\\" aria-hidden=\\"true\\" class=\\"wp-block-spacer\\"></div>
60
+ <!-- /wp:spacer -->
61
+
62
+ <!-- wp:spacer -->
63
+ <div style=\\"height:100px\\" aria-hidden=\\"true\\" class=\\"wp-block-spacer\\"></div>
64
+ <!-- /wp:spacer -->
65
+
66
+ <!-- wp:heading -->
67
+ <h2 class=\\"wp-block-heading\\"></h2>
68
+ <!-- /wp:heading -->"
69
+ `;
70
+
71
+ exports[`Block Actions Menu block options transforms a Paragraph block into a Pullquote block 1`] = `
72
+ "<!-- wp:pullquote -->
73
+ <figure class=\\"wp-block-pullquote\\"><blockquote><p>Hello!</p></blockquote></figure>
74
+ <!-- /wp:pullquote -->
75
+
76
+ <!-- wp:spacer -->
77
+ <div style=\\"height:100px\\" aria-hidden=\\"true\\" class=\\"wp-block-spacer\\"></div>
78
+ <!-- /wp:spacer -->
79
+
80
+ <!-- wp:heading -->
81
+ <h2 class=\\"wp-block-heading\\"></h2>
82
+ <!-- /wp:heading -->"
83
+ `;
84
+
85
+ exports[`Block Actions Menu moving blocks disables the Move Down button for the last block 1`] = `
86
+ "<!-- wp:paragraph -->
87
+ <p>Hello!</p>
88
+ <!-- /wp:paragraph -->
89
+
90
+ <!-- wp:spacer -->
91
+ <div style=\\"height:100px\\" aria-hidden=\\"true\\" class=\\"wp-block-spacer\\"></div>
92
+ <!-- /wp:spacer -->
93
+
94
+ <!-- wp:heading -->
95
+ <h2 class=\\"wp-block-heading\\"></h2>
96
+ <!-- /wp:heading -->"
97
+ `;
98
+
99
+ exports[`Block Actions Menu moving blocks disables the Move Up button for the first block 1`] = `
100
+ "<!-- wp:paragraph -->
101
+ <p>Hello!</p>
102
+ <!-- /wp:paragraph -->
103
+
104
+ <!-- wp:spacer -->
105
+ <div style=\\"height:100px\\" aria-hidden=\\"true\\" class=\\"wp-block-spacer\\"></div>
106
+ <!-- /wp:spacer -->
107
+
108
+ <!-- wp:heading -->
109
+ <h2 class=\\"wp-block-heading\\"></h2>
110
+ <!-- /wp:heading -->"
111
+ `;
112
+
113
+ exports[`Block Actions Menu moving blocks moves blocks up and down 1`] = `
114
+ "<!-- wp:heading -->
115
+ <h2 class=\\"wp-block-heading\\"></h2>
116
+ <!-- /wp:heading -->
117
+
118
+ <!-- wp:paragraph -->
119
+ <p>Hello!</p>
120
+ <!-- /wp:paragraph -->
121
+
122
+ <!-- wp:spacer -->
123
+ <div style=\\"height:100px\\" aria-hidden=\\"true\\" class=\\"wp-block-spacer\\"></div>
124
+ <!-- /wp:spacer -->"
125
+ `;