@wordpress/block-editor 13.4.0 → 14.1.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 (533) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +20 -15
  3. package/build/autocompleters/block.js +1 -1
  4. package/build/autocompleters/block.js.map +1 -1
  5. package/build/components/block-breadcrumb/index.js +3 -1
  6. package/build/components/block-breadcrumb/index.js.map +1 -1
  7. package/build/components/block-draggable/index.js +2 -2
  8. package/build/components/block-draggable/index.js.map +1 -1
  9. package/build/components/block-list/use-block-props/index.js +2 -2
  10. package/build/components/block-list/use-block-props/index.js.map +1 -1
  11. package/build/components/block-list/use-block-props/use-block-refs.js +24 -32
  12. package/build/components/block-list/use-block-props/use-block-refs.js.map +1 -1
  13. package/build/components/block-list/use-in-between-inserter.js +11 -4
  14. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  15. package/build/components/block-mover/index.js +1 -2
  16. package/build/components/block-mover/index.js.map +1 -1
  17. package/build/components/block-popover/cover.js +1 -1
  18. package/build/components/block-popover/cover.js.map +1 -1
  19. package/build/components/block-popover/inbetween.js +2 -2
  20. package/build/components/block-popover/inbetween.js.map +1 -1
  21. package/build/components/block-popover/index.js +2 -2
  22. package/build/components/block-popover/index.js.map +1 -1
  23. package/build/components/block-settings-menu/block-mode-toggle.js +28 -34
  24. package/build/components/block-settings-menu/block-mode-toggle.js.map +1 -1
  25. package/build/components/block-tools/block-selection-button.js +1 -2
  26. package/build/components/block-tools/block-selection-button.js.map +1 -1
  27. package/build/components/block-tools/index.js +1 -1
  28. package/build/components/block-tools/index.js.map +1 -1
  29. package/build/components/block-tools/insertion-point.js +14 -3
  30. package/build/components/block-tools/insertion-point.js.map +1 -1
  31. package/build/components/block-tools/use-block-toolbar-popover-props.js +1 -1
  32. package/build/components/block-tools/use-block-toolbar-popover-props.js.map +1 -1
  33. package/build/components/block-tools/use-show-block-tools.js +2 -1
  34. package/build/components/block-tools/use-show-block-tools.js.map +1 -1
  35. package/build/components/block-tools/zoom-out-mode-inserters.js +22 -19
  36. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  37. package/build/components/block-tools/zoom-out-toolbar.js +0 -1
  38. package/build/components/block-tools/zoom-out-toolbar.js.map +1 -1
  39. package/build/components/border-radius-control/index.js +1 -0
  40. package/build/components/border-radius-control/index.js.map +1 -1
  41. package/build/components/child-layout-control/index.js +3 -1
  42. package/build/components/child-layout-control/index.js.map +1 -1
  43. package/build/components/convert-to-group-buttons/index.js +1 -1
  44. package/build/components/convert-to-group-buttons/index.js.map +1 -1
  45. package/build/components/date-format-picker/index.js +2 -0
  46. package/build/components/date-format-picker/index.js.map +1 -1
  47. package/build/components/dimensions-tool/scale-tool.js +1 -0
  48. package/build/components/dimensions-tool/scale-tool.js.map +1 -1
  49. package/build/components/font-appearance-control/index.js +3 -0
  50. package/build/components/font-appearance-control/index.js.map +1 -1
  51. package/build/components/font-family/index.js +15 -0
  52. package/build/components/font-family/index.js.map +1 -1
  53. package/build/components/global-styles/background-panel.js +153 -77
  54. package/build/components/global-styles/background-panel.js.map +1 -1
  55. package/build/components/global-styles/get-global-styles-changes.js +3 -1
  56. package/build/components/global-styles/get-global-styles-changes.js.map +1 -1
  57. package/build/components/global-styles/hooks.js +0 -7
  58. package/build/components/global-styles/hooks.js.map +1 -1
  59. package/build/components/global-styles/image-settings-panel.js +1 -0
  60. package/build/components/global-styles/image-settings-panel.js.map +1 -1
  61. package/build/components/global-styles/index.js +0 -6
  62. package/build/components/global-styles/index.js.map +1 -1
  63. package/build/components/global-styles/typography-panel.js +0 -1
  64. package/build/components/global-styles/typography-panel.js.map +1 -1
  65. package/build/components/global-styles/use-global-styles-output.js +59 -40
  66. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  67. package/build/components/global-styles/utils.js +80 -0
  68. package/build/components/global-styles/utils.js.map +1 -1
  69. package/build/components/grid/grid-item-movers.js +30 -26
  70. package/build/components/grid/grid-item-movers.js.map +1 -1
  71. package/build/components/grid/grid-item-resizer.js +14 -15
  72. package/build/components/grid/grid-item-resizer.js.map +1 -1
  73. package/build/components/grid/grid-visualizer.js +21 -6
  74. package/build/components/grid/grid-visualizer.js.map +1 -1
  75. package/build/components/grid/use-grid-layout-sync.js +56 -20
  76. package/build/components/grid/use-grid-layout-sync.js.map +1 -1
  77. package/build/components/height-control/index.js +1 -0
  78. package/build/components/height-control/index.js.map +1 -1
  79. package/build/components/iframe/index.js +2 -4
  80. package/build/components/iframe/index.js.map +1 -1
  81. package/build/components/image-editor/zoom-dropdown.js +11 -7
  82. package/build/components/image-editor/zoom-dropdown.js.map +1 -1
  83. package/build/components/inner-blocks/button-block-appender.js +8 -8
  84. package/build/components/inner-blocks/button-block-appender.js.map +1 -1
  85. package/build/components/inner-blocks/default-block-appender.js +7 -25
  86. package/build/components/inner-blocks/default-block-appender.js.map +1 -1
  87. package/build/components/inner-blocks/index.js +9 -11
  88. package/build/components/inner-blocks/index.js.map +1 -1
  89. package/build/components/inserter/category-tabs/index.js +29 -2
  90. package/build/components/inserter/category-tabs/index.js.map +1 -1
  91. package/build/components/inserter/library.js +4 -2
  92. package/build/components/inserter/library.js.map +1 -1
  93. package/build/components/inserter/menu.js +32 -14
  94. package/build/components/inserter/menu.js.map +1 -1
  95. package/build/components/inserter/quick-inserter.js +4 -0
  96. package/build/components/inserter/quick-inserter.js.map +1 -1
  97. package/build/components/line-height-control/index.js +3 -15
  98. package/build/components/line-height-control/index.js.map +1 -1
  99. package/build/components/link-control/search-input.js +0 -1
  100. package/build/components/link-control/search-input.js.map +1 -1
  101. package/build/components/media-placeholder/index.js +9 -4
  102. package/build/components/media-placeholder/index.js.map +1 -1
  103. package/build/components/media-replace-flow/index.js +3 -1
  104. package/build/components/media-replace-flow/index.js.map +1 -1
  105. package/build/components/media-upload/index.native.js +4 -1
  106. package/build/components/media-upload/index.native.js.map +1 -1
  107. package/build/components/multi-selection-inspector/index.js +12 -12
  108. package/build/components/multi-selection-inspector/index.js.map +1 -1
  109. package/build/components/resolution-tool/index.js +1 -0
  110. package/build/components/resolution-tool/index.js.map +1 -1
  111. package/build/components/skip-to-selected-block/index.js +4 -2
  112. package/build/components/skip-to-selected-block/index.js.map +1 -1
  113. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +8 -8
  114. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  115. package/build/components/text-alignment-control/index.js +13 -8
  116. package/build/components/text-alignment-control/index.js.map +1 -1
  117. package/build/components/text-decoration-control/index.js +13 -8
  118. package/build/components/text-decoration-control/index.js.map +1 -1
  119. package/build/components/text-transform-control/index.js +13 -8
  120. package/build/components/text-transform-control/index.js.map +1 -1
  121. package/build/components/url-input/button.js +0 -1
  122. package/build/components/url-input/button.js.map +1 -1
  123. package/build/components/url-input/index.js +1 -11
  124. package/build/components/url-input/index.js.map +1 -1
  125. package/build/components/url-popover/image-url-input-ui.js +2 -0
  126. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  127. package/build/components/url-popover/link-editor.js +0 -1
  128. package/build/components/url-popover/link-editor.js.map +1 -1
  129. package/build/components/use-block-drop-zone/index.js +42 -4
  130. package/build/components/use-block-drop-zone/index.js.map +1 -1
  131. package/build/components/use-on-block-drop/index.js +3 -6
  132. package/build/components/use-on-block-drop/index.js.map +1 -1
  133. package/build/components/use-resize-canvas/index.js +1 -3
  134. package/build/components/use-resize-canvas/index.js.map +1 -1
  135. package/build/components/use-settings/index.js +2 -1
  136. package/build/components/use-settings/index.js.map +1 -1
  137. package/build/components/writing-mode-control/index.js +13 -8
  138. package/build/components/writing-mode-control/index.js.map +1 -1
  139. package/build/hooks/background.js +19 -23
  140. package/build/hooks/background.js.map +1 -1
  141. package/build/hooks/block-bindings.js +209 -39
  142. package/build/hooks/block-bindings.js.map +1 -1
  143. package/build/hooks/block-hooks.js +1 -0
  144. package/build/hooks/block-hooks.js.map +1 -1
  145. package/build/hooks/block-style-variation.js +2 -2
  146. package/build/hooks/block-style-variation.js.map +1 -1
  147. package/build/hooks/contrast-checker.js +6 -6
  148. package/build/hooks/contrast-checker.js.map +1 -1
  149. package/build/hooks/duotone.js +3 -3
  150. package/build/hooks/duotone.js.map +1 -1
  151. package/build/hooks/index.js +7 -1
  152. package/build/hooks/index.js.map +1 -1
  153. package/build/hooks/line-height.js +0 -1
  154. package/build/hooks/line-height.js.map +1 -1
  155. package/build/hooks/spacing-visualizer.js +1 -1
  156. package/build/hooks/spacing-visualizer.js.map +1 -1
  157. package/build/hooks/use-bindings-attributes.js +4 -0
  158. package/build/hooks/use-bindings-attributes.js.map +1 -1
  159. package/build/hooks/use-zoom-out.js +1 -1
  160. package/build/hooks/use-zoom-out.js.map +1 -1
  161. package/build/hooks/utils.js +20 -0
  162. package/build/hooks/utils.js.map +1 -1
  163. package/build/index.js +7 -0
  164. package/build/index.js.map +1 -1
  165. package/build/layouts/constrained.js +1 -0
  166. package/build/layouts/constrained.js.map +1 -1
  167. package/build/layouts/flex.js +2 -0
  168. package/build/layouts/flex.js.map +1 -1
  169. package/build/layouts/grid.js +3 -0
  170. package/build/layouts/grid.js.map +1 -1
  171. package/build/private-apis.js +3 -2
  172. package/build/private-apis.js.map +1 -1
  173. package/build/store/actions.js +9 -1
  174. package/build/store/actions.js.map +1 -1
  175. package/build/store/private-selectors.js +30 -0
  176. package/build/store/private-selectors.js.map +1 -1
  177. package/build/store/reducer.js +10 -1
  178. package/build/store/reducer.js.map +1 -1
  179. package/build/store/selectors.js +4 -4
  180. package/build/store/selectors.js.map +1 -1
  181. package/build/utils/block-bindings.js +112 -0
  182. package/build/utils/block-bindings.js.map +1 -0
  183. package/build/utils/get-editor-region.js +1 -1
  184. package/build/utils/get-editor-region.js.map +1 -1
  185. package/build/utils/get-px-from-css-unit.js +1 -1
  186. package/build/utils/get-px-from-css-unit.js.map +1 -1
  187. package/build-module/autocompleters/block.js +1 -1
  188. package/build-module/autocompleters/block.js.map +1 -1
  189. package/build-module/components/block-breadcrumb/index.js +4 -2
  190. package/build-module/components/block-breadcrumb/index.js.map +1 -1
  191. package/build-module/components/block-draggable/index.js +3 -3
  192. package/build-module/components/block-draggable/index.js.map +1 -1
  193. package/build-module/components/block-list/use-block-props/index.js +2 -2
  194. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  195. package/build-module/components/block-list/use-block-props/use-block-refs.js +24 -34
  196. package/build-module/components/block-list/use-block-props/use-block-refs.js.map +1 -1
  197. package/build-module/components/block-list/use-in-between-inserter.js +11 -4
  198. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  199. package/build-module/components/block-mover/index.js +1 -2
  200. package/build-module/components/block-mover/index.js.map +1 -1
  201. package/build-module/components/block-popover/cover.js +1 -1
  202. package/build-module/components/block-popover/cover.js.map +1 -1
  203. package/build-module/components/block-popover/inbetween.js +1 -1
  204. package/build-module/components/block-popover/inbetween.js.map +1 -1
  205. package/build-module/components/block-popover/index.js +1 -1
  206. package/build-module/components/block-popover/index.js.map +1 -1
  207. package/build-module/components/block-settings-menu/block-mode-toggle.js +29 -34
  208. package/build-module/components/block-settings-menu/block-mode-toggle.js.map +1 -1
  209. package/build-module/components/block-tools/block-selection-button.js +1 -2
  210. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  211. package/build-module/components/block-tools/index.js +1 -1
  212. package/build-module/components/block-tools/index.js.map +1 -1
  213. package/build-module/components/block-tools/insertion-point.js +14 -3
  214. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  215. package/build-module/components/block-tools/use-block-toolbar-popover-props.js +1 -1
  216. package/build-module/components/block-tools/use-block-toolbar-popover-props.js.map +1 -1
  217. package/build-module/components/block-tools/use-show-block-tools.js +2 -1
  218. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -1
  219. package/build-module/components/block-tools/zoom-out-mode-inserters.js +23 -20
  220. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  221. package/build-module/components/block-tools/zoom-out-toolbar.js +0 -1
  222. package/build-module/components/block-tools/zoom-out-toolbar.js.map +1 -1
  223. package/build-module/components/border-radius-control/index.js +1 -0
  224. package/build-module/components/border-radius-control/index.js.map +1 -1
  225. package/build-module/components/child-layout-control/index.js +3 -1
  226. package/build-module/components/child-layout-control/index.js.map +1 -1
  227. package/build-module/components/convert-to-group-buttons/index.js +1 -1
  228. package/build-module/components/convert-to-group-buttons/index.js.map +1 -1
  229. package/build-module/components/date-format-picker/index.js +2 -0
  230. package/build-module/components/date-format-picker/index.js.map +1 -1
  231. package/build-module/components/dimensions-tool/scale-tool.js +1 -0
  232. package/build-module/components/dimensions-tool/scale-tool.js.map +1 -1
  233. package/build-module/components/font-appearance-control/index.js +3 -0
  234. package/build-module/components/font-appearance-control/index.js.map +1 -1
  235. package/build-module/components/font-family/index.js +14 -0
  236. package/build-module/components/font-family/index.js.map +1 -1
  237. package/build-module/components/global-styles/background-panel.js +156 -80
  238. package/build-module/components/global-styles/background-panel.js.map +1 -1
  239. package/build-module/components/global-styles/get-global-styles-changes.js +3 -1
  240. package/build-module/components/global-styles/get-global-styles-changes.js.map +1 -1
  241. package/build-module/components/global-styles/hooks.js +0 -6
  242. package/build-module/components/global-styles/hooks.js.map +1 -1
  243. package/build-module/components/global-styles/image-settings-panel.js +1 -0
  244. package/build-module/components/global-styles/image-settings-panel.js.map +1 -1
  245. package/build-module/components/global-styles/index.js +1 -1
  246. package/build-module/components/global-styles/index.js.map +1 -1
  247. package/build-module/components/global-styles/typography-panel.js +0 -1
  248. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  249. package/build-module/components/global-styles/use-global-styles-output.js +61 -42
  250. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  251. package/build-module/components/global-styles/utils.js +77 -0
  252. package/build-module/components/global-styles/utils.js.map +1 -1
  253. package/build-module/components/grid/grid-item-movers.js +30 -26
  254. package/build-module/components/grid/grid-item-movers.js.map +1 -1
  255. package/build-module/components/grid/grid-item-resizer.js +14 -15
  256. package/build-module/components/grid/grid-item-resizer.js.map +1 -1
  257. package/build-module/components/grid/grid-visualizer.js +21 -6
  258. package/build-module/components/grid/grid-visualizer.js.map +1 -1
  259. package/build-module/components/grid/use-grid-layout-sync.js +56 -20
  260. package/build-module/components/grid/use-grid-layout-sync.js.map +1 -1
  261. package/build-module/components/height-control/index.js +1 -0
  262. package/build-module/components/height-control/index.js.map +1 -1
  263. package/build-module/components/iframe/index.js +2 -4
  264. package/build-module/components/iframe/index.js.map +1 -1
  265. package/build-module/components/image-editor/zoom-dropdown.js +12 -8
  266. package/build-module/components/image-editor/zoom-dropdown.js.map +1 -1
  267. package/build-module/components/inner-blocks/button-block-appender.js +7 -6
  268. package/build-module/components/inner-blocks/button-block-appender.js.map +1 -1
  269. package/build-module/components/inner-blocks/default-block-appender.js +6 -23
  270. package/build-module/components/inner-blocks/default-block-appender.js.map +1 -1
  271. package/build-module/components/inner-blocks/index.js +9 -11
  272. package/build-module/components/inner-blocks/index.js.map +1 -1
  273. package/build-module/components/inserter/category-tabs/index.js +30 -3
  274. package/build-module/components/inserter/category-tabs/index.js.map +1 -1
  275. package/build-module/components/inserter/library.js +4 -2
  276. package/build-module/components/inserter/library.js.map +1 -1
  277. package/build-module/components/inserter/menu.js +32 -14
  278. package/build-module/components/inserter/menu.js.map +1 -1
  279. package/build-module/components/inserter/quick-inserter.js +5 -1
  280. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  281. package/build-module/components/line-height-control/index.js +3 -14
  282. package/build-module/components/line-height-control/index.js.map +1 -1
  283. package/build-module/components/link-control/search-input.js +0 -1
  284. package/build-module/components/link-control/search-input.js.map +1 -1
  285. package/build-module/components/media-placeholder/index.js +9 -4
  286. package/build-module/components/media-placeholder/index.js.map +1 -1
  287. package/build-module/components/media-replace-flow/index.js +3 -1
  288. package/build-module/components/media-replace-flow/index.js.map +1 -1
  289. package/build-module/components/media-upload/index.native.js +4 -1
  290. package/build-module/components/media-upload/index.native.js.map +1 -1
  291. package/build-module/components/multi-selection-inspector/index.js +12 -12
  292. package/build-module/components/multi-selection-inspector/index.js.map +1 -1
  293. package/build-module/components/resolution-tool/index.js +1 -0
  294. package/build-module/components/resolution-tool/index.js.map +1 -1
  295. package/build-module/components/skip-to-selected-block/index.js +5 -3
  296. package/build-module/components/skip-to-selected-block/index.js.map +1 -1
  297. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +8 -8
  298. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  299. package/build-module/components/text-alignment-control/index.js +13 -8
  300. package/build-module/components/text-alignment-control/index.js.map +1 -1
  301. package/build-module/components/text-decoration-control/index.js +13 -8
  302. package/build-module/components/text-decoration-control/index.js.map +1 -1
  303. package/build-module/components/text-transform-control/index.js +13 -8
  304. package/build-module/components/text-transform-control/index.js.map +1 -1
  305. package/build-module/components/url-input/button.js +0 -1
  306. package/build-module/components/url-input/button.js.map +1 -1
  307. package/build-module/components/url-input/index.js +1 -11
  308. package/build-module/components/url-input/index.js.map +1 -1
  309. package/build-module/components/url-popover/image-url-input-ui.js +2 -0
  310. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  311. package/build-module/components/url-popover/link-editor.js +0 -1
  312. package/build-module/components/url-popover/link-editor.js.map +1 -1
  313. package/build-module/components/use-block-drop-zone/index.js +42 -4
  314. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  315. package/build-module/components/use-on-block-drop/index.js +3 -6
  316. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  317. package/build-module/components/use-resize-canvas/index.js +1 -3
  318. package/build-module/components/use-resize-canvas/index.js.map +1 -1
  319. package/build-module/components/use-settings/index.js +2 -1
  320. package/build-module/components/use-settings/index.js.map +1 -1
  321. package/build-module/components/writing-mode-control/index.js +13 -8
  322. package/build-module/components/writing-mode-control/index.js.map +1 -1
  323. package/build-module/hooks/background.js +19 -23
  324. package/build-module/hooks/background.js.map +1 -1
  325. package/build-module/hooks/block-bindings.js +214 -43
  326. package/build-module/hooks/block-bindings.js.map +1 -1
  327. package/build-module/hooks/block-hooks.js +1 -0
  328. package/build-module/hooks/block-hooks.js.map +1 -1
  329. package/build-module/hooks/block-style-variation.js +3 -3
  330. package/build-module/hooks/block-style-variation.js.map +1 -1
  331. package/build-module/hooks/contrast-checker.js +7 -7
  332. package/build-module/hooks/contrast-checker.js.map +1 -1
  333. package/build-module/hooks/duotone.js +4 -4
  334. package/build-module/hooks/duotone.js.map +1 -1
  335. package/build-module/hooks/index.js +2 -1
  336. package/build-module/hooks/index.js.map +1 -1
  337. package/build-module/hooks/line-height.js +0 -1
  338. package/build-module/hooks/line-height.js.map +1 -1
  339. package/build-module/hooks/spacing-visualizer.js +1 -1
  340. package/build-module/hooks/spacing-visualizer.js.map +1 -1
  341. package/build-module/hooks/use-bindings-attributes.js +3 -0
  342. package/build-module/hooks/use-bindings-attributes.js.map +1 -1
  343. package/build-module/hooks/use-zoom-out.js +1 -1
  344. package/build-module/hooks/use-zoom-out.js.map +1 -1
  345. package/build-module/hooks/utils.js +19 -0
  346. package/build-module/hooks/utils.js.map +1 -1
  347. package/build-module/index.js +1 -1
  348. package/build-module/index.js.map +1 -1
  349. package/build-module/layouts/constrained.js +1 -0
  350. package/build-module/layouts/constrained.js.map +1 -1
  351. package/build-module/layouts/flex.js +2 -0
  352. package/build-module/layouts/flex.js.map +1 -1
  353. package/build-module/layouts/grid.js +3 -0
  354. package/build-module/layouts/grid.js.map +1 -1
  355. package/build-module/private-apis.js +4 -3
  356. package/build-module/private-apis.js.map +1 -1
  357. package/build-module/store/actions.js +9 -1
  358. package/build-module/store/actions.js.map +1 -1
  359. package/build-module/store/private-selectors.js +27 -0
  360. package/build-module/store/private-selectors.js.map +1 -1
  361. package/build-module/store/reducer.js +9 -1
  362. package/build-module/store/reducer.js.map +1 -1
  363. package/build-module/store/selectors.js +4 -4
  364. package/build-module/store/selectors.js.map +1 -1
  365. package/build-module/utils/block-bindings.js +105 -0
  366. package/build-module/utils/block-bindings.js.map +1 -0
  367. package/build-module/utils/get-editor-region.js +1 -1
  368. package/build-module/utils/get-editor-region.js.map +1 -1
  369. package/build-module/utils/get-px-from-css-unit.js +1 -1
  370. package/build-module/utils/get-px-from-css-unit.js.map +1 -1
  371. package/build-style/content-rtl.css +12 -26
  372. package/build-style/content.css +12 -26
  373. package/build-style/default-editor-styles-rtl.css +5 -2
  374. package/build-style/default-editor-styles.css +5 -2
  375. package/build-style/style-rtl.css +123 -83
  376. package/build-style/style.css +123 -83
  377. package/package.json +32 -32
  378. package/src/autocompleters/block.js +2 -1
  379. package/src/autocompleters/style.scss +4 -0
  380. package/src/components/block-breadcrumb/index.js +4 -2
  381. package/src/components/block-canvas/style.scss +1 -0
  382. package/src/components/block-draggable/index.js +3 -3
  383. package/src/components/block-list/content.scss +5 -13
  384. package/src/components/block-list/use-block-props/index.js +2 -2
  385. package/src/components/block-list/use-block-props/use-block-refs.js +27 -43
  386. package/src/components/block-list/use-in-between-inserter.js +17 -5
  387. package/src/components/block-mover/index.js +5 -2
  388. package/src/components/block-popover/cover.js +1 -1
  389. package/src/components/block-popover/inbetween.js +1 -1
  390. package/src/components/block-popover/index.js +1 -1
  391. package/src/components/block-settings-menu/block-mode-toggle.js +28 -31
  392. package/src/components/block-settings-menu/test/block-mode-toggle.js +26 -23
  393. package/src/components/block-tools/block-selection-button.js +1 -2
  394. package/src/components/block-tools/index.js +5 -6
  395. package/src/components/block-tools/insertion-point.js +11 -0
  396. package/src/components/block-tools/style.scss +1 -1
  397. package/src/components/block-tools/use-block-toolbar-popover-props.js +1 -1
  398. package/src/components/block-tools/use-show-block-tools.js +4 -1
  399. package/src/components/block-tools/zoom-out-mode-inserters.js +21 -19
  400. package/src/components/block-tools/zoom-out-toolbar.js +0 -1
  401. package/src/components/block-variation-transforms/style.scss +1 -1
  402. package/src/components/border-radius-control/index.js +1 -0
  403. package/src/components/border-radius-control/style.scss +0 -10
  404. package/src/components/button-block-appender/content.scss +1 -1
  405. package/src/components/child-layout-control/index.js +2 -0
  406. package/src/components/color-palette/test/__snapshots__/control.js.snap +2 -2
  407. package/src/components/colors-gradients/test/control.js +3 -2
  408. package/src/components/convert-to-group-buttons/index.js +1 -1
  409. package/src/components/date-format-picker/index.js +2 -0
  410. package/src/components/dimensions-tool/scale-tool.js +1 -0
  411. package/src/components/font-appearance-control/index.js +3 -0
  412. package/src/components/font-family/README.md +17 -0
  413. package/src/components/font-family/index.js +19 -0
  414. package/src/components/font-family/stories/index.story.js +54 -0
  415. package/src/components/global-styles/background-panel.js +180 -93
  416. package/src/components/global-styles/get-global-styles-changes.js +4 -1
  417. package/src/components/global-styles/hooks.js +0 -5
  418. package/src/components/global-styles/image-settings-panel.js +1 -0
  419. package/src/components/global-styles/index.js +0 -1
  420. package/src/components/global-styles/style.scss +13 -12
  421. package/src/components/global-styles/test/use-global-styles-output.js +68 -7
  422. package/src/components/global-styles/test/utils.js +120 -0
  423. package/src/components/global-styles/typography-panel.js +0 -1
  424. package/src/components/global-styles/use-global-styles-output.js +71 -53
  425. package/src/components/global-styles/utils.js +90 -0
  426. package/src/components/grid/grid-item-movers.js +46 -44
  427. package/src/components/grid/grid-item-resizer.js +11 -17
  428. package/src/components/grid/grid-visualizer.js +23 -8
  429. package/src/components/grid/style.scss +60 -10
  430. package/src/components/grid/use-grid-layout-sync.js +68 -14
  431. package/src/components/height-control/index.js +1 -0
  432. package/src/components/iframe/content.scss +2 -2
  433. package/src/components/iframe/index.js +1 -3
  434. package/src/components/image-editor/zoom-dropdown.js +17 -9
  435. package/src/components/inner-blocks/button-block-appender.js +5 -7
  436. package/src/components/inner-blocks/default-block-appender.js +4 -23
  437. package/src/components/inner-blocks/index.js +10 -9
  438. package/src/components/inserter/category-tabs/index.js +35 -2
  439. package/src/components/inserter/library.js +2 -0
  440. package/src/components/inserter/menu.js +34 -29
  441. package/src/components/inserter/quick-inserter.js +4 -1
  442. package/src/components/inserter/style.scss +17 -12
  443. package/src/components/inserter-list-item/style.scss +1 -0
  444. package/src/components/inspector-controls/README.md +5 -0
  445. package/src/components/line-height-control/README.md +4 -5
  446. package/src/components/line-height-control/index.js +4 -21
  447. package/src/components/line-height-control/stories/index.story.js +0 -1
  448. package/src/components/line-height-control/test/index.js +1 -7
  449. package/src/components/link-control/search-input.js +0 -1
  450. package/src/components/link-control/style.scss +1 -1
  451. package/src/components/media-placeholder/index.js +12 -7
  452. package/src/components/media-replace-flow/README.md +7 -0
  453. package/src/components/media-replace-flow/index.js +3 -1
  454. package/src/components/media-upload/README.md +2 -0
  455. package/src/components/media-upload/index.native.js +2 -0
  456. package/src/components/multi-selection-inspector/index.js +8 -9
  457. package/src/components/resolution-tool/index.js +1 -0
  458. package/src/components/responsive-block-control/README.md +1 -0
  459. package/src/components/responsive-block-control/test/index.js +6 -1
  460. package/src/components/skip-to-selected-block/index.js +5 -3
  461. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +11 -10
  462. package/src/components/spacing-sizes-control/style.scss +16 -16
  463. package/src/components/tabbed-sidebar/style.scss +1 -19
  464. package/src/components/text-alignment-control/index.js +20 -8
  465. package/src/components/text-decoration-control/index.js +20 -8
  466. package/src/components/text-decoration-control/stories/index.story.js +0 -4
  467. package/src/components/text-transform-control/index.js +20 -8
  468. package/src/components/text-transform-control/stories/index.story.js +0 -4
  469. package/src/components/url-input/README.md +0 -5
  470. package/src/components/url-input/button.js +0 -1
  471. package/src/components/url-input/index.js +1 -15
  472. package/src/components/url-input/style.scss +2 -2
  473. package/src/components/url-popover/image-url-input-ui.js +2 -0
  474. package/src/components/url-popover/link-editor.js +0 -1
  475. package/src/components/use-block-drop-zone/index.js +86 -16
  476. package/src/components/use-on-block-drop/index.js +1 -9
  477. package/src/components/use-resize-canvas/index.js +1 -3
  478. package/src/components/use-settings/index.js +2 -1
  479. package/src/components/writing-mode-control/index.js +20 -8
  480. package/src/hooks/background.js +21 -27
  481. package/src/hooks/block-bindings.js +248 -54
  482. package/src/hooks/block-bindings.scss +13 -2
  483. package/src/hooks/block-hooks.js +1 -0
  484. package/src/hooks/block-hooks.scss +1 -0
  485. package/src/hooks/block-style-variation.js +3 -3
  486. package/src/hooks/contrast-checker.js +7 -7
  487. package/src/hooks/duotone.js +4 -4
  488. package/src/hooks/index.js +2 -1
  489. package/src/hooks/line-height.js +0 -1
  490. package/src/hooks/spacing-visualizer.js +1 -1
  491. package/src/hooks/test/background.js +60 -0
  492. package/src/hooks/use-bindings-attributes.js +4 -0
  493. package/src/hooks/use-editor-wrapper-styles.native.scss +1 -0
  494. package/src/hooks/use-zoom-out.js +1 -1
  495. package/src/hooks/utils.js +14 -1
  496. package/src/index.js +1 -0
  497. package/src/layouts/constrained.js +1 -0
  498. package/src/layouts/flex.js +2 -0
  499. package/src/layouts/grid.js +3 -0
  500. package/src/private-apis.js +3 -2
  501. package/src/store/actions.js +13 -5
  502. package/src/store/private-selectors.js +36 -0
  503. package/src/store/reducer.js +7 -0
  504. package/src/store/selectors.js +4 -4
  505. package/src/store/test/private-selectors.js +89 -0
  506. package/src/style.scss +1 -2
  507. package/src/utils/block-bindings.js +98 -0
  508. package/src/utils/get-editor-region.js +1 -1
  509. package/src/utils/get-px-from-css-unit.js +1 -1
  510. package/src/utils/test/transform-styles.js +49 -0
  511. package/tsconfig.tsbuildinfo +1 -1
  512. package/build/components/global-styles/theme-file-uri-utils.js +0 -80
  513. package/build/components/global-styles/theme-file-uri-utils.js.map +0 -1
  514. package/build/components/inner-blocks/with-client-id.js +0 -28
  515. package/build/components/inner-blocks/with-client-id.js.map +0 -1
  516. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +0 -30
  517. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +0 -1
  518. package/build/components/segmented-text-control/index.js +0 -63
  519. package/build/components/segmented-text-control/index.js.map +0 -1
  520. package/build-module/components/global-styles/theme-file-uri-utils.js +0 -73
  521. package/build-module/components/global-styles/theme-file-uri-utils.js.map +0 -1
  522. package/build-module/components/inner-blocks/with-client-id.js +0 -21
  523. package/build-module/components/inner-blocks/with-client-id.js.map +0 -1
  524. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +0 -23
  525. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +0 -1
  526. package/build-module/components/segmented-text-control/index.js +0 -58
  527. package/build-module/components/segmented-text-control/index.js.map +0 -1
  528. package/src/components/global-styles/test/theme-file-uri-utils.js +0 -66
  529. package/src/components/global-styles/theme-file-uri-utils.js +0 -77
  530. package/src/components/inner-blocks/with-client-id.js +0 -19
  531. package/src/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +0 -25
  532. package/src/components/segmented-text-control/index.js +0 -63
  533. package/src/components/segmented-text-control/style.scss +0 -15
