@wordpress/block-editor 7.0.4 → 8.0.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 (347) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +31 -0
  3. package/build/components/alignment-control/ui.js +1 -2
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/block-icon/index.js +5 -1
  6. package/build/components/block-icon/index.js.map +1 -1
  7. package/build/components/block-inspector/index.js +4 -0
  8. package/build/components/block-inspector/index.js.map +1 -1
  9. package/build/components/block-list/index.native.js +1 -1
  10. package/build/components/block-list/index.native.js.map +1 -1
  11. package/build/components/block-list/use-block-props/use-multi-selection.js +21 -8
  12. package/build/components/block-list/use-block-props/use-multi-selection.js.map +1 -1
  13. package/build/components/block-navigation/dropdown.js +0 -1
  14. package/build/components/block-navigation/dropdown.js.map +1 -1
  15. package/build/components/block-patterns-list/index.js +1 -8
  16. package/build/components/block-patterns-list/index.js.map +1 -1
  17. package/build/components/block-settings/container.native.js +5 -2
  18. package/build/components/block-settings/container.native.js.map +1 -1
  19. package/build/components/block-settings-menu/block-settings-dropdown.js +22 -2
  20. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  21. package/build/components/block-styles/preview.native.js +2 -2
  22. package/build/components/block-styles/preview.native.js.map +1 -1
  23. package/build/components/colors-gradients/control.js +8 -47
  24. package/build/components/colors-gradients/control.js.map +1 -1
  25. package/build/components/colors-gradients/panel-color-gradient-settings.js +81 -6
  26. package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  27. package/build/components/duotone-control/index.js +5 -2
  28. package/build/components/duotone-control/index.js.map +1 -1
  29. package/build/components/font-appearance-control/index.js +27 -15
  30. package/build/components/font-appearance-control/index.js.map +1 -1
  31. package/build/components/iframe/index.js +1 -1
  32. package/build/components/iframe/index.js.map +1 -1
  33. package/build/components/index.js +20 -2
  34. package/build/components/index.js.map +1 -1
  35. package/build/components/index.native.js +2 -2
  36. package/build/components/index.native.js.map +1 -1
  37. package/build/components/inner-blocks/index.js +5 -4
  38. package/build/components/inner-blocks/index.js.map +1 -1
  39. package/build/components/inner-blocks/index.native.js +4 -3
  40. package/build/components/inner-blocks/index.native.js.map +1 -1
  41. package/build/components/inserter/block-patterns-explorer/explorer.js +62 -0
  42. package/build/components/inserter/block-patterns-explorer/explorer.js.map +1 -0
  43. package/build/components/inserter/block-patterns-explorer/patterns-list.js +111 -0
  44. package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -0
  45. package/build/components/inserter/block-patterns-explorer/sidebar.js +78 -0
  46. package/build/components/inserter/block-patterns-explorer/sidebar.js.map +1 -0
  47. package/build/components/inserter/block-patterns-tab.js +74 -45
  48. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  49. package/build/components/inserter/hooks/use-block-type-impressions.native.js +4 -7
  50. package/build/components/inserter/hooks/use-block-type-impressions.native.js.map +1 -1
  51. package/build/components/inserter/pattern-panel.js +19 -10
  52. package/build/components/inserter/pattern-panel.js.map +1 -1
  53. package/build/components/inspector-controls/groups.js +3 -1
  54. package/build/components/inspector-controls/groups.js.map +1 -1
  55. package/build/components/letter-spacing-control/index.js +9 -6
  56. package/build/components/letter-spacing-control/index.js.map +1 -1
  57. package/build/components/link-control/index.js +88 -35
  58. package/build/components/link-control/index.js.map +1 -1
  59. package/build/components/link-control/link-preview.js +19 -6
  60. package/build/components/link-control/link-preview.js.map +1 -1
  61. package/build/components/link-control/search-input.js +12 -3
  62. package/build/components/link-control/search-input.js.map +1 -1
  63. package/build/components/list-view/block.js +49 -23
  64. package/build/components/list-view/block.js.map +1 -1
  65. package/build/components/list-view/branch.js +92 -73
  66. package/build/components/list-view/branch.js.map +1 -1
  67. package/build/components/list-view/index.js +39 -16
  68. package/build/components/list-view/index.js.map +1 -1
  69. package/build/components/list-view/leaf.js +1 -1
  70. package/build/components/list-view/leaf.js.map +1 -1
  71. package/build/components/list-view/use-list-view-client-ids.js +8 -58
  72. package/build/components/list-view/use-list-view-client-ids.js.map +1 -1
  73. package/build/components/rich-text/embed-handler-picker.native.js +1 -0
  74. package/build/components/rich-text/embed-handler-picker.native.js.map +1 -1
  75. package/build/components/rich-text/format-edit.js +28 -2
  76. package/build/components/rich-text/format-edit.js.map +1 -1
  77. package/build/components/rich-text/format-toolbar/index.js +2 -1
  78. package/build/components/rich-text/format-toolbar/index.js.map +1 -1
  79. package/build/components/url-input/index.js +11 -4
  80. package/build/components/url-input/index.js.map +1 -1
  81. package/build/components/use-setting/index.js +48 -9
  82. package/build/components/use-setting/index.js.map +1 -1
  83. package/build/hooks/border.js +5 -5
  84. package/build/hooks/border.js.map +1 -1
  85. package/build/hooks/color-panel.js +2 -1
  86. package/build/hooks/color-panel.js.map +1 -1
  87. package/build/hooks/duotone.js +16 -5
  88. package/build/hooks/duotone.js.map +1 -1
  89. package/build/hooks/font-appearance.js +49 -6
  90. package/build/hooks/font-appearance.js.map +1 -1
  91. package/build/hooks/font-family.js +37 -16
  92. package/build/hooks/font-family.js.map +1 -1
  93. package/build/hooks/font-size.js +51 -9
  94. package/build/hooks/font-size.js.map +1 -1
  95. package/build/hooks/index.js +8 -0
  96. package/build/hooks/index.js.map +1 -1
  97. package/build/hooks/index.native.js +8 -0
  98. package/build/hooks/index.native.js.map +1 -1
  99. package/build/hooks/letter-spacing.js +44 -7
  100. package/build/hooks/letter-spacing.js.map +1 -1
  101. package/build/hooks/line-height.js +45 -8
  102. package/build/hooks/line-height.js.map +1 -1
  103. package/build/hooks/margin.js +1 -1
  104. package/build/hooks/margin.js.map +1 -1
  105. package/build/hooks/padding.js +1 -1
  106. package/build/hooks/padding.js.map +1 -1
  107. package/build/hooks/text-decoration.js +42 -6
  108. package/build/hooks/text-decoration.js.map +1 -1
  109. package/build/hooks/text-transform.js +42 -6
  110. package/build/hooks/text-transform.js.map +1 -1
  111. package/build/hooks/typography.js +108 -8
  112. package/build/hooks/typography.js.map +1 -1
  113. package/build/hooks/use-cached-truthy.js +29 -0
  114. package/build/hooks/use-cached-truthy.js.map +1 -0
  115. package/build/index.js +7 -0
  116. package/build/index.js.map +1 -1
  117. package/build/layouts/flex.js +120 -28
  118. package/build/layouts/flex.js.map +1 -1
  119. package/build/store/actions.js +303 -265
  120. package/build/store/actions.js.map +1 -1
  121. package/build/store/index.js +1 -3
  122. package/build/store/index.js.map +1 -1
  123. package/build/store/reducer.js +23 -22
  124. package/build/store/reducer.js.map +1 -1
  125. package/build/store/selectors.js +44 -35
  126. package/build/store/selectors.js.map +1 -1
  127. package/build-module/components/alignment-control/ui.js +1 -2
  128. package/build-module/components/alignment-control/ui.js.map +1 -1
  129. package/build-module/components/block-icon/index.js +5 -1
  130. package/build-module/components/block-icon/index.js.map +1 -1
  131. package/build-module/components/block-inspector/index.js +4 -0
  132. package/build-module/components/block-inspector/index.js.map +1 -1
  133. package/build-module/components/block-list/index.native.js +1 -1
  134. package/build-module/components/block-list/index.native.js.map +1 -1
  135. package/build-module/components/block-list/use-block-props/use-multi-selection.js +21 -8
  136. package/build-module/components/block-list/use-block-props/use-multi-selection.js.map +1 -1
  137. package/build-module/components/block-navigation/dropdown.js +0 -1
  138. package/build-module/components/block-navigation/dropdown.js.map +1 -1
  139. package/build-module/components/block-patterns-list/index.js +1 -6
  140. package/build-module/components/block-patterns-list/index.js.map +1 -1
  141. package/build-module/components/block-settings/container.native.js +6 -3
  142. package/build-module/components/block-settings/container.native.js.map +1 -1
  143. package/build-module/components/block-settings-menu/block-settings-dropdown.js +24 -4
  144. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  145. package/build-module/components/block-styles/preview.native.js +2 -2
  146. package/build-module/components/block-styles/preview.native.js.map +1 -1
  147. package/build-module/components/colors-gradients/control.js +12 -53
  148. package/build-module/components/colors-gradients/control.js.map +1 -1
  149. package/build-module/components/colors-gradients/panel-color-gradient-settings.js +82 -6
  150. package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  151. package/build-module/components/duotone-control/index.js +5 -2
  152. package/build-module/components/duotone-control/index.js.map +1 -1
  153. package/build-module/components/font-appearance-control/index.js +23 -15
  154. package/build-module/components/font-appearance-control/index.js.map +1 -1
  155. package/build-module/components/iframe/index.js +1 -1
  156. package/build-module/components/iframe/index.js.map +1 -1
  157. package/build-module/components/index.js +3 -1
  158. package/build-module/components/index.js.map +1 -1
  159. package/build-module/components/index.native.js +1 -1
  160. package/build-module/components/index.native.js.map +1 -1
  161. package/build-module/components/inner-blocks/index.js +6 -5
  162. package/build-module/components/inner-blocks/index.js.map +1 -1
  163. package/build-module/components/inner-blocks/index.native.js +5 -4
  164. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  165. package/build-module/components/inserter/block-patterns-explorer/explorer.js +50 -0
  166. package/build-module/components/inserter/block-patterns-explorer/explorer.js.map +1 -0
  167. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js +92 -0
  168. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -0
  169. package/build-module/components/inserter/block-patterns-explorer/sidebar.js +69 -0
  170. package/build-module/components/inserter/block-patterns-explorer/sidebar.js.map +1 -0
  171. package/build-module/components/inserter/block-patterns-tab.js +75 -46
  172. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  173. package/build-module/components/inserter/hooks/use-block-type-impressions.native.js +4 -7
  174. package/build-module/components/inserter/hooks/use-block-type-impressions.native.js.map +1 -1
  175. package/build-module/components/inserter/pattern-panel.js +21 -13
  176. package/build-module/components/inserter/pattern-panel.js.map +1 -1
  177. package/build-module/components/inspector-controls/groups.js +3 -1
  178. package/build-module/components/inspector-controls/groups.js.map +1 -1
  179. package/build-module/components/letter-spacing-control/index.js +9 -6
  180. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  181. package/build-module/components/link-control/index.js +88 -36
  182. package/build-module/components/link-control/index.js.map +1 -1
  183. package/build-module/components/link-control/link-preview.js +19 -7
  184. package/build-module/components/link-control/link-preview.js.map +1 -1
  185. package/build-module/components/link-control/search-input.js +11 -3
  186. package/build-module/components/link-control/search-input.js.map +1 -1
  187. package/build-module/components/list-view/block.js +49 -24
  188. package/build-module/components/list-view/block.js.map +1 -1
  189. package/build-module/components/list-view/branch.js +92 -73
  190. package/build-module/components/list-view/branch.js.map +1 -1
  191. package/build-module/components/list-view/index.js +41 -18
  192. package/build-module/components/list-view/index.js.map +1 -1
  193. package/build-module/components/list-view/leaf.js +1 -1
  194. package/build-module/components/list-view/leaf.js.map +1 -1
  195. package/build-module/components/list-view/use-list-view-client-ids.js +8 -58
  196. package/build-module/components/list-view/use-list-view-client-ids.js.map +1 -1
  197. package/build-module/components/rich-text/embed-handler-picker.native.js +1 -0
  198. package/build-module/components/rich-text/embed-handler-picker.native.js.map +1 -1
  199. package/build-module/components/rich-text/format-edit.js +28 -3
  200. package/build-module/components/rich-text/format-edit.js.map +1 -1
  201. package/build-module/components/rich-text/format-toolbar/index.js +2 -1
  202. package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
  203. package/build-module/components/url-input/index.js +11 -4
  204. package/build-module/components/url-input/index.js.map +1 -1
  205. package/build-module/components/use-setting/index.js +48 -9
  206. package/build-module/components/use-setting/index.js.map +1 -1
  207. package/build-module/hooks/border.js +5 -5
  208. package/build-module/hooks/border.js.map +1 -1
  209. package/build-module/hooks/color-panel.js +2 -1
  210. package/build-module/hooks/color-panel.js.map +1 -1
  211. package/build-module/hooks/duotone.js +16 -5
  212. package/build-module/hooks/duotone.js.map +1 -1
  213. package/build-module/hooks/font-appearance.js +45 -6
  214. package/build-module/hooks/font-appearance.js.map +1 -1
  215. package/build-module/hooks/font-family.js +33 -16
  216. package/build-module/hooks/font-family.js.map +1 -1
  217. package/build-module/hooks/font-size.js +47 -9
  218. package/build-module/hooks/font-size.js.map +1 -1
  219. package/build-module/hooks/index.js +1 -0
  220. package/build-module/hooks/index.js.map +1 -1
  221. package/build-module/hooks/index.native.js +1 -0
  222. package/build-module/hooks/index.native.js.map +1 -1
  223. package/build-module/hooks/letter-spacing.js +40 -7
  224. package/build-module/hooks/letter-spacing.js.map +1 -1
  225. package/build-module/hooks/line-height.js +41 -8
  226. package/build-module/hooks/line-height.js.map +1 -1
  227. package/build-module/hooks/margin.js +1 -1
  228. package/build-module/hooks/margin.js.map +1 -1
  229. package/build-module/hooks/padding.js +1 -1
  230. package/build-module/hooks/padding.js.map +1 -1
  231. package/build-module/hooks/text-decoration.js +38 -6
  232. package/build-module/hooks/text-decoration.js.map +1 -1
  233. package/build-module/hooks/text-transform.js +38 -6
  234. package/build-module/hooks/text-transform.js.map +1 -1
  235. package/build-module/hooks/typography.js +117 -17
  236. package/build-module/hooks/typography.js.map +1 -1
  237. package/build-module/hooks/use-cached-truthy.js +21 -0
  238. package/build-module/hooks/use-cached-truthy.js.map +1 -0
  239. package/build-module/index.js +1 -1
  240. package/build-module/index.js.map +1 -1
  241. package/build-module/layouts/flex.js +124 -32
  242. package/build-module/layouts/flex.js.map +1 -1
  243. package/build-module/store/actions.js +266 -241
  244. package/build-module/store/actions.js.map +1 -1
  245. package/build-module/store/index.js +1 -2
  246. package/build-module/store/index.js.map +1 -1
  247. package/build-module/store/reducer.js +23 -22
  248. package/build-module/store/reducer.js.map +1 -1
  249. package/build-module/store/selectors.js +42 -30
  250. package/build-module/store/selectors.js.map +1 -1
  251. package/build-style/style-rtl.css +160 -57
  252. package/build-style/style.css +160 -57
  253. package/package.json +13 -14
  254. package/src/components/alignment-control/test/__snapshots__/index.js.snap +0 -2
  255. package/src/components/alignment-control/ui.js +1 -4
  256. package/src/components/block-draggable/style.scss +19 -4
  257. package/src/components/block-icon/index.js +4 -1
  258. package/src/components/block-inspector/index.js +5 -0
  259. package/src/components/block-list/index.native.js +1 -1
  260. package/src/components/block-list/use-block-props/use-multi-selection.js +27 -7
  261. package/src/components/block-navigation/dropdown.js +0 -1
  262. package/src/components/block-patterns-list/index.js +1 -8
  263. package/src/components/block-patterns-list/style.scss +22 -12
  264. package/src/components/block-settings/container.native.js +7 -0
  265. package/src/components/block-settings-menu/block-settings-dropdown.js +19 -7
  266. package/src/components/block-styles/preview.native.js +2 -2
  267. package/src/components/block-switcher/test/__snapshots__/index.js.snap +1 -1
  268. package/src/components/color-palette/test/__snapshots__/control.js.snap +88 -63
  269. package/src/components/colors-gradients/control.js +19 -62
  270. package/src/components/colors-gradients/panel-color-gradient-settings.js +76 -6
  271. package/src/components/colors-gradients/style.scss +3 -14
  272. package/src/components/colors-gradients/test/control.js +0 -16
  273. package/src/components/duotone-control/index.js +6 -0
  274. package/src/components/duotone-control/style.scss +27 -12
  275. package/src/components/font-appearance-control/index.js +22 -14
  276. package/src/components/iframe/index.js +1 -1
  277. package/src/components/index.js +3 -4
  278. package/src/components/index.native.js +1 -4
  279. package/src/components/inner-blocks/index.js +4 -4
  280. package/src/components/inner-blocks/index.native.js +7 -4
  281. package/src/components/inserter/block-patterns-explorer/explorer.js +50 -0
  282. package/src/components/inserter/block-patterns-explorer/patterns-list.js +122 -0
  283. package/src/components/inserter/block-patterns-explorer/sidebar.js +73 -0
  284. package/src/components/inserter/block-patterns-tab.js +107 -80
  285. package/src/components/inserter/hooks/use-block-type-impressions.native.js +14 -21
  286. package/src/components/inserter/pattern-panel.js +33 -16
  287. package/src/components/inserter/style.scss +64 -1
  288. package/src/components/inserter/test/block-types-tab.native.js +1 -1
  289. package/src/components/inserter/test/fixtures/index.native.js +12 -0
  290. package/src/components/inspector-controls/groups.js +4 -0
  291. package/src/components/letter-spacing-control/index.js +12 -6
  292. package/src/components/link-control/README.md +7 -0
  293. package/src/components/link-control/index.js +99 -34
  294. package/src/components/link-control/link-preview.js +21 -9
  295. package/src/components/link-control/search-input.js +9 -3
  296. package/src/components/link-control/style.scss +32 -16
  297. package/src/components/link-control/test/index.js +179 -4
  298. package/src/components/list-view/block.js +67 -23
  299. package/src/components/list-view/branch.js +113 -91
  300. package/src/components/list-view/index.js +58 -19
  301. package/src/components/list-view/leaf.js +1 -1
  302. package/src/components/list-view/style.scss +14 -3
  303. package/src/components/list-view/use-list-view-client-ids.js +7 -66
  304. package/src/components/rich-text/embed-handler-picker.native.js +1 -0
  305. package/src/components/rich-text/format-edit.js +36 -2
  306. package/src/components/rich-text/format-toolbar/index.js +3 -0
  307. package/src/components/url-input/index.js +14 -4
  308. package/src/components/use-setting/index.js +49 -11
  309. package/src/hooks/border.js +8 -11
  310. package/src/hooks/color-panel.js +1 -0
  311. package/src/hooks/duotone.js +21 -7
  312. package/src/hooks/font-appearance.js +38 -7
  313. package/src/hooks/font-family.js +29 -13
  314. package/src/hooks/font-size.js +42 -6
  315. package/src/hooks/index.js +1 -0
  316. package/src/hooks/index.native.js +1 -0
  317. package/src/hooks/layout.scss +3 -1
  318. package/src/hooks/letter-spacing.js +35 -7
  319. package/src/hooks/line-height.js +37 -9
  320. package/src/hooks/margin.js +1 -1
  321. package/src/hooks/padding.js +1 -1
  322. package/src/hooks/text-decoration.js +34 -6
  323. package/src/hooks/text-transform.js +34 -6
  324. package/src/hooks/typography.js +165 -15
  325. package/src/hooks/typography.scss +16 -0
  326. package/src/hooks/use-cached-truthy.js +20 -0
  327. package/src/index.js +1 -0
  328. package/src/layouts/flex.js +137 -41
  329. package/src/store/actions.js +223 -391
  330. package/src/store/index.js +1 -2
  331. package/src/store/reducer.js +36 -18
  332. package/src/store/selectors.js +52 -47
  333. package/src/store/test/actions.js +395 -694
  334. package/src/store/test/selectors.js +79 -21
  335. package/src/style.scss +1 -1
  336. package/src/utils/test/parse-css-unit-to-px.js +127 -167
  337. package/build/components/text-decoration-and-transform/index.js +0 -39
  338. package/build/components/text-decoration-and-transform/index.js.map +0 -1
  339. package/build/store/controls.js +0 -44
  340. package/build/store/controls.js.map +0 -1
  341. package/build-module/components/text-decoration-and-transform/index.js +0 -30
  342. package/build-module/components/text-decoration-and-transform/index.js.map +0 -1
  343. package/build-module/store/controls.js +0 -32
  344. package/build-module/store/controls.js.map +0 -1
  345. package/src/components/text-decoration-and-transform/index.js +0 -36
  346. package/src/components/text-decoration-and-transform/style.scss +0 -3
  347. package/src/store/controls.js +0 -39
