@wordpress/block-editor 11.3.2 → 11.4.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 (262) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +4 -4
  3. package/build/components/block-actions/index.js +2 -7
  4. package/build/components/block-actions/index.js.map +1 -1
  5. package/build/components/block-alignment-control/use-available-alignments.js +5 -3
  6. package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
  7. package/build/components/block-popover/inbetween.js +10 -33
  8. package/build/components/block-popover/inbetween.js.map +1 -1
  9. package/build/components/block-tools/selected-block-popover.js +2 -2
  10. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  11. package/build/components/block-types-list/index.native.js +2 -0
  12. package/build/components/block-types-list/index.native.js.map +1 -1
  13. package/build/components/colors-gradients/control.js +6 -3
  14. package/build/components/colors-gradients/control.js.map +1 -1
  15. package/build/components/font-appearance-control/index.js +0 -3
  16. package/build/components/font-appearance-control/index.js.map +1 -1
  17. package/build/components/global-styles/hooks.js +106 -45
  18. package/build/components/global-styles/hooks.js.map +1 -1
  19. package/build/components/global-styles/index.js +24 -0
  20. package/build/components/global-styles/index.js.map +1 -1
  21. package/build/components/global-styles/typography-panel.js +421 -0
  22. package/build/components/global-styles/typography-panel.js.map +1 -0
  23. package/build/components/global-styles/use-global-styles-output.js +6 -2
  24. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  25. package/build/components/iframe/index.js +17 -11
  26. package/build/components/iframe/index.js.map +1 -1
  27. package/build/components/image-editor/aspect-ratio-dropdown.js +2 -1
  28. package/build/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  29. package/build/components/image-size-control/index.js +6 -11
  30. package/build/components/image-size-control/index.js.map +1 -1
  31. package/build/components/inserter/block-patterns-tab.js +9 -15
  32. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  33. package/build/components/inserter/block-types-tab.native.js +4 -1
  34. package/build/components/inserter/block-types-tab.native.js.map +1 -1
  35. package/build/components/inserter/reusable-blocks-tab.native.js +4 -1
  36. package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  37. package/build/components/inserter/search-results.native.js +4 -1
  38. package/build/components/inserter/search-results.native.js.map +1 -1
  39. package/build/components/link-control/index.js +15 -15
  40. package/build/components/link-control/index.js.map +1 -1
  41. package/build/components/link-control/settings-drawer.js +72 -30
  42. package/build/components/link-control/settings-drawer.js.map +1 -1
  43. package/build/components/link-control/settings.js +52 -0
  44. package/build/components/link-control/settings.js.map +1 -0
  45. package/build/components/list-view/index.js +6 -1
  46. package/build/components/list-view/index.js.map +1 -1
  47. package/build/components/off-canvas-editor/block-contents.js +5 -4
  48. package/build/components/off-canvas-editor/block-contents.js.map +1 -1
  49. package/build/components/off-canvas-editor/leaf-more-menu.js +116 -0
  50. package/build/components/off-canvas-editor/leaf-more-menu.js.map +1 -0
  51. package/build/components/off-canvas-editor/link-ui.js +1 -0
  52. package/build/components/off-canvas-editor/link-ui.js.map +1 -1
  53. package/build/components/provider/index.js +2 -2
  54. package/build/components/provider/index.js.map +1 -1
  55. package/build/components/rich-text/index.js +0 -2
  56. package/build/components/rich-text/index.js.map +1 -1
  57. package/build/components/url-input/index.js +2 -2
  58. package/build/components/url-input/index.js.map +1 -1
  59. package/build/components/url-popover/index.js +6 -1
  60. package/build/components/url-popover/index.js.map +1 -1
  61. package/build/hooks/dimensions.js +8 -2
  62. package/build/hooks/dimensions.js.map +1 -1
  63. package/build/hooks/font-family.js +2 -76
  64. package/build/hooks/font-family.js.map +1 -1
  65. package/build/hooks/font-size.js +3 -51
  66. package/build/hooks/font-size.js.map +1 -1
  67. package/build/hooks/gap.js +2 -1
  68. package/build/hooks/gap.js.map +1 -1
  69. package/build/hooks/index.js +2 -0
  70. package/build/hooks/index.js.map +1 -1
  71. package/build/hooks/line-height.js +0 -42
  72. package/build/hooks/line-height.js.map +1 -1
  73. package/build/hooks/metadata.js +6 -0
  74. package/build/hooks/metadata.js.map +1 -1
  75. package/build/hooks/position.js +6 -1
  76. package/build/hooks/position.js.map +1 -1
  77. package/build/hooks/typography.js +112 -127
  78. package/build/hooks/typography.js.map +1 -1
  79. package/build/index.js +6 -6
  80. package/build/index.js.map +1 -1
  81. package/build/layouts/flow.js +23 -2
  82. package/build/layouts/flow.js.map +1 -1
  83. package/build/lock-unlock.js +19 -0
  84. package/build/lock-unlock.js.map +1 -0
  85. package/build/{experiments.js → private-apis.js} +12 -19
  86. package/build/private-apis.js.map +1 -0
  87. package/build/{experiments.native.js → private-apis.native.js} +9 -19
  88. package/build/private-apis.native.js.map +1 -0
  89. package/build/store/index.js +3 -3
  90. package/build/store/index.js.map +1 -1
  91. package/build/store/selectors.js +18 -1
  92. package/build/store/selectors.js.map +1 -1
  93. package/build-module/components/block-actions/index.js +2 -7
  94. package/build-module/components/block-actions/index.js.map +1 -1
  95. package/build-module/components/block-alignment-control/use-available-alignments.js +5 -3
  96. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  97. package/build-module/components/block-popover/inbetween.js +10 -33
  98. package/build-module/components/block-popover/inbetween.js.map +1 -1
  99. package/build-module/components/block-tools/selected-block-popover.js +1 -1
  100. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  101. package/build-module/components/block-types-list/index.native.js +2 -0
  102. package/build-module/components/block-types-list/index.native.js.map +1 -1
  103. package/build-module/components/colors-gradients/control.js +6 -3
  104. package/build-module/components/colors-gradients/control.js.map +1 -1
  105. package/build-module/components/font-appearance-control/index.js +2 -1
  106. package/build-module/components/font-appearance-control/index.js.map +1 -1
  107. package/build-module/components/global-styles/hooks.js +100 -46
  108. package/build-module/components/global-styles/hooks.js.map +1 -1
  109. package/build-module/components/global-styles/index.js +2 -1
  110. package/build-module/components/global-styles/index.js.map +1 -1
  111. package/build-module/components/global-styles/typography-panel.js +400 -0
  112. package/build-module/components/global-styles/typography-panel.js.map +1 -0
  113. package/build-module/components/global-styles/use-global-styles-output.js +6 -2
  114. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  115. package/build-module/components/iframe/index.js +17 -11
  116. package/build-module/components/iframe/index.js.map +1 -1
  117. package/build-module/components/image-editor/aspect-ratio-dropdown.js +2 -1
  118. package/build-module/components/image-editor/aspect-ratio-dropdown.js.map +1 -1
  119. package/build-module/components/image-size-control/index.js +7 -12
  120. package/build-module/components/image-size-control/index.js.map +1 -1
  121. package/build-module/components/inserter/block-patterns-tab.js +9 -15
  122. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  123. package/build-module/components/inserter/block-types-tab.native.js +3 -1
  124. package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
  125. package/build-module/components/inserter/reusable-blocks-tab.native.js +3 -1
  126. package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  127. package/build-module/components/inserter/search-results.native.js +3 -1
  128. package/build-module/components/inserter/search-results.native.js.map +1 -1
  129. package/build-module/components/link-control/index.js +16 -16
  130. package/build-module/components/link-control/index.js.map +1 -1
  131. package/build-module/components/link-control/settings-drawer.js +68 -30
  132. package/build-module/components/link-control/settings-drawer.js.map +1 -1
  133. package/build-module/components/link-control/settings.js +43 -0
  134. package/build-module/components/link-control/settings.js.map +1 -0
  135. package/build-module/components/list-view/index.js +6 -1
  136. package/build-module/components/list-view/index.js.map +1 -1
  137. package/build-module/components/off-canvas-editor/block-contents.js +4 -3
  138. package/build-module/components/off-canvas-editor/block-contents.js.map +1 -1
  139. package/build-module/components/off-canvas-editor/leaf-more-menu.js +99 -0
  140. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +1 -0
  141. package/build-module/components/off-canvas-editor/link-ui.js +1 -0
  142. package/build-module/components/off-canvas-editor/link-ui.js.map +1 -1
  143. package/build-module/components/provider/index.js +1 -1
  144. package/build-module/components/provider/index.js.map +1 -1
  145. package/build-module/components/rich-text/index.js +0 -2
  146. package/build-module/components/rich-text/index.js.map +1 -1
  147. package/build-module/components/url-input/index.js +2 -2
  148. package/build-module/components/url-input/index.js.map +1 -1
  149. package/build-module/components/url-popover/index.js +6 -2
  150. package/build-module/components/url-popover/index.js.map +1 -1
  151. package/build-module/hooks/dimensions.js +7 -1
  152. package/build-module/hooks/dimensions.js.map +1 -1
  153. package/build-module/hooks/font-family.js +3 -69
  154. package/build-module/hooks/font-family.js.map +1 -1
  155. package/build-module/hooks/font-size.js +6 -47
  156. package/build-module/hooks/font-size.js.map +1 -1
  157. package/build-module/hooks/gap.js +3 -2
  158. package/build-module/hooks/gap.js.map +1 -1
  159. package/build-module/hooks/index.js +1 -0
  160. package/build-module/hooks/index.js.map +1 -1
  161. package/build-module/hooks/line-height.js +0 -38
  162. package/build-module/hooks/line-height.js.map +1 -1
  163. package/build-module/hooks/metadata.js +6 -0
  164. package/build-module/hooks/metadata.js.map +1 -1
  165. package/build-module/hooks/position.js +5 -1
  166. package/build-module/hooks/position.js.map +1 -1
  167. package/build-module/hooks/typography.js +110 -123
  168. package/build-module/hooks/typography.js.map +1 -1
  169. package/build-module/index.js +1 -1
  170. package/build-module/index.js.map +1 -1
  171. package/build-module/layouts/flow.js +23 -2
  172. package/build-module/layouts/flow.js.map +1 -1
  173. package/build-module/lock-unlock.js +9 -0
  174. package/build-module/lock-unlock.js.map +1 -0
  175. package/build-module/private-apis.js +19 -0
  176. package/build-module/private-apis.js.map +1 -0
  177. package/build-module/private-apis.native.js +15 -0
  178. package/build-module/private-apis.native.js.map +1 -0
  179. package/build-module/store/index.js +1 -1
  180. package/build-module/store/index.js.map +1 -1
  181. package/build-module/store/selectors.js +18 -1
  182. package/build-module/store/selectors.js.map +1 -1
  183. package/build-style/style-rtl.css +35 -22
  184. package/build-style/style.css +35 -22
  185. package/package.json +31 -31
  186. package/src/components/block-actions/index.js +0 -9
  187. package/src/components/block-alignment-control/use-available-alignments.js +17 -12
  188. package/src/components/block-popover/inbetween.js +21 -53
  189. package/src/components/block-tools/selected-block-popover.js +1 -1
  190. package/src/components/block-types-list/index.native.js +2 -0
  191. package/src/components/colors-gradients/control.js +3 -0
  192. package/src/components/font-appearance-control/index.js +1 -1
  193. package/src/components/global-styles/hooks.js +186 -66
  194. package/src/components/global-styles/index.js +5 -0
  195. package/src/components/global-styles/typography-panel.js +403 -0
  196. package/src/components/global-styles/use-global-styles-output.js +6 -2
  197. package/src/components/iframe/index.js +20 -18
  198. package/src/components/image-editor/aspect-ratio-dropdown.js +1 -0
  199. package/src/components/image-size-control/index.js +10 -12
  200. package/src/components/image-size-control/style.scss +3 -21
  201. package/src/components/inserter/block-patterns-tab.js +9 -23
  202. package/src/components/inserter/block-types-tab.native.js +2 -0
  203. package/src/components/inserter/reusable-blocks-tab.native.js +2 -0
  204. package/src/components/inserter/search-results.native.js +2 -0
  205. package/src/components/link-control/index.js +22 -22
  206. package/src/components/link-control/settings-drawer.js +85 -30
  207. package/src/components/link-control/settings.js +41 -0
  208. package/src/components/link-control/style.scss +39 -7
  209. package/src/components/link-control/test/index.js +213 -4
  210. package/src/components/list-view/index.js +5 -0
  211. package/src/components/off-canvas-editor/block-contents.js +3 -2
  212. package/src/components/off-canvas-editor/leaf-more-menu.js +115 -0
  213. package/src/components/off-canvas-editor/link-ui.js +1 -0
  214. package/src/components/provider/index.js +1 -1
  215. package/src/components/rich-text/index.js +0 -2
  216. package/src/components/url-input/index.js +3 -2
  217. package/src/components/url-popover/index.js +8 -2
  218. package/src/hooks/dimensions.js +13 -1
  219. package/src/hooks/font-family.js +0 -58
  220. package/src/hooks/font-size.js +1 -36
  221. package/src/hooks/gap.js +9 -2
  222. package/src/hooks/index.js +1 -0
  223. package/src/hooks/line-height.js +0 -33
  224. package/src/hooks/metadata.js +4 -0
  225. package/src/hooks/position.js +7 -1
  226. package/src/hooks/typography.js +133 -212
  227. package/src/index.js +1 -1
  228. package/src/layouts/flow.js +16 -1
  229. package/src/lock-unlock.js +10 -0
  230. package/src/private-apis.js +19 -0
  231. package/src/private-apis.native.js +15 -0
  232. package/src/store/index.js +1 -1
  233. package/src/store/selectors.js +16 -1
  234. package/tsconfig.json +20 -1
  235. package/build/experiments.js.map +0 -1
  236. package/build/experiments.native.js.map +0 -1
  237. package/build/hooks/font-appearance.js +0 -188
  238. package/build/hooks/font-appearance.js.map +0 -1
  239. package/build/hooks/letter-spacing.js +0 -129
  240. package/build/hooks/letter-spacing.js.map +0 -1
  241. package/build/hooks/text-decoration.js +0 -130
  242. package/build/hooks/text-decoration.js.map +0 -1
  243. package/build/hooks/text-transform.js +0 -130
  244. package/build/hooks/text-transform.js.map +0 -1
  245. package/build-module/experiments.js +0 -25
  246. package/build-module/experiments.js.map +0 -1
  247. package/build-module/experiments.native.js +0 -23
  248. package/build-module/experiments.native.js.map +0 -1
  249. package/build-module/hooks/font-appearance.js +0 -161
  250. package/build-module/hooks/font-appearance.js.map +0 -1
  251. package/build-module/hooks/letter-spacing.js +0 -107
  252. package/build-module/hooks/letter-spacing.js.map +0 -1
  253. package/build-module/hooks/text-decoration.js +0 -108
  254. package/build-module/hooks/text-decoration.js.map +0 -1
  255. package/build-module/hooks/text-transform.js +0 -108
  256. package/build-module/hooks/text-transform.js.map +0 -1
  257. package/src/experiments.js +0 -27
  258. package/src/experiments.native.js +0 -25
  259. package/src/hooks/font-appearance.js +0 -146
  260. package/src/hooks/letter-spacing.js +0 -101
  261. package/src/hooks/text-decoration.js +0 -102
  262. 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.fuild',
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,63 @@ export function useGlobalStyle( path, blockName, source = 'all' ) {
143
203
 
144
204
  return [ result, setStyle ];
145
205
  }
