@wordpress/block-editor 8.6.0 → 9.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +5 -2
  3. package/build/components/block-alignment-control/constants.js +48 -0
  4. package/build/components/block-alignment-control/constants.js.map +1 -0
  5. package/build/components/block-alignment-control/ui.js +9 -40
  6. package/build/components/block-alignment-control/ui.js.map +1 -1
  7. package/build/components/block-alignment-control/ui.native.js +92 -0
  8. package/build/components/block-alignment-control/ui.native.js.map +1 -0
  9. package/build/components/block-alignment-matrix-control/index.js +1 -6
  10. package/build/components/block-alignment-matrix-control/index.js.map +1 -1
  11. package/build/components/block-content-overlay/index.js +4 -82
  12. package/build/components/block-content-overlay/index.js.map +1 -1
  13. package/build/components/block-draggable/draggable-chip.native.js +65 -0
  14. package/build/components/block-draggable/draggable-chip.native.js.map +1 -0
  15. package/build/components/block-draggable/dropping-insertion-point.native.js +157 -0
  16. package/build/components/block-draggable/dropping-insertion-point.native.js.map +1 -0
  17. package/build/components/block-draggable/index.native.js +488 -0
  18. package/build/components/block-draggable/index.native.js.map +1 -0
  19. package/build/components/block-draggable/use-scroll-when-dragging.native.js +130 -0
  20. package/build/components/block-draggable/use-scroll-when-dragging.native.js.map +1 -0
  21. package/build/components/block-list/block-list-context.native.js +195 -0
  22. package/build/components/block-list/block-list-context.native.js.map +1 -0
  23. package/build/components/block-list/block-list-item-cell.native.js +67 -0
  24. package/build/components/block-list/block-list-item-cell.native.js.map +1 -0
  25. package/build/components/block-list/block-list-item.native.js +12 -9
  26. package/build/components/block-list/block-list-item.native.js.map +1 -1
  27. package/build/components/block-list/block.native.js +27 -5
  28. package/build/components/block-list/block.native.js.map +1 -1
  29. package/build/components/block-list/index.js +34 -32
  30. package/build/components/block-list/index.js.map +1 -1
  31. package/build/components/block-list/index.native.js +75 -23
  32. package/build/components/block-list/index.native.js.map +1 -1
  33. package/build/components/block-list/use-block-props/index.js +8 -4
  34. package/build/components/block-list/use-block-props/index.js.map +1 -1
  35. package/build/components/block-list/use-block-props/use-block-class-names.js +1 -7
  36. package/build/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  37. package/build/components/block-list/use-in-between-inserter.js +1 -1
  38. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  39. package/build/components/block-mobile-toolbar/index.native.js +10 -3
  40. package/build/components/block-mobile-toolbar/index.native.js.map +1 -1
  41. package/build/components/block-mover/index.native.js +17 -4
  42. package/build/components/block-mover/index.native.js.map +1 -1
  43. package/build/components/block-navigation/dropdown.js +11 -5
  44. package/build/components/block-navigation/dropdown.js.map +1 -1
  45. package/build/components/block-popover/inbetween.js +19 -8
  46. package/build/components/block-popover/inbetween.js.map +1 -1
  47. package/build/components/block-popover/index.js +20 -16
  48. package/build/components/block-popover/index.js.map +1 -1
  49. package/build/components/block-preview/index.js +1 -1
  50. package/build/components/block-preview/index.js.map +1 -1
  51. package/build/components/block-tools/block-selection-button.js +1 -0
  52. package/build/components/block-tools/block-selection-button.js.map +1 -1
  53. package/build/components/block-tools/selected-block-popover.js +1 -29
  54. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  55. package/build/components/block-variation-transforms/index.js +16 -2
  56. package/build/components/block-variation-transforms/index.js.map +1 -1
  57. package/build/components/border-radius-control/input-controls.js +10 -3
  58. package/build/components/border-radius-control/input-controls.js.map +1 -1
  59. package/build/components/color-style-selector/index.js +9 -0
  60. package/build/components/color-style-selector/index.js.map +1 -1
  61. package/build/components/colors-gradients/dropdown.js +122 -41
  62. package/build/components/colors-gradients/dropdown.js.map +1 -1
  63. package/build/components/colors-gradients/panel-color-gradient-settings.js +35 -60
  64. package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  65. package/build/components/convert-to-group-buttons/toolbar.js +22 -5
  66. package/build/components/convert-to-group-buttons/toolbar.js.map +1 -1
  67. package/build/components/iframe/index.js +51 -50
  68. package/build/components/iframe/index.js.map +1 -1
  69. package/build/components/image-editor/use-save-image.js +3 -1
  70. package/build/components/image-editor/use-save-image.js.map +1 -1
  71. package/build/components/index.js +14 -23
  72. package/build/components/index.js.map +1 -1
  73. package/build/components/inserter/index.js +21 -7
  74. package/build/components/inserter/index.js.map +1 -1
  75. package/build/components/inserter/index.native.js +2 -2
  76. package/build/components/inserter/index.native.js.map +1 -1
  77. package/build/components/inserter/quick-inserter.js +4 -5
  78. package/build/components/inserter/quick-inserter.js.map +1 -1
  79. package/build/components/link-control/constants.js +11 -1
  80. package/build/components/link-control/constants.js.map +1 -1
  81. package/build/components/link-control/search-results.js +4 -3
  82. package/build/components/link-control/search-results.js.map +1 -1
  83. package/build/components/link-control/use-search-handler.js +4 -4
  84. package/build/components/link-control/use-search-handler.js.map +1 -1
  85. package/build/components/list-view/block.js +15 -15
  86. package/build/components/list-view/block.js.map +1 -1
  87. package/build/components/list-view/branch.js +9 -13
  88. package/build/components/list-view/branch.js.map +1 -1
  89. package/build/components/list-view/context.js +1 -4
  90. package/build/components/list-view/context.js.map +1 -1
  91. package/build/components/list-view/drop-indicator.js +0 -1
  92. package/build/components/list-view/drop-indicator.js.map +1 -1
  93. package/build/components/list-view/index.js +15 -32
  94. package/build/components/list-view/index.js.map +1 -1
  95. package/build/components/media-placeholder/index.js +0 -2
  96. package/build/components/media-placeholder/index.js.map +1 -1
  97. package/build/components/media-replace-flow/index.js +0 -2
  98. package/build/components/media-replace-flow/index.js.map +1 -1
  99. package/build/components/media-upload/index.native.js +10 -4
  100. package/build/components/media-upload/index.native.js.map +1 -1
  101. package/build/components/navigable-toolbar/index.js +12 -2
  102. package/build/components/navigable-toolbar/index.js.map +1 -1
  103. package/build/components/plain-text/index.native.js +62 -7
  104. package/build/components/plain-text/index.native.js.map +1 -1
  105. package/build/components/publish-date-time-picker/index.js +55 -0
  106. package/build/components/publish-date-time-picker/index.js.map +1 -0
  107. package/build/components/rich-text/format-toolbar-container.js +0 -1
  108. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  109. package/build/components/rich-text/index.js +2 -2
  110. package/build/components/rich-text/index.js.map +1 -1
  111. package/build/components/rich-text/index.native.js +5 -1
  112. package/build/components/rich-text/index.native.js.map +1 -1
  113. package/build/components/url-input/index.js +11 -4
  114. package/build/components/url-input/index.js.map +1 -1
  115. package/build/components/use-block-drop-zone/index.native.js +167 -0
  116. package/build/components/use-block-drop-zone/index.native.js.map +1 -0
  117. package/build/components/use-on-block-drop/index.native.js +95 -0
  118. package/build/components/use-on-block-drop/index.native.js.map +1 -0
  119. package/build/components/use-setting/index.js +42 -18
  120. package/build/components/use-setting/index.js.map +1 -1
  121. package/build/components/warning/index.js +6 -1
  122. package/build/components/warning/index.js.map +1 -1
  123. package/build/components/writing-flow/use-click-selection.js +1 -3
  124. package/build/components/writing-flow/use-click-selection.js.map +1 -1
  125. package/build/components/writing-flow/use-input.js +15 -0
  126. package/build/components/writing-flow/use-input.js.map +1 -1
  127. package/build/components/writing-flow/use-selection-observer.js +49 -8
  128. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  129. package/build/elements/index.js +9 -0
  130. package/build/elements/index.js.map +1 -0
  131. package/build/hooks/anchor.js.map +1 -1
  132. package/build/hooks/border.js +2 -7
  133. package/build/hooks/border.js.map +1 -1
  134. package/build/hooks/color-panel.js +14 -7
  135. package/build/hooks/color-panel.js.map +1 -1
  136. package/build/hooks/color.js +8 -88
  137. package/build/hooks/color.js.map +1 -1
  138. package/build/hooks/dimensions.js +16 -6
  139. package/build/hooks/dimensions.js.map +1 -1
  140. package/build/hooks/index.js +2 -0
  141. package/build/hooks/index.js.map +1 -1
  142. package/build/hooks/margin.js +64 -12
  143. package/build/hooks/margin.js.map +1 -1
  144. package/build/hooks/padding.js +60 -12
  145. package/build/hooks/padding.js.map +1 -1
  146. package/build/hooks/settings.js +32 -0
  147. package/build/hooks/settings.js.map +1 -0
  148. package/build/hooks/style.js +14 -13
  149. package/build/hooks/style.js.map +1 -1
  150. package/build/hooks/typography.js +6 -2
  151. package/build/hooks/typography.js.map +1 -1
  152. package/build/index.js +14 -0
  153. package/build/index.js.map +1 -1
  154. package/build/layouts/flex.js +5 -2
  155. package/build/layouts/flex.js.map +1 -1
  156. package/build/store/actions.js +14 -0
  157. package/build/store/actions.js.map +1 -1
  158. package/build/store/defaults.js +0 -1
  159. package/build/store/defaults.js.map +1 -1
  160. package/build/store/reducer.js +17 -2
  161. package/build/store/reducer.js.map +1 -1
  162. package/build/store/selectors.js +43 -13
  163. package/build/store/selectors.js.map +1 -1
  164. package/build-module/components/block-alignment-control/constants.js +36 -0
  165. package/build-module/components/block-alignment-control/constants.js.map +1 -0
  166. package/build-module/components/block-alignment-control/ui.js +4 -35
  167. package/build-module/components/block-alignment-control/ui.js.map +1 -1
  168. package/build-module/components/block-alignment-control/ui.native.js +78 -0
  169. package/build-module/components/block-alignment-control/ui.native.js.map +1 -0
  170. package/build-module/components/block-alignment-matrix-control/index.js +1 -6
  171. package/build-module/components/block-alignment-matrix-control/index.js.map +1 -1
  172. package/build-module/components/block-content-overlay/index.js +3 -78
  173. package/build-module/components/block-content-overlay/index.js.map +1 -1
  174. package/build-module/components/block-draggable/draggable-chip.native.js +51 -0
  175. package/build-module/components/block-draggable/draggable-chip.native.js.map +1 -0
  176. package/build-module/components/block-draggable/dropping-insertion-point.native.js +137 -0
  177. package/build-module/components/block-draggable/dropping-insertion-point.native.js.map +1 -0
  178. package/build-module/components/block-draggable/index.native.js +453 -0
  179. package/build-module/components/block-draggable/index.native.js.map +1 -0
  180. package/build-module/components/block-draggable/use-scroll-when-dragging.native.js +120 -0
  181. package/build-module/components/block-draggable/use-scroll-when-dragging.native.js.map +1 -0
  182. package/build-module/components/block-list/block-list-context.native.js +179 -0
  183. package/build-module/components/block-list/block-list-context.native.js.map +1 -0
  184. package/build-module/components/block-list/block-list-item-cell.native.js +59 -0
  185. package/build-module/components/block-list/block-list-item-cell.native.js.map +1 -0
  186. package/build-module/components/block-list/block-list-item.native.js +12 -9
  187. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  188. package/build-module/components/block-list/block.native.js +26 -5
  189. package/build-module/components/block-list/block.native.js.map +1 -1
  190. package/build-module/components/block-list/index.js +35 -33
  191. package/build-module/components/block-list/index.js.map +1 -1
  192. package/build-module/components/block-list/index.native.js +72 -23
  193. package/build-module/components/block-list/index.native.js.map +1 -1
  194. package/build-module/components/block-list/use-block-props/index.js +9 -5
  195. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  196. package/build-module/components/block-list/use-block-props/use-block-class-names.js +1 -7
  197. package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  198. package/build-module/components/block-list/use-in-between-inserter.js +1 -1
  199. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  200. package/build-module/components/block-mobile-toolbar/index.native.js +9 -3
  201. package/build-module/components/block-mobile-toolbar/index.native.js.map +1 -1
  202. package/build-module/components/block-mover/index.native.js +18 -5
  203. package/build-module/components/block-mover/index.native.js.map +1 -1
  204. package/build-module/components/block-navigation/dropdown.js +10 -5
  205. package/build-module/components/block-navigation/dropdown.js.map +1 -1
  206. package/build-module/components/block-popover/inbetween.js +19 -8
  207. package/build-module/components/block-popover/inbetween.js.map +1 -1
  208. package/build-module/components/block-popover/index.js +21 -15
  209. package/build-module/components/block-popover/index.js.map +1 -1
  210. package/build-module/components/block-preview/index.js +1 -1
  211. package/build-module/components/block-preview/index.js.map +1 -1
  212. package/build-module/components/block-tools/block-selection-button.js +1 -0
  213. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  214. package/build-module/components/block-tools/selected-block-popover.js +2 -29
  215. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  216. package/build-module/components/block-variation-transforms/index.js +13 -2
  217. package/build-module/components/block-variation-transforms/index.js.map +1 -1
  218. package/build-module/components/border-radius-control/input-controls.js +11 -4
  219. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  220. package/build-module/components/color-style-selector/index.js +6 -0
  221. package/build-module/components/color-style-selector/index.js.map +1 -1
  222. package/build-module/components/colors-gradients/dropdown.js +124 -43
  223. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  224. package/build-module/components/colors-gradients/panel-color-gradient-settings.js +36 -64
  225. package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  226. package/build-module/components/convert-to-group-buttons/toolbar.js +23 -6
  227. package/build-module/components/convert-to-group-buttons/toolbar.js.map +1 -1
  228. package/build-module/components/iframe/index.js +52 -51
  229. package/build-module/components/iframe/index.js.map +1 -1
  230. package/build-module/components/image-editor/use-save-image.js +2 -1
  231. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  232. package/build-module/components/index.js +2 -3
  233. package/build-module/components/index.js.map +1 -1
  234. package/build-module/components/inserter/index.js +21 -7
  235. package/build-module/components/inserter/index.js.map +1 -1
  236. package/build-module/components/inserter/index.native.js +2 -2
  237. package/build-module/components/inserter/index.native.js.map +1 -1
  238. package/build-module/components/inserter/quick-inserter.js +4 -5
  239. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  240. package/build-module/components/link-control/constants.js +5 -0
  241. package/build-module/components/link-control/constants.js.map +1 -1
  242. package/build-module/components/link-control/search-results.js +3 -4
  243. package/build-module/components/link-control/search-results.js.map +1 -1
  244. package/build-module/components/link-control/use-search-handler.js +5 -5
  245. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  246. package/build-module/components/list-view/block.js +15 -16
  247. package/build-module/components/list-view/block.js.map +1 -1
  248. package/build-module/components/list-view/branch.js +9 -13
  249. package/build-module/components/list-view/branch.js.map +1 -1
  250. package/build-module/components/list-view/context.js +1 -4
  251. package/build-module/components/list-view/context.js.map +1 -1
  252. package/build-module/components/list-view/drop-indicator.js +0 -1
  253. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  254. package/build-module/components/list-view/index.js +15 -31
  255. package/build-module/components/list-view/index.js.map +1 -1
  256. package/build-module/components/media-placeholder/index.js +0 -2
  257. package/build-module/components/media-placeholder/index.js.map +1 -1
  258. package/build-module/components/media-replace-flow/index.js +0 -2
  259. package/build-module/components/media-replace-flow/index.js.map +1 -1
  260. package/build-module/components/media-upload/index.native.js +8 -3
  261. package/build-module/components/media-upload/index.native.js.map +1 -1
  262. package/build-module/components/navigable-toolbar/index.js +12 -2
  263. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  264. package/build-module/components/plain-text/index.native.js +63 -8
  265. package/build-module/components/plain-text/index.native.js.map +1 -1
  266. package/build-module/components/publish-date-time-picker/index.js +42 -0
  267. package/build-module/components/publish-date-time-picker/index.js.map +1 -0
  268. package/build-module/components/rich-text/format-toolbar-container.js +0 -1
  269. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  270. package/build-module/components/rich-text/index.js +2 -2
  271. package/build-module/components/rich-text/index.js.map +1 -1
  272. package/build-module/components/rich-text/index.native.js +5 -1
  273. package/build-module/components/rich-text/index.native.js.map +1 -1
  274. package/build-module/components/url-input/index.js +11 -4
  275. package/build-module/components/url-input/index.js.map +1 -1
  276. package/build-module/components/use-block-drop-zone/index.native.js +148 -0
  277. package/build-module/components/use-block-drop-zone/index.native.js.map +1 -0
  278. package/build-module/components/use-on-block-drop/index.native.js +83 -0
  279. package/build-module/components/use-on-block-drop/index.native.js.map +1 -0
  280. package/build-module/components/use-setting/index.js +43 -19
  281. package/build-module/components/use-setting/index.js.map +1 -1
  282. package/build-module/components/warning/index.js +6 -1
  283. package/build-module/components/warning/index.js.map +1 -1
  284. package/build-module/components/writing-flow/use-click-selection.js +1 -3
  285. package/build-module/components/writing-flow/use-click-selection.js.map +1 -1
  286. package/build-module/components/writing-flow/use-input.js +15 -0
  287. package/build-module/components/writing-flow/use-input.js.map +1 -1
  288. package/build-module/components/writing-flow/use-selection-observer.js +49 -8
  289. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  290. package/build-module/elements/index.js +2 -0
  291. package/build-module/elements/index.js.map +1 -0
  292. package/build-module/hooks/anchor.js.map +1 -1
  293. package/build-module/hooks/border.js +2 -7
  294. package/build-module/hooks/border.js.map +1 -1
  295. package/build-module/hooks/color-panel.js +11 -6
  296. package/build-module/hooks/color-panel.js.map +1 -1
  297. package/build-module/hooks/color.js +8 -88
  298. package/build-module/hooks/color.js.map +1 -1
  299. package/build-module/hooks/dimensions.js +19 -9
  300. package/build-module/hooks/dimensions.js.map +1 -1
  301. package/build-module/hooks/index.js +1 -0
  302. package/build-module/hooks/index.js.map +1 -1
  303. package/build-module/hooks/margin.js +61 -13
  304. package/build-module/hooks/margin.js.map +1 -1
  305. package/build-module/hooks/padding.js +57 -13
  306. package/build-module/hooks/padding.js.map +1 -1
  307. package/build-module/hooks/settings.js +29 -0
  308. package/build-module/hooks/settings.js.map +1 -0
  309. package/build-module/hooks/style.js +15 -14
  310. package/build-module/hooks/style.js.map +1 -1
  311. package/build-module/hooks/typography.js +6 -2
  312. package/build-module/hooks/typography.js.map +1 -1
  313. package/build-module/index.js +1 -0
  314. package/build-module/index.js.map +1 -1
  315. package/build-module/layouts/flex.js +4 -2
  316. package/build-module/layouts/flex.js.map +1 -1
  317. package/build-module/store/actions.js +12 -0
  318. package/build-module/store/actions.js.map +1 -1
  319. package/build-module/store/defaults.js +0 -1
  320. package/build-module/store/defaults.js.map +1 -1
  321. package/build-module/store/reducer.js +17 -2
  322. package/build-module/store/reducer.js.map +1 -1
  323. package/build-module/store/selectors.js +37 -12
  324. package/build-module/store/selectors.js.map +1 -1
  325. package/build-style/style-rtl.css +100 -225
  326. package/build-style/style.css +100 -225
  327. package/package.json +30 -30
  328. package/src/components/block-alignment-control/constants.js +45 -0
  329. package/src/components/block-alignment-control/ui.js +69 -109
  330. package/src/components/block-alignment-control/ui.native.js +86 -0
  331. package/src/components/block-alignment-matrix-control/index.js +1 -5
  332. package/src/components/block-content-overlay/index.js +8 -95
  333. package/src/components/block-content-overlay/style.scss +2 -12
  334. package/src/components/block-draggable/draggable-chip.native.js +49 -0
  335. package/src/components/block-draggable/dropping-insertion-point.native.js +181 -0
  336. package/src/components/block-draggable/dropping-insertion-point.native.scss +8 -0
  337. package/src/components/block-draggable/index.native.js +462 -0
  338. package/src/components/block-draggable/style.native.scss +19 -0
  339. package/src/components/block-draggable/test/__snapshots__/index.native.js.snap +73 -0
  340. package/src/components/block-draggable/test/helpers.native.js +183 -0
  341. package/src/components/block-draggable/test/index.native.js +496 -0
  342. package/src/components/block-draggable/use-scroll-when-dragging.native.js +135 -0
  343. package/src/components/block-list/block-list-context.native.js +175 -0
  344. package/src/components/block-list/block-list-item-cell.native.js +49 -0
  345. package/src/components/block-list/block-list-item.native.js +7 -11
  346. package/src/components/block-list/block.native.js +37 -8
  347. package/src/components/block-list/index.js +44 -44
  348. package/src/components/block-list/index.native.js +54 -13
  349. package/src/components/block-list/style.scss +7 -18
  350. package/src/components/block-list/test/block-list-context.native.js +253 -0
  351. package/src/components/block-list/test/fixtures/block-list-context.native.js +79 -0
  352. package/src/components/block-list/use-block-props/index.js +10 -5
  353. package/src/components/block-list/use-block-props/use-block-class-names.js +1 -11
  354. package/src/components/block-list/use-in-between-inserter.js +1 -1
  355. package/src/components/block-mobile-toolbar/index.native.js +9 -1
  356. package/src/components/block-mover/index.native.js +22 -6
  357. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +10 -0
  358. package/src/components/block-navigation/dropdown.js +12 -8
  359. package/src/components/block-popover/inbetween.js +21 -8
  360. package/src/components/block-popover/index.js +18 -15
  361. package/src/components/block-popover/style.scss +4 -0
  362. package/src/components/block-preview/index.js +1 -4
  363. package/src/components/block-switcher/style.scss +2 -39
  364. package/src/components/block-tools/block-selection-button.js +1 -0
  365. package/src/components/block-tools/selected-block-popover.js +1 -36
  366. package/src/components/block-tools/style.scss +1 -12
  367. package/src/components/block-variation-transforms/index.js +6 -2
  368. package/src/components/border-radius-control/input-controls.js +16 -8
  369. package/src/components/border-radius-control/style.scss +3 -2
  370. package/src/components/color-palette/test/__snapshots__/control.js.snap +1 -1
  371. package/src/components/color-style-selector/index.js +18 -9
  372. package/src/components/colors-gradients/dropdown.js +130 -62
  373. package/src/components/colors-gradients/panel-color-gradient-settings.js +30 -76
  374. package/src/components/colors-gradients/style.scss +52 -50
  375. package/src/components/convert-to-group-buttons/toolbar.js +30 -13
  376. package/src/components/duotone-control/style.scss +1 -7
  377. package/src/components/iframe/index.js +62 -54
  378. package/src/components/image-editor/use-save-image.js +2 -1
  379. package/src/components/image-size-control/README.md +1 -1
  380. package/src/components/index.js +2 -3
  381. package/src/components/inserter/index.js +20 -0
  382. package/src/components/inserter/index.native.js +2 -2
  383. package/src/components/inserter/quick-inserter.js +3 -11
  384. package/src/components/inserter/style.native.scss +1 -0
  385. package/src/components/inserter/style.scss +2 -1
  386. package/src/components/link-control/constants.js +11 -0
  387. package/src/components/link-control/search-results.js +4 -5
  388. package/src/components/link-control/use-search-handler.js +11 -5
  389. package/src/components/list-view/block.js +24 -34
  390. package/src/components/list-view/branch.js +10 -20
  391. package/src/components/list-view/context.js +1 -4
  392. package/src/components/list-view/drop-indicator.js +0 -1
  393. package/src/components/list-view/index.js +11 -41
  394. package/src/components/list-view/style.scss +2 -1
  395. package/src/components/media-placeholder/index.js +0 -2
  396. package/src/components/media-replace-flow/index.js +0 -2
  397. package/src/components/media-upload/index.native.js +6 -2
  398. package/src/components/media-upload/test/index.native.js +31 -6
  399. package/src/components/navigable-toolbar/index.js +12 -2
  400. package/src/components/plain-text/index.native.js +64 -8
  401. package/src/components/preview-options/style.scss +0 -4
  402. package/src/components/publish-date-time-picker/README.md +52 -0
  403. package/src/components/publish-date-time-picker/index.js +50 -0
  404. package/src/components/publish-date-time-picker/style.scss +20 -0
  405. package/src/components/rich-text/format-toolbar-container.js +0 -1
  406. package/src/components/rich-text/index.js +3 -1
  407. package/src/components/rich-text/index.native.js +4 -0
  408. package/src/components/rich-text/style.scss +2 -8
  409. package/src/components/url-input/index.js +9 -4
  410. package/src/components/use-block-drop-zone/index.native.js +173 -0
  411. package/src/components/use-on-block-drop/index.native.js +119 -0
  412. package/src/components/use-setting/index.js +57 -21
  413. package/src/components/warning/index.js +47 -42
  414. package/src/components/warning/test/__snapshots__/index.js.snap +15 -6
  415. package/src/components/warning/test/index.js +1 -1
  416. package/src/components/writing-flow/use-click-selection.js +1 -4
  417. package/src/components/writing-flow/use-input.js +12 -0
  418. package/src/components/writing-flow/use-selection-observer.js +55 -10
  419. package/src/elements/index.js +1 -0
  420. package/src/hooks/anchor.js +1 -1
  421. package/src/hooks/border.js +2 -11
  422. package/src/hooks/border.scss +0 -48
  423. package/src/hooks/color-panel.js +13 -9
  424. package/src/hooks/color.js +5 -74
  425. package/src/hooks/color.scss +5 -58
  426. package/src/hooks/dimensions.js +55 -41
  427. package/src/hooks/index.js +1 -0
  428. package/src/hooks/margin.js +64 -15
  429. package/src/hooks/padding.js +60 -15
  430. package/src/hooks/padding.scss +12 -0
  431. package/src/hooks/settings.js +32 -0
  432. package/src/hooks/style.js +25 -39
  433. package/src/hooks/test/settings.js +48 -0
  434. package/src/hooks/typography.js +2 -0
  435. package/src/index.js +1 -0
  436. package/src/layouts/flex.js +11 -3
  437. package/src/store/actions.js +12 -0
  438. package/src/store/defaults.js +0 -1
  439. package/src/store/reducer.js +14 -1
  440. package/src/store/selectors.js +42 -12
  441. package/src/store/test/reducer.js +5 -0
  442. package/src/store/test/selectors.js +17 -0
  443. package/src/style.scss +2 -2
  444. package/tsconfig.tsbuildinfo +1 -1
  445. package/build/components/border-style-control/index.js +0 -60
  446. package/build/components/border-style-control/index.js.map +0 -1
  447. package/build/components/colors/color-panel.js +0 -82
  448. package/build/components/colors/color-panel.js.map +0 -1
  449. package/build/components/colors/color-panel.native.js +0 -11
  450. package/build/components/colors/color-panel.native.js.map +0 -1
  451. package/build/components/colors-gradients/tools-panel-color-dropdown.js +0 -89
  452. package/build/components/colors-gradients/tools-panel-color-dropdown.js.map +0 -1
  453. package/build-module/components/border-style-control/index.js +0 -50
  454. package/build-module/components/border-style-control/index.js.map +0 -1
  455. package/build-module/components/colors/color-panel.js +0 -70
  456. package/build-module/components/colors/color-panel.js.map +0 -1
  457. package/build-module/components/colors/color-panel.native.js +0 -4
  458. package/build-module/components/colors/color-panel.native.js.map +0 -1
  459. package/build-module/components/colors-gradients/tools-panel-color-dropdown.js +0 -75
  460. package/build-module/components/colors-gradients/tools-panel-color-dropdown.js.map +0 -1
  461. package/src/components/block-alignment-matrix-control/style.scss +0 -10
  462. package/src/components/border-style-control/index.js +0 -47
  463. package/src/components/border-style-control/style.scss +0 -18
  464. package/src/components/colors/color-panel.js +0 -91
  465. package/src/components/colors/color-panel.native.js +0 -3
  466. package/src/components/colors-gradients/tools-panel-color-dropdown.js +0 -85