@@ -14,7 +14,7 @@ import isShallowEqual from '@wordpress/is-shallow-equal';
14
14
  * Internal dependencies
15
15
  */
16
16
  import BlockPopoverCover from '../components/block-popover/cover';
17
- import { __unstableUseBlockElement as useBlockElement } from '../components/block-list/use-block-props/use-block-refs';
17
+ import { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';
18
18
 
19
19
  function SpacingVisualizer( { clientId, value, computeStyle, forceShow } ) {
20
20
  const blockElement = useBlockElement( clientId );
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import {
5
+ setBackgroundStyleDefaults,
6
+ BACKGROUND_BLOCK_DEFAULT_VALUES,
7
+ } from '../background';
8
+
9
+ describe( 'background', () => {
10
+ describe( 'setBackgroundStyleDefaults', () => {
11
+ const backgroundStyles = {
12
+ backgroundImage: { id: 123, url: 'image.png' },
13
+ };
14
+ const backgroundStylesContain = {
15
+ backgroundImage: { id: 123, url: 'image.png' },
16
+ backgroundSize: 'contain',
17
+ };
18
+ const backgroundStylesNoURL = { backgroundImage: { id: 123 } };
19
+ it.each( [
20
+ [
21
+ 'return background size default',
22
+ backgroundStyles,
23
+ {
24
+ backgroundSize:
25
+ BACKGROUND_BLOCK_DEFAULT_VALUES.backgroundSize,
26
+ },
27
+ ],
28
+ [ 'return early if no styles are passed', undefined, undefined ],
29
+ [
30
+ 'return early if images has no id',
31
+ backgroundStylesNoURL,
32
+ undefined,
33
+ ],
34
+ [
35
+ 'return early if images has no URL',
36
+ backgroundStylesNoURL,
37
+ undefined,
38
+ ],
39
+ [
40
+ 'return background position default',
41
+ backgroundStylesContain,
42
+ {
43
+ backgroundPosition:
44
+ BACKGROUND_BLOCK_DEFAULT_VALUES.backgroundPosition,
45
+ },
46
+ ],
47
+ [
48
+ 'not apply background position value if one already exists in styles',
49
+ {
50
+ ...backgroundStylesContain,
51
+ backgroundPosition: 'center',
52
+ },
53
+ undefined,
54
+ ],
55
+ ] )( 'should %s', ( message, styles, expected ) => {
56
+ const result = setBackgroundStyleDefaults( styles );
57
+ expect( result ).toEqual( expected );
58
+ } );
59
+ } );
60
+ } );
@@ -91,6 +91,10 @@ export function canBindAttribute( blockName, attributeName ) {
91
91
  );
92
92
  }
93
93
 
94
+ export function getBindableAttributes( blockName ) {
95
+ return BLOCK_BINDINGS_ALLOWED_BLOCKS[ blockName ];
96
+ }
97
+
94
98
  export const withBlockBindingSupport = createHigherOrderComponent(
95
99
  ( BlockEdit ) => ( props ) => {
96
100
  const registry = useRegistry();
@@ -5,6 +5,7 @@
5
5
  }
6
6
 
7
7
  .use-editor-wrapper-styles--reversed {
8
+ /* stylelint-disable-next-line declaration-property-value-allowed-list -- This should be refactored to not use the column-reverse value. */
8
9
  flex-direction: column-reverse;
9
10
  width: 100%;
10
11
  max-width: 580;
@@ -49,5 +49,5 @@ export function useZoomOut( zoomOut = true ) {
49
49
  ) {
50
50
  __unstableSetEditorMode( originalEditingMode.current );
51
51
  }
52
- }, [ __unstableSetEditorMode, zoomOut, mode ] );
52
+ }, [ __unstableGetEditorMode, __unstableSetEditorMode, zoomOut ] ); // Mode is deliberately excluded from the dependencies so that the effect does not run when mode changes.
53
53
  }