206
+
207
+ export function useSupportedStyles( name, element ) {
208
+ const { supportedPanels } = useSelect(
209
+ ( select ) => {
210
+ return {
211
+ supportedPanels: unlock(
212
+ select( blocksStore )
213
+ ).getSupportedStyles( name, element ),
214
+ };
215
+ },
216
+ [ name, element ]
217
+ );
218
+
219
+ return supportedPanels;
220
+ }
221
+
222
+ /**
223
+ * Given a settings object and a list of supported panels,
224
+ * returns a new settings object with the unsupported panels removed.
225
+ *
226
+ * @param {Object} settings Settings object.
227
+ * @param {string[]} supports Supported style panels.
228
+ *
229
+ * @return {Object} Merge of settings and supports.
230
+ */
231
+ export function overrideSettingsWithSupports( settings, supports ) {
232
+ const updatedSettings = { ...settings };
233
+
234
+ if ( ! supports.includes( 'fontSize' ) ) {
235
+ updatedSettings.typography = {
236
+ ...updatedSettings.typography,
237
+ fontSizes: {},
238
+ customFontSize: false,
239
+ };
240
+ }
241
+
242
+ if ( ! supports.includes( 'fontFamily' ) ) {
243
+ updatedSettings.typography = {
244
+ ...updatedSettings.typography,
245
+ fontFamilies: {},
246
+ };
247
+ }
248
+
249
+ [
250
+ 'lineHeight',
251
+ 'fontStyle',
252
+ 'fontWeight',
253
+ 'letterSpacing',
254
+ 'textTransform',
255
+ ].forEach( ( key ) => {
256
+ if ( ! supports.includes( key ) ) {
257
+ updatedSettings.typography = {
258
+ ...updatedSettings.typography,
259
+ [ key ]: false,
260
+ };
261
+ }
262
+ } );
263
+
264
+ return updatedSettings;
265
+ }
@@ -2,6 +2,11 @@ export {
2
2
  useGlobalStylesReset,
3
3
  useGlobalSetting,
4
4
  useGlobalStyle,
5
+ overrideSettingsWithSupports,
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';