@wordpress/block-editor 9.6.0 → 9.8.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 (462) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/block-alignment-control/use-available-alignments.js +1 -1
  3. package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
  4. package/build/components/block-edit-visually-button/index.js +46 -0
  5. package/build/components/block-edit-visually-button/index.js.map +1 -0
  6. package/build/components/block-list/block.js +12 -2
  7. package/build/components/block-list/block.js.map +1 -1
  8. package/build/components/block-list/index.native.js +1 -1
  9. package/build/components/block-list/index.native.js.map +1 -1
  10. package/build/components/block-popover/inbetween.js +5 -3
  11. package/build/components/block-popover/inbetween.js.map +1 -1
  12. package/build/components/block-popover/index.js +10 -4
  13. package/build/components/block-popover/index.js.map +1 -1
  14. package/build/components/block-settings-menu/index.js +2 -6
  15. package/build/components/block-settings-menu/index.js.map +1 -1
  16. package/build/components/block-styles/index.js +3 -6
  17. package/build/components/block-styles/index.js.map +1 -1
  18. package/build/components/block-switcher/index.js +10 -16
  19. package/build/components/block-switcher/index.js.map +1 -1
  20. package/build/components/block-toolbar/index.js +5 -1
  21. package/build/components/block-toolbar/index.js.map +1 -1
  22. package/build/components/block-tools/selected-block-popover.js +10 -2
  23. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  24. package/build/components/block-tools/use-block-toolbar-popover-props.js +126 -0
  25. package/build/components/block-tools/use-block-toolbar-popover-props.js.map +1 -0
  26. package/build/components/block-types-list/index.js +1 -1
  27. package/build/components/block-types-list/index.js.map +1 -1
  28. package/build/components/border-radius-control/all-input-control.js +31 -3
  29. package/build/components/border-radius-control/all-input-control.js.map +1 -1
  30. package/build/components/border-radius-control/index.js +23 -7
  31. package/build/components/border-radius-control/index.js.map +1 -1
  32. package/build/components/border-radius-control/input-controls.js +21 -6
  33. package/build/components/border-radius-control/input-controls.js.map +1 -1
  34. package/build/components/border-radius-control/utils.js +13 -16
  35. package/build/components/border-radius-control/utils.js.map +1 -1
  36. package/build/components/colors/utils.js +6 -2
  37. package/build/components/colors/utils.js.map +1 -1
  38. package/build/components/colors/with-colors.js +17 -4
  39. package/build/components/colors/with-colors.js.map +1 -1
  40. package/build/components/colors-gradients/control.js +7 -4
  41. package/build/components/colors-gradients/control.js.map +1 -1
  42. package/build/components/colors-gradients/dropdown.js +5 -2
  43. package/build/components/colors-gradients/dropdown.js.map +1 -1
  44. package/build/components/copy-handler/index.js +6 -0
  45. package/build/components/copy-handler/index.js.map +1 -1
  46. package/build/components/date-format-picker/index.js +2 -7
  47. package/build/components/date-format-picker/index.js.map +1 -1
  48. package/build/components/duotone/components.js +5 -5
  49. package/build/components/duotone/components.js.map +1 -1
  50. package/build/components/font-appearance-control/index.js +10 -4
  51. package/build/components/font-appearance-control/index.js.map +1 -1
  52. package/build/components/font-family/index.js +1 -1
  53. package/build/components/font-family/index.js.map +1 -1
  54. package/build/components/font-sizes/with-font-sizes.js +17 -4
  55. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  56. package/build/components/image-size-control/index.js +3 -1
  57. package/build/components/image-size-control/index.js.map +1 -1
  58. package/build/components/index.js +22 -6
  59. package/build/components/index.js.map +1 -1
  60. package/build/components/index.native.js +11 -4
  61. package/build/components/index.native.js.map +1 -1
  62. package/build/components/inserter/index.native.js +8 -3
  63. package/build/components/inserter/index.native.js.map +1 -1
  64. package/build/components/inserter/search-items.js +22 -4
  65. package/build/components/inserter/search-items.js.map +1 -1
  66. package/build/components/inserter-list-item/index.js +2 -19
  67. package/build/components/inserter-list-item/index.js.map +1 -1
  68. package/build/components/letter-spacing-control/index.js +6 -3
  69. package/build/components/letter-spacing-control/index.js.map +1 -1
  70. package/build/components/line-height-control/index.js +6 -3
  71. package/build/components/line-height-control/index.js.map +1 -1
  72. package/build/components/link-control/is-url-like.js +1 -7
  73. package/build/components/link-control/is-url-like.js.map +1 -1
  74. package/build/components/link-control/link-preview.js +0 -1
  75. package/build/components/link-control/link-preview.js.map +1 -1
  76. package/build/components/link-control/use-search-handler.js +1 -7
  77. package/build/components/link-control/use-search-handler.js.map +1 -1
  78. package/build/components/list-view/block-select-button.js +5 -2
  79. package/build/components/list-view/block-select-button.js.map +1 -1
  80. package/build/components/list-view/expander.js +3 -1
  81. package/build/components/list-view/expander.js.map +1 -1
  82. package/build/components/list-view/use-block-selection.js +1 -7
  83. package/build/components/list-view/use-block-selection.js.map +1 -1
  84. package/build/components/media-upload/index.native.js +8 -3
  85. package/build/components/media-upload/index.native.js.map +1 -1
  86. package/build/components/preview-options/index.js +2 -2
  87. package/build/components/preview-options/index.js.map +1 -1
  88. package/build/components/{use-no-recursive-renders → recursion-provider}/index.js +40 -18
  89. package/build/components/recursion-provider/index.js.map +1 -0
  90. package/build/components/rich-text/index.js +6 -1
  91. package/build/components/rich-text/index.js.map +1 -1
  92. package/build/components/rich-text/index.native.js +3 -1
  93. package/build/components/rich-text/index.native.js.map +1 -1
  94. package/build/components/rich-text/use-before-input-rules.js +110 -0
  95. package/build/components/rich-text/use-before-input-rules.js.map +1 -0
  96. package/build/components/rich-text/use-enter.js +0 -4
  97. package/build/components/rich-text/use-enter.js.map +1 -1
  98. package/build/components/rich-text/use-format-types.js +8 -11
  99. package/build/components/rich-text/use-format-types.js.map +1 -1
  100. package/build/components/spacing-sizes-control/all-input-control.js +53 -0
  101. package/build/components/spacing-sizes-control/all-input-control.js.map +1 -0
  102. package/build/components/spacing-sizes-control/axial-input-controls.js +69 -0
  103. package/build/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
  104. package/build/components/spacing-sizes-control/index.js +100 -0
  105. package/build/components/spacing-sizes-control/index.js.map +1 -0
  106. package/build/components/spacing-sizes-control/input-controls.js +52 -0
  107. package/build/components/spacing-sizes-control/input-controls.js.map +1 -0
  108. package/build/components/spacing-sizes-control/linked-button.js +38 -0
  109. package/build/components/spacing-sizes-control/linked-button.js.map +1 -0
  110. package/build/components/spacing-sizes-control/spacing-input-control.js +208 -0
  111. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
  112. package/build/components/spacing-sizes-control/utils.js +202 -0
  113. package/build/components/spacing-sizes-control/utils.js.map +1 -0
  114. package/build/components/text-decoration-control/index.js +3 -1
  115. package/build/components/text-decoration-control/index.js.map +1 -1
  116. package/build/components/text-transform-control/index.js +3 -1
  117. package/build/components/text-transform-control/index.js.map +1 -1
  118. package/build/components/url-input/index.js +1 -1
  119. package/build/components/url-input/index.js.map +1 -1
  120. package/build/components/url-popover/image-url-input-ui.js +4 -1
  121. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  122. package/build/components/writing-flow/use-arrow-nav.js +4 -25
  123. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  124. package/build/components/writing-flow/use-drag-selection.js +9 -2
  125. package/build/components/writing-flow/use-drag-selection.js.map +1 -1
  126. package/build/components/writing-flow/use-multi-selection.js +4 -2
  127. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  128. package/build/components/writing-flow/use-select-all.js +3 -1
  129. package/build/components/writing-flow/use-select-all.js.map +1 -1
  130. package/build/components/writing-flow/use-selection-observer.js +10 -2
  131. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  132. package/build/hooks/border-radius.js +2 -7
  133. package/build/hooks/border-radius.js.map +1 -1
  134. package/build/hooks/border.js +2 -2
  135. package/build/hooks/border.js.map +1 -1
  136. package/build/hooks/color.js +4 -1
  137. package/build/hooks/color.js.map +1 -1
  138. package/build/hooks/dimensions.js +15 -0
  139. package/build/hooks/dimensions.js.map +1 -1
  140. package/build/hooks/duotone.js +4 -4
  141. package/build/hooks/duotone.js.map +1 -1
  142. package/build/hooks/gap.js +6 -4
  143. package/build/hooks/gap.js.map +1 -1
  144. package/build/hooks/generated-class-name.js +1 -7
  145. package/build/hooks/generated-class-name.js.map +1 -1
  146. package/build/hooks/layout.js +29 -14
  147. package/build/hooks/layout.js.map +1 -1
  148. package/build/hooks/margin.js +28 -12
  149. package/build/hooks/margin.js.map +1 -1
  150. package/build/hooks/padding.js +19 -8
  151. package/build/hooks/padding.js.map +1 -1
  152. package/build/hooks/style.js +4 -50
  153. package/build/hooks/style.js.map +1 -1
  154. package/build/layouts/constrained.js +215 -0
  155. package/build/layouts/constrained.js.map +1 -0
  156. package/build/layouts/flex.js +1 -1
  157. package/build/layouts/flex.js.map +1 -1
  158. package/build/layouts/flow.js +7 -151
  159. package/build/layouts/flow.js.map +1 -1
  160. package/build/layouts/index.js +3 -1
  161. package/build/layouts/index.js.map +1 -1
  162. package/build/layouts/utils.js +43 -0
  163. package/build/layouts/utils.js.map +1 -1
  164. package/build/store/actions.js +25 -3
  165. package/build/store/actions.js.map +1 -1
  166. package/build/store/selectors.js +4 -6
  167. package/build/store/selectors.js.map +1 -1
  168. package/build/utils/block-variation-transforms.js +15 -9
  169. package/build/utils/block-variation-transforms.js.map +1 -1
  170. package/build/utils/pasting.js +9 -1
  171. package/build/utils/pasting.js.map +1 -1
  172. package/build-module/components/block-alignment-control/use-available-alignments.js +1 -1
  173. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  174. package/build-module/components/block-edit-visually-button/index.js +35 -0
  175. package/build-module/components/block-edit-visually-button/index.js.map +1 -0
  176. package/build-module/components/block-list/block.js +13 -3
  177. package/build-module/components/block-list/block.js.map +1 -1
  178. package/build-module/components/block-list/index.native.js +1 -1
  179. package/build-module/components/block-list/index.native.js.map +1 -1
  180. package/build-module/components/block-popover/inbetween.js +5 -3
  181. package/build-module/components/block-popover/inbetween.js.map +1 -1
  182. package/build-module/components/block-popover/index.js +8 -4
  183. package/build-module/components/block-popover/index.js.map +1 -1
  184. package/build-module/components/block-settings-menu/index.js +3 -6
  185. package/build-module/components/block-settings-menu/index.js.map +1 -1
  186. package/build-module/components/block-styles/index.js +4 -7
  187. package/build-module/components/block-styles/index.js.map +1 -1
  188. package/build-module/components/block-switcher/index.js +10 -16
  189. package/build-module/components/block-switcher/index.js.map +1 -1
  190. package/build-module/components/block-toolbar/index.js +4 -1
  191. package/build-module/components/block-toolbar/index.js.map +1 -1
  192. package/build-module/components/block-tools/selected-block-popover.js +8 -2
  193. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  194. package/build-module/components/block-tools/use-block-toolbar-popover-props.js +114 -0
  195. package/build-module/components/block-tools/use-block-toolbar-popover-props.js.map +1 -0
  196. package/build-module/components/block-types-list/index.js +1 -1
  197. package/build-module/components/block-types-list/index.js.map +1 -1
  198. package/build-module/components/border-radius-control/all-input-control.js +32 -4
  199. package/build-module/components/border-radius-control/all-input-control.js.map +1 -1
  200. package/build-module/components/border-radius-control/index.js +24 -8
  201. package/build-module/components/border-radius-control/index.js.map +1 -1
  202. package/build-module/components/border-radius-control/input-controls.js +22 -7
  203. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  204. package/build-module/components/border-radius-control/utils.js +13 -16
  205. package/build-module/components/border-radius-control/utils.js.map +1 -1
  206. package/build-module/components/colors/utils.js +7 -3
  207. package/build-module/components/colors/utils.js.map +1 -1
  208. package/build-module/components/colors/with-colors.js +16 -3
  209. package/build-module/components/colors/with-colors.js.map +1 -1
  210. package/build-module/components/colors-gradients/control.js +7 -4
  211. package/build-module/components/colors-gradients/control.js.map +1 -1
  212. package/build-module/components/colors-gradients/dropdown.js +5 -2
  213. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  214. package/build-module/components/copy-handler/index.js +7 -1
  215. package/build-module/components/copy-handler/index.js.map +1 -1
  216. package/build-module/components/date-format-picker/index.js +2 -6
  217. package/build-module/components/date-format-picker/index.js.map +1 -1
  218. package/build-module/components/duotone/components.js +5 -5
  219. package/build-module/components/duotone/components.js.map +1 -1
  220. package/build-module/components/font-appearance-control/index.js +7 -4
  221. package/build-module/components/font-appearance-control/index.js.map +1 -1
  222. package/build-module/components/font-family/index.js +1 -1
  223. package/build-module/components/font-family/index.js.map +1 -1
  224. package/build-module/components/font-sizes/with-font-sizes.js +16 -3
  225. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  226. package/build-module/components/image-size-control/index.js +3 -1
  227. package/build-module/components/image-size-control/index.js.map +1 -1
  228. package/build-module/components/index.js +2 -1
  229. package/build-module/components/index.js.map +1 -1
  230. package/build-module/components/index.native.js +1 -1
  231. package/build-module/components/index.native.js.map +1 -1
  232. package/build-module/components/inserter/index.native.js +9 -2
  233. package/build-module/components/inserter/index.native.js.map +1 -1
  234. package/build-module/components/inserter/search-items.js +19 -5
  235. package/build-module/components/inserter/search-items.js.map +1 -1
  236. package/build-module/components/inserter-list-item/index.js +1 -17
  237. package/build-module/components/inserter-list-item/index.js.map +1 -1
  238. package/build-module/components/letter-spacing-control/index.js +5 -3
  239. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  240. package/build-module/components/line-height-control/index.js +5 -3
  241. package/build-module/components/line-height-control/index.js.map +1 -1
  242. package/build-module/components/link-control/is-url-like.js +1 -6
  243. package/build-module/components/link-control/is-url-like.js.map +1 -1
  244. package/build-module/components/link-control/link-preview.js +0 -1
  245. package/build-module/components/link-control/link-preview.js.map +1 -1
  246. package/build-module/components/link-control/use-search-handler.js +1 -6
  247. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  248. package/build-module/components/list-view/block-select-button.js +5 -2
  249. package/build-module/components/list-view/block-select-button.js.map +1 -1
  250. package/build-module/components/list-view/expander.js +3 -2
  251. package/build-module/components/list-view/expander.js.map +1 -1
  252. package/build-module/components/list-view/use-block-selection.js +1 -6
  253. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  254. package/build-module/components/media-upload/index.native.js +9 -2
  255. package/build-module/components/media-upload/index.native.js.map +1 -1
  256. package/build-module/components/preview-options/index.js +2 -2
  257. package/build-module/components/preview-options/index.js.map +1 -1
  258. package/build-module/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -19
  259. package/build-module/components/recursion-provider/index.js.map +1 -0
  260. package/build-module/components/rich-text/index.js +5 -1
  261. package/build-module/components/rich-text/index.js.map +1 -1
  262. package/build-module/components/rich-text/index.native.js +3 -1
  263. package/build-module/components/rich-text/index.native.js.map +1 -1
  264. package/build-module/components/rich-text/use-before-input-rules.js +96 -0
  265. package/build-module/components/rich-text/use-before-input-rules.js.map +1 -0
  266. package/build-module/components/rich-text/use-enter.js +0 -4
  267. package/build-module/components/rich-text/use-enter.js.map +1 -1
  268. package/build-module/components/rich-text/use-format-types.js +8 -10
  269. package/build-module/components/rich-text/use-format-types.js.map +1 -1
  270. package/build-module/components/spacing-sizes-control/all-input-control.js +41 -0
  271. package/build-module/components/spacing-sizes-control/all-input-control.js.map +1 -0
  272. package/build-module/components/spacing-sizes-control/axial-input-controls.js +57 -0
  273. package/build-module/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
  274. package/build-module/components/spacing-sizes-control/index.js +83 -0
  275. package/build-module/components/spacing-sizes-control/index.js.map +1 -0
  276. package/build-module/components/spacing-sizes-control/input-controls.js +41 -0
  277. package/build-module/components/spacing-sizes-control/input-controls.js.map +1 -0
  278. package/build-module/components/spacing-sizes-control/linked-button.js +28 -0
  279. package/build-module/components/spacing-sizes-control/linked-button.js.map +1 -0
  280. package/build-module/components/spacing-sizes-control/spacing-input-control.js +192 -0
  281. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
  282. package/build-module/components/spacing-sizes-control/utils.js +174 -0
  283. package/build-module/components/spacing-sizes-control/utils.js.map +1 -0
  284. package/build-module/components/text-decoration-control/index.js +4 -2
  285. package/build-module/components/text-decoration-control/index.js.map +1 -1
  286. package/build-module/components/text-transform-control/index.js +4 -2
  287. package/build-module/components/text-transform-control/index.js.map +1 -1
  288. package/build-module/components/url-input/index.js +1 -1
  289. package/build-module/components/url-input/index.js.map +1 -1
  290. package/build-module/components/url-popover/image-url-input-ui.js +4 -1
  291. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  292. package/build-module/components/writing-flow/use-arrow-nav.js +5 -26
  293. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  294. package/build-module/components/writing-flow/use-drag-selection.js +9 -2
  295. package/build-module/components/writing-flow/use-drag-selection.js.map +1 -1
  296. package/build-module/components/writing-flow/use-multi-selection.js +4 -2
  297. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  298. package/build-module/components/writing-flow/use-select-all.js +3 -1
  299. package/build-module/components/writing-flow/use-select-all.js.map +1 -1
  300. package/build-module/components/writing-flow/use-selection-observer.js +10 -2
  301. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  302. package/build-module/hooks/border-radius.js +2 -7
  303. package/build-module/hooks/border-radius.js.map +1 -1
  304. package/build-module/hooks/border.js +2 -2
  305. package/build-module/hooks/border.js.map +1 -1
  306. package/build-module/hooks/color.js +4 -1
  307. package/build-module/hooks/color.js.map +1 -1
  308. package/build-module/hooks/dimensions.js +13 -0
  309. package/build-module/hooks/dimensions.js.map +1 -1
  310. package/build-module/hooks/duotone.js +4 -4
  311. package/build-module/hooks/duotone.js.map +1 -1
  312. package/build-module/hooks/gap.js +3 -2
  313. package/build-module/hooks/gap.js.map +1 -1
  314. package/build-module/hooks/generated-class-name.js +1 -6
  315. package/build-module/hooks/generated-class-name.js.map +1 -1
  316. package/build-module/hooks/layout.js +29 -14
  317. package/build-module/hooks/layout.js.map +1 -1
  318. package/build-module/hooks/margin.js +26 -12
  319. package/build-module/hooks/margin.js.map +1 -1
  320. package/build-module/hooks/padding.js +17 -8
  321. package/build-module/hooks/padding.js.map +1 -1
  322. package/build-module/hooks/style.js +7 -53
  323. package/build-module/hooks/style.js.map +1 -1
  324. package/build-module/layouts/constrained.js +197 -0
  325. package/build-module/layouts/constrained.js.map +1 -0
  326. package/build-module/layouts/flex.js +1 -1
  327. package/build-module/layouts/flex.js.map +1 -1
  328. package/build-module/layouts/flow.js +8 -145
  329. package/build-module/layouts/flow.js.map +1 -1
  330. package/build-module/layouts/index.js +2 -1
  331. package/build-module/layouts/index.js.map +1 -1
  332. package/build-module/layouts/utils.js +40 -0
  333. package/build-module/layouts/utils.js.map +1 -1
  334. package/build-module/store/actions.js +25 -3
  335. package/build-module/store/actions.js.map +1 -1
  336. package/build-module/store/selectors.js +5 -7
  337. package/build-module/store/selectors.js.map +1 -1
  338. package/build-module/utils/block-variation-transforms.js +14 -7
  339. package/build-module/utils/block-variation-transforms.js.map +1 -1
  340. package/build-module/utils/pasting.js +9 -1
  341. package/build-module/utils/pasting.js.map +1 -1
  342. package/build-style/style-rtl.css +154 -27
  343. package/build-style/style.css +154 -27
  344. package/package.json +30 -28
  345. package/src/components/block-alignment-control/use-available-alignments.js +1 -1
  346. package/src/components/block-edit-visually-button/index.js +39 -0
  347. package/src/components/block-list/block.js +13 -2
  348. package/src/components/block-list/index.native.js +1 -1
  349. package/src/components/block-popover/inbetween.js +5 -1
  350. package/src/components/block-popover/index.js +22 -13
  351. package/src/components/block-popover/style.scss +25 -2
  352. package/src/components/block-settings-menu/index.js +11 -15
  353. package/src/components/block-styles/index.js +4 -7
  354. package/src/components/block-styles/style.scss +10 -0
  355. package/src/components/block-switcher/index.js +9 -13
  356. package/src/components/block-switcher/test/index.js +1 -0
  357. package/src/components/block-toolbar/index.js +2 -0
  358. package/src/components/block-tools/selected-block-popover.js +7 -0
  359. package/src/components/block-tools/use-block-toolbar-popover-props.js +123 -0
  360. package/src/components/block-types-list/index.js +1 -1
  361. package/src/components/border-radius-control/all-input-control.js +41 -4
  362. package/src/components/border-radius-control/index.js +29 -6
  363. package/src/components/border-radius-control/input-controls.js +40 -13
  364. package/src/components/border-radius-control/test/utils.js +22 -60
  365. package/src/components/border-radius-control/utils.js +12 -16
  366. package/src/components/color-palette/test/__snapshots__/control.js.snap +93 -77
  367. package/src/components/colors/utils.js +5 -2
  368. package/src/components/colors/with-colors.js +11 -1
  369. package/src/components/colors-gradients/control.js +12 -8
  370. package/src/components/colors-gradients/dropdown.js +7 -2
  371. package/src/components/colors-gradients/style.scss +27 -5
  372. package/src/components/colors-gradients/test/control.js +3 -3
  373. package/src/components/copy-handler/index.js +18 -0
  374. package/src/components/date-format-picker/index.js +12 -14
  375. package/src/components/date-format-picker/style.scss +0 -4
  376. package/src/components/duotone/components.js +5 -5
  377. package/src/components/duotone-control/style.scss +0 -4
  378. package/src/components/font-appearance-control/index.js +3 -0
  379. package/src/components/font-appearance-control/style.scss +0 -2
  380. package/src/components/font-family/index.js +1 -1
  381. package/src/components/font-sizes/with-font-sizes.js +11 -1
  382. package/src/components/image-size-control/README.md +7 -0
  383. package/src/components/image-size-control/index.js +2 -0
  384. package/src/components/index.js +5 -1
  385. package/src/components/index.native.js +4 -1
  386. package/src/components/inserter/index.native.js +7 -2
  387. package/src/components/inserter/search-items.js +17 -5
  388. package/src/components/inserter-list-item/index.js +1 -17
  389. package/src/components/letter-spacing-control/index.js +2 -0
  390. package/src/components/line-height-control/index.js +2 -0
  391. package/src/components/link-control/is-url-like.js +1 -6
  392. package/src/components/link-control/link-preview.js +0 -1
  393. package/src/components/link-control/test/index.js +540 -893
  394. package/src/components/link-control/use-search-handler.js +1 -6
  395. package/src/components/list-view/block-select-button.js +7 -2
  396. package/src/components/list-view/expander.js +4 -2
  397. package/src/components/list-view/style.scss +11 -4
  398. package/src/components/list-view/use-block-selection.js +2 -8
  399. package/src/components/media-replace-flow/style.scss +1 -0
  400. package/src/components/media-upload/index.native.js +7 -3
  401. package/src/components/preview-options/index.js +2 -2
  402. package/src/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -28
  403. package/src/components/{use-no-recursive-renders/test/use-no-recursive-renders.js → recursion-provider/test/index.js} +5 -6
  404. package/src/components/rich-text/README.md +13 -1
  405. package/src/components/rich-text/index.js +2 -0
  406. package/src/components/rich-text/index.native.js +2 -0
  407. package/src/components/rich-text/use-before-input-rules.js +91 -0
  408. package/src/components/rich-text/use-enter.js +0 -3
  409. package/src/components/rich-text/use-format-types.js +6 -6
  410. package/src/components/spacing-sizes-control/all-input-control.js +40 -0
  411. package/src/components/spacing-sizes-control/axial-input-controls.js +62 -0
  412. package/src/components/spacing-sizes-control/index.js +91 -0
  413. package/src/components/spacing-sizes-control/input-controls.js +46 -0
  414. package/src/components/spacing-sizes-control/linked-button.js +25 -0
  415. package/src/components/spacing-sizes-control/spacing-input-control.js +280 -0
  416. package/src/components/spacing-sizes-control/style.scss +122 -0
  417. package/src/components/spacing-sizes-control/test/utils.js +156 -0
  418. package/src/components/spacing-sizes-control/utils.js +195 -0
  419. package/src/components/text-decoration-control/index.js +4 -2
  420. package/src/components/text-transform-control/index.js +4 -2
  421. package/src/components/url-input/index.js +1 -1
  422. package/src/components/url-input/style.scss +2 -2
  423. package/src/components/url-popover/image-url-input-ui.js +3 -0
  424. package/src/components/url-popover/style.scss +0 -3
  425. package/src/components/writing-flow/use-arrow-nav.js +4 -33
  426. package/src/components/writing-flow/use-drag-selection.js +7 -1
  427. package/src/components/writing-flow/use-multi-selection.js +4 -1
  428. package/src/components/writing-flow/use-select-all.js +2 -1
  429. package/src/components/writing-flow/use-selection-observer.js +10 -2
  430. package/src/hooks/border-radius.js +2 -6
  431. package/src/hooks/border.js +2 -2
  432. package/src/hooks/color.js +13 -3
  433. package/src/hooks/dimensions.js +15 -0
  434. package/src/hooks/duotone.js +4 -4
  435. package/src/hooks/gap.js +7 -2
  436. package/src/hooks/generated-class-name.js +6 -9
  437. package/src/hooks/layout.js +53 -16
  438. package/src/hooks/margin.js +49 -17
  439. package/src/hooks/padding.js +41 -14
  440. package/src/hooks/style.js +5 -56
  441. package/src/hooks/test/gap.js +22 -0
  442. package/src/hooks/typography.scss +0 -1
  443. package/src/layouts/constrained.js +217 -0
  444. package/src/layouts/flex.js +1 -1
  445. package/src/layouts/flow.js +6 -164
  446. package/src/layouts/index.js +2 -1
  447. package/src/layouts/test/constrained.js +21 -0
  448. package/src/layouts/utils.js +34 -0
  449. package/src/store/actions.js +32 -4
  450. package/src/store/selectors.js +5 -4
  451. package/src/style.scss +1 -0
  452. package/src/utils/block-variation-transforms.js +13 -6
  453. package/src/utils/pasting.js +10 -1
  454. package/src/utils/test/block-variation-transforms.js +24 -0
  455. package/src/utils/test/pasting.js +10 -0
  456. package/build/components/block-settings-menu/block-edit-visually-button.js +0 -70
  457. package/build/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
  458. package/build/components/use-no-recursive-renders/index.js.map +0 -1
  459. package/build-module/components/block-settings-menu/block-edit-visually-button.js +0 -56
  460. package/build-module/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
  461. package/build-module/components/use-no-recursive-renders/index.js.map +0 -1
  462. package/src/components/block-settings-menu/block-edit-visually-button.js +0 -52