@@ -7,12 +7,12 @@ import classnames from 'classnames';
7
7
  * WordPress dependencies
8
8
  */
9
9
  import {
10
- __experimentalItemGroup as ItemGroup,
11
- __experimentalItem as Item,
12
- __experimentalHStack as HStack,
13
- FlexItem,
10
+ Button,
14
11
  ColorIndicator,
15
12
  Dropdown,
13
+ FlexItem,
14
+ __experimentalHStack as HStack,
15
+ __experimentalToolsPanelItem as ToolsPanelItem,
16
16
  } from '@wordpress/components';
17
17
 
18
18
  /**
@@ -20,77 +20,145 @@ import {
20
20
  */
21
21
  import ColorGradientControl from './control';
22
22
 
23
+ // When the `ColorGradientSettingsDropdown` controls are being rendered to a
24
+ // `ToolsPanel` they must be wrapped in a `ToolsPanelItem`.
25
+ const WithToolsPanelItem = ( { setting, children, panelId, ...props } ) => {
26
+ const clearValue = () => {
27
+ if ( setting.colorValue ) {
28
+ setting.onColorChange();
29
+ } else if ( setting.gradientValue ) {
30
+ setting.onGradientChange();
31
+ }
32
+ };
33
+ return (
34
+ <ToolsPanelItem
35
+ hasValue={ () => {
36
+ return !! setting.colorValue || !! setting.gradientValue;
37
+ } }
38
+ label={ setting.label }
39
+ onDeselect={ clearValue }
40
+ isShownByDefault={
41
+ setting.isShownByDefault !== undefined
42
+ ? setting.isShownByDefault
43
+ : true
44
+ }
45
+ { ...props }
46
+ className="block-editor-tools-panel-color-gradient-settings__item"
47
+ panelId={ panelId }
48
+ // Pass resetAllFilter if supplied due to rendering via SlotFill
49
+ // into parent ToolsPanel.
50
+ resetAllFilter={ setting.resetAllFilter }
51
+ >
52
+ { children }
53
+ </ToolsPanelItem>
54
+ );
55
+ };
56
+
57
+ const LabeledColorIndicator = ( { colorValue, label } ) => (
58
+ <HStack justify="flex-start">
59
+ <ColorIndicator
60
+ className="block-editor-panel-color-gradient-settings__color-indicator"
61
+ colorValue={ colorValue }
62
+ />
63
+ <FlexItem>{ label }</FlexItem>
64
+ </HStack>
65
+ );
66
+
67
+ // Renders a color dropdown's toggle as an `Item` if it is within an `ItemGroup`
68
+ // or as a `Button` if it isn't e.g. the controls are being rendered in
69
+ // a `ToolsPanel`.
70
+ const renderToggle = ( settings ) => ( { onToggle, isOpen } ) => {
71
+ const { colorValue, label } = settings;
72
+
73
+ const toggleProps = {
74
+ onClick: onToggle,
75
+ className: classnames(
76
+ 'block-editor-panel-color-gradient-settings__dropdown',
77
+ { 'is-open': isOpen }
78
+ ),
79
+ 'aria-expanded': isOpen,
80
+ };
81
+
82
+ return (
83
+ <Button { ...toggleProps }>
84
+ <LabeledColorIndicator colorValue={ colorValue } label={ label } />
85
+ </Button>
86
+ );
87
+ };
88
+
89
+ // Renders a collection of color controls as dropdowns. Depending upon the
90
+ // context in which these dropdowns are being rendered, they may be wrapped
91
+ // in an `ItemGroup` with each dropdown's toggle as an `Item`, or alternatively,
92
+ // the may be individually wrapped in a `ToolsPanelItem` with the toggle as
93
+ // a regular `Button`.
94
+ //
95
+ // For more context see: https://github.com/WordPress/gutenberg/pull/40084
23
96
  export default function ColorGradientSettingsDropdown( {
24
97
  colors,
25
- gradients,
26
98
  disableCustomColors,
27
99
  disableCustomGradients,
28
- __experimentalHasMultipleOrigins,
29
- __experimentalIsRenderedInSidebar,
30
100
  enableAlpha,
101
+ gradients,
31
102
  settings,
103
+ __experimentalHasMultipleOrigins,
104
+ __experimentalIsRenderedInSidebar,
105
+ ...props
32
106
  } ) {
33
- let dropdownPosition;
107
+ let popoverProps;
34
108
  if ( __experimentalIsRenderedInSidebar ) {
35
- dropdownPosition = 'bottom left';
109
+ popoverProps = {
110
+ placement: 'left-start',
111
+ offset: 36,
112
+ };
36
113
  }
37
114
 
38
115
  return (
39
- <ItemGroup
40
- isBordered
41
- isSeparated
42
- className="block-editor-panel-color-gradient-settings__item-group"
43
- >
44
- { settings.map(
45
- ( setting, index ) =>
116
+ <>
117
+ { settings.map( ( setting, index ) => {
118
+ const controlProps = {
119
+ clearable: false,
120
+ colorValue: setting.colorValue,
121
+ colors,
122
+ disableCustomColors,
123
+ disableCustomGradients,
124
+ enableAlpha,
125
+ gradientValue: setting.gradientValue,
126
+ gradients,
127
+ label: setting.label,
128
+ onColorChange: setting.onColorChange,
129
+ onGradientChange: setting.onGradientChange,
130
+ showTitle: false,
131
+ __experimentalHasMultipleOrigins,
132
+ __experimentalIsRenderedInSidebar,
133
+ ...setting,
134
+ };
135
+ const toggleSettings = {
136
+ colorValue: setting.gradientValue ?? setting.colorValue,
137
+ label: setting.label,
138
+ };
139
+
140
+ return (
46
141
  setting && (
47
- <Dropdown
142
+ // If not in an `ItemGroup` wrap the dropdown in a
143
+ // `ToolsPanelItem`
144
+ <WithToolsPanelItem
48
145
  key={ index }
49
- position={ dropdownPosition }
50
- className="block-editor-panel-color-gradient-settings__dropdown"
51
- contentClassName="block-editor-panel-color-gradient-settings__dropdown-content"
52
- renderToggle={ ( { isOpen, onToggle } ) => {
53
- return (
54
- <Item
55
- onClick={ onToggle }
56
- className={ classnames(
57
- 'block-editor-panel-color-gradient-settings__item',
58
- { 'is-open': isOpen }
59
- ) }
60
- >
61
- <HStack justify="flex-start">
62
- <ColorIndicator
63
- className="block-editor-panel-color-gradient-settings__color-indicator"
64
- colorValue={
65
- setting.gradientValue ??
66
- setting.colorValue
67
- }
68
- />
69
- <FlexItem>
70
- { setting.label }
71
- </FlexItem>
72
- </HStack>
73
- </Item>
74
- );
75
- } }
76
- renderContent={ () => (
77
- <ColorGradientControl
78
- showTitle={ false }
79
- { ...{
80
- colors,
81
- gradients,
82
- disableCustomColors,
83
- disableCustomGradients,
84
- __experimentalHasMultipleOrigins,
85
- __experimentalIsRenderedInSidebar,
86
- enableAlpha,
87
- ...setting,
88
- } }
89
- />
90
- ) }
91
- />
146
+ setting={ setting }
147
+ { ...props }
148
+ >
149
+ <Dropdown
150
+ popoverProps={ popoverProps }
151
+ className="block-editor-tools-panel-color-gradient-settings__dropdown"
152
+ contentClassName="block-editor-panel-color-gradient-settings__dropdown-content"
153
+ renderToggle={ renderToggle( toggleSettings ) }
154
+ renderContent={ () => (
155
+ <ColorGradientControl { ...controlProps } />
156
+ ) }
157
+ />
158
+ </WithToolsPanelItem>
92
159
  )
93
- ) }
94
- </ItemGroup>
160
+ );
161
+ } ) }
162
+ </>
95
163
  );
96
164
  }
