@wordpress/block-editor 12.15.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 (500) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +9 -4
  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 +14 -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-patterns-list/index.js +1 -1
  28. package/build/components/block-patterns-list/index.js.map +1 -1
  29. package/build/components/block-removal-warning-modal/index.js +2 -9
  30. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  31. package/build/components/block-rename/modal.js +3 -0
  32. package/build/components/block-rename/modal.js.map +1 -1
  33. package/build/components/block-settings/container.native.js +6 -4
  34. package/build/components/block-settings/container.native.js.map +1 -1
  35. package/build/components/block-styles/index.js +1 -1
  36. package/build/components/block-styles/index.js.map +1 -1
  37. package/build/components/block-styles/index.native.js +3 -2
  38. package/build/components/block-styles/index.native.js.map +1 -1
  39. package/build/components/block-toolbar/index.js +89 -27
  40. package/build/components/block-toolbar/index.js.map +1 -1
  41. package/build/components/block-tools/block-toolbar-breadcrumb.js +49 -0
  42. package/build/components/block-tools/block-toolbar-breadcrumb.js.map +1 -0
  43. package/build/components/block-tools/block-toolbar-popover.js +86 -0
  44. package/build/components/block-tools/block-toolbar-popover.js.map +1 -0
  45. package/build/components/block-tools/index.js +27 -24
  46. package/build/components/block-tools/index.js.map +1 -1
  47. package/build/components/block-types-list/index.native.js +4 -3
  48. package/build/components/block-types-list/index.native.js.map +1 -1
  49. package/build/components/block-variation-picker/index.native.js +2 -1
  50. package/build/components/block-variation-picker/index.native.js.map +1 -1
  51. package/build/components/colors-gradients/control.js +28 -17
  52. package/build/components/colors-gradients/control.js.map +1 -1
  53. package/build/components/duotone-control/index.js +1 -4
  54. package/build/components/duotone-control/index.js.map +1 -1
  55. package/build/components/global-styles/color-panel.js +22 -20
  56. package/build/components/global-styles/color-panel.js.map +1 -1
  57. package/build/components/global-styles/filters-panel.js +9 -3
  58. package/build/components/global-styles/filters-panel.js.map +1 -1
  59. package/build/components/global-styles/typography-panel.js +20 -31
  60. package/build/components/global-styles/typography-panel.js.map +1 -1
  61. package/build/components/image-link-destinations/index.native.js +118 -0
  62. package/build/components/image-link-destinations/index.native.js.map +1 -0
  63. package/build/components/index.native.js +8 -0
  64. package/build/components/index.native.js.map +1 -1
  65. package/build/components/inserter/media-tab/media-panel.js +2 -2
  66. package/build/components/inserter/media-tab/media-panel.js.map +1 -1
  67. package/build/components/inserter/menu.js +14 -7
  68. package/build/components/inserter/menu.js.map +1 -1
  69. package/build/components/inserter/preview-panel.js +2 -2
  70. package/build/components/inserter/preview-panel.js.map +1 -1
  71. package/build/components/inserter-button/index.native.js +98 -0
  72. package/build/components/inserter-button/index.native.js.map +1 -0
  73. package/build/components/inserter-button/sparkles.js +23 -0
  74. package/build/components/inserter-button/sparkles.js.map +1 -0
  75. package/build/components/inserter-draggable-blocks/index.js +8 -4
  76. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  77. package/build/components/inspector-controls/fill.js +3 -3
  78. package/build/components/inspector-controls/fill.js.map +1 -1
  79. package/build/components/inspector-controls/fill.native.js +3 -3
  80. package/build/components/inspector-controls/fill.native.js.map +1 -1
  81. package/build/components/navigable-toolbar/index.js +2 -2
  82. package/build/components/navigable-toolbar/index.js.map +1 -1
  83. package/build/components/preview-options/index.js +6 -62
  84. package/build/components/preview-options/index.js.map +1 -1
  85. package/build/components/rich-text/content.js +26 -23
  86. package/build/components/rich-text/content.js.map +1 -1
  87. package/build/components/rich-text/get-rich-text-values.js +2 -1
  88. package/build/components/rich-text/get-rich-text-values.js.map +1 -1
  89. package/build/components/rich-text/index.js +2 -30
  90. package/build/components/rich-text/index.js.map +1 -1
  91. package/build/components/rich-text/index.native.js +9 -16
  92. package/build/components/rich-text/index.native.js.map +1 -1
  93. package/build/components/rich-text/native/get-format-colors.native.js +22 -24
  94. package/build/components/rich-text/native/get-format-colors.native.js.map +1 -1
  95. package/build/components/rich-text/native/index.native.js +7 -34
  96. package/build/components/rich-text/native/index.native.js.map +1 -1
  97. package/build/components/rich-text/use-input-rules.js +5 -1
  98. package/build/components/rich-text/use-input-rules.js.map +1 -1
  99. package/build/components/rich-text/with-deprecations.js +50 -0
  100. package/build/components/rich-text/with-deprecations.js.map +1 -0
  101. package/build/components/use-block-drop-zone/index.js +70 -8
  102. package/build/components/use-block-drop-zone/index.js.map +1 -1
  103. package/build/components/use-on-block-drop/index.js +1 -1
  104. package/build/components/use-on-block-drop/index.js.map +1 -1
  105. package/build/components/use-resize-canvas/index.js +4 -1
  106. package/build/components/use-resize-canvas/index.js.map +1 -1
  107. package/build/components/use-settings/index.js +14 -0
  108. package/build/components/use-settings/index.js.map +1 -1
  109. package/build/hooks/align.js +20 -68
  110. package/build/hooks/align.js.map +1 -1
  111. package/build/hooks/align.native.js +11 -1
  112. package/build/hooks/align.native.js.map +1 -1
  113. package/build/hooks/anchor.js +13 -29
  114. package/build/hooks/anchor.js.map +1 -1
  115. package/build/hooks/background.js +28 -31
  116. package/build/hooks/background.js.map +1 -1
  117. package/build/hooks/block-hooks.js +24 -32
  118. package/build/hooks/block-hooks.js.map +1 -1
  119. package/build/hooks/block-renaming.js +18 -22
  120. package/build/hooks/block-renaming.js.map +1 -1
  121. package/build/hooks/border.js +58 -80
  122. package/build/hooks/border.js.map +1 -1
  123. package/build/hooks/color.js +76 -89
  124. package/build/hooks/color.js.map +1 -1
  125. package/build/hooks/content-lock-ui.js +29 -29
  126. package/build/hooks/content-lock-ui.js.map +1 -1
  127. package/build/hooks/custom-class-name.js +12 -29
  128. package/build/hooks/custom-class-name.js.map +1 -1
  129. package/build/hooks/custom-fields.js +24 -38
  130. package/build/hooks/custom-fields.js.map +1 -1
  131. package/build/hooks/dimensions.js +21 -17
  132. package/build/hooks/dimensions.js.map +1 -1
  133. package/build/hooks/duotone.js +31 -61
  134. package/build/hooks/duotone.js.map +1 -1
  135. package/build/hooks/font-family.js +16 -25
  136. package/build/hooks/font-family.js.map +1 -1
  137. package/build/hooks/font-size.js +51 -119
  138. package/build/hooks/font-size.js.map +1 -1
  139. package/build/hooks/index.js +25 -14
  140. package/build/hooks/index.js.map +1 -1
  141. package/build/hooks/index.native.js +10 -3
  142. package/build/hooks/index.native.js.map +1 -1
  143. package/build/hooks/layout-child.js +68 -0
  144. package/build/hooks/layout-child.js.map +1 -0
  145. package/build/hooks/layout.js +16 -101
  146. package/build/hooks/layout.js.map +1 -1
  147. package/build/hooks/padding.js +2 -2
  148. package/build/hooks/padding.js.map +1 -1
  149. package/build/hooks/position.js +40 -62
  150. package/build/hooks/position.js.map +1 -1
  151. package/build/hooks/style.js +51 -88
  152. package/build/hooks/style.js.map +1 -1
  153. package/build/hooks/typography.js +34 -14
  154. package/build/hooks/typography.js.map +1 -1
  155. package/build/hooks/utils.js +154 -7
  156. package/build/hooks/utils.js.map +1 -1
  157. package/build/private-apis.js +0 -2
  158. package/build/private-apis.js.map +1 -1
  159. package/build/store/private-actions.js +8 -0
  160. package/build/store/private-actions.js.map +1 -1
  161. package/build/store/private-selectors.js +34 -0
  162. package/build/store/private-selectors.js.map +1 -1
  163. package/build/store/reducer.js +8 -0
  164. package/build/store/reducer.js.map +1 -1
  165. package/build/store/selectors.js +10 -60
  166. package/build/store/selectors.js.map +1 -1
  167. package/build/store/utils.js +66 -0
  168. package/build/store/utils.js.map +1 -0
  169. package/build/utils/object.js +21 -61
  170. package/build/utils/object.js.map +1 -1
  171. package/build/utils/selection.js +9 -1
  172. package/build/utils/selection.js.map +1 -1
  173. package/build-module/components/block-canvas/index.js +23 -7
  174. package/build-module/components/block-canvas/index.js.map +1 -1
  175. package/build-module/components/block-card/index.js +1 -1
  176. package/build-module/components/block-card/index.js.map +1 -1
  177. package/build-module/components/block-controls/hook.js +4 -24
  178. package/build-module/components/block-controls/hook.js.map +1 -1
  179. package/build-module/components/block-edit/context.js +2 -0
  180. package/build-module/components/block-edit/context.js.map +1 -1
  181. package/build-module/components/block-edit/index.js +19 -10
  182. package/build-module/components/block-edit/index.js.map +1 -1
  183. package/build-module/components/block-info-slot-fill/index.js +3 -3
  184. package/build-module/components/block-info-slot-fill/index.js.map +1 -1
  185. package/build-module/components/block-list/block.js +29 -10
  186. package/build-module/components/block-list/block.js.map +1 -1
  187. package/build-module/components/block-list/block.native.js +14 -5
  188. package/build-module/components/block-list/block.native.js.map +1 -1
  189. package/build-module/components/block-list/use-block-props/index.js +62 -19
  190. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  191. package/build-module/components/block-list/use-block-props/use-focus-first-element.js +4 -29
  192. package/build-module/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  193. package/build-module/components/block-list/use-block-props/use-is-hovered.js +4 -14
  194. package/build-module/components/block-list/use-block-props/use-is-hovered.js.map +1 -1
  195. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js +4 -2
  196. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  197. package/build-module/components/block-patterns-list/index.js +1 -1
  198. package/build-module/components/block-patterns-list/index.js.map +1 -1
  199. package/build-module/components/block-removal-warning-modal/index.js +3 -10
  200. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  201. package/build-module/components/block-rename/modal.js +3 -0
  202. package/build-module/components/block-rename/modal.js.map +1 -1
  203. package/build-module/components/block-settings/container.native.js +4 -2
  204. package/build-module/components/block-settings/container.native.js.map +1 -1
  205. package/build-module/components/block-styles/index.js +1 -1
  206. package/build-module/components/block-styles/index.js.map +1 -1
  207. package/build-module/components/block-styles/index.native.js +3 -2
  208. package/build-module/components/block-styles/index.native.js.map +1 -1
  209. package/build-module/components/block-toolbar/index.js +88 -25
  210. package/build-module/components/block-toolbar/index.js.map +1 -1
  211. package/build-module/components/block-tools/block-toolbar-breadcrumb.js +41 -0
  212. package/build-module/components/block-tools/block-toolbar-breadcrumb.js.map +1 -0
  213. package/build-module/components/block-tools/block-toolbar-popover.js +76 -0
  214. package/build-module/components/block-tools/block-toolbar-popover.js.map +1 -0
  215. package/build-module/components/block-tools/index.js +27 -24
  216. package/build-module/components/block-tools/index.js.map +1 -1
  217. package/build-module/components/block-types-list/index.native.js +2 -1
  218. package/build-module/components/block-types-list/index.native.js.map +1 -1
  219. package/build-module/components/block-variation-picker/index.native.js +2 -1
  220. package/build-module/components/block-variation-picker/index.native.js.map +1 -1
  221. package/build-module/components/colors-gradients/control.js +29 -18
  222. package/build-module/components/colors-gradients/control.js.map +1 -1
  223. package/build-module/components/duotone-control/index.js +1 -4
  224. package/build-module/components/duotone-control/index.js.map +1 -1
  225. package/build-module/components/global-styles/color-panel.js +23 -21
  226. package/build-module/components/global-styles/color-panel.js.map +1 -1
  227. package/build-module/components/global-styles/filters-panel.js +10 -4
  228. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  229. package/build-module/components/global-styles/typography-panel.js +20 -31
  230. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  231. package/build-module/components/image-link-destinations/index.native.js +109 -0
  232. package/build-module/components/image-link-destinations/index.native.js.map +1 -0
  233. package/build-module/components/index.native.js +1 -0
  234. package/build-module/components/index.native.js.map +1 -1
  235. package/build-module/components/inserter/media-tab/media-panel.js +1 -1
  236. package/build-module/components/inserter/media-tab/media-panel.js.map +1 -1
  237. package/build-module/components/inserter/menu.js +14 -7
  238. package/build-module/components/inserter/menu.js.map +1 -1
  239. package/build-module/components/inserter/preview-panel.js +2 -2
  240. package/build-module/components/inserter/preview-panel.js.map +1 -1
  241. package/build-module/components/inserter-button/index.native.js +89 -0
  242. package/build-module/components/inserter-button/index.native.js.map +1 -0
  243. package/build-module/components/inserter-button/sparkles.js +15 -0
  244. package/build-module/components/inserter-button/sparkles.js.map +1 -0
  245. package/build-module/components/inserter-draggable-blocks/index.js +9 -5
  246. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  247. package/build-module/components/inspector-controls/fill.js +3 -3
  248. package/build-module/components/inspector-controls/fill.js.map +1 -1
  249. package/build-module/components/inspector-controls/fill.native.js +3 -3
  250. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  251. package/build-module/components/navigable-toolbar/index.js +2 -2
  252. package/build-module/components/navigable-toolbar/index.js.map +1 -1
  253. package/build-module/components/preview-options/index.js +6 -62
  254. package/build-module/components/preview-options/index.js.map +1 -1
  255. package/build-module/components/rich-text/content.js +25 -21
  256. package/build-module/components/rich-text/content.js.map +1 -1
  257. package/build-module/components/rich-text/get-rich-text-values.js +2 -1
  258. package/build-module/components/rich-text/get-rich-text-values.js.map +1 -1
  259. package/build-module/components/rich-text/index.js +4 -32
  260. package/build-module/components/rich-text/index.js.map +1 -1
  261. package/build-module/components/rich-text/index.native.js +10 -18
  262. package/build-module/components/rich-text/index.native.js.map +1 -1
  263. package/build-module/components/rich-text/native/get-format-colors.native.js +22 -24
  264. package/build-module/components/rich-text/native/get-format-colors.native.js.map +1 -1
  265. package/build-module/components/rich-text/native/index.native.js +7 -34
  266. package/build-module/components/rich-text/native/index.native.js.map +1 -1
  267. package/build-module/components/rich-text/use-input-rules.js +5 -1
  268. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  269. package/build-module/components/rich-text/with-deprecations.js +42 -0
  270. package/build-module/components/rich-text/with-deprecations.js.map +1 -0
  271. package/build-module/components/use-block-drop-zone/index.js +69 -8
  272. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  273. package/build-module/components/use-on-block-drop/index.js +1 -1
  274. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  275. package/build-module/components/use-resize-canvas/index.js +4 -1
  276. package/build-module/components/use-resize-canvas/index.js.map +1 -1
  277. package/build-module/components/use-settings/index.js +13 -1
  278. package/build-module/components/use-settings/index.js.map +1 -1
  279. package/build-module/hooks/align.js +19 -66
  280. package/build-module/hooks/align.js.map +1 -1
  281. package/build-module/hooks/align.native.js +1 -0
  282. package/build-module/hooks/align.native.js.map +1 -1
  283. package/build-module/hooks/anchor.js +11 -26
  284. package/build-module/hooks/anchor.js.map +1 -1
  285. package/build-module/hooks/background.js +26 -28
  286. package/build-module/hooks/background.js.map +1 -1
  287. package/build-module/hooks/block-hooks.js +22 -30
  288. package/build-module/hooks/block-hooks.js.map +1 -1
  289. package/build-module/hooks/block-renaming.js +17 -21
  290. package/build-module/hooks/block-renaming.js.map +1 -1
  291. package/build-module/hooks/border.js +57 -78
  292. package/build-module/hooks/border.js.map +1 -1
  293. package/build-module/hooks/color.js +74 -86
  294. package/build-module/hooks/color.js.map +1 -1
  295. package/build-module/hooks/content-lock-ui.js +27 -27
  296. package/build-module/hooks/content-lock-ui.js.map +1 -1
  297. package/build-module/hooks/custom-class-name.js +11 -27
  298. package/build-module/hooks/custom-class-name.js.map +1 -1
  299. package/build-module/hooks/custom-fields.js +20 -39
  300. package/build-module/hooks/custom-fields.js.map +1 -1
  301. package/build-module/hooks/dimensions.js +21 -16
  302. package/build-module/hooks/dimensions.js.map +1 -1
  303. package/build-module/hooks/duotone.js +30 -61
  304. package/build-module/hooks/duotone.js.map +1 -1
  305. package/build-module/hooks/font-family.js +14 -23
  306. package/build-module/hooks/font-family.js.map +1 -1
  307. package/build-module/hooks/font-size.js +49 -119
  308. package/build-module/hooks/font-size.js.map +1 -1
  309. package/build-module/hooks/index.js +18 -14
  310. package/build-module/hooks/index.js.map +1 -1
  311. package/build-module/hooks/index.native.js +5 -3
  312. package/build-module/hooks/index.native.js.map +1 -1
  313. package/build-module/hooks/layout-child.js +60 -0
  314. package/build-module/hooks/layout-child.js.map +1 -0
  315. package/build-module/hooks/layout.js +13 -98
  316. package/build-module/hooks/layout.js.map +1 -1
  317. package/build-module/hooks/padding.js +2 -2
  318. package/build-module/hooks/padding.js.map +1 -1
  319. package/build-module/hooks/position.js +38 -59
  320. package/build-module/hooks/position.js.map +1 -1
  321. package/build-module/hooks/style.js +51 -84
  322. package/build-module/hooks/style.js.map +1 -1
  323. package/build-module/hooks/typography.js +33 -12
  324. package/build-module/hooks/typography.js.map +1 -1
  325. package/build-module/hooks/utils.js +149 -6
  326. package/build-module/hooks/utils.js.map +1 -1
  327. package/build-module/private-apis.js +0 -2
  328. package/build-module/private-apis.js.map +1 -1
  329. package/build-module/store/private-actions.js +7 -0
  330. package/build-module/store/private-actions.js.map +1 -1
  331. package/build-module/store/private-selectors.js +33 -1
  332. package/build-module/store/private-selectors.js.map +1 -1
  333. package/build-module/store/reducer.js +8 -0
  334. package/build-module/store/reducer.js.map +1 -1
  335. package/build-module/store/selectors.js +3 -53
  336. package/build-module/store/selectors.js.map +1 -1
  337. package/build-module/store/utils.js +56 -0
  338. package/build-module/store/utils.js.map +1 -0
  339. package/build-module/utils/object.js +21 -60
  340. package/build-module/utils/object.js.map +1 -1
  341. package/build-module/utils/selection.js +9 -1
  342. package/build-module/utils/selection.js.map +1 -1
  343. package/build-style/style-rtl.css +113 -293
  344. package/build-style/style.css +113 -293
  345. package/package.json +31 -31
  346. package/src/components/block-canvas/index.js +31 -17
  347. package/src/components/block-caption/README.md +2 -2
  348. package/src/components/block-card/index.js +5 -3
  349. package/src/components/block-card/style.scss +7 -3
  350. package/src/components/block-controls/hook.js +8 -30
  351. package/src/components/block-controls/test/index.js +3 -3
  352. package/src/components/block-edit/context.js +3 -0
  353. package/src/components/block-edit/index.js +36 -10
  354. package/src/components/block-info-slot-fill/index.js +6 -3
  355. package/src/components/block-inspector/style.scss +0 -4
  356. package/src/components/block-list/block.js +39 -5
  357. package/src/components/block-list/block.native.js +18 -4
  358. package/src/components/block-list/use-block-props/index.js +74 -21
  359. package/src/components/block-list/use-block-props/use-focus-first-element.js +1 -34
  360. package/src/components/block-list/use-block-props/use-is-hovered.js +2 -13
  361. package/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +1 -5
  362. package/src/components/block-patterns-list/index.js +1 -1
  363. package/src/components/block-removal-warning-modal/index.js +7 -14
  364. package/src/components/block-rename/modal.js +7 -1
  365. package/src/components/block-settings/container.native.js +3 -5
  366. package/src/components/block-styles/index.js +1 -1
  367. package/src/components/block-styles/index.native.js +4 -2
  368. package/src/components/block-styles/style.scss +0 -11
  369. package/src/components/block-switcher/test/__snapshots__/index.js.snap +3 -1
  370. package/src/components/block-toolbar/index.js +180 -95
  371. package/src/components/block-toolbar/style.scss +50 -66
  372. package/src/components/block-tools/block-toolbar-breadcrumb.js +46 -0
  373. package/src/components/block-tools/block-toolbar-popover.js +90 -0
  374. package/src/components/block-tools/index.js +42 -29
  375. package/src/components/block-tools/style.scss +60 -172
  376. package/src/components/block-types-list/index.native.js +2 -1
  377. package/src/components/block-variation-picker/index.native.js +1 -1
  378. package/src/components/colors-gradients/control.js +49 -30
  379. package/src/components/colors-gradients/style.scss +0 -7
  380. package/src/components/duotone-control/index.js +2 -5
  381. package/src/components/duotone-control/style.scss +1 -6
  382. package/src/components/global-styles/color-panel.js +34 -25
  383. package/src/components/global-styles/filters-panel.js +8 -4
  384. package/src/components/global-styles/typography-panel.js +23 -43
  385. package/src/components/image-link-destinations/index.native.js +152 -0
  386. package/src/components/image-link-destinations/style.native.scss +16 -0
  387. package/src/components/index.native.js +1 -0
  388. package/src/components/inner-blocks/README.md +13 -2
  389. package/src/components/inserter/media-tab/media-panel.js +1 -1
  390. package/src/components/inserter/menu.js +16 -8
  391. package/src/components/inserter/preview-panel.js +2 -2
  392. package/src/components/inserter/style.scss +15 -17
  393. package/src/components/inserter-button/README.md +62 -0
  394. package/src/components/inserter-button/index.native.js +116 -0
  395. package/src/components/inserter-button/sparkles.js +15 -0
  396. package/src/components/inserter-button/style.native.scss +72 -0
  397. package/src/components/inserter-draggable-blocks/index.js +18 -5
  398. package/src/components/inspector-controls/fill.js +6 -3
  399. package/src/components/inspector-controls/fill.native.js +6 -3
  400. package/src/components/link-control/style.scss +1 -1
  401. package/src/components/link-control/test/index.js +1 -1
  402. package/src/components/navigable-toolbar/README.md +2 -0
  403. package/src/components/navigable-toolbar/index.js +2 -2
  404. package/src/components/preview-options/index.js +6 -86
  405. package/src/components/rich-text/content.js +27 -20
  406. package/src/components/rich-text/get-rich-text-values.js +6 -1
  407. package/src/components/rich-text/index.js +5 -46
  408. package/src/components/rich-text/index.native.js +8 -25
  409. package/src/components/rich-text/native/get-format-colors.native.js +33 -40
  410. package/src/components/rich-text/native/index.native.js +7 -48
  411. package/src/components/rich-text/use-input-rules.js +6 -1
  412. package/src/components/rich-text/with-deprecations.js +51 -0
  413. package/src/components/use-block-drop-zone/index.js +114 -14
  414. package/src/components/use-on-block-drop/index.js +2 -1
  415. package/src/components/use-resize-canvas/README.md +3 -3
  416. package/src/components/use-resize-canvas/index.js +4 -1
  417. package/src/components/use-settings/index.js +15 -1
  418. package/src/hooks/align.js +15 -76
  419. package/src/hooks/align.native.js +1 -0
  420. package/src/hooks/anchor.js +13 -33
  421. package/src/hooks/background.js +28 -23
  422. package/src/hooks/block-hooks.js +22 -51
  423. package/src/hooks/block-renaming.js +23 -37
  424. package/src/hooks/border.js +67 -118
  425. package/src/hooks/color.js +100 -132
  426. package/src/hooks/content-lock-ui.js +110 -122
  427. package/src/hooks/custom-class-name.js +8 -40
  428. package/src/hooks/custom-fields.js +20 -47
  429. package/src/hooks/dimensions.js +20 -16
  430. package/src/hooks/duotone.js +70 -127
  431. package/src/hooks/font-family.js +10 -29
  432. package/src/hooks/font-size.js +66 -162
  433. package/src/hooks/index.js +42 -14
  434. package/src/hooks/index.native.js +6 -3
  435. package/src/hooks/layout-child.js +53 -0
  436. package/src/hooks/layout.js +13 -102
  437. package/src/hooks/padding.js +2 -2
  438. package/src/hooks/position.js +50 -90
  439. package/src/hooks/style.js +117 -187
  440. package/src/hooks/test/align.js +1 -178
  441. package/src/hooks/typography.js +20 -16
  442. package/src/hooks/utils.js +187 -6
  443. package/src/private-apis.js +0 -2
  444. package/src/store/private-actions.js +8 -0
  445. package/src/store/private-selectors.js +45 -0
  446. package/src/store/reducer.js +8 -0
  447. package/src/store/selectors.js +5 -69
  448. package/src/store/utils.js +74 -0
  449. package/src/style.scss +0 -2
  450. package/src/utils/object.js +18 -69
  451. package/src/utils/selection.js +9 -2
  452. package/build/components/block-list/use-block-props/use-block-class-names.js +0 -67
  453. package/build/components/block-list/use-block-props/use-block-class-names.js.map +0 -1
  454. package/build/components/block-list/use-block-props/use-block-custom-class-name.js +0 -46
  455. package/build/components/block-list/use-block-props/use-block-custom-class-name.js.map +0 -1
  456. package/build/components/block-list/use-block-props/use-block-default-class-name.js +0 -37
  457. package/build/components/block-list/use-block-props/use-block-default-class-name.js.map +0 -1
  458. package/build/components/block-tools/back-compat.js +0 -45
  459. package/build/components/block-tools/back-compat.js.map +0 -1
  460. package/build/components/block-tools/block-contextual-toolbar.js +0 -91
  461. package/build/components/block-tools/block-contextual-toolbar.js.map +0 -1
  462. package/build/components/block-tools/selected-block-tools.js +0 -113
  463. package/build/components/block-tools/selected-block-tools.js.map +0 -1
  464. package/build/components/inserter/hooks/use-debounced-input.js +0 -22
  465. package/build/components/inserter/hooks/use-debounced-input.js.map +0 -1
  466. package/build/components/use-display-block-controls/index.js +0 -39
  467. package/build/components/use-display-block-controls/index.js.map +0 -1
  468. package/build/components/use-display-block-controls/index.native.js +0 -39
  469. package/build/components/use-display-block-controls/index.native.js.map +0 -1
  470. package/build-module/components/block-list/use-block-props/use-block-class-names.js +0 -60
  471. package/build-module/components/block-list/use-block-props/use-block-class-names.js.map +0 -1
  472. package/build-module/components/block-list/use-block-props/use-block-custom-class-name.js +0 -40
  473. package/build-module/components/block-list/use-block-props/use-block-custom-class-name.js.map +0 -1
  474. package/build-module/components/block-list/use-block-props/use-block-default-class-name.js +0 -31
  475. package/build-module/components/block-list/use-block-props/use-block-default-class-name.js.map +0 -1
  476. package/build-module/components/block-tools/back-compat.js +0 -35
  477. package/build-module/components/block-tools/back-compat.js.map +0 -1
  478. package/build-module/components/block-tools/block-contextual-toolbar.js +0 -83
  479. package/build-module/components/block-tools/block-contextual-toolbar.js.map +0 -1
  480. package/build-module/components/block-tools/selected-block-tools.js +0 -105
  481. package/build-module/components/block-tools/selected-block-tools.js.map +0 -1
  482. package/build-module/components/inserter/hooks/use-debounced-input.js +0 -15
  483. package/build-module/components/inserter/hooks/use-debounced-input.js.map +0 -1
  484. package/build-module/components/use-display-block-controls/index.js +0 -32
  485. package/build-module/components/use-display-block-controls/index.js.map +0 -1
  486. package/build-module/components/use-display-block-controls/index.native.js +0 -32
  487. package/build-module/components/use-display-block-controls/index.native.js.map +0 -1
  488. package/src/components/block-list/use-block-props/use-block-class-names.js +0 -66
  489. package/src/components/block-list/use-block-props/use-block-custom-class-name.js +0 -44
  490. package/src/components/block-list/use-block-props/use-block-default-class-name.js +0 -35
  491. package/src/components/block-parent-selector/style.scss +0 -11
  492. package/src/components/block-tools/back-compat.js +0 -35
  493. package/src/components/block-tools/block-contextual-toolbar.js +0 -100
  494. package/src/components/block-tools/selected-block-tools.js +0 -127
  495. package/src/components/inserter/hooks/use-debounced-input.js +0 -18
  496. package/src/components/preview-options/README.md +0 -94
  497. package/src/components/preview-options/style.scss +0 -64
  498. package/src/components/use-display-block-controls/index.js +0 -36
  499. package/src/components/use-display-block-controls/index.native.js +0 -37
  500. package/src/hooks/test/color.js +0 -112
