@wordpress/block-editor 12.14.0 → 12.16.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 (664) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +10 -5
  3. package/build/components/block-canvas/index.js +22 -6
  4. package/build/components/block-canvas/index.js.map +1 -1
  5. package/build/components/block-card/index.js +1 -1
  6. package/build/components/block-card/index.js.map +1 -1
  7. package/build/components/block-controls/hook.js +3 -23
  8. package/build/components/block-controls/hook.js.map +1 -1
  9. package/build/components/block-edit/context.js +5 -1
  10. package/build/components/block-edit/context.js.map +1 -1
  11. package/build/components/block-edit/index.js +18 -9
  12. package/build/components/block-edit/index.js.map +1 -1
  13. package/build/components/block-info-slot-fill/index.js +3 -4
  14. package/build/components/block-info-slot-fill/index.js.map +1 -1
  15. package/build/components/block-list/block.js +28 -9
  16. package/build/components/block-list/block.js.map +1 -1
  17. package/build/components/block-list/block.native.js +16 -5
  18. package/build/components/block-list/block.native.js.map +1 -1
  19. package/build/components/block-list/use-block-props/index.js +61 -18
  20. package/build/components/block-list/use-block-props/index.js.map +1 -1
  21. package/build/components/block-list/use-block-props/use-focus-first-element.js +4 -29
  22. package/build/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  23. package/build/components/block-list/use-block-props/use-is-hovered.js +4 -14
  24. package/build/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  25. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js +4 -2
  26. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  27. package/build/components/block-parent-selector/index.js +1 -1
  28. package/build/components/block-parent-selector/index.js.map +1 -1
  29. package/build/components/block-pattern-setup/index.js +25 -16
  30. package/build/components/block-pattern-setup/index.js.map +1 -1
  31. package/build/components/block-pattern-setup/setup-toolbar.js +4 -2
  32. package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  33. package/build/components/block-patterns-list/index.js +37 -20
  34. package/build/components/block-patterns-list/index.js.map +1 -1
  35. package/build/components/block-removal-warning-modal/index.js +2 -9
  36. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  37. package/build/components/block-rename/index.js +28 -0
  38. package/build/components/block-rename/index.js.map +1 -0
  39. package/build/components/block-rename/is-empty-string.js +10 -0
  40. package/build/components/block-rename/is-empty-string.js.map +1 -0
  41. package/build/components/block-rename/modal.js +90 -0
  42. package/build/components/block-rename/modal.js.map +1 -0
  43. package/build/components/block-rename/rename-control.js +74 -0
  44. package/build/components/block-rename/rename-control.js.map +1 -0
  45. package/build/components/block-rename/use-block-rename.js +17 -0
  46. package/build/components/block-rename/use-block-rename.js.map +1 -0
  47. package/build/components/block-settings/container.native.js +6 -4
  48. package/build/components/block-settings/container.native.js.map +1 -1
  49. package/build/components/block-settings-menu/block-settings-dropdown.js +33 -20
  50. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  51. package/build/components/block-settings-menu-controls/index.js +7 -0
  52. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  53. package/build/components/block-styles/index.js +1 -1
  54. package/build/components/block-styles/index.js.map +1 -1
  55. package/build/components/block-styles/index.native.js +3 -2
  56. package/build/components/block-styles/index.native.js.map +1 -1
  57. package/build/components/block-toolbar/block-toolbar-menu.native.js +1 -1
  58. package/build/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  59. package/build/components/block-toolbar/index.js +89 -27
  60. package/build/components/block-toolbar/index.js.map +1 -1
  61. package/build/components/block-tools/block-toolbar-breadcrumb.js +49 -0
  62. package/build/components/block-tools/block-toolbar-breadcrumb.js.map +1 -0
  63. package/build/components/block-tools/block-toolbar-popover.js +86 -0
  64. package/build/components/block-tools/block-toolbar-popover.js.map +1 -0
  65. package/build/components/block-tools/index.js +27 -24
  66. package/build/components/block-tools/index.js.map +1 -1
  67. package/build/components/block-types-list/index.js +6 -2
  68. package/build/components/block-types-list/index.js.map +1 -1
  69. package/build/components/block-types-list/index.native.js +4 -3
  70. package/build/components/block-types-list/index.native.js.map +1 -1
  71. package/build/components/block-variation-picker/index.native.js +2 -1
  72. package/build/components/block-variation-picker/index.native.js.map +1 -1
  73. package/build/components/colors-gradients/control.js +28 -17
  74. package/build/components/colors-gradients/control.js.map +1 -1
  75. package/build/components/date-format-picker/index.js +8 -1
  76. package/build/components/date-format-picker/index.js.map +1 -1
  77. package/build/components/duotone-control/index.js +1 -4
  78. package/build/components/duotone-control/index.js.map +1 -1
  79. package/build/components/global-styles/advanced-panel.js +1 -1
  80. package/build/components/global-styles/advanced-panel.js.map +1 -1
  81. package/build/components/global-styles/color-panel.js +22 -20
  82. package/build/components/global-styles/color-panel.js.map +1 -1
  83. package/build/components/global-styles/filters-panel.js +9 -3
  84. package/build/components/global-styles/filters-panel.js.map +1 -1
  85. package/build/components/global-styles/typography-panel.js +20 -31
  86. package/build/components/global-styles/typography-panel.js.map +1 -1
  87. package/build/components/image-link-destinations/index.native.js +118 -0
  88. package/build/components/image-link-destinations/index.native.js.map +1 -0
  89. package/build/components/image-size-control/index.js +0 -5
  90. package/build/components/image-size-control/index.js.map +1 -1
  91. package/build/components/index.native.js +8 -0
  92. package/build/components/index.native.js.map +1 -1
  93. package/build/components/inner-blocks/index.js +3 -1
  94. package/build/components/inner-blocks/index.js.map +1 -1
  95. package/build/components/inner-blocks/warning-max-depth-exceeded.native.js +29 -31
  96. package/build/components/inner-blocks/warning-max-depth-exceeded.native.js.map +1 -1
  97. package/build/components/inserter/block-patterns-explorer/pattern-list.js +1 -1
  98. package/build/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -1
  99. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js +1 -1
  100. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -1
  101. package/build/components/inserter/block-patterns-tab/use-pattern-categories.js +1 -1
  102. package/build/components/inserter/block-patterns-tab/use-pattern-categories.js.map +1 -1
  103. package/build/components/inserter/block-patterns-tab/utils.js +3 -4
  104. package/build/components/inserter/block-patterns-tab/utils.js.map +1 -1
  105. package/build/components/inserter/hooks/use-patterns-state.js +2 -1
  106. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  107. package/build/components/inserter/media-tab/media-panel.js +2 -2
  108. package/build/components/inserter/media-tab/media-panel.js.map +1 -1
  109. package/build/components/inserter/menu.js +14 -7
  110. package/build/components/inserter/menu.js.map +1 -1
  111. package/build/components/inserter/preview-panel.js +2 -2
  112. package/build/components/inserter/preview-panel.js.map +1 -1
  113. package/build/components/inserter-button/index.native.js +98 -0
  114. package/build/components/inserter-button/index.native.js.map +1 -0
  115. package/build/components/inserter-button/sparkles.js +23 -0
  116. package/build/components/inserter-button/sparkles.js.map +1 -0
  117. package/build/components/inserter-draggable-blocks/index.js +8 -4
  118. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  119. package/build/components/inserter-listbox/index.js +11 -6
  120. package/build/components/inserter-listbox/index.js.map +1 -1
  121. package/build/components/inserter-listbox/item.js +24 -23
  122. package/build/components/inserter-listbox/item.js.map +1 -1
  123. package/build/components/inserter-listbox/row.js +5 -5
  124. package/build/components/inserter-listbox/row.js.map +1 -1
  125. package/build/components/inspector-controls/fill.js +3 -3
  126. package/build/components/inspector-controls/fill.js.map +1 -1
  127. package/build/components/inspector-controls/fill.native.js +3 -3
  128. package/build/components/inspector-controls/fill.native.js.map +1 -1
  129. package/build/components/list-view/use-list-view-expand-selected-item.js +2 -3
  130. package/build/components/list-view/use-list-view-expand-selected-item.js.map +1 -1
  131. package/build/components/navigable-toolbar/index.js +2 -2
  132. package/build/components/navigable-toolbar/index.js.map +1 -1
  133. package/build/components/preview-options/index.js +6 -60
  134. package/build/components/preview-options/index.js.map +1 -1
  135. package/build/components/rich-text/content.js +26 -23
  136. package/build/components/rich-text/content.js.map +1 -1
  137. package/build/components/rich-text/get-rich-text-values.js +2 -1
  138. package/build/components/rich-text/get-rich-text-values.js.map +1 -1
  139. package/build/components/rich-text/index.js +2 -30
  140. package/build/components/rich-text/index.js.map +1 -1
  141. package/build/components/rich-text/index.native.js +10 -17
  142. package/build/components/rich-text/index.native.js.map +1 -1
  143. package/build/components/rich-text/native/get-format-colors.native.js +22 -24
  144. package/build/components/rich-text/native/get-format-colors.native.js.map +1 -1
  145. package/build/components/rich-text/native/index.native.js +41 -37
  146. package/build/components/rich-text/native/index.native.js.map +1 -1
  147. package/build/components/rich-text/use-input-rules.js +35 -2
  148. package/build/components/rich-text/use-input-rules.js.map +1 -1
  149. package/build/components/rich-text/with-deprecations.js +50 -0
  150. package/build/components/rich-text/with-deprecations.js.map +1 -0
  151. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +1 -1
  152. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  153. package/build/components/use-block-drop-zone/index.js +74 -9
  154. package/build/components/use-block-drop-zone/index.js.map +1 -1
  155. package/build/components/use-moving-animation/index.js +2 -1
  156. package/build/components/use-moving-animation/index.js.map +1 -1
  157. package/build/components/use-on-block-drop/index.js +1 -1
  158. package/build/components/use-on-block-drop/index.js.map +1 -1
  159. package/build/components/use-resize-canvas/index.js +4 -1
  160. package/build/components/use-resize-canvas/index.js.map +1 -1
  161. package/build/components/use-settings/index.js +16 -2
  162. package/build/components/use-settings/index.js.map +1 -1
  163. package/build/hooks/align.js +20 -68
  164. package/build/hooks/align.js.map +1 -1
  165. package/build/hooks/align.native.js +11 -1
  166. package/build/hooks/align.native.js.map +1 -1
  167. package/build/hooks/anchor.js +13 -29
  168. package/build/hooks/anchor.js.map +1 -1
  169. package/build/hooks/background.js +28 -31
  170. package/build/hooks/background.js.map +1 -1
  171. package/build/hooks/block-hooks.js +24 -32
  172. package/build/hooks/block-hooks.js.map +1 -1
  173. package/build/hooks/block-renaming.js +38 -0
  174. package/build/hooks/block-renaming.js.map +1 -1
  175. package/build/hooks/border.js +58 -80
  176. package/build/hooks/border.js.map +1 -1
  177. package/build/hooks/color.js +76 -89
  178. package/build/hooks/color.js.map +1 -1
  179. package/build/hooks/content-lock-ui.js +29 -29
  180. package/build/hooks/content-lock-ui.js.map +1 -1
  181. package/build/hooks/custom-class-name.js +12 -29
  182. package/build/hooks/custom-class-name.js.map +1 -1
  183. package/build/hooks/custom-fields.js +64 -73
  184. package/build/hooks/custom-fields.js.map +1 -1
  185. package/build/hooks/dimensions.js +21 -17
  186. package/build/hooks/dimensions.js.map +1 -1
  187. package/build/hooks/duotone.js +31 -61
  188. package/build/hooks/duotone.js.map +1 -1
  189. package/build/hooks/font-family.js +16 -25
  190. package/build/hooks/font-family.js.map +1 -1
  191. package/build/hooks/font-size.js +51 -119
  192. package/build/hooks/font-size.js.map +1 -1
  193. package/build/hooks/index.js +25 -15
  194. package/build/hooks/index.js.map +1 -1
  195. package/build/hooks/index.native.js +10 -3
  196. package/build/hooks/index.native.js.map +1 -1
  197. package/build/hooks/layout-child.js +68 -0
  198. package/build/hooks/layout-child.js.map +1 -0
  199. package/build/hooks/layout.js +29 -108
  200. package/build/hooks/layout.js.map +1 -1
  201. package/build/hooks/padding.js +2 -2
  202. package/build/hooks/padding.js.map +1 -1
  203. package/build/hooks/position.js +40 -62
  204. package/build/hooks/position.js.map +1 -1
  205. package/build/hooks/style.js +51 -88
  206. package/build/hooks/style.js.map +1 -1
  207. package/build/hooks/typography.js +34 -14
  208. package/build/hooks/typography.js.map +1 -1
  209. package/build/hooks/utils.js +154 -7
  210. package/build/hooks/utils.js.map +1 -1
  211. package/build/layouts/constrained.js +4 -3
  212. package/build/layouts/constrained.js.map +1 -1
  213. package/build/private-apis.js +0 -2
  214. package/build/private-apis.js.map +1 -1
  215. package/build/store/private-actions.js +8 -0
  216. package/build/store/private-actions.js.map +1 -1
  217. package/build/store/private-selectors.js +34 -0
  218. package/build/store/private-selectors.js.map +1 -1
  219. package/build/store/reducer.js +8 -0
  220. package/build/store/reducer.js.map +1 -1
  221. package/build/store/selectors.js +10 -58
  222. package/build/store/selectors.js.map +1 -1
  223. package/build/store/utils.js +66 -0
  224. package/build/store/utils.js.map +1 -0
  225. package/build/utils/object.js +21 -61
  226. package/build/utils/object.js.map +1 -1
  227. package/build/utils/selection.js +9 -1
  228. package/build/utils/selection.js.map +1 -1
  229. package/build/utils/transform-styles/index.js +26 -6
  230. package/build/utils/transform-styles/index.js.map +1 -1
  231. package/build-module/components/block-canvas/index.js +23 -7
  232. package/build-module/components/block-canvas/index.js.map +1 -1
  233. package/build-module/components/block-card/index.js +1 -1
  234. package/build-module/components/block-card/index.js.map +1 -1
  235. package/build-module/components/block-controls/hook.js +4 -24
  236. package/build-module/components/block-controls/hook.js.map +1 -1
  237. package/build-module/components/block-edit/context.js +2 -0
  238. package/build-module/components/block-edit/context.js.map +1 -1
  239. package/build-module/components/block-edit/index.js +19 -10
  240. package/build-module/components/block-edit/index.js.map +1 -1
  241. package/build-module/components/block-info-slot-fill/index.js +3 -3
  242. package/build-module/components/block-info-slot-fill/index.js.map +1 -1
  243. package/build-module/components/block-list/block.js +29 -10
  244. package/build-module/components/block-list/block.js.map +1 -1
  245. package/build-module/components/block-list/block.native.js +16 -5
  246. package/build-module/components/block-list/block.native.js.map +1 -1
  247. package/build-module/components/block-list/use-block-props/index.js +62 -19
  248. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  249. package/build-module/components/block-list/use-block-props/use-focus-first-element.js +4 -29
  250. package/build-module/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  251. package/build-module/components/block-list/use-block-props/use-is-hovered.js +4 -14
  252. package/build-module/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  253. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js +4 -2
  254. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  255. package/build-module/components/block-parent-selector/index.js +1 -1
  256. package/build-module/components/block-parent-selector/index.js.map +1 -1
  257. package/build-module/components/block-pattern-setup/index.js +24 -15
  258. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  259. package/build-module/components/block-pattern-setup/setup-toolbar.js +4 -2
  260. package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
  261. package/build-module/components/block-patterns-list/index.js +37 -20
  262. package/build-module/components/block-patterns-list/index.js.map +1 -1
  263. package/build-module/components/block-removal-warning-modal/index.js +3 -10
  264. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  265. package/build-module/components/block-rename/index.js +4 -0
  266. package/build-module/components/block-rename/index.js.map +1 -0
  267. package/build-module/components/block-rename/is-empty-string.js +4 -0
  268. package/build-module/components/block-rename/is-empty-string.js.map +1 -0
  269. package/build-module/components/block-rename/modal.js +82 -0
  270. package/build-module/components/block-rename/modal.js.map +1 -0
  271. package/build-module/components/block-rename/rename-control.js +66 -0
  272. package/build-module/components/block-rename/rename-control.js.map +1 -0
  273. package/build-module/components/block-rename/use-block-rename.js +10 -0
  274. package/build-module/components/block-rename/use-block-rename.js.map +1 -0
  275. package/build-module/components/block-settings/container.native.js +4 -2
  276. package/build-module/components/block-settings/container.native.js.map +1 -1
  277. package/build-module/components/block-settings-menu/block-settings-dropdown.js +34 -21
  278. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  279. package/build-module/components/block-settings-menu-controls/index.js +7 -0
  280. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  281. package/build-module/components/block-styles/index.js +1 -1
  282. package/build-module/components/block-styles/index.js.map +1 -1
  283. package/build-module/components/block-styles/index.native.js +3 -2
  284. package/build-module/components/block-styles/index.native.js.map +1 -1
  285. package/build-module/components/block-toolbar/block-toolbar-menu.native.js +1 -1
  286. package/build-module/components/block-toolbar/block-toolbar-menu.native.js.map +1 -1
  287. package/build-module/components/block-toolbar/index.js +88 -25
  288. package/build-module/components/block-toolbar/index.js.map +1 -1
  289. package/build-module/components/block-tools/block-toolbar-breadcrumb.js +41 -0
  290. package/build-module/components/block-tools/block-toolbar-breadcrumb.js.map +1 -0
  291. package/build-module/components/block-tools/block-toolbar-popover.js +76 -0
  292. package/build-module/components/block-tools/block-toolbar-popover.js.map +1 -0
  293. package/build-module/components/block-tools/index.js +27 -24
  294. package/build-module/components/block-tools/index.js.map +1 -1
  295. package/build-module/components/block-types-list/index.js +6 -2
  296. package/build-module/components/block-types-list/index.js.map +1 -1
  297. package/build-module/components/block-types-list/index.native.js +2 -1
  298. package/build-module/components/block-types-list/index.native.js.map +1 -1
  299. package/build-module/components/block-variation-picker/index.native.js +2 -1
  300. package/build-module/components/block-variation-picker/index.native.js.map +1 -1
  301. package/build-module/components/colors-gradients/control.js +29 -18
  302. package/build-module/components/colors-gradients/control.js.map +1 -1
  303. package/build-module/components/date-format-picker/index.js +8 -1
  304. package/build-module/components/date-format-picker/index.js.map +1 -1
  305. package/build-module/components/duotone-control/index.js +1 -4
  306. package/build-module/components/duotone-control/index.js.map +1 -1
  307. package/build-module/components/global-styles/advanced-panel.js +1 -1
  308. package/build-module/components/global-styles/advanced-panel.js.map +1 -1
  309. package/build-module/components/global-styles/color-panel.js +23 -21
  310. package/build-module/components/global-styles/color-panel.js.map +1 -1
  311. package/build-module/components/global-styles/filters-panel.js +10 -4
  312. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  313. package/build-module/components/global-styles/typography-panel.js +20 -31
  314. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  315. package/build-module/components/image-link-destinations/index.native.js +109 -0
  316. package/build-module/components/image-link-destinations/index.native.js.map +1 -0
  317. package/build-module/components/image-size-control/index.js +0 -5
  318. package/build-module/components/image-size-control/index.js.map +1 -1
  319. package/build-module/components/index.native.js +1 -0
  320. package/build-module/components/index.native.js.map +1 -1
  321. package/build-module/components/inner-blocks/index.js +3 -1
  322. package/build-module/components/inner-blocks/index.js.map +1 -1
  323. package/build-module/components/inner-blocks/warning-max-depth-exceeded.native.js +30 -32
  324. package/build-module/components/inner-blocks/warning-max-depth-exceeded.native.js.map +1 -1
  325. package/build-module/components/inserter/block-patterns-explorer/pattern-list.js +2 -2
  326. package/build-module/components/inserter/block-patterns-explorer/pattern-list.js.map +1 -1
  327. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js +4 -4
  328. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -1
  329. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.js +2 -2
  330. package/build-module/components/inserter/block-patterns-tab/use-pattern-categories.js.map +1 -1
  331. package/build-module/components/inserter/block-patterns-tab/utils.js +3 -4
  332. package/build-module/components/inserter/block-patterns-tab/utils.js.map +1 -1
  333. package/build-module/components/inserter/hooks/use-patterns-state.js +2 -1
  334. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  335. package/build-module/components/inserter/media-tab/media-panel.js +1 -1
  336. package/build-module/components/inserter/media-tab/media-panel.js.map +1 -1
  337. package/build-module/components/inserter/menu.js +14 -7
  338. package/build-module/components/inserter/menu.js.map +1 -1
  339. package/build-module/components/inserter/preview-panel.js +2 -2
  340. package/build-module/components/inserter/preview-panel.js.map +1 -1
  341. package/build-module/components/inserter-button/index.native.js +89 -0
  342. package/build-module/components/inserter-button/index.native.js.map +1 -0
  343. package/build-module/components/inserter-button/sparkles.js +15 -0
  344. package/build-module/components/inserter-button/sparkles.js.map +1 -0
  345. package/build-module/components/inserter-draggable-blocks/index.js +9 -5
  346. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  347. package/build-module/components/inserter-listbox/index.js +13 -8
  348. package/build-module/components/inserter-listbox/index.js.map +1 -1
  349. package/build-module/components/inserter-listbox/item.js +25 -23
  350. package/build-module/components/inserter-listbox/item.js.map +1 -1
  351. package/build-module/components/inserter-listbox/row.js +6 -5
  352. package/build-module/components/inserter-listbox/row.js.map +1 -1
  353. package/build-module/components/inspector-controls/fill.js +3 -3
  354. package/build-module/components/inspector-controls/fill.js.map +1 -1
  355. package/build-module/components/inspector-controls/fill.native.js +3 -3
  356. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  357. package/build-module/components/list-view/use-list-view-expand-selected-item.js +2 -3
  358. package/build-module/components/list-view/use-list-view-expand-selected-item.js.map +1 -1
  359. package/build-module/components/navigable-toolbar/index.js +2 -2
  360. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  361. package/build-module/components/preview-options/index.js +6 -60
  362. package/build-module/components/preview-options/index.js.map +1 -1
  363. package/build-module/components/rich-text/content.js +25 -21
  364. package/build-module/components/rich-text/content.js.map +1 -1
  365. package/build-module/components/rich-text/get-rich-text-values.js +2 -1
  366. package/build-module/components/rich-text/get-rich-text-values.js.map +1 -1
  367. package/build-module/components/rich-text/index.js +4 -32
  368. package/build-module/components/rich-text/index.js.map +1 -1
  369. package/build-module/components/rich-text/index.native.js +11 -19
  370. package/build-module/components/rich-text/index.native.js.map +1 -1
  371. package/build-module/components/rich-text/native/get-format-colors.native.js +22 -24
  372. package/build-module/components/rich-text/native/get-format-colors.native.js.map +1 -1
  373. package/build-module/components/rich-text/native/index.native.js +41 -37
  374. package/build-module/components/rich-text/native/index.native.js.map +1 -1
  375. package/build-module/components/rich-text/use-input-rules.js +36 -3
  376. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  377. package/build-module/components/rich-text/with-deprecations.js +42 -0
  378. package/build-module/components/rich-text/with-deprecations.js.map +1 -0
  379. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +1 -1
  380. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  381. package/build-module/components/use-block-drop-zone/index.js +73 -9
  382. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  383. package/build-module/components/use-moving-animation/index.js +2 -1
  384. package/build-module/components/use-moving-animation/index.js.map +1 -1
  385. package/build-module/components/use-on-block-drop/index.js +1 -1
  386. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  387. package/build-module/components/use-resize-canvas/index.js +4 -1
  388. package/build-module/components/use-resize-canvas/index.js.map +1 -1
  389. package/build-module/components/use-settings/index.js +15 -3
  390. package/build-module/components/use-settings/index.js.map +1 -1
  391. package/build-module/hooks/align.js +19 -66
  392. package/build-module/hooks/align.js.map +1 -1
  393. package/build-module/hooks/align.native.js +1 -0
  394. package/build-module/hooks/align.native.js.map +1 -1
  395. package/build-module/hooks/anchor.js +11 -26
  396. package/build-module/hooks/anchor.js.map +1 -1
  397. package/build-module/hooks/background.js +26 -28
  398. package/build-module/hooks/background.js.map +1 -1
  399. package/build-module/hooks/block-hooks.js +22 -30
  400. package/build-module/hooks/block-hooks.js.map +1 -1
  401. package/build-module/hooks/block-renaming.js +36 -0
  402. package/build-module/hooks/block-renaming.js.map +1 -1
  403. package/build-module/hooks/border.js +57 -78
  404. package/build-module/hooks/border.js.map +1 -1
  405. package/build-module/hooks/color.js +74 -86
  406. package/build-module/hooks/color.js.map +1 -1
  407. package/build-module/hooks/content-lock-ui.js +27 -27
  408. package/build-module/hooks/content-lock-ui.js.map +1 -1
  409. package/build-module/hooks/custom-class-name.js +11 -27
  410. package/build-module/hooks/custom-class-name.js.map +1 -1
  411. package/build-module/hooks/custom-fields.js +60 -74
  412. package/build-module/hooks/custom-fields.js.map +1 -1
  413. package/build-module/hooks/dimensions.js +21 -16
  414. package/build-module/hooks/dimensions.js.map +1 -1
  415. package/build-module/hooks/duotone.js +30 -61
  416. package/build-module/hooks/duotone.js.map +1 -1
  417. package/build-module/hooks/font-family.js +14 -23
  418. package/build-module/hooks/font-family.js.map +1 -1
  419. package/build-module/hooks/font-size.js +49 -119
  420. package/build-module/hooks/font-size.js.map +1 -1
  421. package/build-module/hooks/index.js +18 -15
  422. package/build-module/hooks/index.js.map +1 -1
  423. package/build-module/hooks/index.native.js +5 -3
  424. package/build-module/hooks/index.native.js.map +1 -1
  425. package/build-module/hooks/layout-child.js +60 -0
  426. package/build-module/hooks/layout-child.js.map +1 -0
  427. package/build-module/hooks/layout.js +26 -105
  428. package/build-module/hooks/layout.js.map +1 -1
  429. package/build-module/hooks/padding.js +2 -2
  430. package/build-module/hooks/padding.js.map +1 -1
  431. package/build-module/hooks/position.js +38 -59
  432. package/build-module/hooks/position.js.map +1 -1
  433. package/build-module/hooks/style.js +51 -84
  434. package/build-module/hooks/style.js.map +1 -1
  435. package/build-module/hooks/typography.js +33 -12
  436. package/build-module/hooks/typography.js.map +1 -1
  437. package/build-module/hooks/utils.js +149 -6
  438. package/build-module/hooks/utils.js.map +1 -1
  439. package/build-module/layouts/constrained.js +4 -3
  440. package/build-module/layouts/constrained.js.map +1 -1
  441. package/build-module/private-apis.js +0 -2
  442. package/build-module/private-apis.js.map +1 -1
  443. package/build-module/store/private-actions.js +7 -0
  444. package/build-module/store/private-actions.js.map +1 -1
  445. package/build-module/store/private-selectors.js +33 -1
  446. package/build-module/store/private-selectors.js.map +1 -1
  447. package/build-module/store/reducer.js +8 -0
  448. package/build-module/store/reducer.js.map +1 -1
  449. package/build-module/store/selectors.js +3 -51
  450. package/build-module/store/selectors.js.map +1 -1
  451. package/build-module/store/utils.js +56 -0
  452. package/build-module/store/utils.js.map +1 -0
  453. package/build-module/utils/object.js +21 -60
  454. package/build-module/utils/object.js.map +1 -1
  455. package/build-module/utils/selection.js +9 -1
  456. package/build-module/utils/selection.js.map +1 -1
  457. package/build-module/utils/transform-styles/index.js +24 -7
  458. package/build-module/utils/transform-styles/index.js.map +1 -1
  459. package/build-style/content-rtl.css +6 -6
  460. package/build-style/content.css +6 -6
  461. package/build-style/style-rtl.css +123 -298
  462. package/build-style/style.css +123 -298
  463. package/package.json +31 -31
  464. package/src/components/block-canvas/index.js +31 -17
  465. package/src/components/block-caption/README.md +2 -2
  466. package/src/components/block-card/index.js +5 -3
  467. package/src/components/block-card/style.scss +7 -3
  468. package/src/components/block-controls/hook.js +8 -30
  469. package/src/components/block-controls/test/index.js +3 -3
  470. package/src/components/block-edit/context.js +3 -0
  471. package/src/components/block-edit/index.js +36 -10
  472. package/src/components/block-info-slot-fill/index.js +6 -3
  473. package/src/components/block-inspector/style.scss +0 -4
  474. package/src/components/block-list/block.js +39 -5
  475. package/src/components/block-list/block.native.js +20 -4
  476. package/src/components/block-list/use-block-props/index.js +74 -21
  477. package/src/components/block-list/use-block-props/use-focus-first-element.js +1 -34
  478. package/src/components/block-list/use-block-props/use-is-hovered.js +2 -13
  479. package/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +1 -5
  480. package/src/components/block-parent-selector/index.js +1 -1
  481. package/src/components/block-pattern-setup/index.js +38 -22
  482. package/src/components/block-pattern-setup/setup-toolbar.js +2 -0
  483. package/src/components/block-pattern-setup/style.scss +4 -1
  484. package/src/components/block-patterns-list/README.md +4 -4
  485. package/src/components/block-patterns-list/index.js +61 -35
  486. package/src/components/block-patterns-list/style.scss +7 -0
  487. package/src/components/block-removal-warning-modal/index.js +7 -14
  488. package/src/components/block-rename/index.js +3 -0
  489. package/src/components/block-rename/is-empty-string.js +3 -0
  490. package/src/components/block-rename/modal.js +121 -0
  491. package/src/components/block-rename/rename-control.js +80 -0
  492. package/src/components/block-rename/use-block-rename.js +10 -0
  493. package/src/components/block-settings/container.native.js +3 -5
  494. package/src/components/block-settings-menu/block-settings-dropdown.js +38 -34
  495. package/src/components/block-settings-menu-controls/index.js +9 -0
  496. package/src/components/block-styles/index.js +1 -1
  497. package/src/components/block-styles/index.native.js +4 -2
  498. package/src/components/block-styles/style.scss +0 -11
  499. package/src/components/block-switcher/test/__snapshots__/index.js.snap +3 -1
  500. package/src/components/block-toolbar/block-toolbar-menu.native.js +1 -4
  501. package/src/components/block-toolbar/index.js +180 -95
  502. package/src/components/block-toolbar/style.scss +50 -66
  503. package/src/components/block-tools/block-toolbar-breadcrumb.js +46 -0
  504. package/src/components/block-tools/block-toolbar-popover.js +90 -0
  505. package/src/components/block-tools/index.js +42 -29
  506. package/src/components/block-tools/style.scss +60 -172
  507. package/src/components/block-types-list/index.js +5 -4
  508. package/src/components/block-types-list/index.native.js +2 -1
  509. package/src/components/block-variation-picker/index.native.js +1 -1
  510. package/src/components/button-block-appender/content.scss +2 -2
  511. package/src/components/colors-gradients/control.js +49 -30
  512. package/src/components/colors-gradients/style.scss +0 -7
  513. package/src/components/date-format-picker/index.js +7 -0
  514. package/src/components/duotone-control/index.js +2 -5
  515. package/src/components/duotone-control/style.scss +1 -6
  516. package/src/components/editable-text/README.md +0 -36
  517. package/src/components/global-styles/advanced-panel.js +1 -1
  518. package/src/components/global-styles/color-panel.js +34 -25
  519. package/src/components/global-styles/filters-panel.js +8 -4
  520. package/src/components/global-styles/typography-panel.js +23 -43
  521. package/src/components/image-link-destinations/index.native.js +152 -0
  522. package/src/components/image-link-destinations/style.native.scss +16 -0
  523. package/src/components/image-size-control/index.js +0 -6
  524. package/src/components/index.native.js +1 -0
  525. package/src/components/inner-blocks/README.md +13 -2
  526. package/src/components/inner-blocks/index.js +6 -2
  527. package/src/components/inner-blocks/warning-max-depth-exceeded.native.js +57 -33
  528. package/src/components/inserter/block-patterns-explorer/pattern-list.js +5 -1
  529. package/src/components/inserter/block-patterns-tab/pattern-category-previews.js +7 -3
  530. package/src/components/inserter/block-patterns-tab/use-pattern-categories.js +6 -1
  531. package/src/components/inserter/block-patterns-tab/utils.js +6 -4
  532. package/src/components/inserter/hooks/use-patterns-state.js +3 -1
  533. package/src/components/inserter/media-tab/media-panel.js +1 -1
  534. package/src/components/inserter/menu.js +16 -8
  535. package/src/components/inserter/preview-panel.js +2 -2
  536. package/src/components/inserter/style.scss +15 -17
  537. package/src/components/inserter-button/README.md +62 -0
  538. package/src/components/inserter-button/index.native.js +116 -0
  539. package/src/components/inserter-button/sparkles.js +15 -0
  540. package/src/components/inserter-button/style.native.scss +72 -0
  541. package/src/components/inserter-draggable-blocks/index.js +18 -5
  542. package/src/components/inserter-listbox/index.js +11 -7
  543. package/src/components/inserter-listbox/item.js +11 -12
  544. package/src/components/inserter-listbox/row.js +6 -12
  545. package/src/components/inspector-controls/fill.js +6 -3
  546. package/src/components/inspector-controls/fill.native.js +6 -3
  547. package/src/components/link-control/style.scss +1 -1
  548. package/src/components/link-control/test/index.js +1 -1
  549. package/src/components/list-view/use-list-view-expand-selected-item.js +7 -8
  550. package/src/components/navigable-toolbar/README.md +2 -0
  551. package/src/components/navigable-toolbar/index.js +2 -2
  552. package/src/components/plain-text/README.md +0 -28
  553. package/src/components/preview-options/index.js +6 -84
  554. package/src/components/rich-text/README.md +0 -58
  555. package/src/components/rich-text/content.js +27 -20
  556. package/src/components/rich-text/get-rich-text-values.js +6 -1
  557. package/src/components/rich-text/index.js +5 -46
  558. package/src/components/rich-text/index.native.js +9 -26
  559. package/src/components/rich-text/native/get-format-colors.native.js +33 -40
  560. package/src/components/rich-text/native/index.native.js +52 -50
  561. package/src/components/rich-text/use-input-rules.js +36 -3
  562. package/src/components/rich-text/with-deprecations.js +51 -0
  563. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +1 -1
  564. package/src/components/url-input/README.md +1 -74
  565. package/src/components/use-block-drop-zone/index.js +118 -15
  566. package/src/components/use-moving-animation/index.js +1 -1
  567. package/src/components/use-on-block-drop/index.js +2 -1
  568. package/src/components/use-resize-canvas/README.md +3 -3
  569. package/src/components/use-resize-canvas/index.js +4 -1
  570. package/src/components/use-settings/index.js +17 -3
  571. package/src/components/use-settings/test/index.js +1 -1
  572. package/src/hooks/align.js +15 -76
  573. package/src/hooks/align.native.js +1 -0
  574. package/src/hooks/anchor.js +13 -33
  575. package/src/hooks/background.js +28 -23
  576. package/src/hooks/block-hooks.js +22 -51
  577. package/src/hooks/block-renaming.js +33 -0
  578. package/src/hooks/border.js +67 -118
  579. package/src/hooks/color.js +100 -132
  580. package/src/hooks/content-lock-ui.js +110 -122
  581. package/src/hooks/custom-class-name.js +8 -40
  582. package/src/hooks/custom-fields.js +70 -94
  583. package/src/hooks/dimensions.js +20 -16
  584. package/src/hooks/duotone.js +70 -127
  585. package/src/hooks/font-family.js +10 -29
  586. package/src/hooks/font-size.js +66 -162
  587. package/src/hooks/index.js +42 -15
  588. package/src/hooks/index.native.js +6 -3
  589. package/src/hooks/layout-child.js +53 -0
  590. package/src/hooks/layout.js +25 -110
  591. package/src/hooks/padding.js +2 -2
  592. package/src/hooks/position.js +50 -90
  593. package/src/hooks/style.js +117 -187
  594. package/src/hooks/test/__snapshots__/align.native.js.snap +5 -5
  595. package/src/hooks/test/align.js +1 -178
  596. package/src/hooks/typography.js +20 -16
  597. package/src/hooks/utils.js +187 -6
  598. package/src/layouts/constrained.js +57 -50
  599. package/src/private-apis.js +0 -2
  600. package/src/store/private-actions.js +8 -0
  601. package/src/store/private-selectors.js +45 -0
  602. package/src/store/reducer.js +8 -0
  603. package/src/store/selectors.js +5 -67
  604. package/src/store/utils.js +74 -0
  605. package/src/style.scss +1 -3
  606. package/src/utils/object.js +18 -69
  607. package/src/utils/selection.js +9 -2
  608. package/src/utils/test/transform-styles.js +49 -0
  609. package/src/utils/transform-styles/index.js +39 -13
  610. package/build/components/block-list/use-block-props/use-block-class-names.js +0 -67
  611. package/build/components/block-list/use-block-props/use-block-class-names.js.map +0 -1
  612. package/build/components/block-list/use-block-props/use-block-custom-class-name.js +0 -46
  613. package/build/components/block-list/use-block-props/use-block-custom-class-name.js.map +0 -1
  614. package/build/components/block-list/use-block-props/use-block-default-class-name.js +0 -37
  615. package/build/components/block-list/use-block-props/use-block-default-class-name.js.map +0 -1
  616. package/build/components/block-tools/back-compat.js +0 -45
  617. package/build/components/block-tools/back-compat.js.map +0 -1
  618. package/build/components/block-tools/block-contextual-toolbar.js +0 -91
  619. package/build/components/block-tools/block-contextual-toolbar.js.map +0 -1
  620. package/build/components/block-tools/selected-block-tools.js +0 -113
  621. package/build/components/block-tools/selected-block-tools.js.map +0 -1
  622. package/build/components/inserter/hooks/use-debounced-input.js +0 -22
  623. package/build/components/inserter/hooks/use-debounced-input.js.map +0 -1
  624. package/build/components/use-display-block-controls/index.js +0 -39
  625. package/build/components/use-display-block-controls/index.js.map +0 -1
  626. package/build/components/use-display-block-controls/index.native.js +0 -39
  627. package/build/components/use-display-block-controls/index.native.js.map +0 -1
  628. package/build/hooks/block-rename-ui.js +0 -167
  629. package/build/hooks/block-rename-ui.js.map +0 -1
  630. package/build-module/components/block-list/use-block-props/use-block-class-names.js +0 -60
  631. package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +0 -1
  632. package/build-module/components/block-list/use-block-props/use-block-custom-class-name.js +0 -40
  633. package/build-module/components/block-list/use-block-props/use-block-custom-class-name.js.map +0 -1
  634. package/build-module/components/block-list/use-block-props/use-block-default-class-name.js +0 -31
  635. package/build-module/components/block-list/use-block-props/use-block-default-class-name.js.map +0 -1
  636. package/build-module/components/block-tools/back-compat.js +0 -35
  637. package/build-module/components/block-tools/back-compat.js.map +0 -1
  638. package/build-module/components/block-tools/block-contextual-toolbar.js +0 -83
  639. package/build-module/components/block-tools/block-contextual-toolbar.js.map +0 -1
  640. package/build-module/components/block-tools/selected-block-tools.js +0 -105
  641. package/build-module/components/block-tools/selected-block-tools.js.map +0 -1
  642. package/build-module/components/inserter/hooks/use-debounced-input.js +0 -15
  643. package/build-module/components/inserter/hooks/use-debounced-input.js.map +0 -1
  644. package/build-module/components/use-display-block-controls/index.js +0 -32
  645. package/build-module/components/use-display-block-controls/index.js.map +0 -1
  646. package/build-module/components/use-display-block-controls/index.native.js +0 -32
  647. package/build-module/components/use-display-block-controls/index.native.js.map +0 -1
  648. package/build-module/hooks/block-rename-ui.js +0 -159
  649. package/build-module/hooks/block-rename-ui.js.map +0 -1
  650. package/src/components/block-list/use-block-props/use-block-class-names.js +0 -66
  651. package/src/components/block-list/use-block-props/use-block-custom-class-name.js +0 -44
  652. package/src/components/block-list/use-block-props/use-block-default-class-name.js +0 -35
  653. package/src/components/block-parent-selector/style.scss +0 -11
  654. package/src/components/block-tools/back-compat.js +0 -35
  655. package/src/components/block-tools/block-contextual-toolbar.js +0 -100
  656. package/src/components/block-tools/selected-block-tools.js +0 -127
  657. package/src/components/inserter/hooks/use-debounced-input.js +0 -18
  658. package/src/components/preview-options/README.md +0 -94
  659. package/src/components/preview-options/style.scss +0 -64
  660. package/src/components/use-display-block-controls/index.js +0 -36
  661. package/src/components/use-display-block-controls/index.native.js +0 -37
  662. package/src/hooks/block-rename-ui.js +0 -228
  663. package/src/hooks/test/color.js +0 -112
  664. /package/src/{hooks/block-rename-ui.scss → components/block-rename/style.scss} +0 -0
