@wordpress/block-editor 12.11.1 → 12.12.2-next.f8d8eceb.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 (453) hide show
  1. package/CHANGELOG.md +14 -10
  2. package/README.md +35 -3
  3. package/build/components/block-alignment-control/use-available-alignments.js +30 -28
  4. package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
  5. package/build/components/block-controls/hook.js +4 -1
  6. package/build/components/block-controls/hook.js.map +1 -1
  7. package/build/components/block-list/block-outline.native.js +1 -1
  8. package/build/components/block-list/block-outline.native.js.map +1 -1
  9. package/build/components/block-list/block.js +2 -0
  10. package/build/components/block-list/block.js.map +1 -1
  11. package/build/components/block-list/block.native.js +4 -4
  12. package/build/components/block-list/block.native.js.map +1 -1
  13. package/build/components/block-list/layout.js +2 -3
  14. package/build/components/block-list/layout.js.map +1 -1
  15. package/build/components/block-preview/index.js +4 -1
  16. package/build/components/block-preview/index.js.map +1 -1
  17. package/build/components/block-styles/index.js +1 -2
  18. package/build/components/block-styles/index.js.map +1 -1
  19. package/build/components/block-switcher/pattern-transformations-menu.js +2 -4
  20. package/build/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  21. package/build/components/block-tools/block-contextual-toolbar.js +1 -0
  22. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  23. package/build/components/border-radius-control/index.js +3 -2
  24. package/build/components/border-radius-control/index.js.map +1 -1
  25. package/build/components/color-palette/with-color-context.js +6 -6
  26. package/build/components/color-palette/with-color-context.js.map +1 -1
  27. package/build/components/colors/with-colors.js +2 -8
  28. package/build/components/colors/with-colors.js.map +1 -1
  29. package/build/components/colors-gradients/control.js +6 -7
  30. package/build/components/colors-gradients/control.js.map +1 -1
  31. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +5 -13
  32. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  33. package/build/components/dimensions-tool/index.js +22 -22
  34. package/build/components/dimensions-tool/index.js.map +1 -1
  35. package/build/components/dimensions-tool/scale-tool.js +1 -1
  36. package/build/components/dimensions-tool/scale-tool.js.map +1 -1
  37. package/build/components/font-family/index.js +2 -3
  38. package/build/components/font-family/index.js.map +1 -1
  39. package/build/components/font-sizes/font-size-picker.js +3 -5
  40. package/build/components/font-sizes/font-size-picker.js.map +1 -1
  41. package/build/components/font-sizes/with-font-sizes.js +3 -4
  42. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  43. package/build/components/global-styles/filters-panel.js +7 -8
  44. package/build/components/global-styles/filters-panel.js.map +1 -1
  45. package/build/components/global-styles/image-settings-panel.js +2 -2
  46. package/build/components/global-styles/image-settings-panel.js.map +1 -1
  47. package/build/components/global-styles/typography-panel.js +1 -1
  48. package/build/components/global-styles/typography-panel.js.map +1 -1
  49. package/build/components/gradients/use-gradient.js +2 -5
  50. package/build/components/gradients/use-gradient.js.map +1 -1
  51. package/build/components/height-control/index.js +93 -5
  52. package/build/components/height-control/index.js.map +1 -1
  53. package/build/components/iframe/index.js +9 -1
  54. package/build/components/iframe/index.js.map +1 -1
  55. package/build/components/image-editor/aspect-ratio-dropdown.js +0 -6
  56. package/build/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  57. package/build/components/index.js +9 -2
  58. package/build/components/index.js.map +1 -1
  59. package/build/components/index.native.js +17 -2
  60. package/build/components/index.native.js.map +1 -1
  61. package/build/components/inner-blocks/index.js +2 -2
  62. package/build/components/inner-blocks/index.js.map +1 -1
  63. package/build/components/letter-spacing-control/index.js +3 -3
  64. package/build/components/letter-spacing-control/index.js.map +1 -1
  65. package/build/components/link-control/link-preview.js +5 -2
  66. package/build/components/link-control/link-preview.js.map +1 -1
  67. package/build/components/link-control/search-item.js +11 -0
  68. package/build/components/link-control/search-item.js.map +1 -1
  69. package/build/components/link-control/search-results.js +2 -1
  70. package/build/components/link-control/search-results.js.map +1 -1
  71. package/build/components/link-control/use-internal-value.js +14 -8
  72. package/build/components/link-control/use-internal-value.js.map +1 -1
  73. package/build/components/link-control/use-search-handler.js +10 -5
  74. package/build/components/link-control/use-search-handler.js.map +1 -1
  75. package/build/components/list-view/index.js +6 -5
  76. package/build/components/list-view/index.js.map +1 -1
  77. package/build/components/media-replace-flow/index.js +2 -4
  78. package/build/components/media-replace-flow/index.js.map +1 -1
  79. package/build/components/provider/use-block-sync.js +2 -2
  80. package/build/components/provider/use-block-sync.js.map +1 -1
  81. package/build/components/rich-text/index.js +1 -1
  82. package/build/components/rich-text/index.js.map +1 -1
  83. package/build/components/rich-text/index.native.js +14 -3
  84. package/build/components/rich-text/index.native.js.map +1 -1
  85. package/build/components/rich-text/use-delete.js +1 -1
  86. package/build/components/rich-text/use-delete.js.map +1 -1
  87. package/build/components/rich-text/use-paste-handler.js +25 -22
  88. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  89. package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.js +6 -3
  90. package/build/components/spacing-sizes-control/hooks/use-spacing-sizes.js.map +1 -1
  91. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js +91 -3
  92. package/build/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  93. package/build/components/tool-selector/index.js +1 -2
  94. package/build/components/tool-selector/index.js.map +1 -1
  95. package/build/components/unit-control/index.js +3 -3
  96. package/build/components/unit-control/index.js.map +1 -1
  97. package/build/components/use-block-commands/index.js +96 -47
  98. package/build/components/use-block-commands/index.js.map +1 -1
  99. package/build/components/use-settings/index.js +212 -0
  100. package/build/components/use-settings/index.js.map +1 -0
  101. package/build/components/writing-flow/use-arrow-nav.js +4 -0
  102. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  103. package/build/hooks/align.js +51 -35
  104. package/build/hooks/align.js.map +1 -1
  105. package/build/hooks/anchor.js +37 -32
  106. package/build/hooks/anchor.js.map +1 -1
  107. package/build/hooks/background.js +4 -4
  108. package/build/hooks/background.js.map +1 -1
  109. package/build/hooks/block-rename-ui.js +5 -5
  110. package/build/hooks/block-rename-ui.js.map +1 -1
  111. package/build/hooks/{metadata-name.js → block-renaming.js} +3 -7
  112. package/build/hooks/block-renaming.js.map +1 -0
  113. package/build/hooks/color.js +2 -4
  114. package/build/hooks/color.js.map +1 -1
  115. package/build/hooks/custom-class-name.js +28 -21
  116. package/build/hooks/custom-class-name.js.map +1 -1
  117. package/build/hooks/duotone.js +33 -8
  118. package/build/hooks/duotone.js.map +1 -1
  119. package/build/hooks/font-size.js +4 -4
  120. package/build/hooks/font-size.js.map +1 -1
  121. package/build/hooks/index.js +1 -1
  122. package/build/hooks/index.js.map +1 -1
  123. package/build/hooks/layout.js +16 -17
  124. package/build/hooks/layout.js.map +1 -1
  125. package/build/hooks/line-height.js +3 -3
  126. package/build/hooks/line-height.js.map +1 -1
  127. package/build/hooks/metadata.js +6 -27
  128. package/build/hooks/metadata.js.map +1 -1
  129. package/build/hooks/position.js +2 -3
  130. package/build/hooks/position.js.map +1 -1
  131. package/build/hooks/use-color-props.js +3 -11
  132. package/build/hooks/use-color-props.js.map +1 -1
  133. package/build/hooks/utils.js +2 -43
  134. package/build/hooks/utils.js.map +1 -1
  135. package/build/layouts/constrained.js +3 -3
  136. package/build/layouts/constrained.js.map +1 -1
  137. package/build/layouts/grid.js +25 -3
  138. package/build/layouts/grid.js.map +1 -1
  139. package/build/layouts/utils.js +1 -1
  140. package/build/layouts/utils.js.map +1 -1
  141. package/build/lock-unlock.js +1 -1
  142. package/build/lock-unlock.js.map +1 -1
  143. package/build/store/actions.js +13 -5
  144. package/build/store/actions.js.map +1 -1
  145. package/build/utils/object.js +4 -1
  146. package/build/utils/object.js.map +1 -1
  147. package/build/utils/parse-css-unit-to-px.js +20 -0
  148. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  149. package/build/utils/pasting.js +1 -1
  150. package/build/utils/pasting.js.map +1 -1
  151. package/build/utils/transform-styles/index.js +19 -24
  152. package/build/utils/transform-styles/index.js.map +1 -1
  153. package/build-module/components/block-alignment-control/use-available-alignments.js +30 -28
  154. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  155. package/build-module/components/block-controls/hook.js +4 -1
  156. package/build-module/components/block-controls/hook.js.map +1 -1
  157. package/build-module/components/block-list/block-outline.native.js +1 -1
  158. package/build-module/components/block-list/block-outline.native.js.map +1 -1
  159. package/build-module/components/block-list/block.js +2 -0
  160. package/build-module/components/block-list/block.js.map +1 -1
  161. package/build-module/components/block-list/block.native.js +4 -4
  162. package/build-module/components/block-list/block.native.js.map +1 -1
  163. package/build-module/components/block-list/layout.js +2 -2
  164. package/build-module/components/block-list/layout.js.map +1 -1
  165. package/build-module/components/block-preview/index.js +4 -1
  166. package/build-module/components/block-preview/index.js.map +1 -1
  167. package/build-module/components/block-styles/index.js +1 -2
  168. package/build-module/components/block-styles/index.js.map +1 -1
  169. package/build-module/components/block-switcher/pattern-transformations-menu.js +2 -4
  170. package/build-module/components/block-switcher/pattern-transformations-menu.js.map +1 -1
  171. package/build-module/components/block-tools/block-contextual-toolbar.js +1 -0
  172. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  173. package/build-module/components/border-radius-control/index.js +3 -2
  174. package/build-module/components/border-radius-control/index.js.map +1 -1
  175. package/build-module/components/color-palette/with-color-context.js +6 -5
  176. package/build-module/components/color-palette/with-color-context.js.map +1 -1
  177. package/build-module/components/colors/with-colors.js +2 -7
  178. package/build-module/components/colors/with-colors.js.map +1 -1
  179. package/build-module/components/colors-gradients/control.js +6 -7
  180. package/build-module/components/colors-gradients/control.js.map +1 -1
  181. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +5 -12
  182. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  183. package/build-module/components/dimensions-tool/index.js +22 -22
  184. package/build-module/components/dimensions-tool/index.js.map +1 -1
  185. package/build-module/components/dimensions-tool/scale-tool.js +1 -1
  186. package/build-module/components/dimensions-tool/scale-tool.js.map +1 -1
  187. package/build-module/components/font-family/index.js +2 -2
  188. package/build-module/components/font-family/index.js.map +1 -1
  189. package/build-module/components/font-sizes/font-size-picker.js +3 -4
  190. package/build-module/components/font-sizes/font-size-picker.js.map +1 -1
  191. package/build-module/components/font-sizes/with-font-sizes.js +3 -3
  192. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  193. package/build-module/components/global-styles/filters-panel.js +7 -8
  194. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  195. package/build-module/components/global-styles/image-settings-panel.js +2 -2
  196. package/build-module/components/global-styles/image-settings-panel.js.map +1 -1
  197. package/build-module/components/global-styles/typography-panel.js +1 -1
  198. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  199. package/build-module/components/gradients/use-gradient.js +2 -4
  200. package/build-module/components/gradients/use-gradient.js.map +1 -1
  201. package/build-module/components/height-control/index.js +93 -4
  202. package/build-module/components/height-control/index.js.map +1 -1
  203. package/build-module/components/iframe/index.js +9 -1
  204. package/build-module/components/iframe/index.js.map +1 -1
  205. package/build-module/components/image-editor/aspect-ratio-dropdown.js +0 -6
  206. package/build-module/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  207. package/build-module/components/index.js +1 -1
  208. package/build-module/components/index.js.map +1 -1
  209. package/build-module/components/index.native.js +2 -1
  210. package/build-module/components/index.native.js.map +1 -1
  211. package/build-module/components/inner-blocks/index.js +2 -2
  212. package/build-module/components/inner-blocks/index.js.map +1 -1
  213. package/build-module/components/letter-spacing-control/index.js +3 -2
  214. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  215. package/build-module/components/link-control/link-preview.js +6 -3
  216. package/build-module/components/link-control/link-preview.js.map +1 -1
  217. package/build-module/components/link-control/search-item.js +12 -1
  218. package/build-module/components/link-control/search-item.js.map +1 -1
  219. package/build-module/components/link-control/search-results.js +2 -1
  220. package/build-module/components/link-control/search-results.js.map +1 -1
  221. package/build-module/components/link-control/use-internal-value.js +14 -9
  222. package/build-module/components/link-control/use-internal-value.js.map +1 -1
  223. package/build-module/components/link-control/use-search-handler.js +10 -5
  224. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  225. package/build-module/components/list-view/index.js +7 -6
  226. package/build-module/components/list-view/index.js.map +1 -1
  227. package/build-module/components/media-replace-flow/index.js +3 -5
  228. package/build-module/components/media-replace-flow/index.js.map +1 -1
  229. package/build-module/components/provider/use-block-sync.js +2 -2
  230. package/build-module/components/provider/use-block-sync.js.map +1 -1
  231. package/build-module/components/rich-text/index.js +1 -1
  232. package/build-module/components/rich-text/index.js.map +1 -1
  233. package/build-module/components/rich-text/index.native.js +15 -4
  234. package/build-module/components/rich-text/index.native.js.map +1 -1
  235. package/build-module/components/rich-text/use-delete.js +1 -1
  236. package/build-module/components/rich-text/use-delete.js.map +1 -1
  237. package/build-module/components/rich-text/use-paste-handler.js +25 -22
  238. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  239. package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js +6 -2
  240. package/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js.map +1 -1
  241. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js +91 -2
  242. package/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js.map +1 -1
  243. package/build-module/components/tool-selector/index.js +1 -2
  244. package/build-module/components/tool-selector/index.js.map +1 -1
  245. package/build-module/components/unit-control/index.js +3 -2
  246. package/build-module/components/unit-control/index.js.map +1 -1
  247. package/build-module/components/use-block-commands/index.js +95 -47
  248. package/build-module/components/use-block-commands/index.js.map +1 -1
  249. package/build-module/components/use-settings/index.js +203 -0
  250. package/build-module/components/use-settings/index.js.map +1 -0
  251. package/build-module/components/writing-flow/use-arrow-nav.js +4 -0
  252. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  253. package/build-module/hooks/align.js +51 -35
  254. package/build-module/hooks/align.js.map +1 -1
  255. package/build-module/hooks/anchor.js +37 -32
  256. package/build-module/hooks/anchor.js.map +1 -1
  257. package/build-module/hooks/background.js +4 -4
  258. package/build-module/hooks/background.js.map +1 -1
  259. package/build-module/hooks/block-rename-ui.js +6 -6
  260. package/build-module/hooks/block-rename-ui.js.map +1 -1
  261. package/build-module/hooks/{metadata-name.js → block-renaming.js} +3 -6
  262. package/build-module/hooks/block-renaming.js.map +1 -0
  263. package/build-module/hooks/color.js +2 -4
  264. package/build-module/hooks/color.js.map +1 -1
  265. package/build-module/hooks/custom-class-name.js +28 -21
  266. package/build-module/hooks/custom-class-name.js.map +1 -1
  267. package/build-module/hooks/duotone.js +34 -9
  268. package/build-module/hooks/duotone.js.map +1 -1
  269. package/build-module/hooks/font-size.js +4 -4
  270. package/build-module/hooks/font-size.js.map +1 -1
  271. package/build-module/hooks/index.js +1 -1
  272. package/build-module/hooks/index.js.map +1 -1
  273. package/build-module/hooks/layout.js +16 -17
  274. package/build-module/hooks/layout.js.map +1 -1
  275. package/build-module/hooks/line-height.js +3 -3
  276. package/build-module/hooks/line-height.js.map +1 -1
  277. package/build-module/hooks/metadata.js +6 -25
  278. package/build-module/hooks/metadata.js.map +1 -1
  279. package/build-module/hooks/position.js +2 -3
  280. package/build-module/hooks/position.js.map +1 -1
  281. package/build-module/hooks/use-color-props.js +3 -11
  282. package/build-module/hooks/use-color-props.js.map +1 -1
  283. package/build-module/hooks/utils.js +3 -44
  284. package/build-module/hooks/utils.js.map +1 -1
  285. package/build-module/layouts/constrained.js +3 -2
  286. package/build-module/layouts/constrained.js.map +1 -1
  287. package/build-module/layouts/grid.js +25 -3
  288. package/build-module/layouts/grid.js.map +1 -1
  289. package/build-module/layouts/utils.js +1 -1
  290. package/build-module/layouts/utils.js.map +1 -1
  291. package/build-module/lock-unlock.js +1 -1
  292. package/build-module/lock-unlock.js.map +1 -1
  293. package/build-module/store/actions.js +14 -6
  294. package/build-module/store/actions.js.map +1 -1
  295. package/build-module/utils/object.js +3 -1
  296. package/build-module/utils/object.js.map +1 -1
  297. package/build-module/utils/parse-css-unit-to-px.js +20 -0
  298. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  299. package/build-module/utils/pasting.js +1 -1
  300. package/build-module/utils/pasting.js.map +1 -1
  301. package/build-module/utils/transform-styles/index.js +20 -24
  302. package/build-module/utils/transform-styles/index.js.map +1 -1
  303. package/build-style/style-rtl.css +24 -12
  304. package/build-style/style.css +24 -12
  305. package/package.json +36 -34
  306. package/src/components/block-alignment-control/use-available-alignments.js +49 -34
  307. package/src/components/block-controls/hook.js +6 -3
  308. package/src/components/block-list/block-outline.native.js +1 -1
  309. package/src/components/block-list/block.js +2 -0
  310. package/src/components/block-list/block.native.js +4 -4
  311. package/src/components/block-list/layout.js +2 -2
  312. package/src/components/block-preview/index.js +7 -1
  313. package/src/components/block-styles/index.js +1 -4
  314. package/src/components/block-styles/style.scss +1 -1
  315. package/src/components/block-switcher/pattern-transformations-menu.js +1 -4
  316. package/src/components/block-switcher/style.scss +6 -0
  317. package/src/components/block-tools/block-contextual-toolbar.js +1 -0
  318. package/src/components/block-tools/style.scss +0 -1
  319. package/src/components/border-radius-control/index.js +3 -2
  320. package/src/components/color-palette/test/__snapshots__/control.js.snap +3 -1
  321. package/src/components/color-palette/with-color-context.js +9 -9
  322. package/src/components/colors/with-colors.js +6 -7
  323. package/src/components/colors-gradients/control.js +10 -7
  324. package/src/components/colors-gradients/style.scss +4 -2
  325. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +29 -15
  326. package/src/components/dimensions-tool/index.js +25 -25
  327. package/src/components/dimensions-tool/scale-tool.js +1 -1
  328. package/src/components/font-family/index.js +2 -2
  329. package/src/components/font-sizes/font-size-picker.js +6 -4
  330. package/src/components/font-sizes/with-font-sizes.js +3 -5
  331. package/src/components/global-styles/filters-panel.js +9 -15
  332. package/src/components/global-styles/image-settings-panel.js +2 -2
  333. package/src/components/global-styles/typography-panel.js +1 -1
  334. package/src/components/gradients/use-gradient.js +10 -4
  335. package/src/components/height-control/index.js +53 -4
  336. package/src/components/iframe/index.js +8 -1
  337. package/src/components/image-editor/aspect-ratio-dropdown.js +0 -8
  338. package/src/components/index.js +1 -1
  339. package/src/components/index.native.js +2 -1
  340. package/src/components/inner-blocks/index.js +2 -2
  341. package/src/components/inserter/style.scss +9 -1
  342. package/src/components/letter-spacing-control/index.js +3 -2
  343. package/src/components/link-control/README.md +43 -0
  344. package/src/components/link-control/link-preview.js +11 -5
  345. package/src/components/link-control/search-item.js +14 -0
  346. package/src/components/link-control/search-results.js +1 -0
  347. package/src/components/link-control/style.scss +3 -3
  348. package/src/components/link-control/test/index.js +19 -0
  349. package/src/components/link-control/use-internal-value.js +14 -10
  350. package/src/components/link-control/use-search-handler.js +22 -15
  351. package/src/components/list-view/index.js +13 -3
  352. package/src/components/media-replace-flow/index.js +9 -14
  353. package/src/components/provider/test/use-block-sync.js +1 -1
  354. package/src/components/provider/use-block-sync.js +2 -2
  355. package/src/components/rich-text/index.js +1 -1
  356. package/src/components/rich-text/index.native.js +19 -3
  357. package/src/components/rich-text/use-delete.js +1 -1
  358. package/src/components/rich-text/use-paste-handler.js +27 -24
  359. package/src/components/spacing-sizes-control/hooks/use-spacing-sizes.js +7 -5
  360. package/src/components/spacing-sizes-control/input-controls/spacing-input-control.js +25 -2
  361. package/src/components/tool-selector/index.js +1 -1
  362. package/src/components/unit-control/index.js +3 -8
  363. package/src/components/use-block-commands/index.js +93 -47
  364. package/src/components/{use-setting → use-settings}/README.md +9 -10
  365. package/src/components/use-settings/index.js +272 -0
  366. package/src/components/{use-setting → use-settings}/test/index.js +47 -5
  367. package/src/components/writing-flow/use-arrow-nav.js +4 -0
  368. package/src/hooks/align.js +79 -54
  369. package/src/hooks/anchor.js +75 -65
  370. package/src/hooks/background.js +7 -9
  371. package/src/hooks/block-rename-ui.js +5 -14
  372. package/src/hooks/{metadata-name.js → block-renaming.js} +4 -7
  373. package/src/hooks/color.js +7 -4
  374. package/src/hooks/custom-class-name.js +36 -31
  375. package/src/hooks/duotone.js +51 -14
  376. package/src/hooks/font-size.js +4 -4
  377. package/src/hooks/index.js +1 -1
  378. package/src/hooks/layout.js +17 -17
  379. package/src/hooks/line-height.js +3 -3
  380. package/src/hooks/metadata.js +6 -38
  381. package/src/hooks/position.js +5 -3
  382. package/src/hooks/use-color-props.js +21 -14
  383. package/src/hooks/utils.js +90 -43
  384. package/src/layouts/constrained.js +3 -8
  385. package/src/layouts/grid.js +50 -2
  386. package/src/layouts/utils.js +2 -1
  387. package/src/lock-unlock.js +1 -1
  388. package/src/store/actions.js +25 -8
  389. package/src/utils/object.js +4 -1
  390. package/src/utils/parse-css-unit-to-px.js +20 -0
  391. package/src/utils/pasting.js +1 -4
  392. package/src/utils/test/__snapshots__/transform-styles.js.snap +103 -0
  393. package/src/utils/test/pasting.js +12 -19
  394. package/src/utils/test/transform-styles.js +217 -0
  395. package/src/utils/transform-styles/index.js +25 -25
  396. package/build/components/use-setting/index.js +0 -159
  397. package/build/components/use-setting/index.js.map +0 -1
  398. package/build/hooks/metadata-name.js.map +0 -1
  399. package/build/utils/transform-styles/ast/index.js +0 -21
  400. package/build/utils/transform-styles/ast/index.js.map +0 -1
  401. package/build/utils/transform-styles/ast/parse.js +0 -660
  402. package/build/utils/transform-styles/ast/parse.js.map +0 -1
  403. package/build/utils/transform-styles/ast/stringify/compiler.js +0 -52
  404. package/build/utils/transform-styles/ast/stringify/compiler.js.map +0 -1
  405. package/build/utils/transform-styles/ast/stringify/compress.js +0 -178
  406. package/build/utils/transform-styles/ast/stringify/compress.js.map +0 -1
  407. package/build/utils/transform-styles/ast/stringify/identity.js +0 -207
  408. package/build/utils/transform-styles/ast/stringify/identity.js.map +0 -1
  409. package/build/utils/transform-styles/ast/stringify/index.js +0 -36
  410. package/build/utils/transform-styles/ast/stringify/index.js.map +0 -1
  411. package/build/utils/transform-styles/transforms/url-rewrite.js +0 -130
  412. package/build/utils/transform-styles/transforms/url-rewrite.js.map +0 -1
  413. package/build/utils/transform-styles/transforms/wrap.js +0 -59
  414. package/build/utils/transform-styles/transforms/wrap.js.map +0 -1
  415. package/build/utils/transform-styles/traverse.js +0 -37
  416. package/build/utils/transform-styles/traverse.js.map +0 -1
  417. package/build-module/components/use-setting/index.js +0 -152
  418. package/build-module/components/use-setting/index.js.map +0 -1
  419. package/build-module/hooks/metadata-name.js.map +0 -1
  420. package/build-module/utils/transform-styles/ast/index.js +0 -6
  421. package/build-module/utils/transform-styles/ast/index.js.map +0 -1
  422. package/build-module/utils/transform-styles/ast/parse.js +0 -654
  423. package/build-module/utils/transform-styles/ast/parse.js.map +0 -1
  424. package/build-module/utils/transform-styles/ast/stringify/compiler.js +0 -49
  425. package/build-module/utils/transform-styles/ast/stringify/compiler.js.map +0 -1
  426. package/build-module/utils/transform-styles/ast/stringify/compress.js +0 -176
  427. package/build-module/utils/transform-styles/ast/stringify/compress.js.map +0 -1
  428. package/build-module/utils/transform-styles/ast/stringify/identity.js +0 -206
  429. package/build-module/utils/transform-styles/ast/stringify/identity.js.map +0 -1
  430. package/build-module/utils/transform-styles/ast/stringify/index.js +0 -29
  431. package/build-module/utils/transform-styles/ast/stringify/index.js.map +0 -1
  432. package/build-module/utils/transform-styles/transforms/url-rewrite.js +0 -123
  433. package/build-module/utils/transform-styles/transforms/url-rewrite.js.map +0 -1
  434. package/build-module/utils/transform-styles/transforms/wrap.js +0 -52
  435. package/build-module/utils/transform-styles/transforms/wrap.js.map +0 -1
  436. package/build-module/utils/transform-styles/traverse.js +0 -28
  437. package/build-module/utils/transform-styles/traverse.js.map +0 -1
  438. package/src/components/use-setting/index.js +0 -213
  439. package/src/utils/transform-styles/ast/index.js +0 -5
  440. package/src/utils/transform-styles/ast/parse.js +0 -732
  441. package/src/utils/transform-styles/ast/stringify/compiler.js +0 -50
  442. package/src/utils/transform-styles/ast/stringify/compress.js +0 -238
  443. package/src/utils/transform-styles/ast/stringify/identity.js +0 -286
  444. package/src/utils/transform-styles/ast/stringify/index.js +0 -32
  445. package/src/utils/transform-styles/test/__snapshots__/traverse.js.snap +0 -7
  446. package/src/utils/transform-styles/test/traverse.js +0 -24
  447. package/src/utils/transform-styles/transforms/test/__snapshots__/url-rewrite.js.snap +0 -25
  448. package/src/utils/transform-styles/transforms/test/__snapshots__/wrap.js.snap +0 -64
  449. package/src/utils/transform-styles/transforms/test/url-rewrite.js +0 -39
  450. package/src/utils/transform-styles/transforms/test/wrap.js +0 -95
  451. package/src/utils/transform-styles/transforms/url-rewrite.js +0 -139
  452. package/src/utils/transform-styles/transforms/wrap.js +0 -56
  453. package/src/utils/transform-styles/traverse.js +0 -32
