@wordpress/block-editor 9.3.0 → 9.6.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 (449) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -8
  3. package/build/components/block-list/block-invalid-warning.native.js +54 -6
  4. package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
  5. package/build/components/block-list/block.js +2 -2
  6. package/build/components/block-list/block.js.map +1 -1
  7. package/build/components/block-list/block.native.js +2 -1
  8. package/build/components/block-list/block.native.js.map +1 -1
  9. package/build/components/block-list/index.native.js +4 -3
  10. package/build/components/block-list/index.native.js.map +1 -1
  11. package/build/components/block-list/layout.js +20 -5
  12. package/build/components/block-list/layout.js.map +1 -1
  13. package/build/components/block-list/use-block-props/use-block-class-names.js +5 -2
  14. package/build/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  15. package/build/components/block-lock/modal.js +37 -7
  16. package/build/components/block-lock/modal.js.map +1 -1
  17. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  18. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  19. package/build/components/block-mover/mover-description.js +95 -32
  20. package/build/components/block-mover/mover-description.js.map +1 -1
  21. package/build/components/block-pattern-setup/index.js +8 -26
  22. package/build/components/block-pattern-setup/index.js.map +1 -1
  23. package/build/components/block-pattern-setup/setup-toolbar.js +3 -8
  24. package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  25. package/build/components/block-popover/inbetween.js +1 -1
  26. package/build/components/block-popover/inbetween.js.map +1 -1
  27. package/build/components/block-popover/index.js +1 -1
  28. package/build/components/block-popover/index.js.map +1 -1
  29. package/build/components/block-preview/auto.js +21 -5
  30. package/build/components/block-preview/auto.js.map +1 -1
  31. package/build/components/block-settings-menu/block-edit-visually-button.js +70 -0
  32. package/build/components/block-settings-menu/block-edit-visually-button.js.map +1 -0
  33. package/build/components/block-settings-menu/block-mode-toggle.js +1 -1
  34. package/build/components/block-settings-menu/block-mode-toggle.js.map +1 -1
  35. package/build/components/block-settings-menu/block-settings-dropdown.js +5 -2
  36. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  37. package/build/components/block-settings-menu/index.js +6 -2
  38. package/build/components/block-settings-menu/index.js.map +1 -1
  39. package/build/components/block-settings-menu-controls/index.js +5 -2
  40. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  41. package/build/components/block-styles/preview.native.js.map +1 -1
  42. package/build/components/block-switcher/index.js +7 -1
  43. package/build/components/block-switcher/index.js.map +1 -1
  44. package/build/components/block-title/index.js +8 -2
  45. package/build/components/block-title/index.js.map +1 -1
  46. package/build/components/block-title/use-block-display-title.js +15 -15
  47. package/build/components/block-title/use-block-display-title.js.map +1 -1
  48. package/build/components/block-tools/block-contextual-toolbar.js +1 -1
  49. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  50. package/build/components/block-tools/block-selection-button.js +1 -7
  51. package/build/components/block-tools/block-selection-button.js.map +1 -1
  52. package/build/components/block-tools/index.js +4 -1
  53. package/build/components/block-tools/index.js.map +1 -1
  54. package/build/components/block-types-list/index.native.js +65 -23
  55. package/build/components/block-types-list/index.native.js.map +1 -1
  56. package/build/components/border-radius-control/index.js +2 -0
  57. package/build/components/border-radius-control/index.js.map +1 -1
  58. package/build/components/colors/with-colors.js +1 -1
  59. package/build/components/colors/with-colors.js.map +1 -1
  60. package/build/components/colors-gradients/control.js +46 -39
  61. package/build/components/colors-gradients/control.js.map +1 -1
  62. package/build/components/colors-gradients/dropdown.js +7 -3
  63. package/build/components/colors-gradients/dropdown.js.map +1 -1
  64. package/build/components/date-format-picker/index.js +1 -1
  65. package/build/components/date-format-picker/index.js.map +1 -1
  66. package/build/components/duotone/components.js +145 -0
  67. package/build/components/duotone/components.js.map +1 -0
  68. package/build/components/duotone/index.js +40 -0
  69. package/build/components/duotone/index.js.map +1 -0
  70. package/build/components/duotone/utils.js +38 -0
  71. package/build/components/duotone/utils.js.map +1 -0
  72. package/build/components/duotone-control/index.js +17 -5
  73. package/build/components/duotone-control/index.js.map +1 -1
  74. package/build/components/iframe/index.js +19 -6
  75. package/build/components/iframe/index.js.map +1 -1
  76. package/build/components/image-editor/cropper.js +4 -3
  77. package/build/components/image-editor/cropper.js.map +1 -1
  78. package/build/components/image-editor/index.js +3 -1
  79. package/build/components/image-editor/index.js.map +1 -1
  80. package/build/components/index.js +14 -0
  81. package/build/components/index.js.map +1 -1
  82. package/build/components/inserter/block-types-tab.native.js +30 -16
  83. package/build/components/inserter/block-types-tab.native.js.map +1 -1
  84. package/build/components/inserter/index.js +3 -3
  85. package/build/components/inserter/index.js.map +1 -1
  86. package/build/components/inserter/preview-panel.js +8 -8
  87. package/build/components/inserter/preview-panel.js.map +1 -1
  88. package/build/components/inserter/reusable-blocks-tab.native.js +5 -1
  89. package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  90. package/build/components/inserter/search-results.native.js +5 -2
  91. package/build/components/inserter/search-results.native.js.map +1 -1
  92. package/build/components/inserter/utils.native.js +21 -0
  93. package/build/components/inserter/utils.native.js.map +1 -1
  94. package/build/components/inserter-list-item/index.js +5 -1
  95. package/build/components/inserter-list-item/index.js.map +1 -1
  96. package/build/components/link-control/index.js +1 -1
  97. package/build/components/link-control/index.js.map +1 -1
  98. package/build/components/list-view/block-select-button.js +15 -7
  99. package/build/components/list-view/block-select-button.js.map +1 -1
  100. package/build/components/list-view/branch.js +1 -7
  101. package/build/components/list-view/branch.js.map +1 -1
  102. package/build/components/list-view/drop-indicator.js +1 -1
  103. package/build/components/list-view/drop-indicator.js.map +1 -1
  104. package/build/components/media-placeholder/index.js +14 -2
  105. package/build/components/media-placeholder/index.js.map +1 -1
  106. package/build/components/media-placeholder/index.native.js +4 -4
  107. package/build/components/media-placeholder/index.native.js.map +1 -1
  108. package/build/components/media-replace-flow/index.js +6 -13
  109. package/build/components/media-replace-flow/index.js.map +1 -1
  110. package/build/components/observe-typing/index.js +22 -8
  111. package/build/components/observe-typing/index.js.map +1 -1
  112. package/build/components/publish-date-time-picker/index.js +3 -0
  113. package/build/components/publish-date-time-picker/index.js.map +1 -1
  114. package/build/components/rich-text/format-toolbar-container.js +61 -12
  115. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  116. package/build/components/rich-text/index.js +2 -1
  117. package/build/components/rich-text/index.js.map +1 -1
  118. package/build/components/rich-text/use-format-types.js +36 -16
  119. package/build/components/rich-text/use-format-types.js.map +1 -1
  120. package/build/components/rich-text/use-input-rules.js +4 -13
  121. package/build/components/rich-text/use-input-rules.js.map +1 -1
  122. package/build/components/rich-text/use-paste-handler.js +20 -5
  123. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  124. package/build/components/url-popover/index.js +2 -1
  125. package/build/components/url-popover/index.js.map +1 -1
  126. package/build/components/writing-flow/use-arrow-nav.js +34 -2
  127. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  128. package/build/components/writing-flow/use-multi-selection.js +3 -47
  129. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  130. package/build/components/writing-flow/use-selection-observer.js +1 -3
  131. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  132. package/build/components/writing-flow/use-tab-nav.js +1 -1
  133. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  134. package/build/elements/index.js +11 -3
  135. package/build/elements/index.js.map +1 -1
  136. package/build/hooks/aria-label.js +71 -0
  137. package/build/hooks/aria-label.js.map +1 -0
  138. package/build/hooks/color.js +2 -4
  139. package/build/hooks/color.js.map +1 -1
  140. package/build/hooks/duotone.js +33 -160
  141. package/build/hooks/duotone.js.map +1 -1
  142. package/build/hooks/index.js +11 -7
  143. package/build/hooks/index.js.map +1 -1
  144. package/build/hooks/layout.js +59 -18
  145. package/build/hooks/layout.js.map +1 -1
  146. package/build/hooks/style.js +41 -31
  147. package/build/hooks/style.js.map +1 -1
  148. package/build/hooks/utils.js +5 -3
  149. package/build/hooks/utils.js.map +1 -1
  150. package/build/index.js +7 -7
  151. package/build/index.js.map +1 -1
  152. package/build/layouts/flex.js +42 -38
  153. package/build/layouts/flex.js.map +1 -1
  154. package/build/layouts/flow.js +35 -37
  155. package/build/layouts/flow.js.map +1 -1
  156. package/build/layouts/utils.js +35 -3
  157. package/build/layouts/utils.js.map +1 -1
  158. package/build/store/actions.js +24 -31
  159. package/build/store/actions.js.map +1 -1
  160. package/build/store/index.js +0 -4
  161. package/build/store/index.js.map +1 -1
  162. package/build/store/reducer.js +23 -12
  163. package/build/store/reducer.js.map +1 -1
  164. package/build/store/selectors.js +3 -3
  165. package/build/store/selectors.js.map +1 -1
  166. package/build/utils/selection.js +34 -0
  167. package/build/utils/selection.js.map +1 -0
  168. package/build-module/components/block-list/block-invalid-warning.native.js +50 -6
  169. package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
  170. package/build-module/components/block-list/block.js +2 -2
  171. package/build-module/components/block-list/block.js.map +1 -1
  172. package/build-module/components/block-list/block.native.js +2 -1
  173. package/build-module/components/block-list/block.native.js.map +1 -1
  174. package/build-module/components/block-list/index.native.js +3 -1
  175. package/build-module/components/block-list/index.native.js.map +1 -1
  176. package/build-module/components/block-list/layout.js +19 -4
  177. package/build-module/components/block-list/layout.js.map +1 -1
  178. package/build-module/components/block-list/use-block-props/use-block-class-names.js +5 -2
  179. package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +1 -1
  180. package/build-module/components/block-lock/modal.js +39 -8
  181. package/build-module/components/block-lock/modal.js.map +1 -1
  182. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +2 -2
  183. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  184. package/build-module/components/block-mover/mover-description.js +97 -33
  185. package/build-module/components/block-mover/mover-description.js.map +1 -1
  186. package/build-module/components/block-pattern-setup/index.js +9 -27
  187. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  188. package/build-module/components/block-pattern-setup/setup-toolbar.js +3 -8
  189. package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  190. package/build-module/components/block-popover/inbetween.js +1 -1
  191. package/build-module/components/block-popover/inbetween.js.map +1 -1
  192. package/build-module/components/block-popover/index.js +1 -1
  193. package/build-module/components/block-popover/index.js.map +1 -1
  194. package/build-module/components/block-preview/auto.js +20 -5
  195. package/build-module/components/block-preview/auto.js.map +1 -1
  196. package/build-module/components/block-settings-menu/block-edit-visually-button.js +56 -0
  197. package/build-module/components/block-settings-menu/block-edit-visually-button.js.map +1 -0
  198. package/build-module/components/block-settings-menu/block-mode-toggle.js +1 -1
  199. package/build-module/components/block-settings-menu/block-mode-toggle.js.map +1 -1
  200. package/build-module/components/block-settings-menu/block-settings-dropdown.js +6 -5
  201. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  202. package/build-module/components/block-settings-menu/index.js +6 -3
  203. package/build-module/components/block-settings-menu/index.js.map +1 -1
  204. package/build-module/components/block-settings-menu-controls/index.js +7 -4
  205. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  206. package/build-module/components/block-styles/preview.native.js.map +1 -1
  207. package/build-module/components/block-switcher/index.js +7 -1
  208. package/build-module/components/block-switcher/index.js.map +1 -1
  209. package/build-module/components/block-title/index.js +8 -2
  210. package/build-module/components/block-title/index.js.map +1 -1
  211. package/build-module/components/block-title/use-block-display-title.js +15 -14
  212. package/build-module/components/block-title/use-block-display-title.js.map +1 -1
  213. package/build-module/components/block-tools/block-contextual-toolbar.js +1 -1
  214. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  215. package/build-module/components/block-tools/block-selection-button.js +1 -7
  216. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  217. package/build-module/components/block-tools/index.js +4 -1
  218. package/build-module/components/block-tools/index.js.map +1 -1
  219. package/build-module/components/block-types-list/index.native.js +67 -25
  220. package/build-module/components/block-types-list/index.native.js.map +1 -1
  221. package/build-module/components/border-radius-control/index.js +2 -0
  222. package/build-module/components/border-radius-control/index.js.map +1 -1
  223. package/build-module/components/colors/with-colors.js +2 -2
  224. package/build-module/components/colors/with-colors.js.map +1 -1
  225. package/build-module/components/colors-gradients/control.js +47 -40
  226. package/build-module/components/colors-gradients/control.js.map +1 -1
  227. package/build-module/components/colors-gradients/dropdown.js +8 -4
  228. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  229. package/build-module/components/date-format-picker/index.js +1 -1
  230. package/build-module/components/date-format-picker/index.js.map +1 -1
  231. package/build-module/components/duotone/components.js +130 -0
  232. package/build-module/components/duotone/components.js.map +1 -0
  233. package/build-module/components/duotone/index.js +3 -0
  234. package/build-module/components/duotone/index.js.map +1 -0
  235. package/build-module/components/duotone/utils.js +30 -0
  236. package/build-module/components/duotone/utils.js.map +1 -0
  237. package/build-module/components/duotone-control/index.js +18 -6
  238. package/build-module/components/duotone-control/index.js.map +1 -1
  239. package/build-module/components/iframe/index.js +19 -6
  240. package/build-module/components/iframe/index.js.map +1 -1
  241. package/build-module/components/image-editor/cropper.js +4 -3
  242. package/build-module/components/image-editor/cropper.js.map +1 -1
  243. package/build-module/components/image-editor/index.js +3 -1
  244. package/build-module/components/image-editor/index.js.map +1 -1
  245. package/build-module/components/index.js +1 -0
  246. package/build-module/components/index.js.map +1 -1
  247. package/build-module/components/inserter/block-types-tab.native.js +31 -15
  248. package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
  249. package/build-module/components/inserter/index.js +3 -2
  250. package/build-module/components/inserter/index.js.map +1 -1
  251. package/build-module/components/inserter/preview-panel.js +9 -9
  252. package/build-module/components/inserter/preview-panel.js.map +1 -1
  253. package/build-module/components/inserter/reusable-blocks-tab.native.js +6 -2
  254. package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  255. package/build-module/components/inserter/search-results.native.js +6 -3
  256. package/build-module/components/inserter/search-results.native.js.map +1 -1
  257. package/build-module/components/inserter/utils.native.js +19 -0
  258. package/build-module/components/inserter/utils.native.js.map +1 -1
  259. package/build-module/components/inserter-list-item/index.js +4 -1
  260. package/build-module/components/inserter-list-item/index.js.map +1 -1
  261. package/build-module/components/link-control/index.js +1 -1
  262. package/build-module/components/link-control/index.js.map +1 -1
  263. package/build-module/components/list-view/block-select-button.js +16 -8
  264. package/build-module/components/list-view/block-select-button.js.map +1 -1
  265. package/build-module/components/list-view/branch.js +1 -6
  266. package/build-module/components/list-view/branch.js.map +1 -1
  267. package/build-module/components/list-view/drop-indicator.js +1 -1
  268. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  269. package/build-module/components/media-placeholder/index.js +14 -2
  270. package/build-module/components/media-placeholder/index.js.map +1 -1
  271. package/build-module/components/media-placeholder/index.native.js +5 -3
  272. package/build-module/components/media-placeholder/index.native.js.map +1 -1
  273. package/build-module/components/media-replace-flow/index.js +7 -13
  274. package/build-module/components/media-replace-flow/index.js.map +1 -1
  275. package/build-module/components/observe-typing/index.js +22 -8
  276. package/build-module/components/observe-typing/index.js.map +1 -1
  277. package/build-module/components/publish-date-time-picker/index.js +2 -0
  278. package/build-module/components/publish-date-time-picker/index.js.map +1 -1
  279. package/build-module/components/rich-text/format-toolbar-container.js +58 -12
  280. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  281. package/build-module/components/rich-text/index.js +2 -1
  282. package/build-module/components/rich-text/index.js.map +1 -1
  283. package/build-module/components/rich-text/use-format-types.js +37 -18
  284. package/build-module/components/rich-text/use-format-types.js.map +1 -1
  285. package/build-module/components/rich-text/use-input-rules.js +3 -11
  286. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  287. package/build-module/components/rich-text/use-paste-handler.js +20 -5
  288. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  289. package/build-module/components/url-popover/index.js +2 -1
  290. package/build-module/components/url-popover/index.js.map +1 -1
  291. package/build-module/components/writing-flow/use-arrow-nav.js +35 -3
  292. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  293. package/build-module/components/writing-flow/use-multi-selection.js +3 -45
  294. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  295. package/build-module/components/writing-flow/use-selection-observer.js +1 -3
  296. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  297. package/build-module/components/writing-flow/use-tab-nav.js +1 -1
  298. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  299. package/build-module/elements/index.js +7 -1
  300. package/build-module/elements/index.js.map +1 -1
  301. package/build-module/hooks/aria-label.js +59 -0
  302. package/build-module/hooks/aria-label.js.map +1 -0
  303. package/build-module/hooks/color.js +2 -3
  304. package/build-module/hooks/color.js.map +1 -1
  305. package/build-module/hooks/duotone.js +22 -140
  306. package/build-module/hooks/duotone.js.map +1 -1
  307. package/build-module/hooks/index.js +2 -1
  308. package/build-module/hooks/index.js.map +1 -1
  309. package/build-module/hooks/layout.js +60 -19
  310. package/build-module/hooks/layout.js.map +1 -1
  311. package/build-module/hooks/style.js +44 -35
  312. package/build-module/hooks/style.js.map +1 -1
  313. package/build-module/hooks/utils.js +5 -2
  314. package/build-module/hooks/utils.js.map +1 -1
  315. package/build-module/index.js +1 -1
  316. package/build-module/index.js.map +1 -1
  317. package/build-module/layouts/flex.js +43 -35
  318. package/build-module/layouts/flex.js.map +1 -1
  319. package/build-module/layouts/flow.js +35 -38
  320. package/build-module/layouts/flow.js.map +1 -1
  321. package/build-module/layouts/utils.js +33 -3
  322. package/build-module/layouts/utils.js.map +1 -1
  323. package/build-module/store/actions.js +14 -20
  324. package/build-module/store/actions.js.map +1 -1
  325. package/build-module/store/index.js +0 -4
  326. package/build-module/store/index.js.map +1 -1
  327. package/build-module/store/reducer.js +23 -11
  328. package/build-module/store/reducer.js.map +1 -1
  329. package/build-module/store/selectors.js +4 -4
  330. package/build-module/store/selectors.js.map +1 -1
  331. package/build-module/utils/selection.js +24 -0
  332. package/build-module/utils/selection.js.map +1 -0
  333. package/build-style/style-rtl.css +43 -13
  334. package/build-style/style.css +43 -13
  335. package/package.json +28 -28
  336. package/src/components/block-draggable/test/helpers.native.js +3 -3
  337. package/src/components/block-list/block-invalid-warning.native.js +42 -7
  338. package/src/components/block-list/block.js +2 -2
  339. package/src/components/block-list/block.native.js +1 -0
  340. package/src/components/block-list/index.native.js +1 -1
  341. package/src/components/block-list/layout.js +15 -3
  342. package/src/components/block-list/style.scss +2 -2
  343. package/src/components/block-list/use-block-props/use-block-class-names.js +5 -1
  344. package/src/components/block-lock/modal.js +47 -9
  345. package/src/components/block-lock/style.scss +10 -0
  346. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +3 -3
  347. package/src/components/block-mover/mover-description.js +131 -48
  348. package/src/components/block-mover/test/mover-description.js +55 -3
  349. package/src/components/block-pattern-setup/index.js +5 -25
  350. package/src/components/block-pattern-setup/setup-toolbar.js +2 -9
  351. package/src/components/block-pattern-setup/style.scss +4 -2
  352. package/src/components/block-popover/inbetween.js +1 -1
  353. package/src/components/block-popover/index.js +1 -1
  354. package/src/components/block-preview/auto.js +17 -3
  355. package/src/components/block-settings-menu/block-edit-visually-button.js +52 -0
  356. package/src/components/block-settings-menu/block-mode-toggle.js +1 -0
  357. package/src/components/block-settings-menu/block-settings-dropdown.js +7 -3
  358. package/src/components/block-settings-menu/index.js +15 -11
  359. package/src/components/block-settings-menu-controls/index.js +5 -4
  360. package/src/components/block-styles/preview.native.js +1 -0
  361. package/src/components/block-switcher/index.js +7 -1
  362. package/src/components/block-title/index.js +3 -2
  363. package/src/components/block-title/use-block-display-title.js +20 -12
  364. package/src/components/block-tools/block-contextual-toolbar.js +3 -1
  365. package/src/components/block-tools/block-selection-button.js +0 -5
  366. package/src/components/block-tools/index.js +4 -1
  367. package/src/components/block-types-list/index.native.js +76 -24
  368. package/src/components/block-types-list/style.native.scss +18 -0
  369. package/src/components/border-radius-control/index.js +2 -0
  370. package/src/components/color-palette/test/__snapshots__/control.js.snap +0 -4
  371. package/src/components/colors/test/__snapshots__/with-colors.js.snap +1 -1
  372. package/src/components/colors/test/with-colors.js +1 -1
  373. package/src/components/colors/with-colors.js +2 -2
  374. package/src/components/colors-gradients/control.js +78 -65
  375. package/src/components/colors-gradients/dropdown.js +9 -2
  376. package/src/components/colors-gradients/style.scss +11 -8
  377. package/src/components/colors-gradients/test/control.js +16 -23
  378. package/src/components/date-format-picker/index.js +1 -0
  379. package/src/components/duotone/components.js +133 -0
  380. package/src/components/duotone/index.js +7 -0
  381. package/src/components/duotone/utils.js +25 -0
  382. package/src/components/duotone-control/index.js +12 -7
  383. package/src/components/duotone-control/style.scss +5 -0
  384. package/src/components/iframe/index.js +25 -6
  385. package/src/components/image-editor/cropper.js +9 -3
  386. package/src/components/image-editor/index.js +2 -0
  387. package/src/components/index.js +1 -0
  388. package/src/components/inserter/block-types-tab.native.js +42 -21
  389. package/src/components/inserter/index.js +3 -5
  390. package/src/components/inserter/preview-panel.js +6 -14
  391. package/src/components/inserter/reusable-blocks-tab.native.js +4 -2
  392. package/src/components/inserter/search-results.native.js +4 -2
  393. package/src/components/inserter/style.scss +1 -1
  394. package/src/components/inserter/test/block-types-tab.native.js +2 -0
  395. package/src/components/inserter/test/utils.native.js +37 -0
  396. package/src/components/inserter/utils.native.js +11 -0
  397. package/src/components/inserter-list-item/index.js +4 -1
  398. package/src/components/link-control/index.js +1 -0
  399. package/src/components/link-control/test/fixtures/index.js +3 -4
  400. package/src/components/link-control/test/index.js +64 -73
  401. package/src/components/list-view/block-select-button.js +29 -14
  402. package/src/components/list-view/branch.js +1 -6
  403. package/src/components/list-view/drop-indicator.js +1 -1
  404. package/src/components/list-view/style.scss +18 -4
  405. package/src/components/media-placeholder/index.js +20 -0
  406. package/src/components/media-placeholder/index.native.js +9 -5
  407. package/src/components/media-replace-flow/index.js +5 -14
  408. package/src/components/media-replace-flow/test/index.js +14 -4
  409. package/src/components/media-upload/README.md +8 -0
  410. package/src/components/observe-typing/index.js +17 -14
  411. package/src/components/publish-date-time-picker/index.js +2 -0
  412. package/src/components/responsive-block-control/README.md +3 -1
  413. package/src/components/responsive-block-control/test/index.js +1 -2
  414. package/src/components/rich-text/format-toolbar-container.js +63 -14
  415. package/src/components/rich-text/index.js +1 -0
  416. package/src/components/rich-text/use-format-types.js +38 -17
  417. package/src/components/rich-text/use-input-rules.js +6 -15
  418. package/src/components/rich-text/use-paste-handler.js +17 -5
  419. package/src/components/url-popover/index.js +1 -0
  420. package/src/components/url-popover/test/__snapshots__/index.js.snap +3 -0
  421. package/src/components/writing-flow/use-arrow-nav.js +32 -1
  422. package/src/components/writing-flow/use-multi-selection.js +1 -48
  423. package/src/components/writing-flow/use-selection-observer.js +2 -3
  424. package/src/components/writing-flow/use-tab-nav.js +1 -1
  425. package/src/elements/index.js +8 -1
  426. package/src/elements/test/index.js +18 -0
  427. package/src/hooks/aria-label.js +67 -0
  428. package/src/hooks/color.js +10 -3
  429. package/src/hooks/duotone.js +18 -139
  430. package/src/hooks/index.js +2 -1
  431. package/src/hooks/layout.js +77 -29
  432. package/src/hooks/style.js +46 -39
  433. package/src/hooks/utils.js +7 -3
  434. package/src/index.js +1 -1
  435. package/src/layouts/flex.js +49 -43
  436. package/src/layouts/flow.js +35 -34
  437. package/src/layouts/test/flex.js +21 -0
  438. package/src/layouts/test/flow.js +21 -0
  439. package/src/layouts/test/utils.js +138 -0
  440. package/src/layouts/utils.js +44 -3
  441. package/src/store/actions.js +17 -31
  442. package/src/store/index.js +0 -4
  443. package/src/store/reducer.js +24 -11
  444. package/src/store/selectors.js +3 -4
  445. package/src/store/test/reducer.js +138 -10
  446. package/src/store/test/selectors.js +3 -6
  447. package/src/utils/selection.js +26 -0
  448. package/src/utils/test/selection.js +39 -0
  449. package/tsconfig.json +2 -1