@@ -24,6 +24,7 @@ import { Platform, useCallback, useRef } from '@wordpress/element';
24
24
  import { __, sprintf } from '@wordpress/i18n';
25
25
  import { store as noticesStore } from '@wordpress/notices';
26
26
  import { getFilename } from '@wordpress/url';
27
+ import { pure } from '@wordpress/compose';
27
28
 
28
29
  /**
29
30
  * Internal dependencies
@@ -41,13 +42,13 @@ export const IMAGE_BACKGROUND_TYPE = 'image';
41
42
  * Checks if there is a current value in the background image block support
42
43
  * attributes.
43
44
  *
44
- * @param {Object} props Block props.
45
+ * @param {Object} style Style attribute.
45
46
  * @return {boolean} Whether or not the block has a background image value set.
46
47
  */
47
- export function hasBackgroundImageValue( props ) {
48
+ export function hasBackgroundImageValue( style ) {
48
49
  const hasValue =
49
- !! props.attributes.style?.background?.backgroundImage?.id ||
50
- !! props.attributes.style?.background?.backgroundImage?.url;
50
+ !! style?.background?.backgroundImage?.id ||
51
+ !! style?.background?.backgroundImage?.url;
51
52
 
52
53
  return hasValue;
53
54
  }
@@ -82,13 +83,10 @@ export function hasBackgroundSupport( blockName, feature = 'any' ) {
82
83
  * Resets the background image block support attributes. This can be used when disabling
83
84
  * the background image controls for a block via a `ToolsPanel`.
84
85
  *
85
- * @param {Object} props Block props.
86
- * @param {Object} props.attributes Block's attributes.
87
- * @param {Object} props.setAttributes Function to set block's attributes.
86
+ * @param {Object} style Style attribute.
87
+ * @param {Function} setAttributes Function to set block's attributes.
88
88
  */
89
- export function resetBackgroundImage( { attributes = {}, setAttributes } ) {
90
- const { style = {} } = attributes;
91
-
89
+ export function resetBackgroundImage( style = {}, setAttributes ) {
92
90
  setAttributes( {
93
91
  style: cleanEmptyObject( {
94
92
  ...style,
@@ -145,11 +143,13 @@ function InspectorImagePreview( { label, filename, url: imgUrl } ) {
145
143
  );
146
144
  }
147
145
 
148
- function BackgroundImagePanelItem( props ) {
149
- const { attributes, clientId, setAttributes } = props;
150
-
151
- const { id, title, url } =
152
- attributes.style?.background?.backgroundImage || {};
146
+ function BackgroundImagePanelItem( { clientId, setAttributes } ) {
147
+ const style = useSelect(
148
+ ( select ) =>
149
+ select( blockEditorStore ).getBlockAttributes( clientId )?.style,
150
+ [ clientId ]
151
+ );
152
+ const { id, title, url } = style?.background?.backgroundImage || {};
153
153
 
154
154
  const replaceContainerRef = useRef();
155
155
 
@@ -167,9 +167,9 @@ function BackgroundImagePanelItem( props ) {
167
167
  const onSelectMedia = ( media ) => {
168
168
  if ( ! media || ! media.url ) {
169
169
  const newStyle = {
170
- ...attributes.style,
170
+ ...style,
171
171
  background: {
172
- ...attributes.style?.background,
172
+ ...style?.background,
173
173
  backgroundImage: undefined,
174
174
  },
175
175
  };
@@ -201,9 +201,9 @@ function BackgroundImagePanelItem( props ) {
201
201
  }
202
202
 
203
203
  const newStyle = {
204
- ...attributes.style,
204
+ ...style,
205
205
  background: {
206
- ...attributes.style?.background,
206
+ ...style?.background,
207
207
  backgroundImage: {
208
208
  url: media.url,
209
209
  id: media.id,
@@ -244,14 +244,14 @@ function BackgroundImagePanelItem( props ) {
244
244
  };
245
245
  }, [] );
246
246
 
247
- const hasValue = hasBackgroundImageValue( props );
247
+ const hasValue = hasBackgroundImageValue( style );
248
248
 
249
249
  return (
250
250
  <ToolsPanelItem
251
251
  className="single-column"
252
252
  hasValue={ () => hasValue }
253
253
  label={ __( 'Background image' ) }
254
- onDeselect={ () => resetBackgroundImage( props ) }
254
+ onDeselect={ () => resetBackgroundImage( style, setAttributes ) }
255
255
  isShownByDefault={ true }
256
256
  resetAllFilter={ resetAllFilter }
257
257
  panelId={ clientId }
@@ -286,7 +286,7 @@ function BackgroundImagePanelItem( props ) {
286
286
  // closed and focus is redirected to the dropdown toggle button.
287
287
  toggleButton?.focus();
288
288
  toggleButton?.click();
289
- resetBackgroundImage( props );
289
+ resetBackgroundImage( style, setAttributes );
290
290
  } }
291
291
  >
292
292
  { __( 'Reset ' ) }
@@ -302,7 +302,7 @@ function BackgroundImagePanelItem( props ) {
302
302
  );
303
303
  }
304
304
 
305
- export function BackgroundImagePanel( props ) {
305
+ function BackgroundImagePanelPure( props ) {
306
306
  const [ backgroundImage ] = useSettings( 'background.backgroundImage' );
307
307
  if (
308
308
  ! backgroundImage ||
@@ -317,3 +317,8 @@ export function BackgroundImagePanel( props ) {
317
317
  </InspectorControls>
318
318
  );
319
319
  }
320
+
321
+ // We don't want block controls to re-render when typing inside a block. `pure`
322
+ // will prevent re-renders unless props change, so only pass the needed props
323
+ // and not the whole attributes object.
324
+ export const BackgroundImagePanel = pure( BackgroundImagePanelPure );
@@ -2,14 +2,12 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
- import { addFilter } from '@wordpress/hooks';
6
5
  import { Fragment, useMemo } from '@wordpress/element';
7
6
  import {
8
7
  __experimentalHStack as HStack,
9
8
  PanelBody,
10
9
  ToggleControl,
11
10
  } from '@wordpress/components';
12
- import { createHigherOrderComponent } from '@wordpress/compose';
13
11
  import { createBlock, store as blocksStore } from '@wordpress/blocks';
14
12
  import { useDispatch, useSelect } from '@wordpress/data';
15
13
 
@@ -21,7 +19,7 @@ import { store as blockEditorStore } from '../store';
21
19
 
22
20
  const EMPTY_OBJECT = {};
23
21
 
24
- function BlockHooksControl( props ) {
22
+ function BlockHooksControlPure( { name, clientId } ) {
25
23
  const blockTypes = useSelect(
26
24
  ( select ) => select( blocksStore ).getBlockTypes(),
27
25
  []
@@ -30,10 +28,9 @@ function BlockHooksControl( props ) {
30
28
  const hookedBlocksForCurrentBlock = useMemo(
31
29
  () =>
32
30
  blockTypes?.filter(
33
- ( { blockHooks } ) =>
34
- blockHooks && props.blockName in blockHooks
31
+ ( { blockHooks } ) => blockHooks && name in blockHooks
35
32
  ),
36
- [ blockTypes, props.blockName ]
33
+ [ blockTypes, name ]
37
34
  );
38
35
 
39
36
  const { blockIndex, rootClientId, innerBlocksLength } = useSelect(
@@ -42,13 +39,12 @@ function BlockHooksControl( props ) {
42
39
  select( blockEditorStore );
43
40
 
44
41
  return {
45
- blockIndex: getBlockIndex( props.clientId ),
46
- innerBlocksLength: getBlock( props.clientId )?.innerBlocks
47
- ?.length,
48
- rootClientId: getBlockRootClientId( props.clientId ),
42
+ blockIndex: getBlockIndex( clientId ),
43
+ innerBlocksLength: getBlock( clientId )?.innerBlocks?.length,
44
+ rootClientId: getBlockRootClientId( clientId ),
49
45
  };
50
46
  },
51
- [ props.clientId ]
47
+ [ clientId ]
52
48
  );
53
49
 
54
50
  const hookedBlockClientIds = useSelect(
@@ -65,8 +61,7 @@ function BlockHooksControl( props ) {
65
61
  return clientIds;
66
62
  }
67
63
 
68
- const relativePosition =
69
- block?.blockHooks?.[ props.blockName ];
64
+ const relativePosition = block?.blockHooks?.[ name ];
70
65
  let candidates;
71
66
 
72
67
  switch ( relativePosition ) {
@@ -83,12 +78,12 @@ function BlockHooksControl( props ) {
83
78
  // Any of the current block's child blocks (with the right block type) qualifies
84
79
  // as a hooked first or last child block, as the block might've been automatically
85
80
  // inserted and then moved around a bit by the user.
86
- candidates = getBlock( props.clientId ).innerBlocks;
81
+ candidates = getBlock( clientId ).innerBlocks;
87
82
  break;
88
83
  }
89
84
 
90
85
  const hookedBlock = candidates?.find(
91
- ( { name } ) => name === block.name
86
+ ( candidate ) => name === candidate.name
92
87
  );
93
88
 
94
89
  // If the block exists in the designated location, we consider it hooked
@@ -118,12 +113,7 @@ function BlockHooksControl( props ) {
118
113
 
119
114
  return EMPTY_OBJECT;
120
115
  },
121
- [
122
- hookedBlocksForCurrentBlock,
123
- props.blockName,
124
- props.clientId,
125
- rootClientId,
126
- ]
116
+ [ hookedBlocksForCurrentBlock, name, clientId, rootClientId ]
127
117
  );
128
118
 
129
119
  const { insertBlock, removeBlock } = useDispatch( blockEditorStore );
@@ -169,7 +159,7 @@ function BlockHooksControl( props ) {
169
159
  block,
170
160
  // TODO: It'd be great if insertBlock() would accept negative indices for insertion.
171
161
  relativePosition === 'first_child' ? 0 : innerBlocksLength,
172
- props.clientId, // Insert as a child of the current block.
162
+ clientId, // Insert as a child of the current block.
173
163
  false
174
164
  );
175
165
  break;
@@ -207,9 +197,7 @@ function BlockHooksControl( props ) {
207
197
  if ( ! checked ) {
208
198
  // Create and insert block.
209
199
  const relativePosition =
210
- block.blockHooks[
211
- props.blockName
212
- ];
200
+ block.blockHooks[ name ];
213
201
  insertBlockIntoDesignatedLocation(
214
202
  createBlock( block.name ),
215
203
  relativePosition
@@ -218,11 +206,12 @@ function BlockHooksControl( props ) {
218
206
  }
219
207
 
220
208
  // Remove block.
221
- const clientId =
209
+ removeBlock(
222
210
  hookedBlockClientIds[
223
211
  block.name
224
- ];
225
- removeBlock( clientId, false );
212
+ ],
213
+ false
214
+ );
226
215
  } }
227
216
  />
228
217
  );
@@ -235,27 +224,9 @@ function BlockHooksControl( props ) {
235
224
  );
236
225
  }
237
226
 
238
- export const withBlockHooksControls = createHigherOrderComponent(
239
- ( BlockEdit ) => {
240
- return ( props ) => {
241
- return (
242
- <>
243
- <BlockEdit key="edit" { ...props } />
244
- { props.isSelected && (
245
- <BlockHooksControl
246
- blockName={ props.name }
247
- clientId={ props.clientId }
248
- />
249
- ) }
250
- </>
251
- );
252
- };
227
+ export default {
228
+ edit: BlockHooksControlPure,
229
+ hasSupport() {
230
+ return true;
253
231
  },
254
- 'withBlockHooksControls'
255
- );
256
-
257
- addFilter(
258
- 'editor.BlockEdit',
259
- 'core/editor/block-hooks/with-inspector-controls',
260
- withBlockHooksControls
261
- );
232
+ };
@@ -3,6 +3,13 @@
3
3
  */
4
4
  import { addFilter } from '@wordpress/hooks';
5
5
  import { hasBlockSupport } from '@wordpress/blocks';
6
+ import { __ } from '@wordpress/i18n';
7
+ import { TextControl } from '@wordpress/components';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import { InspectorControls } from '../components';
6
13
 
7
14
  /**
8
15
  * Filters registered block settings, adding an `__experimentalLabel` callback if one does not already exist.
@@ -38,6 +45,32 @@ export function addLabelCallback( settings ) {
38
45
  return settings;
39
46
  }
40
47
 
48
+ function BlockRenameControlPure( { metadata, setAttributes } ) {
49
+ return (
50
+ <InspectorControls group="advanced">
51
+ <TextControl
52
+ __nextHasNoMarginBottom
53
+ __next40pxDefaultSize
54
+ label={ __( 'Block name' ) }
55
+ value={ metadata?.name || '' }
56
+ onChange={ ( newName ) => {
57
+ setAttributes( {
58
+ metadata: { ...metadata, name: newName },
59
+ } );
60
+ } }
61
+ />
62
+ </InspectorControls>
63
+ );
64
+ }
65
+
66
+ export default {
67
+ edit: BlockRenameControlPure,
68
+ attributeKeys: [ 'metadata' ],
69
+ hasSupport( name ) {
70
+ return hasBlockSupport( name, 'renaming', true );
71
+ },
72
+ };
73
+
41
74
  addFilter(
42
75
  'blocks.registerBlockType',
43
76
  'core/metadata/addLabelCallback',
@@ -8,9 +8,10 @@ import classnames from 'classnames';
8
8
  */
9
9
  import { getBlockSupport } from '@wordpress/blocks';
10
10
  import { __experimentalHasSplitBorders as hasSplitBorders } from '@wordpress/components';
11
- import { createHigherOrderComponent } from '@wordpress/compose';
11
+ import { pure } from '@wordpress/compose';
12
12
  import { Platform, useCallback, useMemo } from '@wordpress/element';
13
13
  import { addFilter } from '@wordpress/hooks';
14
+ import { useSelect } from '@wordpress/data';
14
15
 
15
16
  /**
16
17
  * Internal dependencies
@@ -18,15 +19,12 @@ import { addFilter } from '@wordpress/hooks';
18
19
  import { getColorClassName } from '../components/colors';
19
20
  import InspectorControls from '../components/inspector-controls';
20
21
  import useMultipleOriginColorsAndGradients from '../components/colors-gradients/use-multiple-origin-colors-and-gradients';
21
- import {
22
- cleanEmptyObject,
23
- shouldSkipSerialization,
24
- useBlockSettings,
25
- } from './utils';
22
+ import { cleanEmptyObject, shouldSkipSerialization } from './utils';
26
23
  import {
27
24
  useHasBorderPanel,
28
25
  BorderPanel as StylesBorderPanel,
29
26
  } from '../components/global-styles';
27
+ import { store as blockEditorStore } from '../store';
30
28
 
31
29
  export const BORDER_SUPPORT_KEY = '__experimentalBorder';
32
30
 
@@ -135,16 +133,17 @@ function BordersInspectorControl( { children, resetAllFilter } ) {
135
133
  );
136
134
  }
137
135
 
138
- export function BorderPanel( props ) {
139
- const { clientId, name, attributes, setAttributes } = props;
140
- const settings = useBlockSettings( name );
136
+ function BorderPanelPure( { clientId, name, setAttributes, settings } ) {
141
137
  const isEnabled = useHasBorderPanel( settings );
138
+ function selector( select ) {
139
+ const { style, borderColor } =
140
+ select( blockEditorStore ).getBlockAttributes( clientId ) || {};
141
+ return { style, borderColor };
142
+ }
143
+ const { style, borderColor } = useSelect( selector, [ clientId ] );
142
144
  const value = useMemo( () => {
143
- return attributesToStyle( {
144
- style: attributes.style,
145
- borderColor: attributes.borderColor,
146
- } );
147
- }, [ attributes.style, attributes.borderColor ] );
145
+ return attributesToStyle( { style, borderColor } );
146
+ }, [ style, borderColor ] );
148
147
 
149
148
  const onChange = ( newStyle ) => {
150
149
  setAttributes( styleToAttributes( newStyle ) );
@@ -154,7 +153,7 @@ export function BorderPanel( props ) {
154
153
  return null;
155
154
  }
156
155
 
157
- const defaultControls = getBlockSupport( props.name, [
156
+ const defaultControls = getBlockSupport( name, [
158
157
  BORDER_SUPPORT_KEY,
159
158
  '__experimentalDefaultControls',
160
159
  ] );
@@ -171,6 +170,11 @@ export function BorderPanel( props ) {
171
170
  );
172
171
  }
173
172
 
173
+ // We don't want block controls to re-render when typing inside a block. `pure`
174
+ // will prevent re-renders unless props change, so only pass the needed props
175
+ // and not the whole attributes object.
176
+ export const BorderPanel = pure( BorderPanelPure );
177
+
174
178
  /**
175
179
  * Determine whether there is block support for border properties.
176
180
  *
@@ -254,16 +258,16 @@ function addAttributes( settings ) {
254
258
  /**
255
259
  * Override props assigned to save component to inject border color.
256
260
  *
257
- * @param {Object} props Additional props applied to save element.
258
- * @param {Object} blockType Block type definition.
259
- * @param {Object} attributes Block's attributes.
261
+ * @param {Object} props Additional props applied to save element.
262
+ * @param {Object|string} blockNameOrType Block type definition.
263
+ * @param {Object} attributes Block's attributes.
260
264
  *
261
265
  * @return {Object} Filtered props to apply to save element.
262
266
  */
263
- function addSaveProps( props, blockType, attributes ) {
267
+ function addSaveProps( props, blockNameOrType, attributes ) {
264
268
  if (
265
- ! hasBorderSupport( blockType, 'color' ) ||
266
- shouldSkipSerialization( blockType, BORDER_SUPPORT_KEY, 'color' )
269
+ ! hasBorderSupport( blockNameOrType, 'color' ) ||
270
+ shouldSkipSerialization( blockNameOrType, BORDER_SUPPORT_KEY, 'color' )
267
271
  ) {
268
272
  return props;
269
273
  }
@@ -296,102 +300,59 @@ export function getBorderClasses( attributes ) {
296
300
  } );
297
301
  }
298
302
 
299
- /**
300
- * Filters the registered block settings to apply border color styles and
301
- * classnames to the block edit wrapper.
302
- *
303
- * @param {Object} settings Original block settings.
304
- *
305
- * @return {Object} Filtered block settings.
306
- */
307
- function addEditProps( settings ) {
303
+ function useBlockProps( { name, borderColor, style } ) {
304
+ const { colors } = useMultipleOriginColorsAndGradients();
305
+
308
306
  if (
309
- ! hasBorderSupport( settings, 'color' ) ||
310
- shouldSkipSerialization( settings, BORDER_SUPPORT_KEY, 'color' )
307
+ ! hasBorderSupport( name, 'color' ) ||
308
+ shouldSkipSerialization( name, BORDER_SUPPORT_KEY, 'color' )
311
309
  ) {
312
- return settings;
310
+ return {};
313
311
  }
314
312
 
315
- const existingGetEditWrapperProps = settings.getEditWrapperProps;
316
- settings.getEditWrapperProps = ( attributes ) => {
317
- let props = {};
313
+ const { color: borderColorValue } = getMultiOriginColor( {
314
+ colors,
315
+ namedColor: borderColor,
316
+ } );
317
+ const { color: borderTopColor } = getMultiOriginColor( {
318
+ colors,
319
+ namedColor: getColorSlugFromVariable( style?.border?.top?.color ),
320
+ } );
321
+ const { color: borderRightColor } = getMultiOriginColor( {
322
+ colors,
323
+ namedColor: getColorSlugFromVariable( style?.border?.right?.color ),
324
+ } );
318
325
 
319
- if ( existingGetEditWrapperProps ) {
320
- props = existingGetEditWrapperProps( attributes );
321
- }
326
+ const { color: borderBottomColor } = getMultiOriginColor( {
327
+ colors,
328
+ namedColor: getColorSlugFromVariable( style?.border?.bottom?.color ),
329
+ } );
330
+ const { color: borderLeftColor } = getMultiOriginColor( {
331
+ colors,
332
+ namedColor: getColorSlugFromVariable( style?.border?.left?.color ),
333
+ } );
322
334
 
323
- return addSaveProps( props, settings, attributes );
335
+ const extraStyles = {
336
+ borderTopColor: borderTopColor || borderColorValue,
337
+ borderRightColor: borderRightColor || borderColorValue,
338
+ borderBottomColor: borderBottomColor || borderColorValue,
339
+ borderLeftColor: borderLeftColor || borderColorValue,
324
340
  };
325
341
 
326
- return settings;
342
+ return addSaveProps(
343
+ { style: cleanEmptyObject( extraStyles ) || {} },
344
+ name,
345
+ { borderColor, style }
346
+ );
327
347
  }
328
348
 
329
- /**
330
- * This adds inline styles for color palette colors.
331
- * Ideally, this is not needed and themes should load their palettes on the editor.
332
- *
333
- * @param {Function} BlockListBlock Original component.
334
- *
335
- * @return {Function} Wrapped component.
336
- */
337
- export const withBorderColorPaletteStyles = createHigherOrderComponent(
338
- ( BlockListBlock ) => ( props ) => {
339
- const { name, attributes } = props;
340
- const { borderColor, style } = attributes;
341
- const { colors } = useMultipleOriginColorsAndGradients();
342
-
343
- if (
344
- ! hasBorderSupport( name, 'color' ) ||
345
- shouldSkipSerialization( name, BORDER_SUPPORT_KEY, 'color' )
346
- ) {
347
- return <BlockListBlock { ...props } />;
348
- }
349
-
350
- const { color: borderColorValue } = getMultiOriginColor( {
351
- colors,
352
- namedColor: borderColor,
353
- } );
354
- const { color: borderTopColor } = getMultiOriginColor( {
355
- colors,
356
- namedColor: getColorSlugFromVariable( style?.border?.top?.color ),
357
- } );
358
- const { color: borderRightColor } = getMultiOriginColor( {
359
- colors,
360
- namedColor: getColorSlugFromVariable( style?.border?.right?.color ),
361
- } );
362
-
363
- const { color: borderBottomColor } = getMultiOriginColor( {
364
- colors,
365
- namedColor: getColorSlugFromVariable(
366
- style?.border?.bottom?.color
367
- ),
368
- } );
369
- const { color: borderLeftColor } = getMultiOriginColor( {
370
- colors,
371
- namedColor: getColorSlugFromVariable( style?.border?.left?.color ),
372
- } );
373
-
374
- const extraStyles = {
375
- borderTopColor: borderTopColor || borderColorValue,
376
- borderRightColor: borderRightColor || borderColorValue,
377
- borderBottomColor: borderBottomColor || borderColorValue,
378
- borderLeftColor: borderLeftColor || borderColorValue,
379
- };
380
- const cleanedExtraStyles = cleanEmptyObject( extraStyles ) || {};
381
-
382
- let wrapperProps = props.wrapperProps;
383
- wrapperProps = {
384
- ...props.wrapperProps,
385
- style: {
386
- ...props.wrapperProps?.style,
387
- ...cleanedExtraStyles,
388
- },
389
- };
390
-
391
- return <BlockListBlock { ...props } wrapperProps={ wrapperProps } />;
349
+ export default {
350
+ useBlockProps,
351
+ attributeKeys: [ 'borderColor', 'style' ],
352
+ hasSupport( name ) {
353
+ return hasBorderSupport( name, 'color' );
392
354
  },
393
- 'withBorderColorPaletteStyles'
394
- );
355
+ };
395
356
 
396
357
  addFilter(
397
358
  'blocks.registerBlockType',
@@ -404,15 +365,3 @@ addFilter(
404
365
  'core/border/addSaveProps',
405
366
  addSaveProps
406
367
  );
407
-
408
- addFilter(
409
- 'blocks.registerBlockType',
410
- 'core/border/addEditProps',
411
- addEditProps
412
- );
413
-
414
- addFilter(
415
- 'editor.BlockListBlock',
416
- 'core/border/with-border-color-palette-styles',
417
- withBorderColorPaletteStyles
418
- );