@@ -2,9 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { ToolbarButton, MenuItem } from '@wordpress/components';
5
- import { createHigherOrderComponent } from '@wordpress/compose';
6
5
  import { useDispatch, useSelect } from '@wordpress/data';
7
- import { addFilter } from '@wordpress/hooks';
8
6
  import { __ } from '@wordpress/i18n';
9
7
  import { useEffect, useRef, useCallback } from '@wordpress/element';
10
8
 
@@ -37,129 +35,119 @@ function StopEditingAsBlocksOnOutsideSelect( {
37
35
  return null;
38
36
  }
39
37
 
40
- export const withContentLockControls = createHigherOrderComponent(
41
- ( BlockEdit ) => ( props ) => {
42
- const { getBlockListSettings, getSettings } =
43
- useSelect( blockEditorStore );
44
- const focusModeToRevert = useRef();
45
- const { templateLock, isLockedByParent, isEditingAsBlocks } = useSelect(
46
- ( select ) => {
47
- const {
48
- __unstableGetContentLockingParent,
49
- getTemplateLock,
50
- __unstableGetTemporarilyEditingAsBlocks,
51
- } = select( blockEditorStore );
52
- return {
53
- templateLock: getTemplateLock( props.clientId ),
54
- isLockedByParent: !! __unstableGetContentLockingParent(
55
- props.clientId
56
- ),
57
- isEditingAsBlocks:
58
- __unstableGetTemporarilyEditingAsBlocks() ===
59
- props.clientId,
60
- };
61
- },
62
- [ props.clientId ]
63
- );
38
+ function ContentLockControlsPure( { clientId, isSelected } ) {
39
+ const { getBlockListSettings, getSettings } = useSelect( blockEditorStore );
40
+ const focusModeToRevert = useRef();
41
+ const { templateLock, isLockedByParent, isEditingAsBlocks } = useSelect(
42
+ ( select ) => {
43
+ const {
44
+ __unstableGetContentLockingParent,
45
+ getTemplateLock,
46
+ __unstableGetTemporarilyEditingAsBlocks,
47
+ } = select( blockEditorStore );
48
+ return {
49
+ templateLock: getTemplateLock( clientId ),
50
+ isLockedByParent:
51
+ !! __unstableGetContentLockingParent( clientId ),
52
+ isEditingAsBlocks:
53
+ __unstableGetTemporarilyEditingAsBlocks() === clientId,
54
+ };
55
+ },
56
+ [ clientId ]
57
+ );
64
58
 
65
- const {
66
- updateSettings,
67
- updateBlockListSettings,
68
- __unstableSetTemporarilyEditingAsBlocks,
69
- } = useDispatch( blockEditorStore );
70
- const isContentLocked =
71
- ! isLockedByParent && templateLock === 'contentOnly';
72
- const {
73
- __unstableMarkNextChangeAsNotPersistent,
74
- updateBlockAttributes,
75
- } = useDispatch( blockEditorStore );
59
+ const {
60
+ updateSettings,
61
+ updateBlockListSettings,
62
+ __unstableSetTemporarilyEditingAsBlocks,
63
+ } = useDispatch( blockEditorStore );
64
+ const isContentLocked =
65
+ ! isLockedByParent && templateLock === 'contentOnly';
66
+ const { __unstableMarkNextChangeAsNotPersistent, updateBlockAttributes } =
67
+ useDispatch( blockEditorStore );
76
68
 
77
- const stopEditingAsBlock = useCallback( () => {
78
- __unstableMarkNextChangeAsNotPersistent();
79
- updateBlockAttributes( props.clientId, {
80
- templateLock: 'contentOnly',
81
- } );
82
- updateBlockListSettings( props.clientId, {
83
- ...getBlockListSettings( props.clientId ),
84
- templateLock: 'contentOnly',
85
- } );
86
- updateSettings( { focusMode: focusModeToRevert.current } );
87
- __unstableSetTemporarilyEditingAsBlocks();
88
- }, [
89
- props.clientId,
90
- updateSettings,
91
- updateBlockListSettings,
92
- getBlockListSettings,
93
- __unstableMarkNextChangeAsNotPersistent,
94
- updateBlockAttributes,
95
- __unstableSetTemporarilyEditingAsBlocks,
96
- ] );
69
+ const stopEditingAsBlock = useCallback( () => {
70
+ __unstableMarkNextChangeAsNotPersistent();
71
+ updateBlockAttributes( clientId, {
72
+ templateLock: 'contentOnly',
73
+ } );
74
+ updateBlockListSettings( clientId, {
75
+ ...getBlockListSettings( clientId ),
76
+ templateLock: 'contentOnly',
77
+ } );
78
+ updateSettings( { focusMode: focusModeToRevert.current } );
79
+ __unstableSetTemporarilyEditingAsBlocks();
80
+ }, [
81
+ clientId,
82
+ updateSettings,
83
+ updateBlockListSettings,
84
+ getBlockListSettings,
85
+ __unstableMarkNextChangeAsNotPersistent,
86
+ updateBlockAttributes,
87
+ __unstableSetTemporarilyEditingAsBlocks,
88
+ ] );
97
89
 
98
- if ( ! isContentLocked && ! isEditingAsBlocks ) {
99
- return <BlockEdit key="edit" { ...props } />;
100
- }
90
+ if ( ! isContentLocked && ! isEditingAsBlocks ) {
91
+ return null;
92
+ }
101
93
 
102
- const showStopEditingAsBlocks = isEditingAsBlocks && ! isContentLocked;
103
- const showStartEditingAsBlocks =
104
- ! isEditingAsBlocks && isContentLocked && props.isSelected;
94
+ const showStopEditingAsBlocks = isEditingAsBlocks && ! isContentLocked;
95
+ const showStartEditingAsBlocks =
96
+ ! isEditingAsBlocks && isContentLocked && isSelected;
105
97
 
106
- return (
107
- <>
108
- { showStopEditingAsBlocks && (
109
- <>
110
- <StopEditingAsBlocksOnOutsideSelect
111
- clientId={ props.clientId }
112
- stopEditingAsBlock={ stopEditingAsBlock }
113
- />
114
- <BlockControls group="other">
115
- <ToolbarButton
116
- onClick={ () => {
117
- stopEditingAsBlock();
118
- } }
119
- >
120
- { __( 'Done' ) }
121
- </ToolbarButton>
122
- </BlockControls>
123
- </>
124
- ) }
125
- { showStartEditingAsBlocks && (
126
- <BlockSettingsMenuControls>
127
- { ( { onClose } ) => (
128
- <MenuItem
129
- onClick={ () => {
130
- __unstableMarkNextChangeAsNotPersistent();
131
- updateBlockAttributes( props.clientId, {
132
- templateLock: undefined,
133
- } );
134
- updateBlockListSettings( props.clientId, {
135
- ...getBlockListSettings(
136
- props.clientId
137
- ),
138
- templateLock: false,
139
- } );
140
- focusModeToRevert.current =
141
- getSettings().focusMode;
142
- updateSettings( { focusMode: true } );
143
- __unstableSetTemporarilyEditingAsBlocks(
144
- props.clientId
145
- );
146
- onClose();
147
- } }
148
- >
149
- { __( 'Modify' ) }
150
- </MenuItem>
151
- ) }
152
- </BlockSettingsMenuControls>
153
- ) }
154
- <BlockEdit key="edit" { ...props } />
155
- </>
156
- );
157
- },
158
- 'withContentLockControls'
159
- );
98
+ return (
99
+ <>
100
+ { showStopEditingAsBlocks && (
101
+ <>
102
+ <StopEditingAsBlocksOnOutsideSelect
103
+ clientId={ clientId }
104
+ stopEditingAsBlock={ stopEditingAsBlock }
105
+ />
106
+ <BlockControls group="other">
107
+ <ToolbarButton
108
+ onClick={ () => {
109
+ stopEditingAsBlock();
110
+ } }
111
+ >
112
+ { __( 'Done' ) }
113
+ </ToolbarButton>
114
+ </BlockControls>
115
+ </>
116
+ ) }
117
+ { showStartEditingAsBlocks && (
118
+ <BlockSettingsMenuControls>
119
+ { ( { onClose } ) => (
120
+ <MenuItem
121
+ onClick={ () => {
122
+ __unstableMarkNextChangeAsNotPersistent();
123
+ updateBlockAttributes( clientId, {
124
+ templateLock: undefined,
125
+ } );
126
+ updateBlockListSettings( clientId, {
127
+ ...getBlockListSettings( clientId ),
128
+ templateLock: false,
129
+ } );
130
+ focusModeToRevert.current =
131
+ getSettings().focusMode;
132
+ updateSettings( { focusMode: true } );
133
+ __unstableSetTemporarilyEditingAsBlocks(
134
+ clientId
135
+ );
136
+ onClose();
137
+ } }
138
+ >
139
+ { __( 'Modify' ) }
140
+ </MenuItem>
141
+ ) }
142
+ </BlockSettingsMenuControls>
143
+ ) }
144
+ </>
145
+ );
146
+ }
160
147
 
161
- addFilter(
162
- 'editor.BlockEdit',
163
- 'core/content-lock-ui/with-block-controls',
164
- withContentLockControls
165
- );
148
+ export default {
149
+ edit: ContentLockControlsPure,
150
+ hasSupport() {
151
+ return true;
152
+ },
153
+ };
@@ -10,7 +10,6 @@ import { addFilter } from '@wordpress/hooks';
10
10
  import { TextControl } from '@wordpress/components';
11
11
  import { __ } from '@wordpress/i18n';
12
12
  import { hasBlockSupport } from '@wordpress/blocks';
13
- import { createHigherOrderComponent } from '@wordpress/compose';
14
13
 
15
14
  /**
16
15
  * Internal dependencies
@@ -39,7 +38,7 @@ export function addAttribute( settings ) {
39
38
  return settings;
40
39
  }
41
40
 
42
- function CustomClassNameControls( { attributes, setAttributes } ) {
41
+ function CustomClassNameControlsPure( { className, setAttributes } ) {
43
42
  const blockEditingMode = useBlockEditingMode();
44
43
  if ( blockEditingMode !== 'default' ) {
45
44
  return null;
@@ -52,7 +51,7 @@ function CustomClassNameControls( { attributes, setAttributes } ) {
52
51
  __next40pxDefaultSize
53
52
  autoComplete="off"
54
53
  label={ __( 'Additional CSS class(es)' ) }
55
- value={ attributes.className || '' }
54
+ value={ className || '' }
56
55
  onChange={ ( nextValue ) => {
57
56
  setAttributes( {
58
57
  className: nextValue !== '' ? nextValue : undefined,
@@ -64,39 +63,13 @@ function CustomClassNameControls( { attributes, setAttributes } ) {
64
63
  );
65
64
  }
66
65
 
67
- /**
68
- * Override the default edit UI to include a new block inspector control for
69
- * assigning the custom class name, if block supports custom class name.
70
- * The control is displayed within the Advanced panel in the block inspector.
71
- *
72
- * @param {Component} BlockEdit Original component.
73
- *
74
- * @return {Component} Wrapped component.
75
- */
76
- export const withCustomClassNameControls = createHigherOrderComponent(
77
- ( BlockEdit ) => {
78
- return ( props ) => {
79
- const hasCustomClassName = hasBlockSupport(
80
- props.name,
81
- 'customClassName',
82
- true
83
- );
84
-
85
- return (
86
- <>
87
- <BlockEdit { ...props } />
88
- { hasCustomClassName && props.isSelected && (
89
- <CustomClassNameControls
90
- attributes={ props.attributes }
91
- setAttributes={ props.setAttributes }
92
- />
93
- ) }
94
- </>
95
- );
96
- };
66
+ export default {
67
+ edit: CustomClassNameControlsPure,
68
+ attributeKeys: [ 'className' ],
69
+ hasSupport( name ) {
70
+ return hasBlockSupport( name, 'customClassName', true );
97
71
  },
98
- 'withCustomClassNameControls'
99
- );
72
+ };
100
73
 
101
74
  /**
102
75
  * Override props assigned to save component to inject the className, if block
@@ -167,11 +140,6 @@ addFilter(
167
140
  'core/editor/custom-class-name/attribute',
168
141
  addAttribute
169
142
  );
170
- addFilter(
171
- 'editor.BlockEdit',
172
- 'core/editor/custom-class-name/with-inspector-controls',
173
- withCustomClassNameControls
174
- );
175
143
  addFilter(
176
144
  'blocks.getSaveContent.extraProps',
177
145
  'core/editor/custom-class-name/save-props',
@@ -5,7 +5,6 @@ import { addFilter } from '@wordpress/hooks';
5
5
  import { PanelBody, TextControl } from '@wordpress/components';
6
6
  import { __, sprintf } from '@wordpress/i18n';
7
7
  import { hasBlockSupport } from '@wordpress/blocks';
8
- import { createHigherOrderComponent } from '@wordpress/compose';
9
8
 
10
9
  /**
11
10
  * Internal dependencies
@@ -34,7 +33,7 @@ function addAttribute( settings ) {
34
33
  return settings;
35
34
  }
36
35
 
37
- function CustomFieldsControl( props ) {
36
+ function CustomFieldsControlPure( { name, connections, setAttributes } ) {
38
37
  const blockEditingMode = useBlockEditingMode();
39
38
  if ( blockEditingMode !== 'default' ) {
40
39
  return null;
@@ -44,8 +43,8 @@ function CustomFieldsControl( props ) {
44
43
  // attribute to use for the connection. Only the `content` attribute
45
44
  // of the paragraph block and the `url` attribute of the image block are supported.
46
45
  let attributeName;
47
- if ( props.name === 'core/paragraph' ) attributeName = 'content';
48
- if ( props.name === 'core/image' ) attributeName = 'url';
46
+ if ( name === 'core/paragraph' ) attributeName = 'content';
47
+ if ( name === 'core/image' ) attributeName = 'url';
49
48
 
50
49
  return (
51
50
  <InspectorControls>
@@ -55,19 +54,17 @@ function CustomFieldsControl( props ) {
55
54
  autoComplete="off"
56
55
  label={ __( 'Custom field meta_key' ) }
57
56
  value={
58
- props.attributes?.connections?.attributes?.[
59
- attributeName
60
- ]?.value || ''
57
+ connections?.attributes?.[ attributeName ]?.value || ''
61
58
  }
62
59
  onChange={ ( nextValue ) => {
63
60
  if ( nextValue === '' ) {
64
- props.setAttributes( {
61
+ setAttributes( {
65
62
  connections: undefined,
66
63
  [ attributeName ]: undefined,
67
64
  placeholder: undefined,
68
65
  } );
69
66
  } else {
70
- props.setAttributes( {
67
+ setAttributes( {
71
68
  connections: {
72
69
  attributes: {
73
70
  // The attributeName will be either `content` or `url`.
@@ -93,50 +90,26 @@ function CustomFieldsControl( props ) {
93
90
  );
94
91
  }
95
92
 
96
- /**
97
- * Override the default edit UI to include a new block inspector control for
98
- * assigning a connection to blocks that has support for connections.
99
- * Currently, only the `core/paragraph` block is supported and there is only a relation
100
- * between paragraph content and a custom field.
101
- *
102
- * @param {Component} BlockEdit Original component.
103
- *
104
- * @return {Component} Wrapped component.
105
- */
106
- const withCustomFieldsControls = createHigherOrderComponent( ( BlockEdit ) => {
107
- return ( props ) => {
108
- const hasCustomFieldsSupport = hasBlockSupport(
109
- props.name,
110
- '__experimentalConnections',
111
- false
112
- );
113
-
114
- // Check if the current block is a paragraph or image block.
115
- // Currently, only these two blocks are supported.
116
- if ( ! [ 'core/paragraph', 'core/image' ].includes( props.name ) ) {
117
- return <BlockEdit key="edit" { ...props } />;
118
- }
119
-
93
+ export default {
94
+ edit: CustomFieldsControlPure,
95
+ attributeKeys: [ 'connections' ],
96
+ hasSupport( name ) {
120
97
  return (
121
- <>
122
- <BlockEdit key="edit" { ...props } />
123
- { hasCustomFieldsSupport && props.isSelected && (
124
- <CustomFieldsControl { ...props } />
125
- ) }
126
- </>
98
+ hasBlockSupport( name, '__experimentalConnections', false ) &&
99
+ // Check if the current block is a paragraph or image block.
100
+ // Currently, only these two blocks are supported.
101
+ [ 'core/paragraph', 'core/image' ].includes( name )
127
102
  );
128
- };
129
- }, 'withCustomFieldsControls' );
103
+ },
104
+ };
130
105
 
131
- if ( window.__experimentalConnections ) {
106
+ if (
107
+ window.__experimentalConnections ||
108
+ window.__experimentalPatternPartialSyncing
109
+ ) {
132
110
  addFilter(
133
111
  'blocks.registerBlockType',
134
112
  'core/editor/connections/attribute',
135
113
  addAttribute
136
114
  );
137
- addFilter(
138
- 'editor.BlockEdit',
139
- 'core/editor/connections/with-inspector-controls',
140
- withCustomFieldsControls
141
- );
142
115
  }
@@ -2,9 +2,10 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useState, useEffect, useCallback } from '@wordpress/element';
5
- import { useDispatch } from '@wordpress/data';
5
+ import { useDispatch, useSelect } from '@wordpress/data';
6
6
  import { getBlockSupport } from '@wordpress/blocks';
7
7
  import deprecated from '@wordpress/deprecated';
8
+ import { pure } from '@wordpress/compose';
8
9
 
9
10
  /**
10
11
  * Internal dependencies
@@ -19,7 +20,7 @@ import { PaddingVisualizer } from './padding';
19
20
  import { store as blockEditorStore } from '../store';
20
21
  import { unlock } from '../lock-unlock';
21
22
 
22
- import { cleanEmptyObject, useBlockSettings } from './utils';
23
+ import { cleanEmptyObject } from './utils';
23
24
 
24
25
  export const DIMENSIONS_SUPPORT_KEY = 'dimensions';
25
26
  export const SPACING_SUPPORT_KEY = 'spacing';
@@ -65,17 +66,13 @@ function DimensionsInspectorControl( { children, resetAllFilter } ) {
65
66
  );
66
67
  }
67
68
 
68
- export function DimensionsPanel( props ) {
69
- const {
70
- clientId,
71
- name,
72
- attributes,
73
- setAttributes,
74
- __unstableParentLayout,
75
- } = props;
76
- const settings = useBlockSettings( name, __unstableParentLayout );
69
+ function DimensionsPanelPure( { clientId, name, setAttributes, settings } ) {
77
70
  const isEnabled = useHasDimensionsPanel( settings );
78
- const value = attributes.style;
71
+ const value = useSelect(
72
+ ( select ) =>
73
+ select( blockEditorStore ).getBlockAttributes( clientId )?.style,
74
+ [ clientId ]
75
+ );
79
76
  const [ visualizedProperty, setVisualizedProperty ] = useVisualizer();
80
77
  const onChange = ( newStyle ) => {
81
78
  setAttributes( {
@@ -87,11 +84,11 @@ export function DimensionsPanel( props ) {
87
84
  return null;
88
85
  }
89
86
 
90
- const defaultDimensionsControls = getBlockSupport( props.name, [
87
+ const defaultDimensionsControls = getBlockSupport( name, [
91
88
  DIMENSIONS_SUPPORT_KEY,
92
89
  '__experimentalDefaultControls',
93
90
  ] );
94
- const defaultSpacingControls = getBlockSupport( props.name, [
91
+ const defaultSpacingControls = getBlockSupport( name, [
95
92
  SPACING_SUPPORT_KEY,
96
93
  '__experimentalDefaultControls',
97
94
  ] );
@@ -114,19 +111,26 @@ export function DimensionsPanel( props ) {
114
111
  { !! settings?.spacing?.padding && (
115
112
  <PaddingVisualizer
116
113
  forceShow={ visualizedProperty === 'padding' }
117
- { ...props }
114
+ clientId={ clientId }
115
+ value={ value }
118
116
  />
119
117
  ) }
120
118
  { !! settings?.spacing?.margin && (
121
119
  <MarginVisualizer
122
120
  forceShow={ visualizedProperty === 'margin' }
123
- { ...props }
121
+ clientId={ clientId }
122
+ value={ value }
124
123
  />
125
124
  ) }
126
125
  </>
127
126
  );
128
127
  }
129
128
 
129
+ // We don't want block controls to re-render when typing inside a block. `pure`
130
+ // will prevent re-renders unless props change, so only pass the needed props
131
+ // and not the whole attributes object.
132
+ export const DimensionsPanel = pure( DimensionsPanelPure );
133
+
130
134
  /**
131
135
  * @deprecated
132
136
  */