@@ -135,7 +135,20 @@ export function shouldSkipSerialization(
135
135
 
136
136
  const pendingStyleOverrides = new WeakMap();
137
137
 
138
- export function useStyleOverride( {
138
+ /**
139
+ * Override a block editor settings style. Leave the ID blank to create a new
140
+ * style.
141
+ *
142
+ * @param {Object} override Override object.
143
+ * @param {?string} override.id Id of the style override, leave blank to create
144
+ * a new style.
145
+ * @param {string} override.css CSS to apply.
146
+ */
147
+ export function useStyleOverride( { id, css } ) {
148
+ return usePrivateStyleOverride( { id, css } );
149
+ }
150
+
151
+ export function usePrivateStyleOverride( {
139
152
  id,
140
153
  css,
141
154
  assets,
package/src/index.js CHANGED
@@ -14,6 +14,7 @@ export {
14
14
  getShadowClassesAndStyles as __experimentalGetShadowClassesAndStyles,
15
15
  useCachedTruthy,
16
16
  useZoomOut,
17
+ useStyleOverride,
17
18
  } from './hooks';
18
19
  export * from './components';
19
20
  export * from './elements';
@@ -125,6 +125,7 @@ export default {
125
125
  ) }
126
126
  { allowJustification && (
127
127
  <ToggleGroupControl
128
+ __next40pxDefaultSize
128
129
  __nextHasNoMarginBottom
129
130
  label={ __( 'Justification' ) }
130
131
  value={ justifyContent }
@@ -325,6 +325,7 @@ function FlexLayoutJustifyContentControl( {
325
325
 
326
326
  return (
327
327
  <ToggleGroupControl
328
+ __next40pxDefaultSize
328
329
  __nextHasNoMarginBottom
329
330
  label={ __( 'Justification' ) }
330
331
  value={ justifyContent }
@@ -370,6 +371,7 @@ function OrientationControl( { layout, onChange } ) {
370
371
  } = layout;
371
372
  return (
372
373
  <ToggleGroupControl
374
+ __next40pxDefaultSize
373
375
  __nextHasNoMarginBottom
374
376
  className="block-editor-hooks__flex-layout-orientation-controls"
375
377
  label={ __( 'Orientation' ) }
@@ -264,6 +264,7 @@ function GridLayoutMinimumWidthControl( { layout, onChange } ) {
264
264
  </FlexItem>
265
265
  <FlexItem isBlock>
266
266
  <RangeControl
267
+ __next40pxDefaultSize
267
268
  __nextHasNoMarginBottom
268
269
  onChange={ handleSliderChange }
269
270
  value={ quantity || 0 }
@@ -368,6 +369,7 @@ function GridLayoutColumnsAndRowsControl( {
368
369
  />
369
370
  ) : (
370
371
  <RangeControl
372
+ __next40pxDefaultSize
371
373
  __nextHasNoMarginBottom
372
374
  value={ columnCount ?? 0 }
373
375
  onChange={ ( value ) =>
@@ -449,6 +451,7 @@ function GridLayoutTypeControl( { layout, onChange } ) {
449
451
 
450
452
  return (
451
453
  <ToggleGroupControl
454
+ __next40pxDefaultSize
452
455
  __nextHasNoMarginBottom
453
456
  label={ __( 'Grid item position' ) }
454
457
  value={ gridPlacement }
@@ -16,7 +16,7 @@ import {
16
16
  import { PrivateListView } from './components/list-view';
17
17
  import BlockInfo from './components/block-info-slot-fill';
18
18
  import { useHasBlockToolbar } from './components/block-toolbar/use-has-block-toolbar';
19
- import { cleanEmptyObject, useStyleOverride } from './hooks/utils';
19
+ import { cleanEmptyObject } from './hooks/utils';
20
20
  import BlockQuickNavigation from './components/block-quick-navigation';
21
21
  import { LayoutStyle } from './components/block-list/layout';
22
22
  import { BlockRemovalWarningModal } from './components/block-removal-warning-modal';
@@ -47,6 +47,7 @@ import { PrivatePublishDateTimePicker } from './components/publish-date-time-pic
47
47
  import useSpacingSizes from './components/spacing-sizes-control/hooks/use-spacing-sizes';
48
48
  import useBlockDisplayTitle from './components/block-title/use-block-display-title';
49
49
  import TabbedSidebar from './components/tabbed-sidebar';
50
+ import { useBlockBindingsUtils } from './utils/block-bindings';
50
51
 
51
52
  /**
52
53
  * Private @wordpress/block-editor APIs.
@@ -68,7 +69,6 @@ lock( privateApis, {
68
69
  BlockInfo,
69
70
  useHasBlockToolbar,
70
71
  cleanEmptyObject,
71
- useStyleOverride,
72
72
  BlockQuickNavigation,
73
73
  LayoutStyle,
74
74
  BlockRemovalWarningModal,
@@ -93,4 +93,5 @@ lock( privateApis, {
93
93
  useBlockDisplayTitle,
94
94
  __unstableBlockStyleVariationOverridesWithConfig,
95
95
  setBackgroundStyleDefaults,
96
+ useBlockBindingsUtils,
96
97
  } );
@@ -1683,11 +1683,19 @@ export const __unstableSetEditorMode =
1683
1683
  if ( sectionRootClientId ) {
1684
1684
  const sectionClientIds =
1685
1685
  select.getBlockOrder( sectionRootClientId );
1686
- sectionClientId = select
1687
- .getBlockParents( firstSelectedClientId )
1688
- .find( ( parent ) =>
1689
- sectionClientIds.includes( parent )
1690
- );
1686
+
1687
+ // If the selected block is a section block, use it.
1688
+ if ( sectionClientIds?.includes( firstSelectedClientId ) ) {
1689
+ sectionClientId = firstSelectedClientId;
1690
+ } else {
1691
+ // If the selected block is not a section block, find
1692
+ // the parent section that contains the selected block.
1693
+ sectionClientId = select
1694
+ .getBlockParents( firstSelectedClientId )
1695
+ .find( ( parent ) =>
1696
+ sectionClientIds.includes( parent )
1697
+ );
1698
+ }
1691
1699
  } else {
1692
1700
  sectionClientId = select.getBlockHierarchyRootClientId(
1693
1701
  firstSelectedClientId
@@ -511,3 +511,39 @@ export function getTemporarilyEditingAsBlocks( state ) {
511
511
  export function getTemporarilyEditingFocusModeToRevert( state ) {
512
512
  return state.temporarilyEditingFocusModeRevert;
513
513
  }
514
+
515
+ export function getInserterSearchInputRef( state ) {
516
+ return state.inserterSearchInputRef;
517
+ }
518
+
519
+ /**
520
+ * Returns the style attributes of multiple blocks.
521
+ *
522
+ * @param {Object} state Global application state.
523
+ * @param {string[]} clientIds An array of block client IDs.
524
+ *
525
+ * @return {Object} An object where keys are client IDs and values are the corresponding block styles or undefined.
526
+ */
527
+ export const getBlockStyles = createSelector(
528
+ ( state, clientIds ) =>
529
+ clientIds.reduce( ( styles, clientId ) => {
530
+ styles[ clientId ] = state.blocks.attributes.get( clientId )?.style;
531
+ return styles;
532
+ }, {} ),
533
+ ( state, clientIds ) => [
534
+ ...clientIds.map(
535
+ ( clientId ) => state.blocks.attributes.get( clientId )?.style
536
+ ),
537
+ ]
538
+ );
539
+
540
+ /**
541
+ * Returns whether zoom out mode is enabled.
542
+ *
543
+ * @param {Object} state Editor state.
544
+ *
545
+ * @return {boolean} Is zoom out mode enabled.
546
+ */
547
+ export function isZoomOutMode( state ) {
548
+ return state.editorMode === 'zoom-out';
549
+ }
@@ -1624,6 +1624,8 @@ export function insertionPoint( state = null, action ) {
1624
1624
  }
1625
1625
 
1626
1626
  case 'HIDE_INSERTION_POINT':
1627
+ case 'CLEAR_SELECTED_BLOCK':
1628
+ case 'SELECT_BLOCK':
1627
1629
  return null;
1628
1630
  }
1629
1631
 
@@ -2085,6 +2087,10 @@ export function hoveredBlockClientId( state = false, action ) {
2085
2087
  return state;
2086
2088
  }
2087
2089
 
2090
+ export function inserterSearchInputRef( state = { current: null } ) {
2091
+ return state;
2092
+ }
2093
+
2088
2094
  const combinedReducers = combineReducers( {
2089
2095
  blocks,
2090
2096
  isDragging,
@@ -2118,6 +2124,7 @@ const combinedReducers = combineReducers( {
2118
2124
  openedBlockSettingsMenu,
2119
2125
  registeredInserterMediaCategories,
2120
2126
  hoveredBlockClientId,
2127
+ inserterSearchInputRef,
2121
2128
  } );
2122
2129
 
2123
2130
  function withAutomaticChangeReset( reducer ) {
@@ -334,8 +334,8 @@ export const getGlobalBlockCount = createSelector(
334
334
  /**
335
335
  * Returns all blocks that match a blockName. Results include nested blocks.
336
336
  *
337
- * @param {Object} state Global application state.
338
- * @param {?string} blockName Optional block name, if not specified, returns an empty array.
337
+ * @param {Object} state Global application state.
338
+ * @param {string[]} blockName Block name(s) for which clientIds are to be returned.
339
339
  *
340
340
  * @return {Array} Array of clientIds of blocks with name equal to blockName.
341
341
  */
@@ -362,8 +362,8 @@ export const getBlocksByName = createSelector(
362
362
  *
363
363
  * @deprecated
364
364
  *
365
- * @param {Object} state Global application state.
366
- * @param {?string} blockName Optional block name, if not specified, returns an empty array.
365
+ * @param {Object} state Global application state.
366
+ * @param {string[]} blockName Block name(s) for which clientIds are to be returned.
367
367
  *
368
368
  * @return {Array} Array of clientIds of blocks with name equal to blockName.
369
369
  */
@@ -9,6 +9,7 @@ import {
9
9
  getEnabledBlockParents,
10
10
  getExpandedBlock,
11
11
  isDragging,
12
+ getBlockStyles,
12
13
  } from '../private-selectors';
13
14
  import { getBlockEditingMode } from '../selectors';
14
15
 
@@ -509,4 +510,92 @@ describe( 'private selectors', () => {
509
510
  );
510
511
  } );
511
512
  } );
513
+
514
+ describe( 'getBlockStyles', () => {
515
+ it( 'should return an empty object when no client IDs are provided', () => {
516
+ const state = {
517
+ blocks: {
518
+ attributes: new Map(),
519
+ },
520
+ };
521
+ const result = getBlockStyles( state, [] );
522
+ expect( result ).toEqual( {} );
523
+ } );
524
+
525
+ it( 'should return styles for a single block', () => {
526
+ const state = {
527
+ blocks: {
528
+ attributes: new Map( [
529
+ [ 'block-1', { style: { color: 'red' } } ],
530
+ ] ),
531
+ },
532
+ };
533
+ const result = getBlockStyles( state, [ 'block-1' ] );
534
+ expect( result ).toEqual( {
535
+ 'block-1': { color: 'red' },
536
+ } );
537
+ } );
538
+
539
+ it( 'should return styles for multiple blocks', () => {
540
+ const state = {
541
+ blocks: {
542
+ attributes: new Map( [
543
+ [ 'block-1', { style: { color: 'red' } } ],
544
+ [ 'block-2', { style: { fontSize: '16px' } } ],
545
+ [ 'block-3', { style: { margin: '10px' } } ],
546
+ ] ),
547
+ },
548
+ };
549
+ const result = getBlockStyles( state, [
550
+ 'block-1',
551
+ 'block-2',
552
+ 'block-3',
553
+ ] );
554
+ expect( result ).toEqual( {
555
+ 'block-1': { color: 'red' },
556
+ 'block-2': { fontSize: '16px' },
557
+ 'block-3': { margin: '10px' },
558
+ } );
559
+ } );
560
+
561
+ it( 'should return undefined for blocks without styles', () => {
562
+ const state = {
563
+ blocks: {
564
+ attributes: new Map( [
565
+ [ 'block-1', { style: { color: 'red' } } ],
566
+ [ 'block-2', {} ],
567
+ [ 'block-3', { style: { margin: '10px' } } ],
568
+ ] ),
569
+ },
570
+ };
571
+ const result = getBlockStyles( state, [
572
+ 'block-1',
573
+ 'block-2',
574
+ 'block-3',
575
+ ] );
576
+ expect( result ).toEqual( {
577
+ 'block-1': { color: 'red' },
578
+ 'block-2': undefined,
579
+ 'block-3': { margin: '10px' },
580
+ } );
581
+ } );
582
+
583
+ it( 'should return undefined for non-existent blocks', () => {
584
+ const state = {
585
+ blocks: {
586
+ attributes: new Map( [
587
+ [ 'block-1', { style: { color: 'red' } } ],
588
+ ] ),
589
+ },
590
+ };
591
+ const result = getBlockStyles( state, [
592
+ 'block-1',
593
+ 'non-existent-block',
594
+ ] );
595
+ expect( result ).toEqual( {
596
+ 'block-1': { color: 'red' },
597
+ 'non-existent-block': undefined,
598
+ } );
599
+ } );
600
+ } );
512
601
  } );
package/src/style.scss CHANGED
@@ -40,14 +40,13 @@
40
40
  @import "./components/multi-selection-inspector/style.scss";
41
41
  @import "./components/responsive-block-control/style.scss";
42
42
  @import "./components/rich-text/style.scss";
43
- @import "./components/segmented-text-control/style.scss";
44
43
  @import "./components/skip-to-selected-block/style.scss";
45
44
  @import "./components/tabbed-sidebar/style.scss";
46
45
  @import "./components/tool-selector/style.scss";
47
46
  @import "./components/url-input/style.scss";
48
47
  @import "./components/url-popover/style.scss";
49
- @import "./hooks/block-bindings.scss";
50
48
  @import "./hooks/block-hooks.scss";
49
+ @import "./hooks/block-bindings.scss";
51
50
  @import "./hooks/border.scss";
52
51
  @import "./hooks/color.scss";
53
52
  @import "./hooks/dimensions.scss";
@@ -0,0 +1,98 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useDispatch, useSelect } from '@wordpress/data';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { store as blockEditorStore } from '../store';
10
+ import { useBlockEditContext } from '../components/block-edit';
11
+
12
+ export function useBlockBindingsUtils() {
13
+ const { clientId } = useBlockEditContext();
14
+ const { updateBlockAttributes } = useDispatch( blockEditorStore );
15
+ const { getBlockAttributes } = useSelect( blockEditorStore );
16
+
17
+ /**
18
+ * Updates the value of the bindings connected to block attributes.
19
+ * It removes the binding when the new value is `undefined`.
20
+ *
21
+ * @param {Object} bindings Bindings including the attributes to update and the new object.
22
+ * @param {string} bindings.source The source name to connect to.
23
+ * @param {Object} [bindings.args] Object containing the arguments needed by the source.
24
+ *
25
+ * @example
26
+ * ```js
27
+ * import { useBlockBindingsUtils } from '@wordpress/block-editor'
28
+ *
29
+ * const { updateBlockBindings } = useBlockBindingsUtils();
30
+ * updateBlockBindings( {
31
+ * url: {
32
+ * source: 'core/post-meta',
33
+ * args: {
34
+ * key: 'url_custom_field',
35
+ * },
36
+ * },
37
+ * alt: {
38
+ * source: 'core/post-meta',
39
+ * args: {
40
+ * key: 'text_custom_field',
41
+ * },
42
+ * }
43
+ * } );
44
+ * ```
45
+ */
46
+ const updateBlockBindings = ( bindings ) => {
47
+ const { metadata } = getBlockAttributes( clientId );
48
+ const newBindings = { ...metadata?.bindings };
49
+ Object.entries( bindings ).forEach( ( [ attribute, binding ] ) => {
50
+ if ( ! binding && newBindings[ attribute ] ) {
51
+ delete newBindings[ attribute ];
52
+ return;
53
+ }
54
+ newBindings[ attribute ] = binding;
55
+ } );
56
+
57
+ const newMetadata = {
58
+ ...metadata,
59
+ bindings: newBindings,
60
+ };
61
+
62
+ if ( Object.keys( newMetadata.bindings ).length === 0 ) {
63
+ delete newMetadata.bindings;
64
+ }
65
+
66
+ updateBlockAttributes( clientId, {
67
+ metadata:
68
+ Object.keys( newMetadata ).length === 0
69
+ ? undefined
70
+ : newMetadata,
71
+ } );
72
+ };
73
+
74
+ /**
75
+ * Removes the bindings property of the `metadata` attribute.
76
+ *
77
+ * @example
78
+ * ```js
79
+ * import { useBlockBindingsUtils } from '@wordpress/block-editor'
80
+ *
81
+ * const { removeAllBlockBindings } = useBlockBindingsUtils();
82
+ * removeAllBlockBindings();
83
+ * ```
84
+ */
85
+ const removeAllBlockBindings = () => {
86
+ const { metadata } = getBlockAttributes( clientId );
87
+ const newMetadata = { ...metadata };
88
+ delete newMetadata.bindings;
89
+ updateBlockAttributes( clientId, {
90
+ metadata:
91
+ Object.keys( newMetadata ).length === 0
92
+ ? undefined
93
+ : newMetadata,
94
+ } );
95
+ };
96
+
97
+ return { updateBlockBindings, removeAllBlockBindings };
98
+ }
@@ -23,7 +23,7 @@ export default function getEditorRegion( editor ) {
23
23
  return iframeDocument === editor.ownerDocument;
24
24
  } ) ?? editor;
25
25
 
26
- // The region is provivided by the editor, not the block-editor.
26
+ // The region is provided by the editor, not the block-editor.
27
27
  // We should send focus to the region if one is available to reuse the
28
28
  // same interface for navigating landmarks. If no region is available,
29
29
  // use the canvas instead.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * This function was accidentially exposed for mobile/native usage.
2
+ * This function was accidentally exposed for mobile/native usage.
3
3
  *
4
4
  * @deprecated
5
5
  *
@@ -125,6 +125,21 @@ describe( 'transformStyles', () => {
125
125
  expect( output ).toMatchSnapshot();
126
126
  } );
127
127
 
128
+ it( `should not try to replace 'body' in the middle of a classname`, () => {
129
+ const prefix = '.my-namespace';
130
+ const input = `.has-body-text { color: red; }`;
131
+ const output = transformStyles(
132
+ [
133
+ {
134
+ css: input,
135
+ },
136
+ ],
137
+ prefix
138
+ );
139
+
140
+ expect( output ).toEqual( [ `${ prefix } ${ input }` ] );
141
+ } );
142
+
128
143
  it( 'should ignore keyframes', () => {
129
144
  const input = `
130
145
  @keyframes edit-post__fade-in-animation {
@@ -210,6 +225,40 @@ describe( 'transformStyles', () => {
210
225
 
211
226
  expect( output ).toMatchSnapshot();
212
227
  } );
228
+
229
+ it( 'should not try to wrap items within `:where` selectors', () => {
230
+ const input = `:where(.wp-element-button:active, .wp-block-button__link:active) { color: blue; }`;
231
+ const prefix = '.my-namespace';
232
+ const expected = [ `${ prefix } ${ input }` ];
233
+
234
+ const output = transformStyles(
235
+ [
236
+ {
237
+ css: input,
238
+ },
239
+ ],
240
+ prefix
241
+ );
242
+
243
+ expect( output ).toEqual( expected );
244
+ } );
245
+
246
+ it( 'should not try to prefix pseudo elements on `:where` selectors', () => {
247
+ const input = `:where(.wp-element-button, .wp-block-button__link)::before { color: blue; }`;
248
+ const prefix = '.my-namespace';
249
+ const expected = [ `${ prefix } ${ input }` ];
250
+
251
+ const output = transformStyles(
252
+ [
253
+ {
254
+ css: input,
255
+ },
256
+ ],
257
+ prefix
258
+ );
259
+
260
+ expect( output ).toEqual( expected );
261
+ } );
213
262
  } );
214
263
 
215
264
  it( 'should not break with data urls', () => {