@@ -6,6 +6,7 @@ import {
6
6
  BottomSheet,
7
7
  ColorSettings,
8
8
  FocalPointSettingsPanel,
9
+ ImageLinkDestinationsScreen,
9
10
  LinkPickerScreen,
10
11
  } from '@wordpress/components';
11
12
  import { compose } from '@wordpress/compose';
@@ -21,6 +22,7 @@ export const blockSettingsScreens = {
21
22
  color: 'Color',
22
23
  focalPoint: 'FocalPoint',
23
24
  linkPicker: 'linkPicker',
25
+ imageLinkDestinations: 'imageLinkDestinations',
24
26
  };
25
27
 
26
28
  function BottomSheetSettings( {
@@ -75,6 +77,11 @@ function BottomSheetSettings( {
75
77
  returnScreenName={ blockSettingsScreens.settings }
76
78
  />
77
79
  </BottomSheet.NavigationScreen>
80
+ <BottomSheet.NavigationScreen
81
+ name={ blockSettingsScreens.imageLinkDestinations }
82
+ >
83
+ <ImageLinkDestinationsScreen { ...props } />
84
+ </BottomSheet.NavigationScreen>
78
85
  </BottomSheet.NavigationContainer>
79
86
  </BottomSheet>
80
87
  );
@@ -6,13 +6,13 @@ import { castArray, flow, noop } from 'lodash';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { __ } from '@wordpress/i18n';
9
+ import { __, sprintf } from '@wordpress/i18n';
10
10
  import { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';
11
11
  import { useSelect } from '@wordpress/data';
12
12
  import { moreVertical } from '@wordpress/icons';
13
13
 
14
14
  import { Children, cloneElement, useCallback } from '@wordpress/element';
15
- import { serialize } from '@wordpress/blocks';
15
+ import { serialize, store as blocksStore } from '@wordpress/blocks';
16
16
  import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';
17
17
  import { useCopyToClipboard } from '@wordpress/compose';
18
18
 
@@ -46,9 +46,17 @@ export function BlockSettingsDropdown( {
46
46
  const blockClientIds = castArray( clientIds );
47
47
  const count = blockClientIds.length;
48
48
  const firstBlockClientId = blockClientIds[ 0 ];
49
- const onlyBlock = useSelect(
50
- ( select ) => 1 === select( blockEditorStore ).getBlockCount(),
51
- []
49
+ const { onlyBlock, title } = useSelect(
50
+ ( select ) => {
51
+ const { getBlockCount, getBlockName } = select( blockEditorStore );
52
+ const { getBlockType } = select( blocksStore );
53
+ return {
54
+ onlyBlock: 1 === getBlockCount(),
55
+ title: getBlockType( getBlockName( firstBlockClientId ) )
56
+ ?.title,
57
+ };
58
+ },
59
+ [ firstBlockClientId ]
52
60
  );
53
61
 
54
62
  const shortcuts = useSelect( ( select ) => {
@@ -79,8 +87,12 @@ export function BlockSettingsDropdown( {
79
87
  [ __experimentalSelectBlock ]
80
88
  );
81
89
 
82
- const removeBlockLabel =
83
- count === 1 ? __( 'Remove block' ) : __( 'Remove blocks' );
90
+ const label = sprintf(
91
+ /* translators: %s: block name */
92
+ __( 'Remove %s' ),
93
+ title
94
+ );
95
+ const removeBlockLabel = count === 1 ? label : __( 'Remove blocks' );
84
96
 
85
97
  return (
86
98
  <BlockActions
@@ -67,11 +67,11 @@ function StylePreview( { onPress, isActive, style, url } ) {
67
67
  );
68
68
 
69
69
  const getOutline = ( outlineStyles ) =>
70
- outlineStyles.map( ( outlineStyle ) => {
70
+ outlineStyles.map( ( outlineStyle, index ) => {
71
71
  return (
72
72
  <Animated.View
73
73
  style={ [ outlineStyle, { opacity }, styles[ name ] ] }
74
- key={ JSON.stringify( outlineStyle ) }
74
+ key={ index }
75
75
  />
76
76
  );
77
77
  } );
@@ -6,7 +6,7 @@ exports[`BlockSwitcherDropdownMenu should render disabled block switcher with mu
6
6
  className="block-editor-block-switcher__no-switcher-icon"
7
7
  disabled={true}
8
8
  icon={
9
- <BlockIcon
9
+ <Memo(BlockIcon)
10
10
  icon={
11
11
  <SVG
12
12
  viewBox="0 0 24 24"
@@ -32,13 +32,38 @@ exports[`ColorPaletteControl matches the snapshot 1`] = `
32
32
  }
33
33
 
34
34
  .emotion-4>*+*:not( marquee ) {
35
- margin-top: calc(4px * 2);
35
+ margin-top: calc(4px * 1);
36
36
  }
37
37
 
38
38
  .emotion-4>* {
39
39
  min-height: 0;
40
40
  }
41
41
 
42
+ .emotion-6 {
43
+ display: -webkit-box;
44
+ display: -webkit-flex;
45
+ display: -ms-flexbox;
46
+ display: flex;
47
+ -webkit-align-items: normal;
48
+ -webkit-box-align: normal;
49
+ -ms-flex-align: normal;
50
+ align-items: normal;
51
+ -webkit-flex-direction: column;
52
+ -ms-flex-direction: column;
53
+ flex-direction: column;
54
+ -webkit-box-pack: justify;
55
+ -webkit-justify-content: space-between;
56
+ justify-content: space-between;
57
+ }
58
+
59
+ .emotion-6>*+*:not( marquee ) {
60
+ margin-top: calc(4px * 3);
61
+ }
62
+
63
+ .emotion-6>* {
64
+ min-height: 0;
65
+ }
66
+
42
67
  <div
43
68
  className="components-base-control block-editor-color-gradient-control emotion-0 emotion-1"
44
69
  >
@@ -59,89 +84,89 @@ exports[`ColorPaletteControl matches the snapshot 1`] = `
59
84
  className="components-base-control__label"
60
85
  >
61
86
  Test Color
62
- <span
63
- aria-label="(Color: #f00)"
64
- className="component-color-indicator"
65
- style={
66
- Object {
67
- "background": "#f00",
68
- }
69
- }
70
- />
71
87
  </span>
72
88
  </div>
73
89
  </legend>
74
90
  <div
75
- className="components-circular-option-picker"
91
+ className="components-flex components-h-stack components-v-stack emotion-6 emotion-5"
92
+ data-wp-c16t={true}
93
+ data-wp-component="VStack"
76
94
  >
77
95
  <div
78
- className="components-circular-option-picker__swatches"
96
+ className="components-dropdown"
97
+ tabIndex="-1"
98
+ >
99
+ <button
100
+ aria-expanded={false}
101
+ aria-haspopup="true"
102
+ aria-label="Custom color picker"
103
+ className="components-color-palette__custom-color"
104
+ onClick={[Function]}
105
+ style={
106
+ Object {
107
+ "background": "#f00",
108
+ }
109
+ }
110
+ >
111
+ #f00
112
+ </button>
113
+ </div>
114
+ <div
115
+ className="components-circular-option-picker"
79
116
  >
80
117
  <div
81
- className="components-circular-option-picker__option-wrapper"
118
+ className="components-circular-option-picker__swatches"
82
119
  >
83
- <button
84
- aria-describedby={null}
85
- aria-label="Color: red"
86
- aria-pressed={true}
87
- className="components-button components-circular-option-picker__option is-pressed"
88
- onBlur={[Function]}
89
- onClick={[Function]}
90
- onFocus={[Function]}
91
- onMouseDown={[Function]}
92
- onMouseEnter={[Function]}
93
- onMouseLeave={[Function]}
94
- style={
95
- Object {
96
- "backgroundColor": "#f00",
97
- "color": "#f00",
98
- }
99
- }
100
- type="button"
101
- />
102
- <svg
103
- aria-hidden={true}
104
- fill="#000"
105
- focusable={false}
106
- height={24}
107
- role="img"
108
- viewBox="0 0 24 24"
109
- width={24}
110
- xmlns="http://www.w3.org/2000/svg"
120
+ <div
121
+ className="components-circular-option-picker__option-wrapper"
111
122
  >
112
- <path
113
- d="M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z"
123
+ <button
124
+ aria-describedby={null}
125
+ aria-label="Color: red"
126
+ aria-pressed={true}
127
+ className="components-button components-circular-option-picker__option is-pressed"
128
+ onBlur={[Function]}
129
+ onClick={[Function]}
130
+ onFocus={[Function]}
131
+ onMouseDown={[Function]}
132
+ onMouseEnter={[Function]}
133
+ onMouseLeave={[Function]}
134
+ style={
135
+ Object {
136
+ "backgroundColor": "#f00",
137
+ "color": "#f00",
138
+ }
139
+ }
140
+ type="button"
114
141
  />
115
- </svg>
142
+ <svg
143
+ aria-hidden={true}
144
+ fill="#000"
145
+ focusable={false}
146
+ height={24}
147
+ role="img"
148
+ viewBox="0 0 24 24"
149
+ width={24}
150
+ xmlns="http://www.w3.org/2000/svg"
151
+ >
152
+ <path
153
+ d="M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z"
154
+ />
155
+ </svg>
156
+ </div>
116
157
  </div>
117
- </div>
118
- <div
119
- className="components-circular-option-picker__custom-clear-wrapper"
120
- >
121
158
  <div
122
- className="components-dropdown components-circular-option-picker__dropdown-link-action"
123
- tabIndex="-1"
159
+ className="components-circular-option-picker__custom-clear-wrapper"
124
160
  >
125
161
  <button
126
162
  aria-describedby={null}
127
- aria-expanded={false}
128
- aria-haspopup="true"
129
- aria-label="Custom color picker"
130
- className="components-button is-link"
163
+ className="components-button components-circular-option-picker__clear is-secondary is-small"
131
164
  onClick={[Function]}
132
165
  type="button"
133
166
  >
134
- Custom color
167
+ Clear
135
168
  </button>
136
169
  </div>
137
- <button
138
- aria-describedby={null}
139
- className="components-button components-circular-option-picker__clear is-secondary is-small"
140
- onClick={[Function]}
141
- type="button"
142
- >
143
- Clear
144
- </button>
145
170
  </div>
146
171
  </div>
147
172
  </div>
@@ -13,25 +13,16 @@ import {
13
13
  __experimentalVStack as VStack,
14
14
  __experimentalToggleGroupControl as ToggleGroupControl,
15
15
  __experimentalToggleGroupControlOption as ToggleGroupControlOption,
16
- ColorIndicator,
17
16
  ColorPalette,
18
17
  GradientPicker,
19
18
  } from '@wordpress/components';
20
- import { sprintf, __ } from '@wordpress/i18n';
19
+ import { __ } from '@wordpress/i18n';
21
20
 
22
21
  /**
23
22
  * Internal dependencies
24
23
  */
25
- import { getColorObjectByColorValue } from '../colors';
26
- import { __experimentalGetGradientObjectByGradientValue } from '../gradients';
27
24
  import useSetting from '../use-setting';
28
25
 
29
- // translators: first %s: the color name or value (e.g. red or #ff0000)
30
- const colorIndicatorAriaLabel = __( '(Color: %s)' );
31
-
32
- // translators: first %s: the gradient name or value (e.g. red to green or linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)
33
- const gradientIndicatorAriaLabel = __( '(Gradient: %s)' );
34
-
35
26
  const colorsAndGradientKeys = [
36
27
  'colors',
37
28
  'disableCustomColors',
@@ -39,50 +30,12 @@ const colorsAndGradientKeys = [
39
30
  'disableCustomGradients',
40
31
  ];
41
32
 
42
- function VisualLabel( {
43
- colors,
44
- gradients,
45
- label,
46
- currentTab,
47
- colorValue,
48
- gradientValue,
49
- } ) {
50
- let value, ariaLabel;
51
- if ( currentTab === 'color' ) {
52
- if ( colorValue ) {
53
- value = colorValue;
54
- const colorObject = getColorObjectByColorValue( colors, value );
55
- const colorName = colorObject && colorObject.name;
56
- ariaLabel = sprintf( colorIndicatorAriaLabel, colorName || value );
57
- }
58
- } else if ( currentTab === 'gradient' && gradientValue ) {
59
- value = gradientValue;
60
- const gradientObject = __experimentalGetGradientObjectByGradientValue(
61
- gradients,
62
- value
63
- );
64
- const gradientName = gradientObject && gradientObject.name;
65
- ariaLabel = sprintf(
66
- gradientIndicatorAriaLabel,
67
- gradientName || value
68
- );
69
- }
70
-
71
- return (
72
- <>
73
- { label }
74
- { !! value && (
75
- <ColorIndicator colorValue={ value } aria-label={ ariaLabel } />
76
- ) }
77
- </>
78
- );
79
- }
80
-
81
33
  function ColorGradientControlInner( {
82
34
  colors,
83
35
  gradients,
84
36
  disableCustomColors,
85
37
  disableCustomGradients,
38
+ __experimentalHasMultipleOrigins,
86
39
  className,
87
40
  label,
88
41
  onColorChange,
@@ -90,6 +43,7 @@ function ColorGradientControlInner( {
90
43
  colorValue,
91
44
  gradientValue,
92
45
  clearable,
46
+ showTitle = true,
93
47
  } ) {
94
48
  const canChooseAColor =
95
49
  onColorChange && ( ! isEmpty( colors ) || ! disableCustomColors );
@@ -111,19 +65,16 @@ function ColorGradientControlInner( {
111
65
  ) }
112
66
  >
113
67
  <fieldset>
114
- <VStack space={ 3 }>
115
- <legend>
116
- <div className="block-editor-color-gradient-control__color-indicator">
117
- <BaseControl.VisualLabel>
118
- <VisualLabel
119
- currentTab={ currentTab }
120
- label={ label }
121
- colorValue={ colorValue }
122
- gradientValue={ gradientValue }
123
- />
124
- </BaseControl.VisualLabel>
125
- </div>
126
- </legend>
68
+ <VStack spacing={ 1 }>
69
+ { showTitle && (
70
+ <legend>
71
+ <div className="block-editor-color-gradient-control__color-indicator">
72
+ <BaseControl.VisualLabel>
73
+ { label }
74
+ </BaseControl.VisualLabel>
75
+ </div>
76
+ </legend>
77
+ ) }
127
78
  { canChooseAColor && canChooseAGradient && (
128
79
  <ToggleGroupControl
129
80
  value={ currentTab }
@@ -154,6 +105,9 @@ function ColorGradientControlInner( {
154
105
  : onColorChange
155
106
  }
156
107
  { ...{ colors, disableCustomColors } }
108
+ __experimentalHasMultipleOrigins={
109
+ __experimentalHasMultipleOrigins
110
+ }
157
111
  clearable={ clearable }
158
112
  />
159
113
  ) }
@@ -169,6 +123,9 @@ function ColorGradientControlInner( {
169
123
  : onGradientChange
170
124
  }
171
125
  { ...{ gradients, disableCustomGradients } }
126
+ __experimentalHasMultipleOrigins={
127
+ __experimentalHasMultipleOrigins
128
+ }
172
129
  clearable={ clearable }
173
130
  />
174
131
  ) }
@@ -9,6 +9,7 @@ import { every, isEmpty } from 'lodash';
9
9
  */
10
10
  import { PanelBody, ColorIndicator } from '@wordpress/components';
11
11
  import { sprintf, __ } from '@wordpress/i18n';
12
+ import { useMemo } from '@wordpress/element';
12
13
 
13
14
  /**
14
15
  * Internal dependencies
@@ -90,6 +91,7 @@ export const PanelColorGradientSettingsInner = ( {
90
91
  settings,
91
92
  title,
92
93
  showTitle = true,
94
+ __experimentalHasMultipleOrigins,
93
95
  ...props
94
96
  } ) => {
95
97
  if (
@@ -133,12 +135,14 @@ export const PanelColorGradientSettingsInner = ( {
133
135
  >
134
136
  { settings.map( ( setting, index ) => (
135
137
  <ColorGradientControl
138
+ showTitle={ showTitle }
136
139
  key={ index }
137
140
  { ...{
138
141
  colors,
139
142
  gradients,
140
143
  disableCustomColors,
141
144
  disableCustomGradients,
145
+ __experimentalHasMultipleOrigins,
142
146
  ...setting,
143
147
  } }
144
148
  />
@@ -148,14 +152,77 @@ export const PanelColorGradientSettingsInner = ( {
148
152
  );
149
153
  };
150
154
 
151
- const PanelColorGradientSettingsSelect = ( props ) => {
152
- const colorGradientSettings = {};
155
+ function useCommonSingleMultipleSelects() {
156
+ return {
157
+ disableCustomColors: ! useSetting( 'color.custom' ),
158
+ disableCustomGradients: ! useSetting( 'color.customGradient' ),
159
+ };
160
+ }
161
+
162
+ const PanelColorGradientSettingsSingleSelect = ( props ) => {
163
+ const colorGradientSettings = useCommonSingleMultipleSelects();
153
164
  colorGradientSettings.colors = useSetting( 'color.palette' );
154
165
  colorGradientSettings.gradients = useSetting( 'color.gradients' );
155
- colorGradientSettings.disableCustomColors = ! useSetting( 'color.custom' );
156
- colorGradientSettings.disableCustomGradients = ! useSetting(
157
- 'color.customGradient'
166
+ return (
167
+ <PanelColorGradientSettingsInner
168
+ { ...{ ...colorGradientSettings, ...props } }
169
+ />
158
170
  );
171
+ };
172
+
173
+ const PanelColorGradientSettingsMultipleSelect = ( props ) => {
174
+ const colorGradientSettings = useCommonSingleMultipleSelects();
175
+ const userColors = useSetting( 'color.palette.user' );
176
+ const themeColors = useSetting( 'color.palette.theme' );
177
+ const coreColors = useSetting( 'color.palette.core' );
178
+ colorGradientSettings.colors = useMemo( () => {
179
+ const result = [];
180
+ if ( coreColors && coreColors.length ) {
181
+ result.push( {
182
+ name: __( 'Core' ),
183
+ colors: coreColors,
184
+ } );
185
+ }
186
+ if ( themeColors && themeColors.length ) {
187
+ result.push( {
188
+ name: __( 'Theme' ),
189
+ colors: themeColors,
190
+ } );
191
+ }
192
+ if ( userColors && userColors.length ) {
193
+ result.push( {
194
+ name: __( 'User' ),
195
+ colors: userColors,
196
+ } );
197
+ }
198
+ return result;
199
+ }, [ coreColors, themeColors, userColors ] );
200
+
201
+ const userGradients = useSetting( 'color.gradients.user' );
202
+ const themeGradients = useSetting( 'color.gradients.theme' );
203
+ const coreGradients = useSetting( 'color.gradients.core' );
204
+ colorGradientSettings.gradients = useMemo( () => {
205
+ const result = [];
206
+ if ( coreGradients && coreGradients.length ) {
207
+ result.push( {
208
+ name: __( 'Core' ),
209
+ gradients: coreGradients,
210
+ } );
211
+ }
212
+ if ( themeGradients && themeGradients.length ) {
213
+ result.push( {
214
+ name: __( 'Theme' ),
215
+ gradients: themeGradients,
216
+ } );
217
+ }
218
+ if ( userGradients && userGradients.length ) {
219
+ result.push( {
220
+ name: __( 'User' ),
221
+ gradients: userGradients,
222
+ } );
223
+ }
224
+ return result;
225
+ }, [ userGradients, themeGradients, coreGradients ] );
159
226
  return (
160
227
  <PanelColorGradientSettingsInner
161
228
  { ...{ ...colorGradientSettings, ...props } }
@@ -169,7 +236,10 @@ const PanelColorGradientSettings = ( props ) => {
169
236
  ) {
170
237
  return <PanelColorGradientSettingsInner { ...props } />;
171
238
  }
172
- return <PanelColorGradientSettingsSelect { ...props } />;
239
+ if ( props.__experimentalHasMultipleOrigins ) {
240
+ return <PanelColorGradientSettingsMultipleSelect { ...props } />;
241
+ }
242
+ return <PanelColorGradientSettingsSingleSelect { ...props } />;
173
243
  };
174
244
 
175
245
  export default PanelColorGradientSettings;
@@ -23,25 +23,14 @@
23
23
  // @wordpress/components/src/circular-option-picker/style.scss
24
24
  $swatch-size: 28px;
25
25
 
26
- // Optimize fit of six swatches per line using calc() to create variable
27
- // spacing that mimics a "justified/space-between" layout and works with
28
- // or without scrollbars
29
26
  @media screen and (min-width: $break-medium) {
30
- // Overrides the default negative margin
31
27
  .components-circular-option-picker__swatches {
32
- margin-right: 0;
33
- }
34
- // Figures the spacing
35
- .components-circular-option-picker__option-wrapper {
36
- margin-right: calc((100% - (#{$swatch-size} * 6)) / 5);
37
- }
38
- // Removes the right margin on every sixth swatch
39
- .components-circular-option-picker__option-wrapper:nth-child(6n + 6) {
40
- margin-right: 0;
28
+ display: grid;
29
+ grid-template-columns: repeat(6, $swatch-size);
30
+ justify-content: space-between;
41
31
  }
42
32
  }
43
33
 
44
-
45
34
  // This shouldn't be needed but there's a rule in the inspector controls
46
35
  // overriding this causing too much spacing.
47
36
  // That generic rule should ideally be removed.
@@ -10,14 +10,6 @@ import { noop } from 'lodash';
10
10
  */
11
11
  import ColorGradientControl from '../control';
12
12
 
13
- const getButtonWithTestPredicate = ( text ) => ( element ) => {
14
- return (
15
- element.type === 'button' &&
16
- element.children[ 0 ] === text &&
17
- element.children.length === 1
18
- );
19
- };
20
-
21
13
  const getButtonWithAriaLabelStartPredicate = ( ariaLabelStart ) => (
22
14
  element
23
15
  ) => {
@@ -76,9 +68,6 @@ describe( 'ColorPaletteControl', () => {
76
68
 
77
69
  // Is showing the two predefined Colors.
78
70
  expect( screen.getAllByLabelText( /^Color:/ ) ).toHaveLength( 2 );
79
-
80
- // Is showing the custom color picker.
81
- expect( screen.queryByText( 'Custom color' ) ).toBeInTheDocument();
82
71
  } );
83
72
 
84
73
  it( 'renders the color picker and does not render tabs if it is only possible to select a color', async () => {
@@ -116,11 +105,6 @@ describe( 'ColorPaletteControl', () => {
116
105
  getButtonWithAriaLabelStartPredicate( 'Color:' )
117
106
  )
118
107
  ).toHaveLength( 2 );
119
-
120
- // Is showing the custom color picker.
121
- expect(
122
- wrapper.root.findAll( getButtonWithTestPredicate( 'Custom color' ) )
123
- ).toHaveLength( 1 );
124
108
  } );
125
109
 
126
110
  it( 'renders the gradient picker and does not render tabs if it is only possible to select a gradient', async () => {
@@ -24,6 +24,7 @@ function DuotoneControl( {
24
24
  popoverProps={ {
25
25
  className: 'block-editor-duotone-control__popover',
26
26
  headerTitle: __( 'Duotone' ),
27
+ isAlternate: true,
27
28
  } }
28
29
  renderToggle={ ( { isOpen, onToggle } ) => {
29
30
  const openOnArrowDown = ( event ) => {
@@ -46,6 +47,11 @@ function DuotoneControl( {
46
47
  } }
47
48
  renderContent={ () => (
48
49
  <MenuGroup label={ __( 'Duotone' ) }>
50
+ <div className="block-editor-duotone-control__description">
51
+ { __(
52
+ 'Create a two-tone color effect without losing your original image.'
53
+ ) }
54
+ </div>
49
55
  <DuotonePicker
50
56
  colorPalette={ colorPalette }
51
57
  duotonePalette={ duotonePalette }