@wordpress/block-editor 11.3.6 → 11.5.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 (357) hide show
  1. package/CHANGELOG.md +3 -1
  2. package/build/components/block-lock/modal.js +1 -0
  3. package/build/components/block-lock/modal.js.map +1 -1
  4. package/build/components/block-popover/inbetween.js +10 -33
  5. package/build/components/block-popover/inbetween.js.map +1 -1
  6. package/build/components/block-settings-menu/block-settings-dropdown.js +2 -2
  7. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  8. package/build/components/block-styles/index.js +2 -1
  9. package/build/components/block-styles/index.js.map +1 -1
  10. package/build/components/block-types-list/index.native.js +2 -0
  11. package/build/components/block-types-list/index.native.js.map +1 -1
  12. package/build/components/child-layout-control/index.js +107 -0
  13. package/build/components/child-layout-control/index.js.map +1 -0
  14. package/build/components/colors-gradients/control.js +6 -3
  15. package/build/components/colors-gradients/control.js.map +1 -1
  16. package/build/components/date-format-picker/index.js +3 -3
  17. package/build/components/date-format-picker/index.js.map +1 -1
  18. package/build/components/font-appearance-control/index.js +0 -3
  19. package/build/components/font-appearance-control/index.js.map +1 -1
  20. package/build/components/global-styles/dimensions-panel.js +594 -0
  21. package/build/components/global-styles/dimensions-panel.js.map +1 -0
  22. package/build/components/global-styles/hooks.js +142 -45
  23. package/build/components/global-styles/hooks.js.map +1 -1
  24. package/build/components/global-styles/index.js +38 -0
  25. package/build/components/global-styles/index.js.map +1 -1
  26. package/build/components/global-styles/typography-panel.js +434 -0
  27. package/build/components/global-styles/typography-panel.js.map +1 -0
  28. package/build/components/global-styles/use-global-styles-output.js +7 -3
  29. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  30. package/build/components/global-styles/utils.js +2 -0
  31. package/build/components/global-styles/utils.js.map +1 -1
  32. package/build/components/iframe/index.js +17 -11
  33. package/build/components/iframe/index.js.map +1 -1
  34. package/build/components/image-editor/aspect-ratio-dropdown.js +2 -1
  35. package/build/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  36. package/build/components/image-size-control/index.js +6 -11
  37. package/build/components/image-size-control/index.js.map +1 -1
  38. package/build/components/index.native.js +23 -0
  39. package/build/components/index.native.js.map +1 -1
  40. package/build/components/inserter/block-patterns-tab.js +9 -15
  41. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  42. package/build/components/inserter/block-types-tab.native.js +4 -1
  43. package/build/components/inserter/block-types-tab.native.js.map +1 -1
  44. package/build/components/inserter/reusable-blocks-tab.native.js +4 -1
  45. package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  46. package/build/components/inserter/search-results.native.js +4 -1
  47. package/build/components/inserter/search-results.native.js.map +1 -1
  48. package/build/components/inspector-controls/block-support-tools-panel.js +1 -1
  49. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  50. package/build/components/inspector-controls/fill.js +38 -9
  51. package/build/components/inspector-controls/fill.js.map +1 -1
  52. package/build/components/link-control/index.js +55 -28
  53. package/build/components/link-control/index.js.map +1 -1
  54. package/build/components/link-control/settings-drawer.js +72 -30
  55. package/build/components/link-control/settings-drawer.js.map +1 -1
  56. package/build/components/link-control/settings.js +53 -0
  57. package/build/components/link-control/settings.js.map +1 -0
  58. package/build/components/list-view/block.js +4 -2
  59. package/build/components/list-view/block.js.map +1 -1
  60. package/build/components/list-view/expander.js +2 -1
  61. package/build/components/list-view/expander.js.map +1 -1
  62. package/build/components/list-view/index.js +6 -1
  63. package/build/components/list-view/index.js.map +1 -1
  64. package/build/components/off-canvas-editor/appender.js +5 -10
  65. package/build/components/off-canvas-editor/appender.js.map +1 -1
  66. package/build/components/off-canvas-editor/block-contents.js +3 -2
  67. package/build/components/off-canvas-editor/block-contents.js.map +1 -1
  68. package/build/components/off-canvas-editor/branch.js +1 -0
  69. package/build/components/off-canvas-editor/branch.js.map +1 -1
  70. package/build/components/off-canvas-editor/index.js +7 -3
  71. package/build/components/off-canvas-editor/index.js.map +1 -1
  72. package/build/components/off-canvas-editor/leaf-more-menu.js +24 -4
  73. package/build/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  74. package/build/components/off-canvas-editor/link-ui.js +2 -0
  75. package/build/components/off-canvas-editor/link-ui.js.map +1 -1
  76. package/build/components/responsive-block-control/index.js +1 -0
  77. package/build/components/responsive-block-control/index.js.map +1 -1
  78. package/build/components/rich-text/index.js +9 -45
  79. package/build/components/rich-text/index.js.map +1 -1
  80. package/build/components/rich-text/use-delete.js +73 -0
  81. package/build/components/rich-text/use-delete.js.map +1 -0
  82. package/build/components/rich-text/use-input-rules.js +14 -6
  83. package/build/components/rich-text/use-input-rules.js.map +1 -1
  84. package/build/components/url-input/index.js +2 -2
  85. package/build/components/url-input/index.js.map +1 -1
  86. package/build/components/writing-flow/use-selection-observer.js +4 -1
  87. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  88. package/build/hooks/align.js +3 -1
  89. package/build/hooks/align.js.map +1 -1
  90. package/build/hooks/dimensions.js +78 -190
  91. package/build/hooks/dimensions.js.map +1 -1
  92. package/build/hooks/duotone.js +94 -25
  93. package/build/hooks/duotone.js.map +1 -1
  94. package/build/hooks/font-family.js +2 -76
  95. package/build/hooks/font-family.js.map +1 -1
  96. package/build/hooks/font-size.js +3 -51
  97. package/build/hooks/font-size.js.map +1 -1
  98. package/build/hooks/gap.js +0 -201
  99. package/build/hooks/gap.js.map +1 -1
  100. package/build/hooks/index.js +2 -0
  101. package/build/hooks/index.js.map +1 -1
  102. package/build/hooks/layout.js +14 -5
  103. package/build/hooks/layout.js.map +1 -1
  104. package/build/hooks/line-height.js +0 -42
  105. package/build/hooks/line-height.js.map +1 -1
  106. package/build/hooks/margin.js +7 -163
  107. package/build/hooks/margin.js.map +1 -1
  108. package/build/hooks/padding.js +7 -163
  109. package/build/hooks/padding.js.map +1 -1
  110. package/build/hooks/typography.js +98 -128
  111. package/build/hooks/typography.js.map +1 -1
  112. package/build/hooks/utils.js +75 -0
  113. package/build/hooks/utils.js.map +1 -1
  114. package/build/layouts/flex.js +1 -0
  115. package/build/layouts/flex.js.map +1 -1
  116. package/build/store/actions.js +24 -12
  117. package/build/store/actions.js.map +1 -1
  118. package/build/store/reducer.js +53 -47
  119. package/build/store/reducer.js.map +1 -1
  120. package/build/store/selectors.js +22 -1
  121. package/build/store/selectors.js.map +1 -1
  122. package/build/utils/parse-css-unit-to-px.js +36 -3
  123. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  124. package/build-module/components/block-lock/modal.js +1 -0
  125. package/build-module/components/block-lock/modal.js.map +1 -1
  126. package/build-module/components/block-popover/inbetween.js +10 -33
  127. package/build-module/components/block-popover/inbetween.js.map +1 -1
  128. package/build-module/components/block-settings-menu/block-settings-dropdown.js +2 -2
  129. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  130. package/build-module/components/block-styles/index.js +2 -1
  131. package/build-module/components/block-styles/index.js.map +1 -1
  132. package/build-module/components/block-types-list/index.native.js +2 -0
  133. package/build-module/components/block-types-list/index.native.js.map +1 -1
  134. package/build-module/components/child-layout-control/index.js +98 -0
  135. package/build-module/components/child-layout-control/index.js.map +1 -0
  136. package/build-module/components/colors-gradients/control.js +6 -3
  137. package/build-module/components/colors-gradients/control.js.map +1 -1
  138. package/build-module/components/date-format-picker/index.js +4 -4
  139. package/build-module/components/date-format-picker/index.js.map +1 -1
  140. package/build-module/components/font-appearance-control/index.js +2 -1
  141. package/build-module/components/font-appearance-control/index.js.map +1 -1
  142. package/build-module/components/global-styles/dimensions-panel.js +574 -0
  143. package/build-module/components/global-styles/dimensions-panel.js.map +1 -0
  144. package/build-module/components/global-styles/hooks.js +138 -46
  145. package/build-module/components/global-styles/hooks.js.map +1 -1
  146. package/build-module/components/global-styles/index.js +3 -1
  147. package/build-module/components/global-styles/index.js.map +1 -1
  148. package/build-module/components/global-styles/typography-panel.js +415 -0
  149. package/build-module/components/global-styles/typography-panel.js.map +1 -0
  150. package/build-module/components/global-styles/use-global-styles-output.js +7 -3
  151. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  152. package/build-module/components/global-styles/utils.js +2 -0
  153. package/build-module/components/global-styles/utils.js.map +1 -1
  154. package/build-module/components/iframe/index.js +17 -11
  155. package/build-module/components/iframe/index.js.map +1 -1
  156. package/build-module/components/image-editor/aspect-ratio-dropdown.js +2 -1
  157. package/build-module/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  158. package/build-module/components/image-size-control/index.js +7 -12
  159. package/build-module/components/image-size-control/index.js.map +1 -1
  160. package/build-module/components/index.native.js +2 -1
  161. package/build-module/components/index.native.js.map +1 -1
  162. package/build-module/components/inserter/block-patterns-tab.js +9 -15
  163. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  164. package/build-module/components/inserter/block-types-tab.native.js +3 -1
  165. package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
  166. package/build-module/components/inserter/reusable-blocks-tab.native.js +3 -1
  167. package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  168. package/build-module/components/inserter/search-results.native.js +3 -1
  169. package/build-module/components/inserter/search-results.native.js.map +1 -1
  170. package/build-module/components/inspector-controls/block-support-tools-panel.js +1 -1
  171. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  172. package/build-module/components/inspector-controls/fill.js +39 -9
  173. package/build-module/components/inspector-controls/fill.js.map +1 -1
  174. package/build-module/components/link-control/index.js +56 -28
  175. package/build-module/components/link-control/index.js.map +1 -1
  176. package/build-module/components/link-control/settings-drawer.js +68 -30
  177. package/build-module/components/link-control/settings-drawer.js.map +1 -1
  178. package/build-module/components/link-control/settings.js +44 -0
  179. package/build-module/components/link-control/settings.js.map +1 -0
  180. package/build-module/components/list-view/block.js +4 -2
  181. package/build-module/components/list-view/block.js.map +1 -1
  182. package/build-module/components/list-view/expander.js +2 -1
  183. package/build-module/components/list-view/expander.js.map +1 -1
  184. package/build-module/components/list-view/index.js +6 -1
  185. package/build-module/components/list-view/index.js.map +1 -1
  186. package/build-module/components/off-canvas-editor/appender.js +5 -10
  187. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  188. package/build-module/components/off-canvas-editor/block-contents.js +3 -2
  189. package/build-module/components/off-canvas-editor/block-contents.js.map +1 -1
  190. package/build-module/components/off-canvas-editor/branch.js +1 -0
  191. package/build-module/components/off-canvas-editor/branch.js.map +1 -1
  192. package/build-module/components/off-canvas-editor/index.js +7 -3
  193. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  194. package/build-module/components/off-canvas-editor/leaf-more-menu.js +27 -7
  195. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  196. package/build-module/components/off-canvas-editor/link-ui.js +2 -0
  197. package/build-module/components/off-canvas-editor/link-ui.js.map +1 -1
  198. package/build-module/components/responsive-block-control/index.js +1 -0
  199. package/build-module/components/responsive-block-control/index.js.map +1 -1
  200. package/build-module/components/rich-text/index.js +9 -45
  201. package/build-module/components/rich-text/index.js.map +1 -1
  202. package/build-module/components/rich-text/use-delete.js +62 -0
  203. package/build-module/components/rich-text/use-delete.js.map +1 -0
  204. package/build-module/components/rich-text/use-input-rules.js +14 -6
  205. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  206. package/build-module/components/url-input/index.js +2 -2
  207. package/build-module/components/url-input/index.js.map +1 -1
  208. package/build-module/components/writing-flow/use-selection-observer.js +4 -1
  209. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  210. package/build-module/hooks/align.js +3 -1
  211. package/build-module/hooks/align.js.map +1 -1
  212. package/build-module/hooks/dimensions.js +81 -187
  213. package/build-module/hooks/dimensions.js.map +1 -1
  214. package/build-module/hooks/duotone.js +86 -24
  215. package/build-module/hooks/duotone.js.map +1 -1
  216. package/build-module/hooks/font-family.js +3 -69
  217. package/build-module/hooks/font-family.js.map +1 -1
  218. package/build-module/hooks/font-size.js +6 -47
  219. package/build-module/hooks/font-size.js.map +1 -1
  220. package/build-module/hooks/gap.js +0 -182
  221. package/build-module/hooks/gap.js.map +1 -1
  222. package/build-module/hooks/index.js +1 -0
  223. package/build-module/hooks/index.js.map +1 -1
  224. package/build-module/hooks/layout.js +14 -5
  225. package/build-module/hooks/layout.js.map +1 -1
  226. package/build-module/hooks/line-height.js +0 -38
  227. package/build-module/hooks/line-height.js.map +1 -1
  228. package/build-module/hooks/margin.js +4 -143
  229. package/build-module/hooks/margin.js.map +1 -1
  230. package/build-module/hooks/padding.js +4 -143
  231. package/build-module/hooks/padding.js.map +1 -1
  232. package/build-module/hooks/typography.js +97 -123
  233. package/build-module/hooks/typography.js.map +1 -1
  234. package/build-module/hooks/utils.js +70 -0
  235. package/build-module/hooks/utils.js.map +1 -1
  236. package/build-module/layouts/flex.js +1 -0
  237. package/build-module/layouts/flex.js.map +1 -1
  238. package/build-module/store/actions.js +24 -12
  239. package/build-module/store/actions.js.map +1 -1
  240. package/build-module/store/reducer.js +53 -45
  241. package/build-module/store/reducer.js.map +1 -1
  242. package/build-module/store/selectors.js +22 -1
  243. package/build-module/store/selectors.js.map +1 -1
  244. package/build-module/utils/parse-css-unit-to-px.js +36 -3
  245. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  246. package/build-style/style-rtl.css +54 -64
  247. package/build-style/style.css +54 -64
  248. package/package.json +31 -31
  249. package/src/components/block-draggable/test/__snapshots__/index.native.js.snap +24 -24
  250. package/src/components/block-lock/modal.js +1 -0
  251. package/src/components/block-lock/style.scss +0 -9
  252. package/src/components/block-mobile-toolbar/test/__snapshots__/block-actions-menu.native.js.snap +20 -20
  253. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +15 -15
  254. package/src/components/block-popover/inbetween.js +21 -53
  255. package/src/components/block-settings-menu/block-settings-dropdown.js +4 -1
  256. package/src/components/block-styles/index.js +5 -1
  257. package/src/components/block-types-list/index.native.js +2 -0
  258. package/src/components/child-layout-control/index.js +106 -0
  259. package/src/components/color-palette/test/__snapshots__/control.js.snap +1 -1
  260. package/src/components/colors-gradients/control.js +3 -0
  261. package/src/components/date-format-picker/index.js +6 -8
  262. package/src/components/date-format-picker/style.scss +0 -5
  263. package/src/components/font-appearance-control/index.js +1 -1
  264. package/src/components/global-styles/dimensions-panel.js +627 -0
  265. package/src/components/global-styles/hooks.js +229 -66
  266. package/src/components/global-styles/index.js +9 -0
  267. package/src/components/global-styles/typography-panel.js +428 -0
  268. package/src/components/global-styles/use-global-styles-output.js +10 -5
  269. package/src/components/global-styles/utils.js +2 -0
  270. package/src/components/iframe/index.js +20 -18
  271. package/src/components/image-editor/aspect-ratio-dropdown.js +1 -0
  272. package/src/components/image-size-control/index.js +10 -12
  273. package/src/components/image-size-control/style.scss +3 -21
  274. package/src/components/index.native.js +5 -0
  275. package/src/components/inner-blocks/test/__snapshots__/index.js.snap +1 -1
  276. package/src/components/inserter/block-patterns-tab.js +9 -23
  277. package/src/components/inserter/block-types-tab.native.js +2 -0
  278. package/src/components/inserter/reusable-blocks-tab.native.js +2 -0
  279. package/src/components/inserter/search-results.native.js +2 -0
  280. package/src/components/inserter/test/__snapshots__/index.native.js.snap +15 -15
  281. package/src/components/inspector-controls/block-support-tools-panel.js +0 -1
  282. package/src/components/inspector-controls/fill.js +32 -8
  283. package/src/components/link-control/index.js +69 -34
  284. package/src/components/link-control/settings-drawer.js +85 -29
  285. package/src/components/link-control/settings.js +42 -0
  286. package/src/components/link-control/style.scss +63 -37
  287. package/src/components/link-control/test/index.js +347 -9
  288. package/src/components/list-view/block.js +7 -1
  289. package/src/components/list-view/expander.js +1 -0
  290. package/src/components/list-view/index.js +5 -0
  291. package/src/components/media-replace-flow/style.scss +7 -9
  292. package/src/components/media-replace-flow/test/index.js +1 -1
  293. package/src/components/off-canvas-editor/appender.js +13 -16
  294. package/src/components/off-canvas-editor/block-contents.js +2 -1
  295. package/src/components/off-canvas-editor/branch.js +1 -0
  296. package/src/components/off-canvas-editor/index.js +8 -2
  297. package/src/components/off-canvas-editor/leaf-more-menu.js +52 -15
  298. package/src/components/off-canvas-editor/link-ui.js +2 -0
  299. package/src/components/responsive-block-control/index.js +1 -0
  300. package/src/components/rich-text/index.js +8 -46
  301. package/src/components/rich-text/use-delete.js +59 -0
  302. package/src/components/rich-text/use-input-rules.js +13 -5
  303. package/src/components/url-input/index.js +3 -2
  304. package/src/components/url-popover/stories/index.js +1 -0
  305. package/src/components/writing-flow/use-selection-observer.js +5 -1
  306. package/src/hooks/align.js +1 -1
  307. package/src/hooks/dimensions.js +97 -269
  308. package/src/hooks/duotone.js +100 -30
  309. package/src/hooks/font-family.js +0 -58
  310. package/src/hooks/font-size.js +1 -36
  311. package/src/hooks/gap.js +0 -201
  312. package/src/hooks/index.js +1 -0
  313. package/src/hooks/layout.js +19 -6
  314. package/src/hooks/line-height.js +0 -33
  315. package/src/hooks/margin.js +1 -164
  316. package/src/hooks/padding.js +1 -163
  317. package/src/hooks/test/__snapshots__/align.native.js.snap +24 -24
  318. package/src/hooks/test/duotone.js +102 -0
  319. package/src/hooks/typography.js +112 -213
  320. package/src/hooks/utils.js +90 -0
  321. package/src/layouts/flex.js +1 -0
  322. package/src/store/actions.js +12 -4
  323. package/src/store/reducer.js +68 -43
  324. package/src/store/selectors.js +20 -1
  325. package/src/store/test/actions.js +4 -2
  326. package/src/utils/parse-css-unit-to-px.js +35 -5
  327. package/src/utils/test/parse-css-unit-to-px.js +12 -0
  328. package/build/hooks/child-layout.js +0 -213
  329. package/build/hooks/child-layout.js.map +0 -1
  330. package/build/hooks/font-appearance.js +0 -188
  331. package/build/hooks/font-appearance.js.map +0 -1
  332. package/build/hooks/letter-spacing.js +0 -129
  333. package/build/hooks/letter-spacing.js.map +0 -1
  334. package/build/hooks/min-height.js +0 -139
  335. package/build/hooks/min-height.js.map +0 -1
  336. package/build/hooks/text-decoration.js +0 -130
  337. package/build/hooks/text-decoration.js.map +0 -1
  338. package/build/hooks/text-transform.js +0 -130
  339. package/build/hooks/text-transform.js.map +0 -1
  340. package/build-module/hooks/child-layout.js +0 -193
  341. package/build-module/hooks/child-layout.js.map +0 -1
  342. package/build-module/hooks/font-appearance.js +0 -161
  343. package/build-module/hooks/font-appearance.js.map +0 -1
  344. package/build-module/hooks/letter-spacing.js +0 -107
  345. package/build-module/hooks/letter-spacing.js.map +0 -1
  346. package/build-module/hooks/min-height.js +0 -116
  347. package/build-module/hooks/min-height.js.map +0 -1
  348. package/build-module/hooks/text-decoration.js +0 -108
  349. package/build-module/hooks/text-decoration.js.map +0 -1
  350. package/build-module/hooks/text-transform.js +0 -108
  351. package/build-module/hooks/text-transform.js.map +0 -1
  352. package/src/hooks/child-layout.js +0 -195
  353. package/src/hooks/font-appearance.js +0 -146
  354. package/src/hooks/letter-spacing.js +0 -101
  355. package/src/hooks/min-height.js +0 -104
  356. package/src/hooks/text-decoration.js +0 -102
  357. package/src/hooks/text-transform.js +0 -101