@@ -12,6 +12,7 @@ import { useMemo } from '@wordpress/element';
12
12
  import BlockList from '../block-list';
13
13
  import Iframe from '../iframe';
14
14
  import EditorStyles from '../editor-styles';
15
+ import { __unstablePresetDuotoneFilter as PresetDuotoneFilter } from '../../components/duotone';
15
16
  import { store } from '../../store';
16
17
 
17
18
  // This is used to avoid rendering the block list if the sizes change.
@@ -28,11 +29,12 @@ function AutoBlockPreview( {
28
29
  useResizeObserver();
29
30
  const [ contentResizeListener, { height: contentHeight } ] =
30
31
  useResizeObserver();
31
- const { styles, assets } = useSelect( ( select ) => {
32
+ const { styles, assets, duotone } = useSelect( ( select ) => {
32
33
  const settings = select( store ).getSettings();
33
34
  return {
34
35
  styles: settings.styles,
35
36
  assets: settings.__unstableResolvedAssets,
37
+ duotone: settings.__experimentalFeatures?.color?.duotone,
36
38
  };
37
39
  }, [] );
38
40
 
@@ -51,11 +53,14 @@ function AutoBlockPreview( {
51
53
  return styles;
52
54
  }, [ styles ] );
53
55
 
56
+ const svgFilters = useMemo( () => {
57
+ return [ ...( duotone?.default ?? [] ), ...( duotone?.theme ?? [] ) ];
58
+ }, [ duotone ] );
59
+
54
60
  // Initialize on render instead of module top level, to avoid circular dependency issues.
55
61
  MemoizedBlockList = MemoizedBlockList || pure( BlockList );
56
62
 
57
63
  const scale = containerWidth / viewportWidth;
58
-
59
64
  return (
60
65
  <div className="block-editor-block-preview__container">
61
66
  { containerResizeListener }
@@ -100,12 +105,21 @@ function AutoBlockPreview( {
100
105
  // See: https://github.com/WordPress/gutenberg/pull/38175.
101
106
  maxHeight: MAX_HEIGHT,
102
107
  minHeight:
103
- scale < 1 && __experimentalMinHeight
108
+ scale !== 0 && scale < 1 && __experimentalMinHeight
104
109
  ? __experimentalMinHeight / scale
105
110
  : __experimentalMinHeight,
106
111
  } }
107
112
  >
108
113
  { contentResizeListener }
114
+ {
115
+ /* Filters need to be rendered before children to avoid Safari rendering issues. */
116
+ svgFilters.map( ( preset ) => (
117
+ <PresetDuotoneFilter
118
+ preset={ preset }
119
+ key={ preset.slug }
120
+ />
121
+ ) )
122
+ }
109
123
  <MemoizedBlockList renderAppender={ false } />
110
124
  </Iframe>
111
125
  </Disabled>
@@ -0,0 +1,52 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { rawHandler, getBlockContent } from '@wordpress/blocks';
5
+ import { ToolbarButton, ToolbarGroup } from '@wordpress/components';
6
+ import { __ } from '@wordpress/i18n';
7
+ import { useSelect, useDispatch } from '@wordpress/data';
8
+ import { useCallback } from '@wordpress/element';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import { store as blockEditorStore } from '../../store';
14
+
15
+ export default function BlockEditVisuallyButton( { clientIds, ...props } ) {
16
+ const { block, shouldRender } = useSelect(
17
+ ( select ) => {
18
+ const firstBlockClientId = clientIds[ 0 ];
19
+ const { isBlockMultiSelected, getBlockMode, getBlock } =
20
+ select( blockEditorStore );
21
+ const isSingleSelected =
22
+ ! isBlockMultiSelected( firstBlockClientId );
23
+ const isHtmlMode = getBlockMode( firstBlockClientId ) === 'html';
24
+
25
+ return {
26
+ block: getBlock( firstBlockClientId ),
27
+ shouldRender: isSingleSelected && isHtmlMode,
28
+ };
29
+ },
30
+ [ clientIds[ 0 ] ]
31
+ );
32
+
33
+ const { replaceBlocks } = useDispatch( blockEditorStore );
34
+ const onClick = useCallback( () => {
35
+ replaceBlocks(
36
+ block.clientId,
37
+ rawHandler( { HTML: getBlockContent( block ) } )
38
+ );
39
+ }, [ block ] );
40
+
41
+ if ( ! shouldRender ) {
42
+ return null;
43
+ }
44
+
45
+ return (
46
+ <ToolbarGroup>
47
+ <ToolbarButton onClick={ onClick } { ...props }>
48
+ { __( 'Edit visually' ) }
49
+ </ToolbarButton>
50
+ </ToolbarGroup>
51
+ );
52
+ }
@@ -22,6 +22,7 @@ export function BlockModeToggle( {
22
22
  isCodeEditingEnabled = true,
23
23
  } ) {
24
24
  if (
25
+ ! blockType ||
25
26
  ! hasBlockSupport( blockType, 'html', true ) ||
26
27
  ! isCodeEditingEnabled
27
28
  ) {
@@ -16,7 +16,7 @@ import {
16
16
  useCallback,
17
17
  useRef,
18
18
  } from '@wordpress/element';
19
- import { __, _n, sprintf } from '@wordpress/i18n';
19
+ import { __, sprintf } from '@wordpress/i18n';
20
20
  import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';
21
21
  import { useCopyToClipboard } from '@wordpress/compose';
22
22
 
@@ -42,7 +42,8 @@ const POPOVER_PROPS = {
42
42
 
43
43
  function CopyMenuItem( { blocks, onCopy } ) {
44
44
  const ref = useCopyToClipboard( () => serialize( blocks ), onCopy );
45
- const copyMenuItemLabel = _n( 'Copy block', 'Copy blocks', blocks.length );
45
+ const copyMenuItemLabel =
46
+ blocks.length > 1 ? __( 'Copy blocks' ) : __( 'Copy block' );
46
47
  return <MenuItem ref={ ref }>{ copyMenuItemLabel }</MenuItem>;
47
48
  }
48
49
 
@@ -124,7 +125,10 @@ export function BlockSettingsDropdown( {
124
125
  [ __experimentalSelectBlock ]
125
126
  );
126
127
 
127
- const blockTitle = useBlockDisplayTitle( firstBlockClientId, 25 );
128
+ const blockTitle = useBlockDisplayTitle( {
129
+ clientId: firstBlockClientId,
130
+ maximumLength: 25,
131
+ } );
128
132
 
129
133
  const updateSelectionAfterRemove = useCallback(
130
134
  __experimentalSelectBlock
@@ -7,20 +7,24 @@ import { ToolbarGroup, ToolbarItem } from '@wordpress/components';
7
7
  * Internal dependencies
8
8
  */
9
9
  import BlockSettingsDropdown from './block-settings-dropdown';
10
+ import BlockEditVisuallyButton from './block-edit-visually-button';
10
11
 
11
12
  export function BlockSettingsMenu( { clientIds, ...props } ) {
12
13
  return (
13
- <ToolbarGroup>
14
- <ToolbarItem>
15
- { ( toggleProps ) => (
16
- <BlockSettingsDropdown
17
- clientIds={ clientIds }
18
- toggleProps={ toggleProps }
19
- { ...props }
20
- />
21
- ) }
22
- </ToolbarItem>
23
- </ToolbarGroup>
14
+ <>
15
+ <BlockEditVisuallyButton clientIds={ clientIds } { ...props } />
16
+ <ToolbarGroup>
17
+ <ToolbarItem>
18
+ { ( toggleProps ) => (
19
+ <BlockSettingsDropdown
20
+ clientIds={ clientIds }
21
+ toggleProps={ toggleProps }
22
+ { ...props }
23
+ />
24
+ ) }
25
+ </ToolbarItem>
26
+ </ToolbarGroup>
27
+ </>
24
28
  );
25
29
  }
26
30
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { compact, map } from 'lodash';
4
+ import { map } from 'lodash';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -20,7 +20,7 @@ import {
20
20
  useConvertToGroupButtonProps,
21
21
  ConvertToGroupButton,
22
22
  } from '../convert-to-group-buttons';
23
- import { BlockLockMenuItem } from '../block-lock';
23
+ import { BlockLockMenuItem, useBlockLock } from '../block-lock';
24
24
  import { store as blockEditorStore } from '../../store';
25
25
 
26
26
  const { Fill, Slot } = createSlotFill( 'BlockSettingsMenuControls' );
@@ -37,7 +37,7 @@ const BlockSettingsMenuControlsSlot = ( { fillProps, clientIds = null } ) => {
37
37
  clientIds !== null ? clientIds : getSelectedBlockClientIds();
38
38
  return {
39
39
  selectedBlocks: map(
40
- compact( getBlocksByClientId( ids ) ),
40
+ getBlocksByClientId( ids ).filter( Boolean ),
41
41
  ( block ) => block.name
42
42
  ),
43
43
  selectedClientIds: ids,
@@ -47,7 +47,8 @@ const BlockSettingsMenuControlsSlot = ( { fillProps, clientIds = null } ) => {
47
47
  [ clientIds ]
48
48
  );
49
49
 
50
- const showLockButton = selectedClientIds.length === 1;
50
+ const { canLock } = useBlockLock( selectedClientIds[ 0 ] );
51
+ const showLockButton = selectedClientIds.length === 1 && canLock;
51
52
 
52
53
  // Check if current selection of blocks is Groupable or Ungroupable
53
54
  // and pass this props down to ConvertToGroupButton.
@@ -10,6 +10,7 @@ import {
10
10
  Easing,
11
11
  Image,
12
12
  } from 'react-native';
13
+
13
14
  /**
14
15
  * WordPress dependencies
15
16
  */
@@ -98,8 +98,14 @@ export const BlockSwitcherDropdownMenu = ( { clientIds, blocks } ) => {
98
98
  // Pattern transformation through the `Patterns` API.
99
99
  const onPatternTransform = ( transformedBlocks ) =>
100
100
  replaceBlocks( clientIds, transformedBlocks );
101
+
102
+ /**
103
+ * The `isTemplate` check is a stopgap solution here.
104
+ * Ideally, the Transforms API should handle this
105
+ * by allowing to exclude blocks from wildcard transformations.
106
+ */
101
107
  const hasPossibleBlockTransformations =
102
- !! possibleBlockTransformations.length && canRemove;
108
+ !! possibleBlockTransformations.length && canRemove && ! isTemplate;
103
109
  const hasPatternTransformation = !! patterns?.length && canRemove;
104
110
  if ( ! hasBlockStyles && ! hasPossibleBlockTransformations ) {
105
111
  return (
@@ -17,9 +17,10 @@ import useBlockDisplayTitle from './use-block-display-title';
17
17
  * @param {Object} props
18
18
  * @param {string} props.clientId Client ID of block.
19
19
  * @param {number|undefined} props.maximumLength The maximum length that the block title string may be before truncated.
20
+ * @param {string|undefined} props.context The context to pass to `getBlockLabel`.
20
21
  *
21
22
  * @return {JSX.Element} Block title.
22
23
  */
23
- export default function BlockTitle( { clientId, maximumLength } ) {
24
- return useBlockDisplayTitle( clientId, maximumLength );
24
+ export default function BlockTitle( { clientId, maximumLength, context } ) {
25
+ return useBlockDisplayTitle( { clientId, maximumLength, context } );
25
26
  }
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { truncate } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -26,14 +21,20 @@ import { store as blockEditorStore } from '../../store';
26
21
  * @example
27
22
  *
28
23
  * ```js
29
- * useBlockDisplayTitle( 'afd1cb17-2c08-4e7a-91be-007ba7ddc3a1', 17 );
24
+ * useBlockDisplayTitle( { clientId: 'afd1cb17-2c08-4e7a-91be-007ba7ddc3a1', maximumLength: 17 } );
30
25
  * ```
31
26
  *
32
- * @param {string} clientId Client ID of block.
33
- * @param {number|undefined} maximumLength The maximum length that the block title string may be before truncated.
27
+ * @param {Object} props
28
+ * @param {string} props.clientId Client ID of block.
29
+ * @param {number|undefined} props.maximumLength The maximum length that the block title string may be before truncated.
30
+ * @param {string|undefined} props.context The context to pass to `getBlockLabel`.
34
31
  * @return {?string} Block title.
35
32
  */
36
- export default function useBlockDisplayTitle( clientId, maximumLength ) {
33
+ export default function useBlockDisplayTitle( {
34
+ clientId,
35
+ maximumLength,
36
+ context,
37
+ } ) {
37
38
  const { attributes, name, reusableBlockTitle } = useSelect(
38
39
  ( select ) => {
39
40
  if ( ! clientId ) {
@@ -68,7 +69,7 @@ export default function useBlockDisplayTitle( clientId, maximumLength ) {
68
69
  }
69
70
  const blockType = getBlockType( name );
70
71
  const blockLabel = blockType
71
- ? getBlockLabel( blockType, attributes )
72
+ ? getBlockLabel( blockType, attributes, context )
72
73
  : null;
73
74
 
74
75
  const label = reusableBlockTitle || blockLabel;
@@ -78,8 +79,15 @@ export default function useBlockDisplayTitle( clientId, maximumLength ) {
78
79
  const blockTitle =
79
80
  label && label !== blockType.title ? label : blockInformation.title;
80
81
 
81
- if ( maximumLength && maximumLength > 0 ) {
82
- return truncate( blockTitle, { length: maximumLength } );
82
+ if (
83
+ maximumLength &&
84
+ maximumLength > 0 &&
85
+ blockTitle.length > maximumLength
86
+ ) {
87
+ const omission = '...';
88
+ return (
89
+ blockTitle.slice( 0, maximumLength - omission.length ) + omission
90
+ );
83
91
  }
84
92
 
85
93
  return blockTitle;
@@ -36,11 +36,13 @@ function BlockContextualToolbar( { focusOnMount, isFixed, ...props } ) {
36
36
  getBlockType( getBlockName( selectedBlockClientId ) ),
37
37
  hasParents: parents.length,
38
38
  showParentSelector:
39
+ parentBlockType &&
39
40
  hasBlockSupport(
40
41
  parentBlockType,
41
42
  '__experimentalParentSelector',
42
43
  true
43
- ) && selectedBlockClientIds.length <= 1,
44
+ ) &&
45
+ selectedBlockClientIds.length <= 1,
44
46
  };
45
47
  },
46
48
  []
@@ -102,7 +102,6 @@ function BlockSelectionButton( { clientId, rootClientId } ) {
102
102
  getMultiSelectedBlocksEndClientId,
103
103
  getPreviousBlockClientId,
104
104
  getNextBlockClientId,
105
- isNavigationMode,
106
105
  } = useSelect( blockEditorStore );
107
106
  const {
108
107
  selectBlock,
@@ -160,10 +159,6 @@ function BlockSelectionButton( { clientId, rootClientId } ) {
160
159
  selectedBlockClientId;
161
160
  }
162
161
  const startingBlockClientId = hasBlockMovingClientId();
163
- if ( isEscape && isNavigationMode() ) {
164
- clearSelectedBlock();
165
- event.preventDefault();
166
- }
167
162
  if ( isEscape && startingBlockClientId && ! event.defaultPrevented ) {
168
163
  setBlockMovingClientId( null );
169
164
  event.preventDefault();
@@ -53,6 +53,8 @@ export default function BlockTools( {
53
53
  } = useDispatch( blockEditorStore );
54
54
 
55
55
  function onKeyDown( event ) {
56
+ if ( event.defaultPrevented ) return;
57
+
56
58
  if ( isMatch( 'core/block-editor/move-up', event ) ) {
57
59
  const clientIds = getSelectedBlockClientIds();
58
60
  if ( clientIds.length ) {
@@ -93,12 +95,13 @@ export default function BlockTools( {
93
95
  }
94
96
  } else if ( isMatch( 'core/block-editor/unselect', event ) ) {
95
97
  const clientIds = getSelectedBlockClientIds();
96
- if ( clientIds.length > 1 ) {
98
+ if ( clientIds.length ) {
97
99
  event.preventDefault();
98
100
  clearSelectedBlock();
99
101
  event.target.ownerDocument.defaultView
100
102
  .getSelection()
101
103
  .removeAllRanges();
104
+ __unstableContentRef?.current.focus();
102
105
  }
103
106
  }
104
107
  }
@@ -4,7 +4,9 @@
4
4
  import {
5
5
  Dimensions,
6
6
  FlatList,
7
+ SectionList,
7
8
  StyleSheet,
9
+ Text,
8
10
  TouchableWithoutFeedback,
9
11
  View,
10
12
  } from 'react-native';
@@ -13,7 +15,11 @@ import {
13
15
  * WordPress dependencies
14
16
  */
15
17
  import { useState, useEffect } from '@wordpress/element';
16
- import { BottomSheet, InserterButton } from '@wordpress/components';
18
+ import { BottomSheet, Gradient, InserterButton } from '@wordpress/components';
19
+ import {
20
+ usePreferredColorScheme,
21
+ usePreferredColorSchemeStyle,
22
+ } from '@wordpress/compose';
17
23
 
18
24
  /**
19
25
  * Internal dependencies
@@ -24,7 +30,7 @@ const MIN_COL_NUM = 3;
24
30
 
25
31
  export default function BlockTypesList( {
26
32
  name,
27
- items,
33
+ sections,
28
34
  onSelect,
29
35
  listProps,
30
36
  initialNumToRender = 3,
@@ -80,33 +86,79 @@ export default function BlockTypesList( {
80
86
  listProps.contentContainerStyle
81
87
  );
82
88
 
89
+ const renderSection = ( { item } ) => {
90
+ return (
91
+ <TouchableWithoutFeedback accessible={ false }>
92
+ <FlatList
93
+ data={ item.list }
94
+ key={ `InserterUI-${ name }-${ numberOfColumns }` } // Re-render when numberOfColumns changes.
95
+ numColumns={ numberOfColumns }
96
+ ItemSeparatorComponent={ () => (
97
+ <TouchableWithoutFeedback accessible={ false }>
98
+ <View
99
+ style={
100
+ styles[ 'block-types-list__row-separator' ]
101
+ }
102
+ />
103
+ </TouchableWithoutFeedback>
104
+ ) }
105
+ scrollEnabled={ false }
106
+ renderItem={ renderListItem }
107
+ />
108
+ </TouchableWithoutFeedback>
109
+ );
110
+ };
111
+
112
+ const renderListItem = ( { item } ) => {
113
+ return (
114
+ <InserterButton
115
+ item={ item }
116
+ itemWidth={ itemWidth }
117
+ maxWidth={ maxWidth }
118
+ onSelect={ onSelect }
119
+ />
120
+ );
121
+ };
122
+
123
+ const colorScheme = usePreferredColorScheme();
124
+ const sectionHeaderGradientValue =
125
+ colorScheme === 'light'
126
+ ? 'linear-gradient(#fff 70%, rgba(255, 255, 255, 0))'
127
+ : 'linear-gradient(#2e2e2e 70%, rgba(46, 46, 46, 0))';
128
+ const sectionHeaderTitleStyles = usePreferredColorSchemeStyle(
129
+ styles[ 'block-types-list__section-header-title' ],
130
+ styles[ 'block-types-list__section-header-title--dark' ]
131
+ );
132
+
133
+ const renderSectionHeader = ( { section: { metadata } } ) => {
134
+ if ( ! metadata?.icon || ! metadata?.title ) {
135
+ return null;
136
+ }
137
+
138
+ return (
139
+ <TouchableWithoutFeedback accessible={ false }>
140
+ <Gradient
141
+ gradientValue={ sectionHeaderGradientValue }
142
+ style={ styles[ 'block-types-list__section-header' ] }
143
+ >
144
+ { metadata?.icon }
145
+ <Text style={ sectionHeaderTitleStyles }>
146
+ { metadata?.title }
147
+ </Text>
148
+ </Gradient>
149
+ </TouchableWithoutFeedback>
150
+ );
151
+ };
152
+
83
153
  return (
84
- <FlatList
154
+ <SectionList
85
155
  onLayout={ onLayout }
86
- key={ `InserterUI-${ name }-${ numberOfColumns }` } // Re-render when numberOfColumns changes.
87
156
  testID={ `InserterUI-${ name }` }
88
157
  keyboardShouldPersistTaps="always"
89
- numColumns={ numberOfColumns }
90
- data={ items }
158
+ sections={ sections }
91
159
  initialNumToRender={ initialNumToRender }
92
- ItemSeparatorComponent={ () => (
93
- <TouchableWithoutFeedback accessible={ false }>
94
- <View
95
- style={ styles[ 'block-types-list__row-separator' ] }
96
- />
97
- </TouchableWithoutFeedback>
98
- ) }
99
- keyExtractor={ ( item ) => item.id }
100
- renderItem={ ( { item } ) => (
101
- <InserterButton
102
- { ...{
103
- item,
104
- itemWidth,
105
- maxWidth,
106
- onSelect,
107
- } }
108
- />
109
- ) }
160
+ renderItem={ renderSection }
161
+ renderSectionHeader={ renderSectionHeader }
110
162
  { ...listProps }
111
163
  contentContainerStyle={ {
112
164
  ...contentContainerStyle,
@@ -5,3 +5,21 @@
5
5
  .block-types-list__column {
6
6
  padding: $grid-unit-20;
7
7
  }
8
+
9
+ .block-types-list__section-header {
10
+ align-items: center;
11
+ flex-direction: row;
12
+ justify-content: center;
13
+ padding-bottom: 16;
14
+ padding-top: 32;
15
+ }
16
+
17
+ .block-types-list__section-header-title {
18
+ color: $black;
19
+ font-size: 16px;
20
+ margin-left: 10px;
21
+ }
22
+
23
+ .block-types-list__section-header-title--dark {
24
+ color: $white;
25
+ }
@@ -82,6 +82,8 @@ export default function BorderRadiusControl( { onChange, values } ) {
82
82
  units={ units }
83
83
  />
84
84
  <RangeControl
85
+ label={ __( 'Border radius' ) }
86
+ hideLabelFromVision
85
87
  className="components-border-radius-control__range-control"
86
88
  value={ allValue ?? '' }
87
89
  min={ MIN_BORDER_RADIUS_VALUE }
@@ -6,10 +6,6 @@ exports[`ColorPaletteControl matches the snapshot 1`] = `
6
6
  font-size: 13px;
7
7
  }
8
8
 
9
- .emotion-2 {
10
- margin-bottom: calc(4px * 2);
11
- }
12
-
13
9
  .components-panel__row .emotion-2 {
14
10
  margin-bottom: inherit;
15
11
  }
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`createCustomColorsHOC provides the the wrapped component with color values and setter functions as props 1`] = `
3
+ exports[`createCustomColorsHOC provides the wrapped component with color values and setter functions as props 1`] = `
4
4
  <Component
5
5
  attributes={
6
6
  Object {
@@ -9,7 +9,7 @@ import { shallow, mount } from 'enzyme';
9
9
  import { createCustomColorsHOC } from '../with-colors';
10
10
 
11
11
  describe( 'createCustomColorsHOC', () => {
12
- it( 'provides the the wrapped component with color values and setter functions as props', () => {
12
+ it( 'provides the wrapped component with color values and setter functions as props', () => {
13
13
  const withCustomColors = createCustomColorsHOC( [
14
14
  { name: 'Red', slug: 'red', color: 'ff0000' },
15
15
  ] );
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { isString, kebabCase, reduce, upperFirst } from 'lodash';
4
+ import { kebabCase, reduce, upperFirst } from 'lodash';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -78,7 +78,7 @@ function createColorHOC( colorTypes, withColorPalette ) {
78
78
  ( colorObject, colorType ) => {
79
79
  return {
80
80
  ...colorObject,
81
- ...( isString( colorType )
81
+ ...( typeof colorType === 'string'
82
82
  ? { [ colorType ]: kebabCase( colorType ) }
83
83
  : colorType ),
84
84
  };