@@ -9,27 +9,19 @@ import { every, isEmpty } from 'lodash';
9
9
  */
10
10
  import {
11
11
  __experimentalSpacer as Spacer,
12
- ColorIndicator,
13
- PanelBody,
12
+ __experimentalToolsPanel as ToolsPanel,
14
13
  } from '@wordpress/components';
15
- import { sprintf, __ } from '@wordpress/i18n';
14
+ import { useRegistry } from '@wordpress/data';
15
+ import { useInstanceId } from '@wordpress/compose';
16
16
 
17
17
  /**
18
18
  * Internal dependencies
19
19
  */
20
20
  import ColorGradientSettingsDropdown from './dropdown';
21
- import { getColorObjectByColorValue } from '../colors';
22
- import { __experimentalGetGradientObjectByGradientValue } from '../gradients';
23
21
  import useSetting from '../use-setting';
24
22
  import useCommonSingleMultipleSelects from './use-common-single-multiple-selects';
25
23
  import useMultipleOriginColorsAndGradients from './use-multiple-origin-colors-and-gradients';
26
24
 
27
- // translators: first %s: The type of color or gradient (e.g. background, overlay...), second %s: the color name or value (e.g. red or #ff0000)
28
- const colorIndicatorAriaLabel = __( '(%s: color %s)' );
29
-
30
- // translators: first %s: The type of color or gradient (e.g. background, overlay...), second %s: the color name or value (e.g. red or #ff0000)
31
- const gradientIndicatorAriaLabel = __( '(%s: gradient %s)' );
32
-
33
25
  const colorsAndGradientKeys = [
34
26
  'colors',
35
27
  'disableCustomColors',
@@ -37,55 +29,6 @@ const colorsAndGradientKeys = [
37
29
  'disableCustomGradients',
38
30
  ];
39
31
 
40
- const Indicators = ( { colors, gradients, settings } ) => {
41
- return settings.map(
42
- (
43
- {
44
- colorValue,
45
- gradientValue,
46
- label,
47
- colors: availableColors,
48
- gradients: availableGradients,
49
- },
50
- index
51
- ) => {
52
- if ( ! colorValue && ! gradientValue ) {
53
- return null;
54
- }
55
- let ariaLabel;
56
- if ( colorValue ) {
57
- const colorObject = getColorObjectByColorValue(
58
- availableColors || colors,
59
- colorValue
60
- );
61
- ariaLabel = sprintf(
62
- colorIndicatorAriaLabel,
63
- label.toLowerCase(),
64
- ( colorObject && colorObject.name ) || colorValue
65
- );
66
- } else {
67
- const gradientObject = __experimentalGetGradientObjectByGradientValue(
68
- availableGradients || gradients,
69
- colorValue
70
- );
71
- ariaLabel = sprintf(
72
- gradientIndicatorAriaLabel,
73
- label.toLowerCase(),
74
- ( gradientObject && gradientObject.name ) || gradientValue
75
- );
76
- }
77
-
78
- return (
79
- <ColorIndicator
80
- key={ index }
81
- colorValue={ colorValue || gradientValue }
82
- aria-label={ ariaLabel }
83
- />
84
- );
85
- }
86
- );
87
- };
88
-
89
32
  export const PanelColorGradientSettingsInner = ( {
90
33
  className,
91
34
  colors,
@@ -99,8 +42,9 @@ export const PanelColorGradientSettingsInner = ( {
99
42
  __experimentalHasMultipleOrigins,
100
43
  __experimentalIsRenderedInSidebar,
101
44
  enableAlpha,
102
- ...props
103
45
  } ) => {
46
+ const panelId = useInstanceId( PanelColorGradientSettingsInner );
47
+ const { batch } = useRegistry();
104
48
  if (
105
49
  isEmpty( colors ) &&
106
50
  isEmpty( gradients ) &&
@@ -120,28 +64,38 @@ export const PanelColorGradientSettingsInner = ( {
120
64
  return null;
121
65
  }
122
66
 
123
- const titleElement = (
124
- <span className="block-editor-panel-color-gradient-settings__panel-title">
125
- { title }
126
- <Indicators
127
- colors={ colors }
128
- gradients={ gradients }
129
- settings={ settings }
130
- />
131
- </span>
132
- );
133
-
134
67
  return (
135
- <PanelBody
68
+ <ToolsPanel
136
69
  className={ classnames(
137
70
  'block-editor-panel-color-gradient-settings',
138
71
  className
139
72
  ) }
140
- title={ showTitle ? titleElement : undefined }
141
- { ...props }
73
+ label={ showTitle ? title : undefined }
74
+ resetAll={ () => {
75
+ batch( () => {
76
+ settings.forEach(
77
+ ( {
78
+ colorValue,
79
+ gradientValue,
80
+ onColorChange,
81
+ onGradientChange,
82
+ } ) => {
83
+ if ( colorValue ) {
84
+ onColorChange();
85
+ } else if ( gradientValue ) {
86
+ onGradientChange();
87
+ }
88
+ }
89
+ );
90
+ } );
91
+ } }
92
+ panelId={ panelId }
93
+ __experimentalFirstVisibleItemClass="first"
94
+ __experimentalLastVisibleItemClass="last"
142
95
  >
143
96
  <ColorGradientSettingsDropdown
144
97
  settings={ settings }
98
+ panelId={ panelId }
145
99
  { ...{
146
100
  colors,
147
101
  gradients,
@@ -157,7 +111,7 @@ export const PanelColorGradientSettingsInner = ( {
157
111
  <Spacer marginY={ 4 } /> { children }
158
112
  </>
159
113
  ) }
160
- </PanelBody>
114
+ </ToolsPanel>
161
115
  );
162
116
  };
163
117
 
@@ -10,25 +10,14 @@
10
10
  min-width: 0;
11
11
  }
12
12
 
13
- .block-editor-panel-color-gradient-settings {
14
- .block-editor-panel-color-gradient-settings__panel-title {
15
- display: flex;
16
- gap: $grid-unit-10;
17
-
18
- .component-color-indicator {
19
- width: $grid-unit-15;
20
- height: $grid-unit-15;
21
- align-self: center;
22
-
23
- &:first-child {
24
- margin-left: $grid-unit-15;
25
- }
26
- }
13
+ .block-editor-panel-color-gradient-settings.block-editor-panel-color-gradient-settings {
14
+ &,
15
+ & > div:not(:first-of-type) {
16
+ display: block;
27
17
  }
18
+ }
28
19
 
29
- &.is-opened &__panel-title .component-color-indicator {
30
- display: none;
31
- }
20
+ .block-editor-panel-color-gradient-settings {
32
21
 
33
22
  // Must equal $color-palette-circle-size from:
34
23
  // @wordpress/components/src/circular-option-picker/style.scss
@@ -49,52 +38,65 @@
49
38
  margin-bottom: inherit;
50
39
  }
51
40
 
52
- .block-editor-panel-color-gradient-settings__dropdown {
53
- display: block;
54
- }
55
41
  }
56
42
 
57
- .block-editor-panel-color-gradient-settings__dropdown {
58
- width: 100%;
43
+ .block-editor-panel-color-gradient-settings__dropdown-content .components-popover__content {
44
+ width: $sidebar-width;
59
45
  }
60
46
 
61
- .block-editor-panel-color-gradient-settings__dropdown-content .components-popover__content {
62
- & > div {
63
- width: $sidebar-width;
64
- }
47
+
48
+ .block-editor-panel-color-gradient-settings__color-indicator {
49
+ // Show a diagonal line (crossed out) for empty swatches.
50
+ background: linear-gradient(-45deg, transparent 48%, $gray-300 48%, $gray-300 52%, transparent 52%);
65
51
  }
66
52
 
67
- @include break-medium() {
68
- .block-editor-panel-color-gradient-settings__dropdown-content {
69
- .components-popover__content {
70
- margin-right: #{ math.div($sidebar-width, 2) + $grid-unit-20 } !important;
71
- }
53
+ /**
54
+ * The following styles replicate the separated border of the
55
+ * `ItemGroup` component but allows for hidden items. This is because
56
+ * to maintain the order of `ToolsPanel` controls, each `ToolsPanelItem`
57
+ * must at least render a placeholder which would otherwise interfere
58
+ * with the `:last-child` styles.
59
+ */
60
+ .block-editor-tools-panel-color-gradient-settings__item {
61
+ padding: 0;
62
+
63
+ // Border styles.
64
+ border-left: 1px solid rgba(0, 0, 0, 0.1);
65
+ border-right: 1px solid rgba(0, 0, 0, 0.1);
66
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
67
+
68
+ &.first {
69
+ margin-top: $grid-unit-30;
70
+ border-top-left-radius: 2px;
71
+ border-top-right-radius: 2px;
72
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
73
+ }
72
74
 
73
- &.is-from-top .components-popover__content {
74
- margin-top: #{ -($grid-unit-60 + $grid-unit-15) } !important;
75
- }
75
+ &.last {
76
+ border-bottom-left-radius: 2px;
77
+ border-bottom-right-radius: 2px;
78
+ }
76
79
 
77
- &.is-from-bottom .components-popover__content {
78
- margin-bottom: #{ -($grid-unit-60 + $grid-unit-15) } !important;
79
- }
80
+ > div,
81
+ > div > button {
82
+ border-radius: inherit;
80
83
  }
81
84
  }
82
85
 
83
- .block-editor-panel-color-gradient-settings__dropdown:last-child > div {
84
- border-bottom-width: 0;
85
- }
86
+ .block-editor-tools-panel-color-gradient-settings__dropdown {
87
+ display: block;
88
+ padding: 0;
86
89
 
87
- .block-editor-panel-color-gradient-settings__item {
88
- padding-top: $grid-unit-15 !important;
89
- padding-bottom: $grid-unit-15 !important;
90
- .block-editor-panel-color-gradient-settings__color-indicator {
91
- // Show a diagonal line (crossed out) for empty swatches.
92
- background: linear-gradient(-45deg, transparent 48%, $gray-300 48%, $gray-300 52%, transparent 52%);
93
- }
90
+ > button {
91
+ height: 46px;
94
92
 
95
- &.is-open {
96
- background: $gray-100;
97
- color: var(--wp-admin-theme-color);
93
+ &.is-open {
94
+ background: $gray-100;
95
+ color: var(--wp-admin-theme-color);
96
+ }
98
97
  }
99
98
  }
100
99
 
100
+ .block-editor-panel-color-gradient-settings__dropdown {
101
+ width: 100%;
102
+ }
@@ -2,7 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useDispatch, useSelect } from '@wordpress/data';
5
- import { switchToBlockType } from '@wordpress/blocks';
5
+ import { switchToBlockType, store as blocksStore } from '@wordpress/blocks';
6
6
  import { ToolbarButton, ToolbarGroup } from '@wordpress/components';
7
7
  import { group, row, stack } from '@wordpress/icons';
8
8
  import { _x } from '@wordpress/i18n';
@@ -28,14 +28,20 @@ function BlockGroupToolbar() {
28
28
  } = useConvertToGroupButtonProps();
29
29
  const { replaceBlocks } = useDispatch( blockEditorStore );
30
30
 
31
- const { canRemove } = useSelect(
31
+ const { canRemove, variations } = useSelect(
32
32
  ( select ) => {
33
33
  const { canRemoveBlocks } = select( blockEditorStore );
34
+ const { getBlockVariations } = select( blocksStore );
35
+
34
36
  return {
35
37
  canRemove: canRemoveBlocks( clientIds ),
38
+ variations: getBlockVariations(
39
+ groupingBlockName,
40
+ 'transform'
41
+ ),
36
42
  };
37
43
  },
38
- [ clientIds ]
44
+ [ clientIds, groupingBlockName ]
39
45
  );
40
46
 
41
47
  const onConvertToGroup = ( layout = 'group' ) => {
@@ -63,6 +69,13 @@ function BlockGroupToolbar() {
63
69
  return null;
64
70
  }
65
71
 
72
+ const canInsertRow = !! variations.find(
73
+ ( { name } ) => name === 'group-row'
74
+ );
75
+ const canInsertStack = !! variations.find(
76
+ ( { name } ) => name === 'group-stack'
77
+ );
78
+
66
79
  return (
67
80
  <ToolbarGroup>
68
81
  <ToolbarButton
@@ -70,16 +83,20 @@ function BlockGroupToolbar() {
70
83
  label={ _x( 'Group', 'verb' ) }
71
84
  onClick={ onConvertToGroup }
72
85
  />
73
- <ToolbarButton
74
- icon={ row }
75
- label={ _x( 'Row', 'single horizontal line' ) }
76
- onClick={ onConvertToRow }
77
- />
78
- <ToolbarButton
79
- icon={ stack }
80
- label={ _x( 'Stack', 'verb' ) }
81
- onClick={ onConvertToStack }
82
- />
86
+ { canInsertRow && (
87
+ <ToolbarButton
88
+ icon={ row }
89
+ label={ _x( 'Row', 'single horizontal line' ) }
90
+ onClick={ onConvertToRow }
91
+ />
92
+ ) }
93
+ { canInsertStack && (
94
+ <ToolbarButton
95
+ icon={ stack }
96
+ label={ _x( 'Stack', 'verb' ) }
97
+ onClick={ onConvertToStack }
98
+ />
99
+ ) }
83
100
  </ToolbarGroup>
84
101
  );
85
102
  }
@@ -9,7 +9,7 @@ $popover-padding: $grid-unit-20;
9
9
  $swatch-columns: math.floor(math.div($popover-width + $swatch-gap - 2 * $popover-padding, $swatch-size + $swatch-gap));
10
10
 
11
11
  .block-editor-duotone-control__popover {
12
- > .components-popover__content > div {
12
+ > .components-popover__content {
13
13
  padding: $popover-padding;
14
14
  width: $popover-width;
15
15
  }
@@ -34,9 +34,3 @@ $swatch-columns: math.floor(math.div($popover-width + $swatch-gap - 2 * $popover
34
34
  margin: $grid-unit-20 0;
35
35
  font-size: $helptext-font-size;
36
36
  }
37
-
38
- // Better align the popover under the swatch.
39
- // @todo: when the positioning for popovers gets refactored, this can presumably be removed.
40
- .block-editor-duotone-control__popover:not([data-y-axis="middle"][data-x-axis="right"]) > .components-popover__content {
41
- margin-left: -14px;
42
- }