@@ -7,16 +7,67 @@ import { get, set } from 'lodash';
7
7
  /**
8
8
  * WordPress dependencies
9
9
  */
10
- import { useContext, useCallback } from '@wordpress/element';
10
+ import { useContext, useCallback, useMemo } from '@wordpress/element';
11
+ import { useSelect } from '@wordpress/data';
12
+ import { store as blocksStore } from '@wordpress/blocks';
11
13
 
12
14
  /**
13
15
  * Internal dependencies
14
16
  */
15
17
  import { getValueFromVariable, getPresetVariableFromValue } from './utils';
16
18
  import { GlobalStylesContext } from './context';
19
+ import { unlock } from '../../lock-unlock';
17
20
 
18
21
  const EMPTY_CONFIG = { settings: {}, styles: {} };
19
22
 
23
+ const VALID_SETTINGS = [
24
+ 'appearanceTools',
25
+ 'useRootPaddingAwareAlignments',
26
+ 'border.color',
27
+ 'border.radius',
28
+ 'border.style',
29
+ 'border.width',
30
+ 'shadow.presets',
31
+ 'shadow.defaultPresets',
32
+ 'color.background',
33
+ 'color.custom',
34
+ 'color.customDuotone',
35
+ 'color.customGradient',
36
+ 'color.defaultDuotone',
37
+ 'color.defaultGradients',
38
+ 'color.defaultPalette',
39
+ 'color.duotone',
40
+ 'color.gradients',
41
+ 'color.link',
42
+ 'color.palette',
43
+ 'color.text',
44
+ 'custom',
45
+ 'dimensions.minHeight',
46
+ 'layout.contentSize',
47
+ 'layout.definitions',
48
+ 'layout.wideSize',
49
+ 'position.fixed',
50
+ 'position.sticky',
51
+ 'spacing.customSpacingSize',
52
+ 'spacing.spacingSizes',
53
+ 'spacing.spacingScale',
54
+ 'spacing.blockGap',
55
+ 'spacing.margin',
56
+ 'spacing.padding',
57
+ 'spacing.units',
58
+ 'typography.fluid',
59
+ 'typography.customFontSize',
60
+ 'typography.dropCap',
61
+ 'typography.fontFamilies',
62
+ 'typography.fontSizes',
63
+ 'typography.fontStyle',
64
+ 'typography.fontWeight',
65
+ 'typography.letterSpacing',
66
+ 'typography.lineHeight',
67
+ 'typography.textDecoration',
68
+ 'typography.textTransform',
69
+ ];
70
+
20
71
  export const useGlobalStylesReset = () => {
21
72
  const { user: config, setUserConfig } = useContext( GlobalStylesContext );
22
73
  const canReset = !! config && ! fastDeepEqual( config, EMPTY_CONFIG );
@@ -29,68 +80,78 @@ export const useGlobalStylesReset = () => {
29
80
  ];
30
81
  };
