@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
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classnames from 'classnames';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -13,7 +8,7 @@ import {
13
8
  hasBlockSupport,
14
9
  __EXPERIMENTAL_ELEMENTS as ELEMENTS,
15
10
  } from '@wordpress/blocks';
16
- import { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';
11
+ import { useInstanceId } from '@wordpress/compose';
17
12
  import { getCSSRules, compileCSS } from '@wordpress/style-engine';
18
13
 
19
14
  /**
@@ -32,8 +27,11 @@ import {
32
27
  SPACING_SUPPORT_KEY,
33
28
  DimensionsPanel,
34
29
  } from './dimensions';
35
- import useDisplayBlockControls from '../components/use-display-block-controls';
36
- import { shouldSkipSerialization, useStyleOverride } from './utils';
30
+ import {
31
+ shouldSkipSerialization,
32
+ useStyleOverride,
33
+ useBlockSettings,
34
+ } from './utils';
37
35
  import { scopeSelector } from '../components/global-styles/utils';
38
36
  import { useBlockEditingMode } from '../components/block-editing-mode';
39
37
 
@@ -271,20 +269,20 @@ export function omitStyle( style, paths, preserveReference = false ) {
271
269
  /**
272
270
  * Override props assigned to save component to inject the CSS variables definition.
273
271
  *
274
- * @param {Object} props Additional props applied to save element.
275
- * @param {Object} blockType Block type.
276
- * @param {Object} attributes Block attributes.
277
- * @param {?Record<string, string[]>} skipPaths An object of keys and paths to skip serialization.
272
+ * @param {Object} props Additional props applied to save element.
273
+ * @param {Object|string} blockNameOrType Block type.
274
+ * @param {Object} attributes Block attributes.
275
+ * @param {?Record<string, string[]>} skipPaths An object of keys and paths to skip serialization.
278
276
  *
279
277
  * @return {Object} Filtered props applied to save element.
280
278
  */
281
279
  export function addSaveProps(
282
280
  props,
283
- blockType,
281
+ blockNameOrType,
284
282
  attributes,
285
283
  skipPaths = skipSerializationPathsSave
286
284
  ) {
287
- if ( ! hasStyleSupport( blockType ) ) {
285
+ if ( ! hasStyleSupport( blockNameOrType ) ) {
288
286
  return props;
289
287
  }
290
288
 
@@ -292,7 +290,7 @@ export function addSaveProps(
292
290
  Object.entries( skipPaths ).forEach( ( [ indicator, path ] ) => {
293
291
  const skipSerialization =
294
292
  skipSerializationPathsSaveChecks[ indicator ] ||
295
- getBlockSupport( blockType, indicator );
293
+ getBlockSupport( blockNameOrType, indicator );
296
294
 
297
295
  if ( skipSerialization === true ) {
298
296
  style = omitStyle( style, path );
@@ -314,71 +312,40 @@ export function addSaveProps(
314
312
  return props;
315
313
  }
316
314
 
317
- /**
318
- * Filters registered block settings to extend the block edit wrapper
319
- * to apply the desired styles and classnames properly.
320
- *
321
- * @param {Object} settings Original block settings.
322
- *
323
- * @return {Object}.Filtered block settings.
324
- */
325
- export function addEditProps( settings ) {
326
- if ( ! hasStyleSupport( settings ) ) {
327
- return settings;
328
- }
329
-
330
- const existingGetEditWrapperProps = settings.getEditWrapperProps;
331
- settings.getEditWrapperProps = ( attributes ) => {
332
- let props = {};
333
- if ( existingGetEditWrapperProps ) {
334
- props = existingGetEditWrapperProps( attributes );
335
- }
336
-
337
- return addSaveProps(
338
- props,
339
- settings,
340
- attributes,
341
- skipSerializationPathsEdit
342
- );
315
+ function BlockStyleControls( {
316
+ clientId,
317
+ name,
318
+ setAttributes,
319
+ __unstableParentLayout,
320
+ } ) {
321
+ const settings = useBlockSettings( name, __unstableParentLayout );
322
+ const blockEditingMode = useBlockEditingMode();
323
+ const passedProps = {
324
+ clientId,
325
+ name,
326
+ setAttributes,
327
+ settings,
343
328
  };
344
-
345
- return settings;
329
+ if ( blockEditingMode !== 'default' ) {
330
+ return null;
331
+ }
332
+ return (
333
+ <>
334
+ <ColorEdit { ...passedProps } />
335
+ <BackgroundImagePanel { ...passedProps } />
336
+ <TypographyPanel { ...passedProps } />
337
+ <BorderPanel { ...passedProps } />
338
+ <DimensionsPanel { ...passedProps } />
339
+ </>
340
+ );
346
341
  }
347
342
 
348
- /**
349
- * Override the default edit UI to include new inspector controls for
350
- * all the custom styles configs.
351
- *
352
- * @param {Function} BlockEdit Original component.
353
- *
354
- * @return {Function} Wrapped component.
355
- */
356
- export const withBlockStyleControls = createHigherOrderComponent(
357
- ( BlockEdit ) => ( props ) => {
358
- if ( ! hasStyleSupport( props.name ) ) {
359
- return <BlockEdit key="edit" { ...props } />;
360
- }
361
-
362
- const shouldDisplayControls = useDisplayBlockControls();
363
- const blockEditingMode = useBlockEditingMode();
364
-
365
- return (
366
- <>
367
- { shouldDisplayControls && blockEditingMode === 'default' && (
368
- <>
369
- <ColorEdit { ...props } />
370
- <BackgroundImagePanel { ...props } />
371
- <TypographyPanel { ...props } />
372
- <BorderPanel { ...props } />
373
- <DimensionsPanel { ...props } />
374
- </>
375
- ) }
376
- <BlockEdit key="edit" { ...props } />
377
- </>
378
- );
379
- },
380
- 'withBlockStyleControls'
381
- );
343
+ export default {
344
+ edit: BlockStyleControls,
345
+ hasSupport: hasStyleSupport,
346
+ attributeKeys: [ 'style' ],
347
+ useBlockProps,
348
+ };
382
349
 
383
350
  // Defines which element types are supported, including their hover styles or
384
351
  // any other elements that have been included under a single element type
@@ -392,115 +359,96 @@ const elementTypes = [
392
359
  },
393
360
  ];
394
361
 
395
- /**
396
- * Override the default block element to include elements styles.
397
- *
398
- * @param {Function} BlockListBlock Original component
399
- * @return {Function} Wrapped component
400
- */
401
- const withElementsStyles = createHigherOrderComponent(
402
- ( BlockListBlock ) => ( props ) => {
403
- const blockElementsContainerIdentifier = `wp-elements-${ useInstanceId(
404
- BlockListBlock
405
- ) }`;
406
-
407
- // The .editor-styles-wrapper selector is required on elements styles. As it is
408
- // added to all other editor styles, not providing it causes reset and global
409
- // styles to override element styles because of higher specificity.
410
- const baseElementSelector = `.editor-styles-wrapper .${ blockElementsContainerIdentifier }`;
411
- const blockElementStyles = props.attributes.style?.elements;
412
-
413
- const styles = useMemo( () => {
414
- if ( ! blockElementStyles ) {
362
+ function useBlockProps( { name, style } ) {
363
+ const blockElementsContainerIdentifier = `wp-elements-${ useInstanceId(
364
+ useBlockProps
365
+ ) }`;
366
+
367
+ // The .editor-styles-wrapper selector is required on elements styles. As it is
368
+ // added to all other editor styles, not providing it causes reset and global
369
+ // styles to override element styles because of higher specificity.
370
+ const baseElementSelector = `.editor-styles-wrapper .${ blockElementsContainerIdentifier }`;
371
+ const blockElementStyles = style?.elements;
372
+
373
+ const styles = useMemo( () => {
374
+ if ( ! blockElementStyles ) {
375
+ return;
376
+ }
377
+
378
+ const elementCSSRules = [];
379
+
380
+ elementTypes.forEach( ( { elementType, pseudo, elements } ) => {
381
+ const skipSerialization = shouldSkipSerialization(
382
+ name,
383
+ COLOR_SUPPORT_KEY,
384
+ elementType
385
+ );
386
+
387
+ if ( skipSerialization ) {
415
388
  return;
416
389
  }
417
390
 
418
- const elementCSSRules = [];
391
+ const elementStyles = blockElementStyles?.[ elementType ];
419
392
 
420
- elementTypes.forEach( ( { elementType, pseudo, elements } ) => {
421
- const skipSerialization = shouldSkipSerialization(
422
- props.name,
423
- COLOR_SUPPORT_KEY,
424
- elementType
393
+ // Process primary element type styles.
394
+ if ( elementStyles ) {
395
+ const selector = scopeSelector(
396
+ baseElementSelector,
397
+ ELEMENTS[ elementType ]
425
398
  );
426
399
 
427
- if ( skipSerialization ) {
428
- return;
429
- }
430
-
431
- const elementStyles = blockElementStyles?.[ elementType ];
432
-
433
- // Process primary element type styles.
434
- if ( elementStyles ) {
435
- const selector = scopeSelector(
436
- baseElementSelector,
437
- ELEMENTS[ elementType ]
438
- );
439
-
440
- elementCSSRules.push(
441
- compileCSS( elementStyles, { selector } )
442
- );
443
-
444
- // Process any interactive states for the element type.
445
- if ( pseudo ) {
446
- pseudo.forEach( ( pseudoSelector ) => {
447
- if ( elementStyles[ pseudoSelector ] ) {
448
- elementCSSRules.push(
449
- compileCSS(
450
- elementStyles[ pseudoSelector ],
451
- {
452
- selector: scopeSelector(
453
- baseElementSelector,
454
- `${ ELEMENTS[ elementType ] }${ pseudoSelector }`
455
- ),
456
- }
457
- )
458
- );
459
- }
460
- } );
461
- }
462
- }
400
+ elementCSSRules.push(
401
+ compileCSS( elementStyles, { selector } )
402
+ );
463
403
 
464
- // Process related elements e.g. h1-h6 for headings
465
- if ( elements ) {
466
- elements.forEach( ( element ) => {
467
- if ( blockElementStyles[ element ] ) {
404
+ // Process any interactive states for the element type.
405
+ if ( pseudo ) {
406
+ pseudo.forEach( ( pseudoSelector ) => {
407
+ if ( elementStyles[ pseudoSelector ] ) {
468
408
  elementCSSRules.push(
469
- compileCSS( blockElementStyles[ element ], {
409
+ compileCSS( elementStyles[ pseudoSelector ], {
470
410
  selector: scopeSelector(
471
411
  baseElementSelector,
472
- ELEMENTS[ element ]
412
+ `${ ELEMENTS[ elementType ] }${ pseudoSelector }`
473
413
  ),
474
414
  } )
475
415
  );
476
416
  }
477
417
  } );
478
418
  }
479
- } );
419
+ }
480
420
 
481
- return elementCSSRules.length > 0
482
- ? elementCSSRules.join( '' )
483
- : undefined;
484
- }, [ baseElementSelector, blockElementStyles, props.name ] );
485
-
486
- useStyleOverride( { css: styles } );
487
-
488
- return (
489
- <BlockListBlock
490
- { ...props }
491
- className={
492
- props.attributes.style?.elements
493
- ? classnames(
494
- props.className,
495
- blockElementsContainerIdentifier
496
- )
497
- : props.className
498
- }
499
- />
500
- );
501
- },
502
- 'withElementsStyles'
503
- );
421
+ // Process related elements e.g. h1-h6 for headings
422
+ if ( elements ) {
423
+ elements.forEach( ( element ) => {
424
+ if ( blockElementStyles[ element ] ) {
425
+ elementCSSRules.push(
426
+ compileCSS( blockElementStyles[ element ], {
427
+ selector: scopeSelector(
428
+ baseElementSelector,
429
+ ELEMENTS[ element ]
430
+ ),
431
+ } )
432
+ );
433
+ }
434
+ } );
435
+ }
436
+ } );
437
+
438
+ return elementCSSRules.length > 0
439
+ ? elementCSSRules.join( '' )
440
+ : undefined;
441
+ }, [ baseElementSelector, blockElementStyles, name ] );
442
+
443
+ useStyleOverride( { css: styles } );
444
+
445
+ return addSaveProps(
446
+ { className: blockElementsContainerIdentifier },
447
+ name,
448
+ { style },
449
+ skipSerializationPathsEdit
450
+ );
451
+ }
504
452
 
505
453
  addFilter(
506
454
  'blocks.registerBlockType',
@@ -513,21 +461,3 @@ addFilter(
513
461
  'core/style/addSaveProps',
514
462
  addSaveProps
515
463
  );
516
-
517
- addFilter(
518
- 'blocks.registerBlockType',
519
- 'core/style/addEditProps',
520
- addEditProps
521
- );
522
-
523
- addFilter(
524
- 'editor.BlockEdit',
525
- 'core/style/with-block-controls',
526
- withBlockStyleControls
527
- );
528
-
529
- addFilter(
530
- 'editor.BlockListBlock',
531
- 'core/editor/with-elements-styles',
532
- withElementsStyles
533
- );
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { render, screen } from '@testing-library/react';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -12,20 +7,11 @@ import {
12
7
  registerBlockType,
13
8
  unregisterBlockType,
14
9
  } from '@wordpress/blocks';
15
- import { SlotFillProvider } from '@wordpress/components';
16
10
 
17
11
  /**
18
12
  * Internal dependencies
19
13
  */
20
- import BlockControls from '../../components/block-controls';
21
- import BlockEdit from '../../components/block-edit';
22
- import BlockEditorProvider from '../../components/provider';
23
- import {
24
- getValidAlignments,
25
- withAlignmentControls,
26
- withDataAlign,
27
- addAssignedAlign,
28
- } from '../align';
14
+ import { getValidAlignments, addAssignedAlign } from '../align';
29
15
 
30
16
  const noop = () => {};
31
17
 
@@ -157,169 +143,6 @@ describe( 'align', () => {
157
143
  } );
158
144
  } );
159
145
 
160
- describe( 'withAlignControls', () => {
161
- const componentProps = {
162
- name: 'core/foo',
163
- attributes: {},
164
- isSelected: true,
165
- };
166
-
167
- it( 'should do nothing if no valid alignments', () => {
168
- registerBlockType( 'core/foo', blockSettings );
169
-
170
- const EnhancedComponent = withAlignmentControls(
171
- ( { wrapperProps } ) => <div { ...wrapperProps } />
172
- );
173
-
174
- render(
175
- <SlotFillProvider>
176
- <BlockEdit { ...componentProps }>
177
- <EnhancedComponent { ...componentProps } />
178
- </BlockEdit>
179
- <BlockControls.Slot group="block" />
180
- </SlotFillProvider>
181
- );
182
-
183
- expect(
184
- screen.queryByRole( 'button', {
185
- name: 'Align',
186
- expanded: false,
187
- } )
188
- ).not.toBeInTheDocument();
189
- } );
190
-
191
- it( 'should render toolbar controls if valid alignments', () => {
192
- registerBlockType( 'core/foo', {
193
- ...blockSettings,
194
- supports: {
195
- align: true,
196
- alignWide: false,
197
- },
198
- } );
199
-
200
- const EnhancedComponent = withAlignmentControls(
201
- ( { wrapperProps } ) => <div { ...wrapperProps } />
202
- );
203
-
204
- render(
205
- <SlotFillProvider>
206
- <BlockEdit { ...componentProps }>
207
- <EnhancedComponent { ...componentProps } />
208
- </BlockEdit>
209
- <BlockControls.Slot group="block" />
210
- </SlotFillProvider>
211
- );
212
-
213
- expect(
214
- screen.getAllByRole( 'button', {
215
- name: 'Align',
216
- expanded: false,
217
- } )
218
- ).toHaveLength( 2 );
219
- } );
220
- } );
221
-
222
- describe( 'withDataAlign', () => {
223
- it( 'should render with wrapper props', () => {
224
- registerBlockType( 'core/foo', {
225
- ...blockSettings,
226
- supports: {
227
- align: true,
228
- alignWide: true,
229
- },
230
- } );
231
-
232
- const EnhancedComponent = withDataAlign( ( { wrapperProps } ) => (
233
- <button { ...wrapperProps } />
234
- ) );
235
-
236
- render(
237
- <BlockEditorProvider
238
- settings={ { alignWide: true, supportsLayout: false } }
239
- value={ [] }
240
- >
241
- <EnhancedComponent
242
- attributes={ {
243
- align: 'wide',
244
- } }
245
- name="core/foo"
246
- />
247
- </BlockEditorProvider>
248
- );
249
-
250
- expect( screen.getByRole( 'button' ) ).toHaveAttribute(
251
- 'data-align',
252
- 'wide'
253
- );
254
- } );
255
-
256
- it( 'should not render wide/full wrapper props if wide controls are not enabled', () => {
257
- registerBlockType( 'core/foo', {
258
- ...blockSettings,
259
- supports: {
260
- align: true,
261
- alignWide: true,
262
- },
263
- } );
264
-
265
- const EnhancedComponent = withDataAlign( ( { wrapperProps } ) => (
266
- <button { ...wrapperProps } />
267
- ) );
268
-
269
- render(
270
- <BlockEditorProvider
271
- settings={ { alignWide: false } }
272
- value={ [] }
273
- >
274
- <EnhancedComponent
275
- name="core/foo"
276
- attributes={ {
277
- align: 'wide',
278
- } }
279
- />
280
- </BlockEditorProvider>
281
- );
282
-
283
- expect( screen.getByRole( 'button' ) ).not.toHaveAttribute(
284
- 'data-align',
285
- 'wide'
286
- );
287
- } );
288
-
289
- it( 'should not render invalid align', () => {
290
- registerBlockType( 'core/foo', {
291
- ...blockSettings,
292
- supports: {
293
- align: true,
294
- alignWide: false,
295
- },
296
- } );
297
-
298
- const EnhancedComponent = withDataAlign( ( { wrapperProps } ) => (
299
- <button { ...wrapperProps } />
300
- ) );
301
-
302
- render(
303
- <BlockEditorProvider
304
- settings={ { alignWide: true } }
305
- value={ [] }
306
- >
307
- <EnhancedComponent
308
- name="core/foo"
309
- attributes={ {
310
- align: 'wide',
311
- } }
312
- />
313
- </BlockEditorProvider>
314
- );
315
-
316
- expect( screen.getByRole( 'button' ) ).not.toHaveAttribute(
317
- 'data-align',
318
- 'wide'
319
- );
320
- } );
321
- } );
322
-
323
146
  describe( 'addAssignedAlign', () => {
324
147
  it( 'should do nothing if block does not support align', () => {
325
148
  registerBlockType( 'core/foo', blockSettings );
@@ -3,6 +3,8 @@
3
3
  */
4
4
  import { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';
5
5
  import { useMemo, useCallback } from '@wordpress/element';
6
+ import { useSelect } from '@wordpress/data';
7
+ import { pure } from '@wordpress/compose';
6
8
 
7
9
  /**
8
10
  * Internal dependencies
@@ -16,7 +18,8 @@ import {
16
18
  import { LINE_HEIGHT_SUPPORT_KEY } from './line-height';
17
19
  import { FONT_FAMILY_SUPPORT_KEY } from './font-family';
18
20
  import { FONT_SIZE_SUPPORT_KEY } from './font-size';
19
- import { cleanEmptyObject, useBlockSettings } from './utils';
21
+ import { cleanEmptyObject } from './utils';
22
+ import { store as blockEditorStore } from '../store';
20
23
 
21
24
  function omit( object, keys ) {
22
25
  return Object.fromEntries(
@@ -106,22 +109,18 @@ function TypographyInspectorControl( { children, resetAllFilter } ) {
106
109
  );
107
110
  }
108
111
 
109
- export function TypographyPanel( {
110
- clientId,
111
- name,
112
- attributes,
113
- setAttributes,
114
- __unstableParentLayout,
115
- } ) {
116
- const settings = useBlockSettings( name, __unstableParentLayout );
112
+ function TypographyPanelPure( { clientId, name, setAttributes, settings } ) {
113
+ function selector( select ) {
114
+ const { style, fontFamily, fontSize } =
115
+ select( blockEditorStore ).getBlockAttributes( clientId ) || {};
116
+ return { style, fontFamily, fontSize };
117
+ }
118
+ const { style, fontFamily, fontSize } = useSelect( selector, [ clientId ] );
117
119
  const isEnabled = useHasTypographyPanel( settings );
118
- const value = useMemo( () => {
119
- return attributesToStyle( {
120
- style: attributes.style,
121
- fontFamily: attributes.fontFamily,
122
- fontSize: attributes.fontSize,
123
- } );
124
- }, [ attributes.style, attributes.fontSize, attributes.fontFamily ] );
120
+ const value = useMemo(
121
+ () => attributesToStyle( { style, fontFamily, fontSize } ),
122
+ [ style, fontSize, fontFamily ]
123
+ );
125
124
 
126
125
  const onChange = ( newStyle ) => {
127
126
  setAttributes( styleToAttributes( newStyle ) );
@@ -148,6 +147,11 @@ export function TypographyPanel( {
148
147
  );
149
148
  }
150
149
 
150
+ // We don't want block controls to re-render when typing inside a block. `pure`
151
+ // will prevent re-renders unless props change, so only pass the needed props
152
+ // and not the whole attributes object.
153
+ export const TypographyPanel = pure( TypographyPanelPure );
154
+
151
155
  export const hasTypographySupport = ( blockName ) => {
152
156
  return TYPOGRAPHY_SUPPORT_KEYS.some( ( key ) =>
153
157
  hasBlockSupport( blockName, key )