@@ -7,14 +7,50 @@ import { __ } from '@wordpress/i18n';
7
7
  /**
8
8
  * Internal dependencies
9
9
  */
10
- import { getAllValue, hasMixedValues, hasDefinedValues } from './utils';
10
+ import {
11
+ getAllValue,
12
+ getAllUnit,
13
+ hasMixedValues,
14
+ hasDefinedValues,
15
+ } from './utils';
16
+
17
+ export default function AllInputControl( {
18
+ onChange,
19
+ selectedUnits,
20
+ setSelectedUnits,
21
+ values,
22
+ ...props
23
+ } ) {
24
+ let allValue = getAllValue( values );
25
+
26
+ if ( allValue === undefined ) {
27
+ // If we don't have any value set the unit to any current selection
28
+ // or the most common unit from the individual radii values.
29
+ allValue = getAllUnit( selectedUnits );
30
+ }
11
31
 
12
- export default function AllInputControl( { onChange, values, ...props } ) {
13
- const allValue = getAllValue( values );
14
32
  const hasValues = hasDefinedValues( values );
15
33
  const isMixed = hasValues && hasMixedValues( values );
16
34
  const allPlaceholder = isMixed ? __( 'Mixed' ) : null;
17
35
 
36
+ // Filter out CSS-unit-only values to prevent invalid styles.
37
+ const handleOnChange = ( next ) => {
38
+ const isNumeric = ! isNaN( parseFloat( next ) );
39
+ const nextValue = isNumeric ? next : undefined;
40
+ onChange( nextValue );
41
+ };
42
+
43
+ // Store current unit selection for use as fallback for individual
44
+ // radii controls.
45
+ const handleOnUnitChange = ( unit ) => {
46
+ setSelectedUnits( {
47
+ topLeft: unit,
48
+ topRight: unit,
49
+ bottomLeft: unit,
50
+ bottomRight: unit,
51
+ } );
52
+ };
53
+
18
54
  return (
19
55
  <UnitControl
20
56
  { ...props }
@@ -22,7 +58,8 @@ export default function AllInputControl( { onChange, values, ...props } ) {
22
58
  disableUnits={ isMixed }
23
59
  isOnly
24
60
  value={ allValue }
25
- onChange={ onChange }
61
+ onChange={ handleOnChange }
62
+ onUnitChange={ handleOnUnitChange }
26
63
  placeholder={ allPlaceholder }
27
64
  />
28
65
  );
@@ -2,6 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import {
5
+ BaseControl,
5
6
  RangeControl,
6
7
  __experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,
7
8
  __experimentalUseCustomUnits as useCustomUnits,
@@ -24,10 +25,10 @@ import {
24
25
  } from './utils';
25
26
 
26
27
  const DEFAULT_VALUES = {
27
- topLeft: null,
28
- topRight: null,
29
- bottomLeft: null,
30
- bottomRight: null,
28
+ topLeft: undefined,
29
+ topRight: undefined,
30
+ bottomLeft: undefined,
31
+ bottomRight: undefined,
31
32
  };
32
33
  const MIN_BORDER_RADIUS_VALUE = 0;
33
34
  const MAX_BORDER_RADIUS_VALUES = {
@@ -50,11 +51,27 @@ export default function BorderRadiusControl( { onChange, values } ) {
50
51
  ! hasDefinedValues( values ) || ! hasMixedValues( values )
51
52
  );
52
53
 
54
+ // Tracking selected units via internal state allows filtering of CSS unit
55
+ // only values from being saved while maintaining preexisting unit selection
56
+ // behaviour. Filtering CSS unit only values prevents invalid style values.
57
+ const [ selectedUnits, setSelectedUnits ] = useState( {
58
+ flat:
59
+ typeof values === 'string'
60
+ ? parseQuantityAndUnitFromRawValue( values )[ 1 ]
61
+ : undefined,
62
+ topLeft: parseQuantityAndUnitFromRawValue( values?.topLeft )[ 1 ],
63
+ topRight: parseQuantityAndUnitFromRawValue( values?.topRight )[ 1 ],
64
+ bottomLeft: parseQuantityAndUnitFromRawValue( values?.bottomLeft )[ 1 ],
65
+ bottomRight: parseQuantityAndUnitFromRawValue(
66
+ values?.bottomRight
67
+ )[ 1 ],
68
+ } );
69
+
53
70
  const units = useCustomUnits( {
54
71
  availableUnits: useSetting( 'spacing.units' ) || [ 'px', 'em', 'rem' ],
55
72
  } );
56
73
 
57
- const unit = getAllUnit( values );
74
+ const unit = getAllUnit( selectedUnits );
58
75
  const unitConfig = units && units.find( ( item ) => item.value === unit );
59
76
  const step = unitConfig?.step || 1;
60
77
 
@@ -70,7 +87,9 @@ export default function BorderRadiusControl( { onChange, values } ) {
70
87
 
71
88
  return (
72
89
  <fieldset className="components-border-radius-control">
73
- <legend>{ __( 'Radius' ) }</legend>
90
+ <BaseControl.VisualLabel as="legend">
91
+ { __( 'Radius' ) }
92
+ </BaseControl.VisualLabel>
74
93
  <div className="components-border-radius-control__wrapper">
75
94
  { isLinked ? (
76
95
  <>
@@ -79,6 +98,8 @@ export default function BorderRadiusControl( { onChange, values } ) {
79
98
  values={ values }
80
99
  min={ MIN_BORDER_RADIUS_VALUE }
81
100
  onChange={ onChange }
101
+ selectedUnits={ selectedUnits }
102
+ setSelectedUnits={ setSelectedUnits }
82
103
  units={ units }
83
104
  />
84
105
  <RangeControl
@@ -98,6 +119,8 @@ export default function BorderRadiusControl( { onChange, values } ) {
98
119
  <InputControls
99
120
  min={ MIN_BORDER_RADIUS_VALUE }
100
121
  onChange={ onChange }
122
+ selectedUnits={ selectedUnits }
123
+ setSelectedUnits={ setSelectedUnits }
101
124
  values={ values || DEFAULT_VALUES }
102
125
  units={ units }
103
126
  />
@@ -2,6 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import {
5
+ __experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,
5
6
  __experimentalUnitControl as UnitControl,
6
7
  Tooltip,
7
8
  } from '@wordpress/components';
@@ -16,6 +17,8 @@ const CORNERS = {
16
17
 
17
18
  export default function BoxInputControls( {
18
19
  onChange,
20
+ selectedUnits,
21
+ setSelectedUnits,
19
22
  values: valuesProp,
20
23
  ...props
21
24
  } ) {
@@ -24,12 +27,22 @@ export default function BoxInputControls( {
24
27
  return;
25
28
  }
26
29
 
30
+ // Filter out CSS-unit-only values to prevent invalid styles.
31
+ const isNumeric = ! isNaN( parseFloat( next ) );
32
+ const nextValue = isNumeric ? next : undefined;
33
+
27
34
  onChange( {
28
35
  ...values,
29
- [ corner ]: next ? next : undefined,
36
+ [ corner ]: nextValue,
30
37
  } );
31
38
  };
32
39
 
40
+ const createHandleOnUnitChange = ( side ) => ( next ) => {
41
+ const newUnits = { ...selectedUnits };
42
+ newUnits[ side ] = next;
43
+ setSelectedUnits( newUnits );
44
+ };
45
+
33
46
  // For shorthand style & backwards compatibility, handle flat string value.
34
47
  const values =
35
48
  typeof valuesProp !== 'string'
@@ -46,18 +59,32 @@ export default function BoxInputControls( {
46
59
  // https://github.com/WordPress/gutenberg/pull/24966#issuecomment-685875026
47
60
  return (
48
61
  <div className="components-border-radius-control__input-controls-wrapper">
49
- { Object.entries( CORNERS ).map( ( [ key, label ] ) => (
50
- <Tooltip text={ label } position="top" key={ key }>
51
- <div className="components-border-radius-control__tooltip-wrapper">
52
- <UnitControl
53
- { ...props }
54
- aria-label={ label }
55
- value={ values[ key ] }
56
- onChange={ createHandleOnChange( key ) }
57
- />
58
- </div>
59
- </Tooltip>
60
- ) ) }
62
+ { Object.entries( CORNERS ).map( ( [ corner, label ] ) => {
63
+ const [ parsedQuantity, parsedUnit ] =
64
+ parseQuantityAndUnitFromRawValue( values[ corner ] );
65
+
66
+ const computedUnit = values[ corner ]
67
+ ? parsedUnit
68
+ : selectedUnits[ corner ] || selectedUnits.flat;
69
+
70
+ return (
71
+ <Tooltip text={ label } position="top" key={ corner }>
72
+ <div className="components-border-radius-control__tooltip-wrapper">
73
+ <UnitControl
74
+ { ...props }
75
+ aria-label={ label }
76
+ value={ [ parsedQuantity, computedUnit ].join(
77
+ ''
78
+ ) }
79
+ onChange={ createHandleOnChange( corner ) }
80
+ onUnitChange={ createHandleOnUnitChange(
81
+ corner
82
+ ) }
83
+ />
84
+ </div>
85
+ </Tooltip>
86
+ );
87
+ } ) }
61
88
  </div>
62
89
  );
63
90
  }
@@ -9,73 +9,35 @@ import {
9
9
  mode,
10
10
  } from '../utils';
11
11
 
12
- describe( 'getAllUnit', () => {
13
- describe( 'when provided string based values', () => {
14
- it( 'should return valid unit when passed a valid unit', () => {
15
- expect( getAllUnit( '32em' ) ).toBe( 'em' );
16
- } );
17
-
18
- it( 'should fall back to px when passed an invalid unit', () => {
19
- expect( getAllUnit( '32apples' ) ).toBe( 'px' );
20
- } );
12
+ const defaultUnitSelections = {
13
+ flat: undefined,
14
+ topLeft: '%',
15
+ topRight: 'rem',
16
+ bottomLeft: 'rem',
17
+ bottomRight: 'vw',
18
+ };
21
19
 
22
- it( 'should fall back to px when passed a value without a unit', () => {
23
- expect( getAllUnit( '32' ) ).toBe( 'px' );
24
- } );
20
+ describe( 'getAllUnit', () => {
21
+ it( 'should return flat radius unit when selected', () => {
22
+ const selectedUnits = { ...defaultUnitSelections, flat: 'em' };
23
+ expect( getAllUnit( selectedUnits ) ).toBe( 'em' );
25
24
  } );
26
25
 
27
- describe( 'when provided object based values', () => {
28
- it( 'should return the most common value', () => {
29
- const values = {
30
- bottomLeft: '2em',
31
- bottomRight: '2em',
32
- topLeft: '0',
33
- topRight: '2px',
34
- };
35
- expect( getAllUnit( values ) ).toBe( 'em' );
36
- } );
37
-
38
- it( 'should return the real value when the most common value is undefined', () => {
39
- const values = {
40
- bottomLeft: '0',
41
- bottomRight: '0',
42
- topLeft: '0',
43
- topRight: '2em',
44
- };
45
- expect( getAllUnit( values ) ).toBe( 'em' );
46
- } );
26
+ it( 'should return most common corner unit', () => {
27
+ expect( getAllUnit( defaultUnitSelections ) ).toBe( 'rem' );
28
+ } );
47
29
 
48
- it( 'should return the most common value there are no undefined values', () => {
49
- const values = {
50
- bottomLeft: '1em',
51
- bottomRight: '1em',
52
- topLeft: '2px',
53
- topRight: '2em',
54
- };
55
- expect( getAllUnit( values ) ).toBe( 'em' );
56
- } );
30
+ it( 'should return a real unit when the most common is undefined', () => {
31
+ expect( getAllUnit( { bottomRight: '%' } ) ).toBe( '%' );
32
+ } );
57
33
 
58
- it( 'should fall back to px when all values are undefined or equivalent', () => {
59
- const values = {
60
- bottomLeft: '0',
61
- bottomRight: undefined,
62
- topLeft: undefined,
63
- topRight: '0',
64
- };
65
- expect( getAllUnit( values ) ).toBe( 'px' );
66
- } );
34
+ it( 'should return most common corner unit when some are unselected', () => {
35
+ const selectedUnits = { ...defaultUnitSelections, topLeft: undefined };
36
+ expect( getAllUnit( selectedUnits ) ).toBe( 'rem' );
67
37
  } );
68
38
 
69
- describe( 'when provided invalid values', () => {
70
- it( 'should return px when passed an array', () => {
71
- expect( getAllUnit( [] ) ).toBe( 'px' );
72
- } );
73
- it( 'should return px when passed a boolean', () => {
74
- expect( getAllUnit( false ) ).toBe( 'px' );
75
- } );
76
- it( 'should return px when passed undefined', () => {
77
- expect( getAllUnit( false ) ).toBe( 'px' );
78
- } );
39
+ it( 'should fallback to px when all values are undefined', () => {
40
+ expect( getAllUnit( {} ) ).toBe( 'px' );
79
41
  } );
80
42
  } );
81
43
 
@@ -28,24 +28,20 @@ export function mode( inputArray ) {
28
28
  }
29
29
 
30
30
  /**
31
- * Returns the most common CSS unit in the radius values.
32
- * Falls back to `px` as a default unit.
31
+ * Returns the most common CSS unit from the current CSS unit selections.
33
32
  *
34
- * @param {Object|string} values Radius values.
35
- * @return {string} Most common CSS unit in values. Default: `px`.
33
+ * - If a single flat border radius is set, its unit will be used
34
+ * - If individual corner selections, the most common of those will be used
35
+ * - Failing any unit selections a default of 'px' is returned.
36
+ *
37
+ * @param {Object} selectedUnits Unit selections for flat radius & each corner.
38
+ * @return {string} Most common CSS unit from current selections. Default: `px`.
36
39
  */
37
- export function getAllUnit( values = {} ) {
38
- if ( typeof values === 'string' ) {
39
- const [ , unit ] = parseQuantityAndUnitFromRawValue( values );
40
- return unit || 'px';
41
- }
42
-
43
- const allUnits = Object.values( values ).map( ( value ) => {
44
- const [ , unit ] = parseQuantityAndUnitFromRawValue( value );
45
- return unit;
46
- } );
47
-
48
- return mode( allUnits ) || 'px';
40
+ export function getAllUnit( selectedUnits = {} ) {
41
+ const { flat, ...cornerUnits } = selectedUnits;
42
+ return (
43
+ flat || mode( Object.values( cornerUnits ).filter( Boolean ) ) || 'px'
44
+ );
49
45
  }
50
46
 
51
47
  /**
@@ -4,6 +4,13 @@ exports[`ColorPaletteControl matches the snapshot 1`] = `
4
4
  .emotion-0 {
5
5
  font-family: -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',sans-serif;
6
6
  font-size: 13px;
7
+ box-sizing: border-box;
8
+ }
9
+
10
+ .emotion-0 *,
11
+ .emotion-0 *::before,
12
+ .emotion-0 *::after {
13
+ box-sizing: inherit;
7
14
  }
8
15
 
9
16
  .components-panel__row .emotion-2 {
@@ -36,8 +43,13 @@ exports[`ColorPaletteControl matches the snapshot 1`] = `
36
43
  }
37
44
 
38
45
  .emotion-6 {
46
+ font-size: 11px;
47
+ font-weight: 500;
48
+ line-height: 1.4;
49
+ text-transform: uppercase;
39
50
  display: inline-block;
40
51
  margin-bottom: calc(4px * 2);
52
+ padding: 0;
41
53
  }
42
54
 
43
55
  .emotion-8 {
@@ -140,100 +152,104 @@ exports[`ColorPaletteControl matches the snapshot 1`] = `
140
152
  </div>
141
153
  </legend>
142
154
  <div
143
- className="components-flex components-h-stack components-v-stack emotion-8 emotion-5"
144
- data-wp-c16t={true}
145
- data-wp-component="VStack"
155
+ className="block-editor-color-gradient-control__panel"
146
156
  >
147
157
  <div
148
- className="components-dropdown"
149
- tabIndex="-1"
158
+ className="components-flex components-h-stack components-v-stack emotion-8 emotion-5"
159
+ data-wp-c16t={true}
160
+ data-wp-component="VStack"
150
161
  >
151
- <button
152
- aria-expanded={false}
153
- aria-haspopup="true"
154
- aria-label="Custom color picker. The currently selected color is called \\"red\\" and has a value of \\"f00\\"."
155
- className="components-flex components-color-palette__custom-color emotion-10 emotion-5"
156
- data-wp-c16t={true}
157
- data-wp-component="Flex"
158
- onClick={[Function]}
159
- style={
160
- Object {
161
- "background": "#f00",
162
- "color": "#000",
163
- }
164
- }
162
+ <div
163
+ className="components-dropdown"
164
+ tabIndex="-1"
165
165
  >
166
- <span
167
- className="components-truncate components-flex-item components-color-palette__custom-color-name emotion-5 emotion-13 emotion-5"
168
- data-wp-c16t={true}
169
- data-wp-component="FlexItem"
170
- >
171
- red
172
- </span>
173
- <span
174
- className="components-flex-item components-color-palette__custom-color-value emotion-15 emotion-5"
166
+ <button
167
+ aria-expanded={false}
168
+ aria-haspopup="true"
169
+ aria-label="Custom color picker. The currently selected color is called \\"red\\" and has a value of \\"f00\\"."
170
+ className="components-flex components-color-palette__custom-color emotion-10 emotion-5"
175
171
  data-wp-c16t={true}
176
- data-wp-component="FlexItem"
172
+ data-wp-component="Flex"
173
+ onClick={[Function]}
174
+ style={
175
+ Object {
176
+ "background": "#f00",
177
+ "color": "#000",
178
+ }
179
+ }
177
180
  >
178
- f00
179
- </span>
180
- </button>
181
- </div>
182
- <div
183
- className="components-circular-option-picker"
184
- >
181
+ <span
182
+ className="components-truncate components-flex-item components-color-palette__custom-color-name emotion-5 emotion-13 emotion-5"
183
+ data-wp-c16t={true}
184
+ data-wp-component="FlexItem"
185
+ >
186
+ red
187
+ </span>
188
+ <span
189
+ className="components-flex-item components-color-palette__custom-color-value emotion-15 emotion-5"
190
+ data-wp-c16t={true}
191
+ data-wp-component="FlexItem"
192
+ >
193
+ f00
194
+ </span>
195
+ </button>
196
+ </div>
185
197
  <div
186
- className="components-circular-option-picker__swatches"
198
+ className="components-circular-option-picker"
187
199
  >
188
200
  <div
189
- className="components-circular-option-picker__option-wrapper"
201
+ className="components-circular-option-picker__swatches"
202
+ >
203
+ <div
204
+ className="components-circular-option-picker__option-wrapper"
205
+ >
206
+ <button
207
+ aria-describedby={null}
208
+ aria-label="Color: red"
209
+ aria-pressed={true}
210
+ className="components-button components-circular-option-picker__option is-pressed"
211
+ onBlur={[Function]}
212
+ onClick={[Function]}
213
+ onFocus={[Function]}
214
+ onMouseDown={[Function]}
215
+ onMouseEnter={[Function]}
216
+ onMouseLeave={[Function]}
217
+ style={
218
+ Object {
219
+ "backgroundColor": "#f00",
220
+ "color": "#f00",
221
+ }
222
+ }
223
+ type="button"
224
+ />
225
+ <svg
226
+ aria-hidden={true}
227
+ fill="#000"
228
+ focusable={false}
229
+ height={24}
230
+ viewBox="0 0 24 24"
231
+ width={24}
232
+ xmlns="http://www.w3.org/2000/svg"
233
+ >
234
+ <path
235
+ d="M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z"
236
+ />
237
+ </svg>
238
+ </div>
239
+ </div>
240
+ <div
241
+ className="components-circular-option-picker__custom-clear-wrapper"
190
242
  >
191
243
  <button
192
244
  aria-describedby={null}
193
- aria-label="Color: red"
194
- aria-pressed={true}
195
- className="components-button components-circular-option-picker__option is-pressed"
196
- onBlur={[Function]}
245
+ className="components-button components-circular-option-picker__clear is-tertiary"
197
246
  onClick={[Function]}
198
- onFocus={[Function]}
199
- onMouseDown={[Function]}
200
- onMouseEnter={[Function]}
201
- onMouseLeave={[Function]}
202
- style={
203
- Object {
204
- "backgroundColor": "#f00",
205
- "color": "#f00",
206
- }
207
- }
208
247
  type="button"
209
- />
210
- <svg
211
- aria-hidden={true}
212
- fill="#000"
213
- focusable={false}
214
- height={24}
215
- viewBox="0 0 24 24"
216
- width={24}
217
- xmlns="http://www.w3.org/2000/svg"
218
248
  >
219
- <path
220
- d="M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z"
221
- />
222
- </svg>
249
+ Clear
250
+ </button>
223
251
  </div>
224
252
  </div>
225
- <div
226
- className="components-circular-option-picker__custom-clear-wrapper"
227
- >
228
- <button
229
- aria-describedby={null}
230
- className="components-button components-circular-option-picker__clear is-tertiary"
231
- onClick={[Function]}
232
- type="button"
233
- >
234
- Clear
235
- </button>
236
- </div>
237
253
  </div>
238
254
  </div>
239
255
  </div>
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { find, kebabCase, maxBy } from 'lodash';
4
+ import { find, kebabCase } from 'lodash';
5
5
  import { colord, extend } from 'colord';
6
6
  import namesPlugin from 'colord/plugins/names';
7
7
  import a11yPlugin from 'colord/plugins/a11y';
@@ -77,6 +77,9 @@ export function getColorClassName( colorContextName, colorSlug ) {
77
77
  */
78
78
  export function getMostReadableColor( colors, colorValue ) {
79
79
  const colordColor = colord( colorValue );
80
- return maxBy( colors, ( { color } ) => colordColor.contrast( color ) )
80
+ const getColorContrast = ( { color } ) => colordColor.contrast( color );
81
+
82
+ const maxContrast = Math.max( ...colors.map( getColorContrast ) );
83
+ return colors.find( ( color ) => getColorContrast( color ) === maxContrast )
81
84
  .color;
82
85
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { kebabCase, reduce, upperFirst } from 'lodash';
4
+ import { kebabCase, reduce } from 'lodash';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -20,6 +20,16 @@ import {
20
20
  } from './utils';
21
21
  import useSetting from '../use-setting';
22
22
 
23
+ /**
24
+ * Capitalizes the first letter in a string.
25
+ *
26
+ * @param {string} str The string whose first letter the function will capitalize.
27
+ *
28
+ * @return {string} Capitalized string.
29
+ */
30
+ const upperFirst = ( [ firstLetter, ...rest ] ) =>
31
+ firstLetter.toUpperCase() + rest.join( '' );
32
+
23
33
  /**
24
34
  * Higher order component factory for injecting the `colorsArray` argument as
25
35
  * the colors prop in the `withCustomColors` HOC.
@@ -29,7 +29,7 @@ const colorsAndGradientKeys = [
29
29
 
30
30
  const TAB_COLOR = {
31
31
  name: 'color',
32
- title: 'Solid color',
32
+ title: 'Solid',
33
33
  value: 'color',
34
34
  };
35
35
  const TAB_GRADIENT = {
@@ -113,6 +113,12 @@ function ColorGradientControlInner( {
113
113
  ),
114
114
  };
115
115
 
116
+ const renderPanelType = ( type ) => (
117
+ <div className="block-editor-color-gradient-control__panel">
118
+ { tabPanels[ type ] }
119
+ </div>
120
+ );
121
+
116
122
  return (
117
123
  <BaseControl
118
124
  __nextHasNoMarginBottom
@@ -142,15 +148,13 @@ function ColorGradientControlInner( {
142
148
  : !! canChooseAColor && TAB_COLOR.value
143
149
  }
144
150
  >
145
- { ( tab ) => (
146
- <div className="block-editor-color-gradient-control__tab-panel">
147
- { tabPanels[ tab.value ] }
148
- </div>
149
- ) }
151
+ { ( tab ) => renderPanelType( tab.value ) }
150
152
  </TabPanel>
151
153
  ) }
152
- { ! canChooseAGradient && tabPanels[ TAB_COLOR.value ] }
153
- { ! canChooseAColor && tabPanels[ TAB_GRADIENT.value ] }
154
+ { ! canChooseAGradient &&
155
+ renderPanelType( TAB_COLOR.value ) }
156
+ { ! canChooseAColor &&
157
+ renderPanelType( TAB_GRADIENT.value ) }
154
158
  </VStack>
155
159
  </fieldset>
156
160
  </BaseControl>