31
82
 
32
- export function useGlobalSetting( path, blockName, source = 'all' ) {
33
- const {
34
- merged: mergedConfig,
35
- base: baseConfig,
36
- user: userConfig,
37
- setUserConfig,
38
- } = useContext( GlobalStylesContext );
83
+ export function useGlobalSetting( propertyPath, blockName, source = 'all' ) {
84
+ const { setUserConfig, ...configs } = useContext( GlobalStylesContext );
85
+
86
+ const appendedBlockPath = blockName ? '.blocks.' + blockName : '';
87
+ const appendedPropertyPath = propertyPath ? '.' + propertyPath : '';
88
+ const contextualPath = `settings${ appendedBlockPath }${ appendedPropertyPath }`;
89
+ const globalPath = `settings${ appendedPropertyPath }`;
90
+ const sourceKey = source === 'all' ? 'merged' : source;
91
+
92
+ const settingValue = useMemo( () => {
93
+ const configToUse = configs[ sourceKey ];
94
+ if ( ! configToUse ) {
95
+ throw 'Unsupported source';
96
+ }
39
97
 
40
- const fullPath = ! blockName
41
- ? `settings.${ path }`
42
- : `settings.blocks.${ blockName }.${ path }`;
98
+ if ( propertyPath ) {
99
+ return (
100
+ get( configToUse, contextualPath ) ??
101
+ get( configToUse, globalPath )
102
+ );
103
+ }
104
+
105
+ const result = {};
106
+ VALID_SETTINGS.forEach( ( setting ) => {
107
+ const value =
108
+ get(
109
+ configToUse,
110
+ `settings${ appendedBlockPath }.${ setting }`
111
+ ) ?? get( configToUse, `settings.${ setting }` );
112
+ if ( value ) {
113
+ set( result, setting, value );
114
+ }
115
+ } );
116
+ return result;
117
+ }, [
118
+ configs,
119
+ sourceKey,
120
+ propertyPath,
121
+ contextualPath,
122
+ globalPath,
123
+ appendedBlockPath,
124
+ ] );
43
125
 
44
126
  const setSetting = ( newValue ) => {
45
127
  setUserConfig( ( currentConfig ) => {
46
128
  // Deep clone `currentConfig` to avoid mutating it later.
47
129
  const newUserConfig = JSON.parse( JSON.stringify( currentConfig ) );
48
- set( newUserConfig, fullPath, newValue );
130
+ set( newUserConfig, contextualPath, newValue );
49
131
 
50
132
  return newUserConfig;
51
133
  } );
52
134
  };
53
135
 
54
- const getSettingValueForContext = ( name ) => {
55
- const currentPath = ! name
56
- ? `settings.${ path }`
57
- : `settings.blocks.${ name }.${ path }`;
58
-
59
- let result;
60
- switch ( source ) {
61
- case 'all':
62
- result = get( mergedConfig, currentPath );
63
- break;
64
- case 'user':
65
- result = get( userConfig, currentPath );
66
- break;
67
- case 'base':
68
- result = get( baseConfig, currentPath );
69
- break;
70
- default:
71
- throw 'Unsupported source';
72
- }
73
-
74
- return result;
75
- };
76
-
77
- // Unlike styles settings get inherited from top level settings.
78
- const resultWithFallback =
79
- getSettingValueForContext( blockName ) ?? getSettingValueForContext();
80
-
81
- return [ resultWithFallback, setSetting ];
136
+ return [ settingValue, setSetting ];
82
137
  }
83
138
 
84
- export function useGlobalStyle( path, blockName, source = 'all' ) {
139
+ export function useGlobalStyle(
140
+ path,
141
+ blockName,
142
+ source = 'all',
143
+ { shouldDecodeEncode = true } = {}
144
+ ) {
85
145
  const {
86
146
  merged: mergedConfig,
87
147
  base: baseConfig,
88
148
  user: userConfig,
89
149
  setUserConfig,
90
150
  } = useContext( GlobalStylesContext );
151
+ const appendedPath = path ? '.' + path : '';
91
152
  const finalPath = ! blockName
92
- ? `styles.${ path }`
93
- : `styles.blocks.${ blockName }.${ path }`;
153
+ ? `styles${ appendedPath }`
154
+ : `styles.blocks.${ blockName }${ appendedPath }`;
94
155
 
95
156
  const setStyle = ( newValue ) => {
96
157
  setUserConfig( ( currentConfig ) => {
@@ -99,43 +160,42 @@ export function useGlobalStyle( path, blockName, source = 'all' ) {
99
160
  set(
100
161
  newUserConfig,
101
162
  finalPath,
102
- getPresetVariableFromValue(
103
- mergedConfig.settings,
104
- blockName,
105
- path,
106
- newValue
107
- )
163
+ shouldDecodeEncode
164
+ ? getPresetVariableFromValue(
165
+ mergedConfig.settings,
166
+ blockName,
167
+ path,
168
+ newValue
169
+ )
170
+ : newValue
108
171
  );
109
172
  return newUserConfig;
110
173
  } );
111
174
  };
112
175
 
113
- let result;
176
+ let rawResult, result;
114
177
  switch ( source ) {
115
178
  case 'all':
116
- result = getValueFromVariable(
117
- mergedConfig,
118
- blockName,
179
+ rawResult =
119
180
  // The stlyes.css path is allowed to be empty, so don't revert to base if undefined.
120
181
  finalPath === 'styles.css'
121
182
  ? get( userConfig, finalPath )
122
- : get( userConfig, finalPath ) ??
123
- get( baseConfig, finalPath )
124
- );
183
+ : get( mergedConfig, finalPath );
184
+ result = shouldDecodeEncode
185
+ ? getValueFromVariable( mergedConfig, blockName, rawResult )
186
+ : rawResult;
125
187
  break;
126
188
  case 'user':
127
- result = getValueFromVariable(
128
- mergedConfig,
129
- blockName,
130
- get( userConfig, finalPath )
131
- );
189
+ rawResult = get( userConfig, finalPath );
190
+ result = shouldDecodeEncode
191
+ ? getValueFromVariable( mergedConfig, blockName, rawResult )
192
+ : rawResult;
132
193
  break;
133
194
  case 'base':
134
- result = getValueFromVariable(
135
- baseConfig,
136
- blockName,
137
- get( baseConfig, finalPath )
138
- );
195
+ rawResult = get( baseConfig, finalPath );
196
+ result = shouldDecodeEncode
197
+ ? getValueFromVariable( baseConfig, blockName, rawResult )
198
+ : rawResult;
139
199
  break;
140
200
  default:
141
201
  throw 'Unsupported source';
@@ -143,3 +203,106 @@ export function useGlobalStyle( path, blockName, source = 'all' ) {
143
203
 
144
204
  return [ result, setStyle ];
145
205
  }
206
+
207
+ /**
208
+ * React hook that overrides a global settings object with block and element specific settings.
209
+ *
210
+ * @param {Object} parentSettings Settings object.
211
+ * @param {blockName?} blockName Block name.
212
+ * @param {element?} element Element name.
213
+ *
214
+ * @return {Object} Merge of settings and supports.
215
+ */
216
+ export function useSettingsForBlockElement(
217
+ parentSettings,
218
+ blockName,
219
+ element
220
+ ) {
221
+ const { supportedStyles, supports } = useSelect(
222
+ ( select ) => {
223
+ return {
224
+ supportedStyles: unlock(
225
+ select( blocksStore )
226
+ ).getSupportedStyles( blockName, element ),
227
+ supports:
228
+ select( blocksStore ).getBlockType( blockName )?.supports,
229
+ };
230
+ },
231
+ [ blockName, element ]
232
+ );
233
+
234
+ return useMemo( () => {
235
+ const updatedSettings = { ...parentSettings };
236
+
237
+ if ( ! supportedStyles.includes( 'fontSize' ) ) {
238
+ updatedSettings.typography = {
239
+ ...updatedSettings.typography,
240
+ fontSizes: {},
241
+ customFontSize: false,
242
+ };
243
+ }
244
+
245
+ if ( ! supportedStyles.includes( 'fontFamily' ) ) {
246
+ updatedSettings.typography = {
247
+ ...updatedSettings.typography,
248
+ fontFamilies: {},
249
+ };
250
+ }
251
+
252
+ [
253
+ 'lineHeight',
254
+ 'fontStyle',
255
+ 'fontWeight',
256
+ 'letterSpacing',
257
+ 'textTransform',
258
+ 'textDecoration',
259
+ ].forEach( ( key ) => {
260
+ if ( ! supportedStyles.includes( key ) ) {
261
+ updatedSettings.typography = {
262
+ ...updatedSettings.typography,
263
+ [ key ]: false,
264
+ };
265
+ }
266
+ } );
267
+
268
+ [ 'contentSize', 'wideSize' ].forEach( ( key ) => {
269
+ if ( ! supportedStyles.includes( key ) ) {
270
+ updatedSettings.layout = {
271
+ ...updatedSettings.layout,
272
+ [ key ]: false,
273
+ };
274
+ }
275
+ } );
276
+
277
+ [ 'padding', 'margin', 'blockGap' ].forEach( ( key ) => {
278
+ if ( ! supportedStyles.includes( key ) ) {
279
+ updatedSettings.spacing = {
280
+ ...updatedSettings.spacing,
281
+ [ key ]: false,
282
+ };
283
+ }
284
+
285
+ const sides = Array.isArray( supports?.spacing?.[ key ] )
286
+ ? supports?.spacing?.[ key ]
287
+ : supports?.spacing?.[ key ]?.sides;
288
+ if ( sides?.length ) {
289
+ updatedSettings.spacing = {
290
+ ...updatedSettings.spacing,
291
+ [ key ]: {
292
+ ...updatedSettings.spacing?.[ key ],
293
+ sides,
294
+ },
295
+ };
296
+ }
297
+ } );
298
+
299
+ if ( ! supportedStyles.includes( 'minHeight' ) ) {
300
+ updatedSettings.dimensions = {
301
+ ...updatedSettings.dimensions,
302
+ minHeight: false,
303
+ };
304
+ }
305
+
306
+ return updatedSettings;
307
+ }, [ parentSettings, supportedStyles, supports ] );
308
+ }
@@ -2,6 +2,15 @@ export {
2
2
  useGlobalStylesReset,
3
3
  useGlobalSetting,
4
4
  useGlobalStyle,
5
+ useSettingsForBlockElement,
5
6
  } from './hooks';
6
7
  export { useGlobalStylesOutput } from './use-global-styles-output';
7
8
  export { GlobalStylesContext } from './context';
9
+ export {
10
+ default as TypographyPanel,
11
+ useHasTypographyPanel,
12
+ } from './typography-panel';
13
+ export {
14
+ default as DimensionsPanel,
15
+ useHasDimensionsPanel,
16
+ } from './dimensions-panel';