@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
@@ -43,7 +43,7 @@ export default function useResizeCanvas( deviceType ) {
43
43
  return deviceWidth < actualWidth ? deviceWidth : actualWidth;
44
44
  };
45
45
 
46
- const marginValue = () => ( window.innerHeight < 800 ? 36 : 72 );
46
+ const marginValue = () => ( window.innerHeight < 800 ? 36 : 64 );
47
47
 
48
48
  const contentInlineStyles = ( device ) => {
49
49
  const height = device === 'Mobile' ? '768px' : '1024px';
@@ -62,8 +62,6 @@ export default function useResizeCanvas( deviceType ) {
62
62
  marginLeft: marginHorizontal,
63
63
  marginRight: marginHorizontal,
64
64
  height,
65
- borderRadius: '2px 2px 2px 2px',
66
- border: '1px solid #ddd',
67
65
  overflowY: 'auto',
68
66
  };
69
67
  default:
@@ -43,9 +43,10 @@ export function useSettings( ...paths ) {
43
43
  * It looks up the setting first in the block instance hierarchy.
44
44
  * If none is found, it'll look it up in the block editor settings.
45
45
  *
46
+ * @deprecated 6.5.0 Use useSettings instead.
47
+ *
46
48
  * @param {string} path The path to the setting.
47
49
  * @return {any} Returns the value defined for the setting.
48
- * @deprecated 6.5.0 Use useSettings instead.
49
50
  * @example
50
51
  * ```js
51
52
  * const isEnabled = useSetting( 'typography.dropCap' );
@@ -8,11 +8,10 @@ import clsx from 'clsx';
8
8
  */
9
9
  import { __, isRTL } from '@wordpress/i18n';
10
10
  import { textHorizontal, textVertical } from '@wordpress/icons';
11
-
12
- /**
13
- * Internal dependencies
14
- */
15
- import SegmentedTextControl from '../segmented-text-control';
11
+ import {
12
+ __experimentalToggleGroupControl as ToggleGroupControl,
13
+ __experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,
14
+ } from '@wordpress/components';
16
15
 
17
16
  const WRITING_MODES = [
18
17
  {
@@ -39,14 +38,27 @@ const WRITING_MODES = [
39
38
  */
40
39
  export default function WritingModeControl( { className, value, onChange } ) {
41
40
  return (
42
- <SegmentedTextControl
41
+ <ToggleGroupControl
42
+ isDeselectable
43
+ __nextHasNoMarginBottom
44
+ __next40pxDefaultSize
43
45
  label={ __( 'Orientation' ) }
44
- options={ WRITING_MODES }
45
46
  className={ clsx( 'block-editor-writing-mode-control', className ) }
46
47
  value={ value }
47
48
  onChange={ ( newValue ) => {
48
49
  onChange( newValue === value ? undefined : newValue );
49
50
  } }
50
- />
51
+ >
52
+ { WRITING_MODES.map( ( option ) => {
53
+ return (
54
+ <ToggleGroupControlOptionIcon
55
+ key={ option.value }
56
+ value={ option.value }
57
+ icon={ option.icon }
58
+ label={ option.label }
59
+ />
60
+ );
61
+ } ) }
62
+ </ToggleGroupControl>
51
63
  );
52
64
  }
@@ -16,16 +16,14 @@ import {
16
16
  useHasBackgroundPanel,
17
17
  hasBackgroundImageValue,
18
18
  } from '../components/global-styles/background-panel';
19
- import {
20
- globalStylesDataKey,
21
- globalStylesLinksDataKey,
22
- } from '../store/private-keys';
19
+ import { globalStylesDataKey } from '../store/private-keys';
23
20
 
24
21
  export const BACKGROUND_SUPPORT_KEY = 'background';
25
22
 
26
- // Initial control values where no block style is set.
27
- const BACKGROUND_DEFAULT_VALUES = {
23
+ // Initial control values.
24
+ export const BACKGROUND_BLOCK_DEFAULT_VALUES = {
28
25
  backgroundSize: 'cover',
26
+ backgroundPosition: '50% 50%', // used only when backgroundSize is 'contain'.
29
27
  };
30
28
 
31
29
  /**
@@ -55,31 +53,28 @@ export function hasBackgroundSupport( blockName, feature = 'any' ) {
55
53
  }
56
54
 
57
55
  export function setBackgroundStyleDefaults( backgroundStyle ) {
58
- if ( ! backgroundStyle ) {
56
+ if ( ! backgroundStyle || ! backgroundStyle?.backgroundImage?.url ) {
59
57
  return;
60
58
  }
61
59
 
62
- const backgroundImage = backgroundStyle?.backgroundImage;
63
60
  let backgroundStylesWithDefaults;
64
61
 
65
62
  // Set block background defaults.
66
- if ( !! backgroundImage?.url ) {
67
- if ( ! backgroundStyle?.backgroundSize ) {
68
- backgroundStylesWithDefaults = {
69
- backgroundSize: 'cover',
70
- };
71
- }
72
-
73
- if (
74
- 'contain' === backgroundStyle?.backgroundSize &&
75
- ! backgroundStyle?.backgroundPosition
76
- ) {
77
- backgroundStylesWithDefaults = {
78
- backgroundPosition: 'center',
79
- };
80
- }
63
+ if ( ! backgroundStyle?.backgroundSize ) {
64
+ backgroundStylesWithDefaults = {
65
+ backgroundSize: BACKGROUND_BLOCK_DEFAULT_VALUES.backgroundSize,
66
+ };
81
67
  }
82
68
 
69
+ if (
70
+ 'contain' === backgroundStyle?.backgroundSize &&
71
+ ! backgroundStyle?.backgroundPosition
72
+ ) {
73
+ backgroundStylesWithDefaults = {
74
+ backgroundPosition:
75
+ BACKGROUND_BLOCK_DEFAULT_VALUES.backgroundPosition,
76
+ };
77
+ }
83
78
  return backgroundStylesWithDefaults;
84
79
  }
85
80
 
@@ -138,15 +133,15 @@ export function BackgroundImagePanel( {
138
133
  setAttributes,
139
134
  settings,
140
135
  } ) {
141
- const { style, inheritedValue, _links } = useSelect(
136
+ const { style, inheritedValue } = useSelect(
142
137
  ( select ) => {
143
138
  const { getBlockAttributes, getSettings } =
144
139
  select( blockEditorStore );
145
140
  const _settings = getSettings();
146
141
  return {
147
142
  style: getBlockAttributes( clientId )?.style,
148
- _links: _settings[ globalStylesLinksDataKey ],
149
143
  /*
144
+ * To ensure we pass down the right inherited values:
150
145
  * @TODO 1. Pass inherited value down to all block style controls,
151
146
  * See: packages/block-editor/src/hooks/style.js
152
147
  * @TODO 2. Add support for block style variations,
@@ -187,11 +182,10 @@ export function BackgroundImagePanel( {
187
182
  inheritedValue={ inheritedValue }
188
183
  as={ BackgroundInspectorControl }
189
184
  panelId={ clientId }
190
- defaultValues={ BACKGROUND_DEFAULT_VALUES }
185
+ defaultValues={ BACKGROUND_BLOCK_DEFAULT_VALUES }
191
186
  settings={ updatedSettings }
192
187
  onChange={ onChange }
193
188
  value={ style }
194
- themeFileURIs={ _links?.[ 'wp:theme-file' ] }
195
189
  />
196
190
  );
197
191
  }
@@ -2,89 +2,283 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
- import { store as blocksStore } from '@wordpress/blocks';
5
+ import { privateApis as blocksPrivateApis } from '@wordpress/blocks';
6
6
  import {
7
- BaseControl,
8
- PanelBody,
9
- __experimentalHStack as HStack,
10
7
  __experimentalItemGroup as ItemGroup,
11
8
  __experimentalItem as Item,
9
+ __experimentalText as Text,
10
+ __experimentalToolsPanel as ToolsPanel,
11
+ __experimentalToolsPanelItem as ToolsPanelItem,
12
+ __experimentalTruncate as Truncate,
13
+ __experimentalVStack as VStack,
14
+ privateApis as componentsPrivateApis,
12
15
  } from '@wordpress/components';
13
- import { useSelect } from '@wordpress/data';
16
+ import { useRegistry } from '@wordpress/data';
17
+ import { useContext, Fragment } from '@wordpress/element';
18
+ import { useViewportMatch } from '@wordpress/compose';
14
19
 
15
20
  /**
16
21
  * Internal dependencies
17
22
  */
18
- import { canBindAttribute } from '../hooks/use-bindings-attributes';
23
+ import {
24
+ canBindAttribute,
25
+ getBindableAttributes,
26
+ } from '../hooks/use-bindings-attributes';
19
27
  import { unlock } from '../lock-unlock';
20
28
  import InspectorControls from '../components/inspector-controls';
29
+ import BlockContext from '../components/block-context';
30
+ import { useBlockBindingsUtils } from '../utils/block-bindings';
21
31
 
22
- export const BlockBindingsPanel = ( { name, metadata } ) => {
23
- const { bindings } = metadata || {};
24
- const { sources } = useSelect( ( select ) => {
25
- const _sources = unlock(
26
- select( blocksStore )
27
- ).getAllBlockBindingsSources();
32
+ const {
33
+ DropdownMenuV2: DropdownMenu,
34
+ DropdownMenuGroupV2: DropdownMenuGroup,
35
+ DropdownMenuRadioItemV2: DropdownMenuRadioItem,
36
+ DropdownMenuItemLabelV2: DropdownMenuItemLabel,
37
+ DropdownMenuItemHelpTextV2: DropdownMenuItemHelpText,
38
+ DropdownMenuSeparatorV2: DropdownMenuSeparator,
39
+ } = unlock( componentsPrivateApis );
28
40
 
29
- return {
30
- sources: _sources,
31
- };
32
- }, [] );
41
+ const useToolsPanelDropdownMenuProps = () => {
42
+ const isMobile = useViewportMatch( 'medium', '<' );
43
+ return ! isMobile
44
+ ? {
45
+ popoverProps: {
46
+ placement: 'left-start',
47
+ // For non-mobile, inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)
48
+ offset: 259,
49
+ },
50
+ }
51
+ : {};
52
+ };
33
53
 
34
- if ( ! bindings ) {
35
- return null;
36
- }
54
+ function BlockBindingsPanelDropdown( { fieldsList, attribute, binding } ) {
55
+ const { getBlockBindingsSources } = unlock( blocksPrivateApis );
56
+ const registeredSources = getBlockBindingsSources();
57
+ const { updateBlockBindings } = useBlockBindingsUtils();
58
+ const currentKey = binding?.args?.key;
59
+ return (
60
+ <>
61
+ { Object.entries( fieldsList ).map( ( [ name, fields ], i ) => (
62
+ <Fragment key={ name }>
63
+ <DropdownMenuGroup>
64
+ { Object.keys( fieldsList ).length > 1 && (
65
+ <Text
66
+ className="block-editor-bindings__source-label"
67
+ upperCase
68
+ variant="muted"
69
+ aria-hidden
70
+ >
71
+ { registeredSources[ name ].label }
72
+ </Text>
73
+ ) }
74
+ { Object.entries( fields ).map( ( [ key, value ] ) => (
75
+ <DropdownMenuRadioItem
76
+ key={ key }
77
+ onChange={ () =>
78
+ updateBlockBindings( {
79
+ [ attribute ]: {
80
+ source: name,
81
+ args: { key },
82
+ },
83
+ } )
84
+ }
85
+ name={ attribute + '-binding' }
86
+ value={ key }
87
+ checked={ key === currentKey }
88
+ >
89
+ <DropdownMenuItemLabel>
90
+ { key }
91
+ </DropdownMenuItemLabel>
92
+ <DropdownMenuItemHelpText>
93
+ { value }
94
+ </DropdownMenuItemHelpText>
95
+ </DropdownMenuRadioItem>
96
+ ) ) }
97
+ </DropdownMenuGroup>
98
+ { i !== Object.keys( fieldsList ).length - 1 && (
99
+ <DropdownMenuSeparator />
100
+ ) }
101
+ </Fragment>
102
+ ) ) }
103
+ </>
104
+ );
105
+ }
106
+
107
+ function BlockBindingsAttribute( { attribute, binding } ) {
108
+ const { source: sourceName, args } = binding || {};
109
+ const sourceProps =
110
+ unlock( blocksPrivateApis ).getBlockBindingsSource( sourceName );
111
+ return (
112
+ <VStack>
113
+ <Truncate>{ attribute }</Truncate>
114
+ { !! binding && (
115
+ <Text
116
+ variant="muted"
117
+ className="block-editor-bindings__item-explanation"
118
+ >
119
+ <Truncate>
120
+ { args?.key || sourceProps?.label || sourceName }
121
+ </Truncate>
122
+ </Text>
123
+ ) }
124
+ </VStack>
125
+ );
126
+ }
127
+
128
+ function ReadOnlyBlockBindingsPanelItems( { bindings } ) {
129
+ return (
130
+ <>
131
+ { Object.entries( bindings ).map( ( [ attribute, binding ] ) => (
132
+ <Item key={ attribute }>
133
+ <BlockBindingsAttribute
134
+ attribute={ attribute }
135
+ binding={ binding }
136
+ />
137
+ </Item>
138
+ ) ) }
139
+ </>
140
+ );
141
+ }
142
+
143
+ function EditableBlockBindingsPanelItems( {
144
+ attributes,
145
+ bindings,
146
+ fieldsList,
147
+ } ) {
148
+ const { updateBlockBindings } = useBlockBindingsUtils();
149
+ const isMobile = useViewportMatch( 'medium', '<' );
150
+ return (
151
+ <>
152
+ { attributes.map( ( attribute ) => {
153
+ const binding = bindings[ attribute ];
154
+ return (
155
+ <ToolsPanelItem
156
+ key={ attribute }
157
+ hasValue={ () => !! binding }
158
+ label={ attribute }
159
+ onDeselect={ () => {
160
+ updateBlockBindings( {
161
+ [ attribute ]: undefined,
162
+ } );
163
+ } }
164
+ >
165
+ <DropdownMenu
166
+ placement={
167
+ isMobile ? 'bottom-start' : 'left-start'
168
+ }
169
+ gutter={ isMobile ? 8 : 36 }
170
+ className="block-editor-bindings__popover"
171
+ trigger={
172
+ <Item>
173
+ <BlockBindingsAttribute
174
+ attribute={ attribute }
175
+ binding={ binding }
176
+ />
177
+ </Item>
178
+ }
179
+ >
180
+ <BlockBindingsPanelDropdown
181
+ fieldsList={ fieldsList }
182
+ attribute={ attribute }
183
+ binding={ binding }
184
+ />
185
+ </DropdownMenu>
186
+ </ToolsPanelItem>
187
+ );
188
+ } ) }
189
+ </>
190
+ );
191
+ }
192
+
193
+ export const BlockBindingsPanel = ( { name: blockName, metadata } ) => {
194
+ const registry = useRegistry();
195
+ const blockContext = useContext( BlockContext );
196
+ const { bindings } = metadata || {};
197
+ const { removeAllBlockBindings } = useBlockBindingsUtils();
198
+ const bindableAttributes = getBindableAttributes( blockName );
199
+ const dropdownMenuProps = useToolsPanelDropdownMenuProps();
37
200
 
38
- // Don't show not allowed attributes.
39
- // Don't show the bindings connected to pattern overrides in the inspectors panel.
40
- // TODO: Explore if this should be abstracted to let other sources decide.
41
201
  const filteredBindings = { ...bindings };
42
202
  Object.keys( filteredBindings ).forEach( ( key ) => {
43
203
  if (
44
- ! canBindAttribute( name, key ) ||
204
+ ! canBindAttribute( blockName, key ) ||
45
205
  filteredBindings[ key ].source === 'core/pattern-overrides'
46
206
  ) {
47
207
  delete filteredBindings[ key ];
48
208
  }
49
209
  } );
50
210
 
51
- if ( Object.keys( filteredBindings ).length === 0 ) {
211
+ if ( ! bindableAttributes || bindableAttributes.length === 0 ) {
212
+ return null;
213
+ }
214
+
215
+ const fieldsList = {};
216
+ const { getBlockBindingsSources } = unlock( blocksPrivateApis );
217
+ const registeredSources = getBlockBindingsSources();
218
+ Object.entries( registeredSources ).forEach(
219
+ ( [ sourceName, { getFieldsList, usesContext } ] ) => {
220
+ if ( getFieldsList ) {
221
+ // Populate context.
222
+ const context = {};
223
+ if ( usesContext?.length ) {
224
+ for ( const key of usesContext ) {
225
+ context[ key ] = blockContext[ key ];
226
+ }
227
+ }
228
+ const sourceList = getFieldsList( {
229
+ registry,
230
+ context,
231
+ } );
232
+ // Only add source if the list is not empty.
233
+ if ( sourceList ) {
234
+ fieldsList[ sourceName ] = { ...sourceList };
235
+ }
236
+ }
237
+ }
238
+ );
239
+ // Remove empty sources.
240
+ Object.entries( fieldsList ).forEach( ( [ key, value ] ) => {
241
+ if ( ! Object.keys( value ).length ) {
242
+ delete fieldsList[ key ];
243
+ }
244
+ } );
245
+
246
+ // Lock the UI when the experiment is not enabled or there are no fields to connect to.
247
+ const readOnly =
248
+ ! window.__experimentalBlockBindingsUI ||
249
+ ! Object.keys( fieldsList ).length;
250
+
251
+ if ( readOnly && Object.keys( filteredBindings ).length === 0 ) {
52
252
  return null;
53
253
  }
54
254
 
55
255
  return (
56
256
  <InspectorControls>
57
- <PanelBody
58
- title={ __( 'Attributes' ) }
59
- className="components-panel__block-bindings-panel"
257
+ <ToolsPanel
258
+ label={ __( 'Attributes' ) }
259
+ resetAll={ () => {
260
+ removeAllBlockBindings();
261
+ } }
262
+ dropdownMenuProps={ dropdownMenuProps }
263
+ className="block-editor-bindings__panel"
60
264
  >
61
- <BaseControl
62
- help={ __( 'Attributes connected to various sources.' ) }
63
- >
64
- <ItemGroup isBordered isSeparated size="large">
65
- { Object.keys( filteredBindings ).map( ( key ) => {
66
- return (
67
- <Item key={ key }>
68
- <HStack>
69
- <span>{ key }</span>
70
- <span className="components-item__block-bindings-source">
71
- { sources[
72
- filteredBindings[ key ].source
73
- ]
74
- ? sources[
75
- filteredBindings[ key ]
76
- .source
77
- ].label
78
- : filteredBindings[ key ]
79
- .source }
80
- </span>
81
- </HStack>
82
- </Item>
83
- );
84
- } ) }
85
- </ItemGroup>
86
- </BaseControl>
87
- </PanelBody>
265
+ <ItemGroup isBordered isSeparated>
266
+ { readOnly ? (
267
+ <ReadOnlyBlockBindingsPanelItems
268
+ bindings={ filteredBindings }
269
+ />
270
+ ) : (
271
+ <EditableBlockBindingsPanelItems
272
+ attributes={ bindableAttributes }
273
+ bindings={ filteredBindings }
274
+ fieldsList={ fieldsList }
275
+ />
276
+ ) }
277
+ </ItemGroup>
278
+ <Text variant="muted">
279
+ { __( 'Attributes connected to various sources.' ) }
280
+ </Text>
281
+ </ToolsPanel>
88
282
  </InspectorControls>
89
283
  );
90
284
  };
@@ -1,3 +1,14 @@
1
- .components-panel__block-bindings-panel .components-item__block-bindings-source {
2
- color: $gray-700;
1
+ div.block-editor-bindings__panel {
2
+ grid-template-columns: repeat(auto-fit, minmax(100%, 1fr));
3
+ button:hover .block-editor-bindings__item-explanation {
4
+ color: inherit;
5
+ }
6
+ }
7
+
8
+ .block-editor-bindings__popover {
9
+ // This won't be needed if `DropdownMenuGroup` component handles the label.
10
+ .block-editor-bindings__source-label {
11
+ grid-column: 2;
12
+ margin: $grid-unit-10 0;
13
+ }
3
14
  }
@@ -201,6 +201,7 @@ function BlockHooksControlPure( {
201
201
 
202
202
  return (
203
203
  <ToggleControl
204
+ __nextHasNoMarginBottom
204
205
  checked={ checked }
205
206
  key={ block.title }
206
207
  label={
@@ -4,6 +4,7 @@
4
4
  * we need to right-align the toggle.
5
5
  */
6
6
  .components-toggle-control .components-h-stack {
7
+ /* stylelint-disable-next-line declaration-property-value-allowed-list -- This should be refactored to not use the row-reverse value. */
7
8
  flex-direction: row-reverse;
8
9
  }
9
10
 
@@ -13,7 +13,7 @@ import {
13
13
  toStyles,
14
14
  getBlockSelectors,
15
15
  } from '../components/global-styles';
16
- import { useStyleOverride } from './utils';
16
+ import { usePrivateStyleOverride } from './utils';
17
17
  import { getValueFromObjectPath } from '../utils/object';
18
18
  import { store as blockEditorStore } from '../store';
19
19
  import { globalStylesDataKey } from '../store/private-keys';
@@ -63,7 +63,7 @@ function getVariationNameFromClass( className, registeredStyles = [] ) {
63
63
 
64
64
  // A helper component to apply a style override using the useStyleOverride hook.
65
65
  function OverrideStyles( { override } ) {
66
- useStyleOverride( override );
66
+ usePrivateStyleOverride( override );
67
67
  }
68
68
 
69
69
  /**
@@ -351,7 +351,7 @@ function useBlockProps( { name, className, clientId } ) {
351
351
  );
352
352
  }, [ variation, settings, styles, getBlockStyles, clientId ] );
353
353
 
354
- useStyleOverride( {
354
+ usePrivateStyleOverride( {
355
355
  id: `variation-${ clientId }`,
356
356
  css: variationStyles,
357
357
  __unstableType: 'variation',
@@ -7,7 +7,7 @@ import { useState, useEffect } from '@wordpress/element';
7
7
  * Internal dependencies
8
8
  */
9
9
  import ContrastChecker from '../components/contrast-checker';
10
- import { __unstableUseBlockRef as useBlockRef } from '../components/block-list/use-block-props/use-block-refs';
10
+ import { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';
11
11
 
12
12
  function getComputedStyle( node ) {
13
13
  return node.ownerDocument.defaultView.getComputedStyle( node );
@@ -17,23 +17,23 @@ export default function BlockColorContrastChecker( { clientId } ) {
17
17
  const [ detectedBackgroundColor, setDetectedBackgroundColor ] = useState();
18
18
  const [ detectedColor, setDetectedColor ] = useState();
19
19
  const [ detectedLinkColor, setDetectedLinkColor ] = useState();
20
- const ref = useBlockRef( clientId );
20
+ const blockEl = useBlockElement( clientId );
21
21
 
22
22
  // There are so many things that can change the color of a block
23
23
  // So we perform this check on every render.
24
24
  // eslint-disable-next-line react-hooks/exhaustive-deps
25
25
  useEffect( () => {
26
- if ( ! ref.current ) {
26
+ if ( ! blockEl ) {
27
27
  return;
28
28
  }
29
- setDetectedColor( getComputedStyle( ref.current ).color );
29
+ setDetectedColor( getComputedStyle( blockEl ).color );
30
30
 
31
- const firstLinkElement = ref.current?.querySelector( 'a' );
31
+ const firstLinkElement = blockEl.querySelector( 'a' );
32
32
  if ( firstLinkElement && !! firstLinkElement.innerText ) {
33
33
  setDetectedLinkColor( getComputedStyle( firstLinkElement ).color );
34
34
  }
35
35
 
36
- let backgroundColorNode = ref.current;
36
+ let backgroundColorNode = blockEl;
37
37
  let backgroundColor =
38
38
  getComputedStyle( backgroundColorNode ).backgroundColor;
39
39
  while (
@@ -48,7 +48,7 @@ export default function BlockColorContrastChecker( { clientId } ) {
48
48
  }
49
49
 
50
50
  setDetectedBackgroundColor( backgroundColor );
51
- } );
51
+ }, [ blockEl ] );
52
52
 
53
53
  return (
54
54
  <ContrastChecker
@@ -32,10 +32,10 @@ import {
32
32
  } from '../components/duotone/utils';
33
33
  import { getBlockCSSSelector } from '../components/global-styles/get-block-css-selector';
34
34
  import { scopeSelector } from '../components/global-styles/utils';
35
- import { useBlockSettings, useStyleOverride } from './utils';
35
+ import { useBlockSettings, usePrivateStyleOverride } from './utils';
36
36
  import { default as StylesFiltersPanel } from '../components/global-styles/filters-panel';
37
37
  import { useBlockEditingMode } from '../components/block-editing-mode';
38
- import { __unstableUseBlockElement as useBlockElement } from '../components/block-list/use-block-props/use-block-refs';
38
+ import { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';
39
39
 
40
40
  const EMPTY_ARRAY = [];
41
41
 
@@ -265,7 +265,7 @@ function useDuotoneStyles( {
265
265
 
266
266
  const isValidFilter = Array.isArray( colors ) || colors === 'unset';
267
267
 
268
- useStyleOverride(
268
+ usePrivateStyleOverride(
269
269
  isValidFilter
270
270
  ? {
271
271
  css:
@@ -276,7 +276,7 @@ function useDuotoneStyles( {
276
276
  }
277
277
  : undefined
278
278
  );
279
- useStyleOverride(
279
+ usePrivateStyleOverride(
280
280
  isValidFilter
281
281
  ? {
282
282
  assets:
@@ -37,7 +37,6 @@ import './grid-visualizer';
37
37
 
38
38
  createBlockEditFilter(
39
39
  [
40
- blockBindingsPanel,
41
40
  align,
42
41
  textAlign,
43
42
  anchor,
@@ -48,6 +47,7 @@ createBlockEditFilter(
48
47
  layout,
49
48
  contentLockUI,
50
49
  blockHooks,
50
+ blockBindingsPanel,
51
51
  childLayout,
52
52
  ].filter( Boolean )
53
53
  );
@@ -91,3 +91,4 @@ export { useCachedTruthy } from './use-cached-truthy';
91
91
  export { setBackgroundStyleDefaults } from './background';
92
92
  export { useZoomOut } from './use-zoom-out';
93
93
  export { __unstableBlockStyleVariationOverridesWithConfig } from './block-style-variation';
94
+ export { useStyleOverride } from './utils';
@@ -39,7 +39,6 @@ export function LineHeightEdit( props ) {
39
39
  return (
40
40
  <LineHeightControl
41
41
  __unstableInputWidth="100%"
42
- __nextHasNoMarginBottom
43
42
  value={ style?.typography?.lineHeight }
44
43
  onChange={ onChange }
45
44
  size="__unstable-large"