@@ -29,7 +29,7 @@ import { getFilename } from '@wordpress/url';
29
29
  */
30
30
  import InspectorControls from '../components/inspector-controls';
31
31
  import MediaReplaceFlow from '../components/media-replace-flow';
32
- import useSetting from '../components/use-setting';
32
+ import { useSettings } from '../components/use-settings';
33
33
  import { cleanEmptyObject } from './utils';
34
34
  import { store as blockEditorStore } from '../store';
35
35
 
@@ -281,19 +281,17 @@ function BackgroundImagePanelItem( props ) {
281
281
  }
282
282
 
283
283
  export function BackgroundImagePanel( props ) {
284
- const isBackgroundImageSupported =
285
- useSetting( 'background.backgroundImage' ) &&
286
- hasBackgroundSupport( props.name, 'backgroundImage' );
287
-
288
- if ( ! isBackgroundImageSupported ) {
284
+ const [ backgroundImage ] = useSettings( 'background.backgroundImage' );
285
+ if (
286
+ ! backgroundImage ||
287
+ ! hasBackgroundSupport( props.name, 'backgroundImage' )
288
+ ) {
289
289
  return null;
290
290
  }
291
291
 
292
292
  return (
293
293
  <InspectorControls group="background">
294
- { isBackgroundImageSupported && (
295
- <BackgroundImagePanelItem { ...props } />
296
- ) }
294
+ <BackgroundImagePanelItem { ...props } />
297
295
  </InspectorControls>
298
296
  );
299
297
  }
@@ -4,7 +4,7 @@
4
4
  import { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';
5
5
  import { addFilter } from '@wordpress/hooks';
6
6
  import { __, sprintf } from '@wordpress/i18n';
7
- import { getBlockSupport } from '@wordpress/blocks';
7
+ import { hasBlockSupport } from '@wordpress/blocks';
8
8
  import {
9
9
  MenuItem,
10
10
  __experimentalHStack as HStack,
@@ -189,21 +189,13 @@ function BlockRenameControl( props ) {
189
189
 
190
190
  export const withBlockRenameControl = createHigherOrderComponent(
191
191
  ( BlockEdit ) => ( props ) => {
192
- const { clientId, name, attributes, setAttributes } = props;
192
+ const { clientId, name, attributes, setAttributes, isSelected } = props;
193
193
 
194
- const metaDataSupport = getBlockSupport(
195
- name,
196
- '__experimentalMetadata',
197
- false
198
- );
199
-
200
- const supportsBlockNaming = !! (
201
- true === metaDataSupport || metaDataSupport?.name
202
- );
194
+ const supportsBlockNaming = hasBlockSupport( name, 'renaming', true );
203
195
 
204
196
  return (
205
197
  <>
206
- { supportsBlockNaming && (
198
+ { isSelected && supportsBlockNaming && (
207
199
  <>
208
200
  <BlockRenameControl
209
201
  clientId={ clientId }
@@ -211,8 +203,7 @@ export const withBlockRenameControl = createHigherOrderComponent(
211
203
  onChange={ ( newName ) => {
212
204
  setAttributes( {
213
205
  metadata: {
214
- ...( attributes?.metadata &&
215
- attributes?.metadata ),
206
+ ...attributes?.metadata,
216
207
  name: newName,
217
208
  },
218
209
  } );
@@ -2,10 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { addFilter } from '@wordpress/hooks';
5
- /**
6
- * Internal dependencies
7
- */
8
- import { hasBlockMetadataSupport } from './metadata';
5
+ import { hasBlockSupport } from '@wordpress/blocks';
9
6
 
10
7
  /**
11
8
  * Filters registered block settings, adding an `__experimentalLabel` callback if one does not already exist.
@@ -20,10 +17,10 @@ export function addLabelCallback( settings ) {
20
17
  return settings;
21
18
  }
22
19
 
23
- const supportsBlockNaming = hasBlockMetadataSupport(
20
+ const supportsBlockNaming = hasBlockSupport(
24
21
  settings,
25
- 'name',
26
- false // default value
22
+ 'renaming',
23
+ true // default value
27
24
  );
28
25
 
29
26
  // Check whether block metadata is supported before using it.
@@ -25,7 +25,7 @@ import {
25
25
  shouldSkipSerialization,
26
26
  useBlockSettings,
27
27
  } from './utils';
28
- import useSetting from '../components/use-setting';
28
+ import { useSettings } from '../components/use-settings';
29
29
  import InspectorControls from '../components/inspector-controls';
30
30
  import {
31
31
  useHasColorPanel,
@@ -368,9 +368,12 @@ export const withColorPaletteStyles = createHigherOrderComponent(
368
368
  ( BlockListBlock ) => ( props ) => {
369
369
  const { name, attributes } = props;
370
370
  const { backgroundColor, textColor } = attributes;
371
- const userPalette = useSetting( 'color.palette.custom' );
372
- const themePalette = useSetting( 'color.palette.theme' );
373
- const defaultPalette = useSetting( 'color.palette.default' );
371
+ const [ userPalette, themePalette, defaultPalette ] = useSettings(
372
+ 'color.palette.custom',
373
+ 'color.palette.theme',
374
+ 'color.palette.default'
375
+ );
376
+
374
377
  const colors = useMemo(
375
378
  () => [
376
379
  ...( userPalette || [] ),
@@ -39,6 +39,30 @@ export function addAttribute( settings ) {
39
39
  return settings;
40
40
  }
41
41
 
42
+ function CustomClassNameControls( { attributes, setAttributes } ) {
43
+ const blockEditingMode = useBlockEditingMode();
44
+ if ( blockEditingMode !== 'default' ) {
45
+ return null;
46
+ }
47
+
48
+ return (
49
+ <InspectorControls group="advanced">
50
+ <TextControl
51
+ __nextHasNoMarginBottom
52
+ autoComplete="off"
53
+ label={ __( 'Additional CSS class(es)' ) }
54
+ value={ attributes.className || '' }
55
+ onChange={ ( nextValue ) => {
56
+ setAttributes( {
57
+ className: nextValue !== '' ? nextValue : undefined,
58
+ } );
59
+ } }
60
+ help={ __( 'Separate multiple classes with spaces.' ) }
61
+ />
62
+ </InspectorControls>
63
+ );
64
+ }
65
+
42
66
  /**
43
67
  * Override the default edit UI to include a new block inspector control for
44
68
  * assigning the custom class name, if block supports custom class name.
@@ -51,42 +75,23 @@ export function addAttribute( settings ) {
51
75
  export const withInspectorControl = createHigherOrderComponent(
52
76
  ( BlockEdit ) => {
53
77
  return ( props ) => {
54
- const blockEditingMode = useBlockEditingMode();
55
78
  const hasCustomClassName = hasBlockSupport(
56
79
  props.name,
57
80
  'customClassName',
58
81
  true
59
82
  );
60
- if ( hasCustomClassName && props.isSelected ) {
61
- return (
62
- <>
63
- <BlockEdit { ...props } />
64
- { blockEditingMode === 'default' && (
65
- <InspectorControls group="advanced">
66
- <TextControl
67
- __nextHasNoMarginBottom
68
- autoComplete="off"
69
- label={ __( 'Additional CSS class(es)' ) }
70
- value={ props.attributes.className || '' }
71
- onChange={ ( nextValue ) => {
72
- props.setAttributes( {
73
- className:
74
- nextValue !== ''
75
- ? nextValue
76
- : undefined,
77
- } );
78
- } }
79
- help={ __(
80
- 'Separate multiple classes with spaces.'
81
- ) }
82
- />
83
- </InspectorControls>
84
- ) }
85
- </>
86
- );
87
- }
88
-
89
- return <BlockEdit { ...props } />;
83
+
84
+ return (
85
+ <>
86
+ <BlockEdit { ...props } />
87
+ { hasCustomClassName && props.isSelected && (
88
+ <CustomClassNameControls
89
+ attributes={ props.attributes }
90
+ setAttributes={ props.setAttributes }
91
+ />
92
+ ) }
93
+ </>
94
+ );
90
95
  };
91
96
  },
92
97
  'withInspectorControl'
@@ -25,7 +25,7 @@ import {
25
25
  BlockControls,
26
26
  InspectorControls,
27
27
  __experimentalDuotoneControl as DuotoneControl,
28
- useSetting,
28
+ useSettings,
29
29
  } from '../components';
30
30
  import {
31
31
  getDuotoneFilter,
@@ -37,28 +37,39 @@ import { scopeSelector } from '../components/global-styles/utils';
37
37
  import { useBlockSettings } from './utils';
38
38
  import { default as StylesFiltersPanel } from '../components/global-styles/filters-panel';
39
39
  import { useBlockEditingMode } from '../components/block-editing-mode';
40
+ import { __unstableUseBlockElement as useBlockElement } from '../components/block-list/use-block-props/use-block-refs';
40
41
  import { store as blockEditorStore } from '../store';
41
42
  import { unlock } from '../lock-unlock';
42
43
 
43
44
  const EMPTY_ARRAY = [];
44
45
 
46
+ // Safari does not always update the duotone filter when the duotone colors
47
+ // are changed. This browser check is later used to force a re-render of the block
48
+ // element to ensure the duotone filter is updated. The check is included at the
49
+ // root of this file as it only needs to be run once per page load.
50
+ const isSafari =
51
+ window?.navigator.userAgent &&
52
+ window.navigator.userAgent.includes( 'Safari' ) &&
53
+ ! window.navigator.userAgent.includes( 'Chrome' ) &&
54
+ ! window.navigator.userAgent.includes( 'Chromium' );
55
+
45
56
  extend( [ namesPlugin ] );
46
57
 
47
58
  function useMultiOriginPresets( { presetSetting, defaultSetting } ) {
48
- const disableDefault = ! useSetting( defaultSetting );
49
- const userPresets =
50
- useSetting( `${ presetSetting }.custom` ) || EMPTY_ARRAY;
51
- const themePresets =
52
- useSetting( `${ presetSetting }.theme` ) || EMPTY_ARRAY;
53
- const defaultPresets =
54
- useSetting( `${ presetSetting }.default` ) || EMPTY_ARRAY;
59
+ const [ enableDefault, userPresets, themePresets, defaultPresets ] =
60
+ useSettings(
61
+ defaultSetting,
62
+ `${ presetSetting }.custom`,
63
+ `${ presetSetting }.theme`,
64
+ `${ presetSetting }.default`
65
+ );
55
66
  return useMemo(
56
67
  () => [
57
- ...userPresets,
58
- ...themePresets,
59
- ...( disableDefault ? EMPTY_ARRAY : defaultPresets ),
68
+ ...( userPresets || EMPTY_ARRAY ),
69
+ ...( themePresets || EMPTY_ARRAY ),
70
+ ...( ( enableDefault && defaultPresets ) || EMPTY_ARRAY ),
60
71
  ],
61
- [ disableDefault, userPresets, themePresets, defaultPresets ]
72
+ [ enableDefault, userPresets, themePresets, defaultPresets ]
62
73
  );
63
74
  }
64
75
 
@@ -100,9 +111,13 @@ function DuotonePanel( { attributes, setAttributes, name } ) {
100
111
  presetSetting: 'color.palette',
101
112
  defaultSetting: 'color.defaultPalette',
102
113
  } );
103
- const disableCustomColors = ! useSetting( 'color.custom' );
114
+ const [ enableCustomColors, enableCustomDuotone ] = useSettings(
115
+ 'color.custom',
116
+ 'color.customDuotone'
117
+ );
118
+ const disableCustomColors = ! enableCustomColors;
104
119
  const disableCustomDuotone =
105
- ! useSetting( 'color.customDuotone' ) ||
120
+ ! enableCustomDuotone ||
106
121
  ( colorPalette?.length === 0 && disableCustomColors );
107
122
 
108
123
  if ( duotonePalette?.length === 0 && disableCustomDuotone ) {
@@ -223,6 +238,7 @@ const withDuotoneControls = createHigherOrderComponent(
223
238
  );
224
239
 
225
240
  function DuotoneStyles( {
241
+ clientId,
226
242
  id: filterId,
227
243
  selector: duotoneSelector,
228
244
  attribute: duotoneAttr,
@@ -278,6 +294,8 @@ function DuotoneStyles( {
278
294
  useDispatch( blockEditorStore )
279
295
  );
280
296
 
297
+ const blockElement = useBlockElement( clientId );
298
+
281
299
  useEffect( () => {
282
300
  if ( ! isValidFilter ) return;
283
301
 
@@ -294,12 +312,30 @@ function DuotoneStyles( {
294
312
  __unstableType: 'svgs',
295
313
  } );
296
314
 
315
+ // Safari does not always update the duotone filter when the duotone colors
316
+ // are changed. When using Safari, force the block element to be repainted by
317
+ // the browser to ensure any changes are reflected visually. This logic matches
318
+ // that used on the site frontend in `block-supports/duotone.php`.
319
+ if ( blockElement && isSafari ) {
320
+ const display = blockElement.style.display;
321
+ // Switch to `inline-block` to force a repaint. In the editor, `inline-block`
322
+ // is used instead of `none` to ensure that scroll position is not affected,
323
+ // as `none` results in the editor scrolling to the top of the block.
324
+ blockElement.style.display = 'inline-block';
325
+ // Simply accessing el.offsetHeight flushes layout and style
326
+ // changes in WebKit without having to wait for setTimeout.
327
+ // eslint-disable-next-line no-unused-expressions
328
+ blockElement.offsetHeight;
329
+ blockElement.style.display = display;
330
+ }
331
+
297
332
  return () => {
298
333
  deleteStyleOverride( filterId );
299
334
  deleteStyleOverride( `duotone-${ filterId }` );
300
335
  };
301
336
  }, [
302
337
  isValidFilter,
338
+ blockElement,
303
339
  colors,
304
340
  selector,
305
341
  filterId,
@@ -378,6 +414,7 @@ const withDuotoneStyles = createHigherOrderComponent(
378
414
  <>
379
415
  { shouldRender && (
380
416
  <DuotoneStyles
417
+ clientId={ props.clientId }
381
418
  id={ filterClass }
382
419
  selector={ selector }
383
420
  attribute={ attribute }
@@ -22,7 +22,7 @@ import {
22
22
  transformStyles,
23
23
  shouldSkipSerialization,
24
24
  } from './utils';
25
- import useSetting from '../components/use-setting';
25
+ import { useSettings } from '../components/use-settings';
26
26
  import { store as blockEditorStore } from '../store';
27
27
  import {
28
28
  getTypographyFontSizeValue,
@@ -122,7 +122,7 @@ export function FontSizeEdit( props ) {
122
122
  attributes: { fontSize, style },
123
123
  setAttributes,
124
124
  } = props;
125
- const fontSizes = useSetting( 'typography.fontSizes' );
125
+ const [ fontSizes ] = useSettings( 'typography.fontSizes' );
126
126
 
127
127
  const onChange = ( value ) => {
128
128
  const fontSizeSlug = getFontSizeObjectByValue( fontSizes, value ).slug;
@@ -167,7 +167,7 @@ export function FontSizeEdit( props ) {
167
167
  * @return {boolean} Whether setting is disabled.
168
168
  */
169
169
  export function useIsFontSizeDisabled( { name: blockName } = {} ) {
170
- const fontSizes = useSetting( 'typography.fontSizes' );
170
+ const [ fontSizes ] = useSettings( 'typography.fontSizes' );
171
171
  const hasFontSizes = !! fontSizes?.length;
172
172
 
173
173
  return (
@@ -186,7 +186,7 @@ export function useIsFontSizeDisabled( { name: blockName } = {} ) {
186
186
  */
187
187
  const withFontSizeInlineStyles = createHigherOrderComponent(
188
188
  ( BlockListBlock ) => ( props ) => {
189
- const fontSizes = useSetting( 'typography.fontSizes' );
189
+ const [ fontSizes ] = useSettings( 'typography.fontSizes' );
190
190
  const {
191
191
  name: blockName,
192
192
  attributes: { fontSize, style },
@@ -19,9 +19,9 @@ import './position';
19
19
  import './layout';
20
20
  import './content-lock-ui';
21
21
  import './metadata';
22
- import './metadata-name';
23
22
  import './custom-fields';
24
23
  import './block-hooks';
24
+ import './block-renaming';
25
25
  import './block-rename-ui';
26
26
 
27
27
  export { useCustomSides } from './dimensions';
@@ -24,7 +24,7 @@ import { useEffect } from '@wordpress/element';
24
24
  */
25
25
  import { store as blockEditorStore } from '../store';
26
26
  import { InspectorControls } from '../components';
27
- import useSetting from '../components/use-setting';
27
+ import { useSettings } from '../components/use-settings';
28
28
  import { getLayoutType, getLayoutTypes } from '../layouts';
29
29
  import { useBlockEditingMode } from '../components/block-editing-mode';
30
30
  import { LAYOUT_DEFINITIONS } from '../layouts/definitions';
@@ -123,7 +123,7 @@ export function useLayoutStyles( blockAttributes = {}, blockName, selector ) {
123
123
  ? { ...layout, type: 'constrained' }
124
124
  : layout || {};
125
125
  const fullLayoutType = getLayoutType( usedLayout?.type || 'default' );
126
- const blockGapSupport = useSetting( 'spacing.blockGap' );
126
+ const [ blockGapSupport ] = useSettings( 'spacing.blockGap' );
127
127
  const hasBlockGapSupport = blockGapSupport !== null;
128
128
  const css = fullLayoutType?.getLayoutStyle?.( {
129
129
  blockName,
@@ -142,7 +142,7 @@ function LayoutPanel( { setAttributes, attributes, name: blockName } ) {
142
142
  } = settings;
143
143
 
144
144
  const { layout } = attributes;
145
- const defaultThemeLayout = useSetting( 'layout' );
145
+ const [ defaultThemeLayout ] = useSettings( 'layout' );
146
146
  const { themeSupportsLayout } = useSelect( ( select ) => {
147
147
  const { getSettings } = select( blockEditorStore );
148
148
  return {
@@ -151,6 +151,10 @@ function LayoutPanel( { setAttributes, attributes, name: blockName } ) {
151
151
  }, [] );
152
152
  const blockEditingMode = useBlockEditingMode();
153
153
 
154
+ if ( blockEditingMode !== 'default' ) {
155
+ return null;
156
+ }
157
+
154
158
  const layoutBlockSupport = getBlockSupport(
155
159
  blockName,
156
160
  layoutBlockSupportKey,
@@ -270,7 +274,7 @@ function LayoutPanel( { setAttributes, attributes, name: blockName } ) {
270
274
  ) }
271
275
  </PanelBody>
272
276
  </InspectorControls>
273
- { ! inherit && blockEditingMode === 'default' && layoutType && (
277
+ { ! inherit && layoutType && (
274
278
  <layoutType.toolBarControls
275
279
  layout={ usedLayout }
276
280
  onChange={ onChangeLayout }
@@ -331,14 +335,10 @@ export function addAttribute( settings ) {
331
335
  */
332
336
  export const withInspectorControls = createHigherOrderComponent(
333
337
  ( BlockEdit ) => ( props ) => {
334
- const { name: blockName } = props;
335
- const supportLayout = hasLayoutBlockSupport( blockName );
338
+ const supportLayout = hasLayoutBlockSupport( props.name );
336
339
 
337
- const blockEditingMode = useBlockEditingMode();
338
340
  return [
339
- supportLayout && blockEditingMode === 'default' && (
340
- <LayoutPanel key="layout" { ...props } />
341
- ),
341
+ supportLayout && <LayoutPanel key="layout" { ...props } />,
342
342
  <BlockEdit key="edit" { ...props } />,
343
343
  ];
344
344
  },
@@ -375,7 +375,7 @@ export const withLayoutStyles = createHigherOrderComponent(
375
375
  : null;
376
376
  // Higher specificity to override defaults from theme.json.
377
377
  const selector = `.wp-container-${ id }.wp-container-${ id }`;
378
- const blockGapSupport = useSetting( 'spacing.blockGap' );
378
+ const [ blockGapSupport ] = useSettings( 'spacing.blockGap' );
379
379
  const hasBlockGapSupport = blockGapSupport !== null;
380
380
 
381
381
  // Get CSS string for the current layout type.
@@ -408,11 +408,11 @@ export const withLayoutStyles = createHigherOrderComponent(
408
408
 
409
409
  useEffect( () => {
410
410
  if ( ! css ) return;
411
- setStyleOverride( id, { css } );
411
+ setStyleOverride( selector, { css } );
412
412
  return () => {
413
- deleteStyleOverride( id );
413
+ deleteStyleOverride( selector );
414
414
  };
415
- }, [ id, css, setStyleOverride, deleteStyleOverride ] );
415
+ }, [ selector, css, setStyleOverride, deleteStyleOverride ] );
416
416
 
417
417
  return (
418
418
  <BlockListBlock
@@ -472,11 +472,11 @@ export const withChildLayoutStyles = createHigherOrderComponent(
472
472
 
473
473
  useEffect( () => {
474
474
  if ( ! css ) return;
475
- setStyleOverride( id, { css } );
475
+ setStyleOverride( selector, { css } );
476
476
  return () => {
477
- deleteStyleOverride( id );
477
+ deleteStyleOverride( selector );
478
478
  };
479
- }, [ id, css, setStyleOverride, deleteStyleOverride ] );
479
+ }, [ selector, css, setStyleOverride, deleteStyleOverride ] );
480
480
 
481
481
  return <BlockListBlock { ...props } className={ className } />;
482
482
  },
@@ -8,7 +8,7 @@ import { hasBlockSupport } from '@wordpress/blocks';
8
8
  */
9
9
  import LineHeightControl from '../components/line-height-control';
10
10
  import { cleanEmptyObject } from './utils';
11
- import useSetting from '../components/use-setting';
11
+ import { useSettings } from '../components/use-settings';
12
12
 
13
13
  export const LINE_HEIGHT_SUPPORT_KEY = 'typography.lineHeight';
14
14
 
@@ -54,9 +54,9 @@ export function LineHeightEdit( props ) {
54
54
  * @return {boolean} Whether setting is disabled.
55
55
  */
56
56
  export function useIsLineHeightDisabled( { name: blockName } = {} ) {
57
- const isDisabled = ! useSetting( 'typography.lineHeight' );
57
+ const [ isEnabled ] = useSettings( 'typography.lineHeight' );
58
58
 
59
59
  return (
60
- ! hasBlockSupport( blockName, LINE_HEIGHT_SUPPORT_KEY ) || isDisabled
60
+ ! isEnabled || ! hasBlockSupport( blockName, LINE_HEIGHT_SUPPORT_KEY )
61
61
  );
62
62
  }
@@ -2,19 +2,8 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { addFilter } from '@wordpress/hooks';
5
- import { getBlockSupport } from '@wordpress/blocks';
6
-
7
5
  const META_ATTRIBUTE_NAME = 'metadata';
8
6
 
9
- export function hasBlockMetadataSupport( blockType, feature = '' ) {
10
- // Only core blocks are allowed to use __experimentalMetadata until the fetaure is stablised.
11
- if ( ! blockType.name.startsWith( 'core/' ) ) {
12
- return false;
13
- }
14
- const support = getBlockSupport( blockType, '__experimentalMetadata' );
15
- return !! ( true === support || support?.[ feature ] );
16
- }
17
-
18
7
  /**
19
8
  * Filters registered block settings, extending attributes to include `metadata`.
20
9
  *
@@ -29,39 +18,18 @@ export function addMetaAttribute( blockTypeSettings ) {
29
18
  return blockTypeSettings;
30
19
  }
31
20
 
32
- const supportsBlockNaming = hasBlockMetadataSupport(
33
- blockTypeSettings,
34
- 'name'
35
- );
36
-
37
- if ( supportsBlockNaming ) {
38
- blockTypeSettings.attributes = {
39
- ...blockTypeSettings.attributes,
40
- [ META_ATTRIBUTE_NAME ]: {
41
- type: 'object',
42
- },
43
- };
44
- }
21
+ blockTypeSettings.attributes = {
22
+ ...blockTypeSettings.attributes,
23
+ [ META_ATTRIBUTE_NAME ]: {
24
+ type: 'object',
25
+ },
26
+ };
45
27
 
46
28
  return blockTypeSettings;
47
29
  }
48
30
 
49
- export function addSaveProps( extraProps, blockType, attributes ) {
50
- if ( hasBlockMetadataSupport( blockType ) ) {
51
- extraProps[ META_ATTRIBUTE_NAME ] = attributes[ META_ATTRIBUTE_NAME ];
52
- }
53
-
54
- return extraProps;
55
- }
56
-
57
31
  addFilter(
58
32
  'blocks.registerBlockType',
59
33
  'core/metadata/addMetaAttribute',
60
34
  addMetaAttribute
61
35
  );
62
-
63
- addFilter(
64
- 'blocks.getSaveContent.extraProps',
65
- 'core/metadata/save-props',
66
- addSaveProps
67
- );
@@ -26,7 +26,7 @@ import { addFilter } from '@wordpress/hooks';
26
26
  * Internal dependencies
27
27
  */
28
28
  import BlockList from '../components/block-list';
29
- import useSetting from '../components/use-setting';
29
+ import { useSettings } from '../components/use-settings';
30
30
  import InspectorControls from '../components/inspector-controls';
31
31
  import useBlockDisplayInformation from '../components/use-block-display-information';
32
32
  import { cleanEmptyObject } from './utils';
@@ -197,8 +197,10 @@ export function resetPosition( { attributes = {}, setAttributes } ) {
197
197
  * @return {boolean} Whether padding setting is disabled.
198
198
  */
199
199
  export function useIsPositionDisabled( { name: blockName } = {} ) {
200
- const allowFixed = useSetting( 'position.fixed' );
201
- const allowSticky = useSetting( 'position.sticky' );
200
+ const [ allowFixed, allowSticky ] = useSettings(
201
+ 'position.fixed',
202
+ 'position.sticky'
203
+ );
202
204
  const isDisabled = ! allowFixed && ! allowSticky;
203
205
 
204
206
  return ! hasPositionSupport( blockName ) || isDisabled;
@@ -20,7 +20,7 @@ import {
20
20
  __experimentalGetGradientClass,
21
21
  getGradientValueBySlug,
22
22
  } from '../components/gradients';
23
- import useSetting from '../components/use-setting';
23
+ import { useSettings } from '../components/use-settings';
24
24
 
25
25
  // The code in this file has largely been lifted from the color block support
26
26
  // hook.
@@ -73,8 +73,6 @@ export function getColorClassesAndStyles( attributes ) {
73
73
  };
74
74
  }
75
75
 
76
- const EMPTY_OBJECT = {};
77
-
78
76
  /**
79
77
  * Determines the color related props for a block derived from its color block
80
78
  * support attributes.
@@ -89,13 +87,22 @@ const EMPTY_OBJECT = {};
89
87
  export function useColorProps( attributes ) {
90
88
  const { backgroundColor, textColor, gradient } = attributes;
91
89
 
92
- // Some color settings have a special handling for deprecated flags in `useSetting`,
93
- // so we can't unwrap them by doing const { ... } = useSetting('color')
94
- // until https://github.com/WordPress/gutenberg/issues/37094 is fixed.
95
- const userPalette = useSetting( 'color.palette.custom' );
96
- const themePalette = useSetting( 'color.palette.theme' );
97
- const defaultPalette = useSetting( 'color.palette.default' );
98
- const gradientsPerOrigin = useSetting( 'color.gradients' ) || EMPTY_OBJECT;
90
+ const [
91
+ userPalette,
92
+ themePalette,
93
+ defaultPalette,
94
+ userGradients,
95
+ themeGradients,
96
+ defaultGradients,
97
+ ] = useSettings(
98
+ 'color.palette.custom',
99
+ 'color.palette.theme',
100
+ 'color.palette.default',
101
+ 'color.gradients.custom',
102
+ 'color.gradients.theme',
103
+ 'color.gradients.default'
104
+ );
105
+
99
106
  const colors = useMemo(
100
107
  () => [
101
108
  ...( userPalette || [] ),
@@ -106,11 +113,11 @@ export function useColorProps( attributes ) {
106
113
  );
107
114
  const gradients = useMemo(
108
115
  () => [
109
- ...( gradientsPerOrigin?.custom || [] ),
110
- ...( gradientsPerOrigin?.theme || [] ),
111
- ...( gradientsPerOrigin?.default || [] ),
116
+ ...( userGradients || [] ),
117
+ ...( themeGradients || [] ),
118
+ ...( defaultGradients || [] ),
112
119
  ],
113
- [ gradientsPerOrigin ]
120
+ [ userGradients, themeGradients, defaultGradients ]
114
121
  );
115
122
 
116
123
  const colorProps = getColorClassesAndStyles( attributes );