@wordpress/edit-site 4.15.1-next.4d3b314fd5.0 → 4.17.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 (252) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/block-editor/block-inspector-button.js +1 -1
  3. package/build/components/block-editor/block-inspector-button.js.map +1 -1
  4. package/build/components/block-editor/index.js +17 -11
  5. package/build/components/block-editor/index.js.map +1 -1
  6. package/build/components/block-editor/resizable-editor.js +11 -35
  7. package/build/components/block-editor/resizable-editor.js.map +1 -1
  8. package/build/components/editor/index.js +5 -7
  9. package/build/components/editor/index.js.map +1 -1
  10. package/build/components/global-styles/preview.js +85 -50
  11. package/build/components/global-styles/preview.js.map +1 -1
  12. package/build/components/global-styles/screen-style-variations.js +35 -4
  13. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  14. package/build/components/global-styles/screen-typography-element.js +49 -2
  15. package/build/components/global-styles/screen-typography-element.js.map +1 -1
  16. package/build/components/global-styles/typography-panel.js +143 -83
  17. package/build/components/global-styles/typography-panel.js.map +1 -1
  18. package/build/components/global-styles/typography-preview.js +54 -0
  19. package/build/components/global-styles/typography-preview.js.map +1 -0
  20. package/build/components/global-styles/typography-utils.js +39 -176
  21. package/build/components/global-styles/typography-utils.js.map +1 -1
  22. package/build/components/global-styles/use-global-styles-output.js +34 -16
  23. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  24. package/build/components/{header → header-edit-mode}/document-actions/index.js +58 -24
  25. package/build/components/header-edit-mode/document-actions/index.js.map +1 -0
  26. package/build/components/{header → header-edit-mode}/index.js +13 -49
  27. package/build/components/header-edit-mode/index.js.map +1 -0
  28. package/build/components/{header → header-edit-mode}/mode-switcher/index.js +0 -0
  29. package/build/components/header-edit-mode/mode-switcher/index.js.map +1 -0
  30. package/build/components/{header → header-edit-mode}/more-menu/copy-content-menu-item.js +0 -0
  31. package/build/components/header-edit-mode/more-menu/copy-content-menu-item.js.map +1 -0
  32. package/build/components/{header → header-edit-mode}/more-menu/index.js +0 -0
  33. package/build/components/header-edit-mode/more-menu/index.js.map +1 -0
  34. package/build/components/{header → header-edit-mode}/more-menu/site-export.js +0 -0
  35. package/build/components/header-edit-mode/more-menu/site-export.js.map +1 -0
  36. package/build/components/{header → header-edit-mode}/more-menu/welcome-guide-menu-item.js +0 -0
  37. package/build/components/header-edit-mode/more-menu/welcome-guide-menu-item.js.map +1 -0
  38. package/build/components/{header → header-edit-mode}/plugin-more-menu-item/index.js +0 -0
  39. package/build/components/header-edit-mode/plugin-more-menu-item/index.js.map +1 -0
  40. package/build/components/{header → header-edit-mode}/plugin-sidebar-more-menu-item/index.js +0 -0
  41. package/build/components/header-edit-mode/plugin-sidebar-more-menu-item/index.js.map +1 -0
  42. package/build/components/{header → header-edit-mode}/tools-more-menu-group/index.js +0 -0
  43. package/build/components/header-edit-mode/tools-more-menu-group/index.js.map +1 -0
  44. package/build/components/{header → header-edit-mode}/undo-redo/redo.js +0 -0
  45. package/build/components/header-edit-mode/undo-redo/redo.js.map +1 -0
  46. package/build/components/{header → header-edit-mode}/undo-redo/undo.js +0 -0
  47. package/build/components/header-edit-mode/undo-redo/undo.js.map +1 -0
  48. package/build/components/keyboard-shortcuts/index.js +1 -1
  49. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  50. package/build/components/main-dashboard-button/index.js +2 -2
  51. package/build/components/main-dashboard-button/index.js.map +1 -1
  52. package/build/components/{sidebar → sidebar-edit-mode}/constants.js +0 -0
  53. package/build/components/sidebar-edit-mode/constants.js.map +1 -0
  54. package/build/components/{sidebar → sidebar-edit-mode}/default-sidebar.js +0 -0
  55. package/build/components/sidebar-edit-mode/default-sidebar.js.map +1 -0
  56. package/build/components/{sidebar → sidebar-edit-mode}/global-styles-sidebar.js +0 -0
  57. package/build/components/sidebar-edit-mode/global-styles-sidebar.js.map +1 -0
  58. package/build/components/{sidebar → sidebar-edit-mode}/index.js +1 -1
  59. package/build/components/sidebar-edit-mode/index.js.map +1 -0
  60. package/build/components/{sidebar → sidebar-edit-mode}/navigation-menu-sidebar/index.js +0 -0
  61. package/build/components/sidebar-edit-mode/navigation-menu-sidebar/index.js.map +1 -0
  62. package/build/components/{sidebar → sidebar-edit-mode}/navigation-menu-sidebar/navigation-inspector.js +0 -0
  63. package/build/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js.map +1 -0
  64. package/build/components/{sidebar → sidebar-edit-mode}/navigation-menu-sidebar/navigation-menu.js +0 -0
  65. package/build/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-menu.js.map +1 -0
  66. package/build/components/{sidebar → sidebar-edit-mode}/plugin-sidebar/index.js +1 -1
  67. package/build/components/sidebar-edit-mode/plugin-sidebar/index.js.map +1 -0
  68. package/build/components/{sidebar → sidebar-edit-mode}/settings-header/index.js +2 -2
  69. package/build/components/sidebar-edit-mode/settings-header/index.js.map +1 -0
  70. package/build/components/{sidebar → sidebar-edit-mode}/template-card/index.js +0 -0
  71. package/build/components/sidebar-edit-mode/template-card/index.js.map +1 -0
  72. package/build/components/{sidebar → sidebar-edit-mode}/template-card/template-actions.js +0 -0
  73. package/build/components/sidebar-edit-mode/template-card/template-actions.js.map +1 -0
  74. package/build/components/{sidebar → sidebar-edit-mode}/template-card/template-areas.js +0 -0
  75. package/build/components/sidebar-edit-mode/template-card/template-areas.js.map +1 -0
  76. package/build/index.js +23 -4
  77. package/build/index.js.map +1 -1
  78. package/build-module/components/block-editor/block-inspector-button.js +1 -1
  79. package/build-module/components/block-editor/block-inspector-button.js.map +1 -1
  80. package/build-module/components/block-editor/index.js +16 -10
  81. package/build-module/components/block-editor/index.js.map +1 -1
  82. package/build-module/components/block-editor/resizable-editor.js +10 -34
  83. package/build-module/components/block-editor/resizable-editor.js.map +1 -1
  84. package/build-module/components/editor/index.js +4 -6
  85. package/build-module/components/editor/index.js.map +1 -1
  86. package/build-module/components/global-styles/preview.js +85 -50
  87. package/build-module/components/global-styles/preview.js.map +1 -1
  88. package/build-module/components/global-styles/screen-style-variations.js +36 -6
  89. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  90. package/build-module/components/global-styles/screen-typography-element.js +48 -2
  91. package/build-module/components/global-styles/screen-typography-element.js.map +1 -1
  92. package/build-module/components/global-styles/typography-panel.js +143 -85
  93. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  94. package/build-module/components/global-styles/typography-preview.js +46 -0
  95. package/build-module/components/global-styles/typography-preview.js.map +1 -0
  96. package/build-module/components/global-styles/typography-utils.js +37 -169
  97. package/build-module/components/global-styles/typography-utils.js.map +1 -1
  98. package/build-module/components/global-styles/use-global-styles-output.js +33 -16
  99. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  100. package/build-module/components/{header → header-edit-mode}/document-actions/index.js +53 -24
  101. package/build-module/components/header-edit-mode/document-actions/index.js.map +1 -0
  102. package/build-module/components/{header → header-edit-mode}/index.js +13 -46
  103. package/build-module/components/header-edit-mode/index.js.map +1 -0
  104. package/build-module/components/{header → header-edit-mode}/mode-switcher/index.js +0 -0
  105. package/build-module/components/header-edit-mode/mode-switcher/index.js.map +1 -0
  106. package/build-module/components/{header → header-edit-mode}/more-menu/copy-content-menu-item.js +0 -0
  107. package/build-module/components/header-edit-mode/more-menu/copy-content-menu-item.js.map +1 -0
  108. package/build-module/components/{header → header-edit-mode}/more-menu/index.js +0 -0
  109. package/build-module/components/header-edit-mode/more-menu/index.js.map +1 -0
  110. package/build-module/components/{header → header-edit-mode}/more-menu/site-export.js +0 -0
  111. package/build-module/components/header-edit-mode/more-menu/site-export.js.map +1 -0
  112. package/build-module/components/{header → header-edit-mode}/more-menu/welcome-guide-menu-item.js +0 -0
  113. package/build-module/components/header-edit-mode/more-menu/welcome-guide-menu-item.js.map +1 -0
  114. package/build-module/components/{header → header-edit-mode}/plugin-more-menu-item/index.js +0 -0
  115. package/build-module/components/header-edit-mode/plugin-more-menu-item/index.js.map +1 -0
  116. package/build-module/components/{header → header-edit-mode}/plugin-sidebar-more-menu-item/index.js +0 -0
  117. package/build-module/components/header-edit-mode/plugin-sidebar-more-menu-item/index.js.map +1 -0
  118. package/build-module/components/{header → header-edit-mode}/tools-more-menu-group/index.js +0 -0
  119. package/build-module/components/header-edit-mode/tools-more-menu-group/index.js.map +1 -0
  120. package/build-module/components/{header → header-edit-mode}/undo-redo/redo.js +0 -0
  121. package/build-module/components/header-edit-mode/undo-redo/redo.js.map +1 -0
  122. package/build-module/components/{header → header-edit-mode}/undo-redo/undo.js +0 -0
  123. package/build-module/components/header-edit-mode/undo-redo/undo.js.map +1 -0
  124. package/build-module/components/keyboard-shortcuts/index.js +1 -1
  125. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  126. package/build-module/components/main-dashboard-button/index.js +3 -3
  127. package/build-module/components/main-dashboard-button/index.js.map +1 -1
  128. package/build-module/components/{sidebar → sidebar-edit-mode}/constants.js +0 -0
  129. package/build-module/components/sidebar-edit-mode/constants.js.map +1 -0
  130. package/build-module/components/{sidebar → sidebar-edit-mode}/default-sidebar.js +0 -0
  131. package/build-module/components/sidebar-edit-mode/default-sidebar.js.map +1 -0
  132. package/build-module/components/{sidebar → sidebar-edit-mode}/global-styles-sidebar.js +0 -0
  133. package/build-module/components/sidebar-edit-mode/global-styles-sidebar.js.map +1 -0
  134. package/build-module/components/{sidebar → sidebar-edit-mode}/index.js +1 -1
  135. package/build-module/components/sidebar-edit-mode/index.js.map +1 -0
  136. package/build-module/components/{sidebar → sidebar-edit-mode}/navigation-menu-sidebar/index.js +0 -0
  137. package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/index.js.map +1 -0
  138. package/build-module/components/{sidebar → sidebar-edit-mode}/navigation-menu-sidebar/navigation-inspector.js +0 -0
  139. package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js.map +1 -0
  140. package/build-module/components/{sidebar → sidebar-edit-mode}/navigation-menu-sidebar/navigation-menu.js +0 -0
  141. package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-menu.js.map +1 -0
  142. package/build-module/components/{sidebar → sidebar-edit-mode}/plugin-sidebar/index.js +1 -1
  143. package/build-module/components/sidebar-edit-mode/plugin-sidebar/index.js.map +1 -0
  144. package/build-module/components/{sidebar → sidebar-edit-mode}/settings-header/index.js +2 -2
  145. package/build-module/components/sidebar-edit-mode/settings-header/index.js.map +1 -0
  146. package/build-module/components/{sidebar → sidebar-edit-mode}/template-card/index.js +0 -0
  147. package/build-module/components/sidebar-edit-mode/template-card/index.js.map +1 -0
  148. package/build-module/components/{sidebar → sidebar-edit-mode}/template-card/template-actions.js +0 -0
  149. package/build-module/components/sidebar-edit-mode/template-card/template-actions.js.map +1 -0
  150. package/build-module/components/{sidebar → sidebar-edit-mode}/template-card/template-areas.js +0 -0
  151. package/build-module/components/sidebar-edit-mode/template-card/template-areas.js.map +1 -0
  152. package/build-module/index.js +22 -4
  153. package/build-module/index.js.map +1 -1
  154. package/build-style/style-rtl.css +64 -89
  155. package/build-style/style.css +64 -89
  156. package/package.json +29 -29
  157. package/src/components/block-editor/block-inspector-button.js +1 -1
  158. package/src/components/block-editor/index.js +29 -11
  159. package/src/components/block-editor/resizable-editor.js +8 -37
  160. package/src/components/editor/index.js +2 -4
  161. package/src/components/global-styles/preview.js +81 -60
  162. package/src/components/global-styles/screen-style-variations.js +39 -4
  163. package/src/components/global-styles/screen-typography-element.js +65 -1
  164. package/src/components/global-styles/style.scss +2 -2
  165. package/src/components/global-styles/test/typography-utils.js +333 -103
  166. package/src/components/global-styles/test/use-global-styles-output.js +57 -3
  167. package/src/components/global-styles/typography-panel.js +205 -150
  168. package/src/components/global-styles/typography-preview.js +49 -0
  169. package/src/components/global-styles/typography-utils.js +34 -195
  170. package/src/components/global-styles/use-global-styles-output.js +31 -9
  171. package/src/components/{header → header-edit-mode}/document-actions/index.js +67 -46
  172. package/src/components/{header → header-edit-mode}/document-actions/style.scss +0 -0
  173. package/src/components/{header → header-edit-mode}/index.js +12 -44
  174. package/src/components/{header → header-edit-mode}/mode-switcher/index.js +0 -0
  175. package/src/components/{header → header-edit-mode}/more-menu/copy-content-menu-item.js +0 -0
  176. package/src/components/{header → header-edit-mode}/more-menu/index.js +0 -0
  177. package/src/components/{header → header-edit-mode}/more-menu/site-export.js +0 -0
  178. package/src/components/{header → header-edit-mode}/more-menu/welcome-guide-menu-item.js +0 -0
  179. package/src/components/{header → header-edit-mode}/plugin-more-menu-item/index.js +0 -0
  180. package/src/components/{header → header-edit-mode}/plugin-sidebar-more-menu-item/index.js +0 -0
  181. package/src/components/{header → header-edit-mode}/style.scss +20 -50
  182. package/src/components/{header → header-edit-mode}/tools-more-menu-group/index.js +0 -0
  183. package/src/components/{header → header-edit-mode}/undo-redo/redo.js +0 -0
  184. package/src/components/{header → header-edit-mode}/undo-redo/undo.js +0 -0
  185. package/src/components/keyboard-shortcuts/index.js +1 -1
  186. package/src/components/main-dashboard-button/index.js +3 -3
  187. package/src/components/{sidebar → sidebar-edit-mode}/constants.js +0 -0
  188. package/src/components/{sidebar → sidebar-edit-mode}/default-sidebar.js +0 -0
  189. package/src/components/{sidebar → sidebar-edit-mode}/global-styles-sidebar.js +0 -0
  190. package/src/components/{sidebar → sidebar-edit-mode}/index.js +1 -1
  191. package/src/components/{sidebar → sidebar-edit-mode}/navigation-menu-sidebar/index.js +0 -0
  192. package/src/components/{sidebar → sidebar-edit-mode}/navigation-menu-sidebar/navigation-inspector.js +0 -0
  193. package/src/components/{sidebar → sidebar-edit-mode}/navigation-menu-sidebar/navigation-menu.js +0 -0
  194. package/src/components/{sidebar → sidebar-edit-mode}/navigation-menu-sidebar/style.scss +0 -0
  195. package/src/components/{sidebar → sidebar-edit-mode}/plugin-sidebar/index.js +1 -1
  196. package/src/components/{sidebar → sidebar-edit-mode}/settings-header/index.js +2 -2
  197. package/src/components/{sidebar → sidebar-edit-mode}/settings-header/style.scss +2 -2
  198. package/src/components/{sidebar → sidebar-edit-mode}/style.scss +2 -2
  199. package/src/components/{sidebar → sidebar-edit-mode}/template-card/index.js +0 -0
  200. package/src/components/{sidebar → sidebar-edit-mode}/template-card/style.scss +0 -0
  201. package/src/components/{sidebar → sidebar-edit-mode}/template-card/template-actions.js +0 -0
  202. package/src/components/{sidebar → sidebar-edit-mode}/template-card/template-areas.js +0 -0
  203. package/src/index.js +24 -3
  204. package/src/style.scss +6 -6
  205. package/build/components/header/document-actions/index.js.map +0 -1
  206. package/build/components/header/index.js.map +0 -1
  207. package/build/components/header/mode-switcher/index.js.map +0 -1
  208. package/build/components/header/more-menu/copy-content-menu-item.js.map +0 -1
  209. package/build/components/header/more-menu/index.js.map +0 -1
  210. package/build/components/header/more-menu/site-export.js.map +0 -1
  211. package/build/components/header/more-menu/welcome-guide-menu-item.js.map +0 -1
  212. package/build/components/header/plugin-more-menu-item/index.js.map +0 -1
  213. package/build/components/header/plugin-sidebar-more-menu-item/index.js.map +0 -1
  214. package/build/components/header/tools-more-menu-group/index.js.map +0 -1
  215. package/build/components/header/undo-redo/redo.js.map +0 -1
  216. package/build/components/header/undo-redo/undo.js.map +0 -1
  217. package/build/components/sidebar/constants.js.map +0 -1
  218. package/build/components/sidebar/default-sidebar.js.map +0 -1
  219. package/build/components/sidebar/global-styles-sidebar.js.map +0 -1
  220. package/build/components/sidebar/index.js.map +0 -1
  221. package/build/components/sidebar/navigation-menu-sidebar/index.js.map +0 -1
  222. package/build/components/sidebar/navigation-menu-sidebar/navigation-inspector.js.map +0 -1
  223. package/build/components/sidebar/navigation-menu-sidebar/navigation-menu.js.map +0 -1
  224. package/build/components/sidebar/plugin-sidebar/index.js.map +0 -1
  225. package/build/components/sidebar/settings-header/index.js.map +0 -1
  226. package/build/components/sidebar/template-card/index.js.map +0 -1
  227. package/build/components/sidebar/template-card/template-actions.js.map +0 -1
  228. package/build/components/sidebar/template-card/template-areas.js.map +0 -1
  229. package/build-module/components/header/document-actions/index.js.map +0 -1
  230. package/build-module/components/header/index.js.map +0 -1
  231. package/build-module/components/header/mode-switcher/index.js.map +0 -1
  232. package/build-module/components/header/more-menu/copy-content-menu-item.js.map +0 -1
  233. package/build-module/components/header/more-menu/index.js.map +0 -1
  234. package/build-module/components/header/more-menu/site-export.js.map +0 -1
  235. package/build-module/components/header/more-menu/welcome-guide-menu-item.js.map +0 -1
  236. package/build-module/components/header/plugin-more-menu-item/index.js.map +0 -1
  237. package/build-module/components/header/plugin-sidebar-more-menu-item/index.js.map +0 -1
  238. package/build-module/components/header/tools-more-menu-group/index.js.map +0 -1
  239. package/build-module/components/header/undo-redo/redo.js.map +0 -1
  240. package/build-module/components/header/undo-redo/undo.js.map +0 -1
  241. package/build-module/components/sidebar/constants.js.map +0 -1
  242. package/build-module/components/sidebar/default-sidebar.js.map +0 -1
  243. package/build-module/components/sidebar/global-styles-sidebar.js.map +0 -1
  244. package/build-module/components/sidebar/index.js.map +0 -1
  245. package/build-module/components/sidebar/navigation-menu-sidebar/index.js.map +0 -1
  246. package/build-module/components/sidebar/navigation-menu-sidebar/navigation-inspector.js.map +0 -1
  247. package/build-module/components/sidebar/navigation-menu-sidebar/navigation-menu.js.map +0 -1
  248. package/build-module/components/sidebar/plugin-sidebar/index.js.map +0 -1
  249. package/build-module/components/sidebar/settings-header/index.js.map +0 -1
  250. package/build-module/components/sidebar/template-card/index.js.map +0 -1
  251. package/build-module/components/sidebar/template-card/template-actions.js.map +0 -1
  252. package/build-module/components/sidebar/template-card/template-areas.js.map +0 -1
@@ -9,25 +9,26 @@ import {
9
9
  __experimentalTextTransformControl as TextTransformControl,
10
10
  } from '@wordpress/block-editor';
11
11
  import {
12
- PanelBody,
13
12
  FontSizePicker,
14
- __experimentalToggleGroupControl as ToggleGroupControl,
15
- __experimentalToggleGroupControlOption as ToggleGroupControlOption,
16
- __experimentalGrid as Grid,
13
+ __experimentalToolsPanel as ToolsPanel,
14
+ __experimentalToolsPanelItem as ToolsPanelItem,
17
15
  } from '@wordpress/components';
18
16
  import { __ } from '@wordpress/i18n';
19
- import { useState } from '@wordpress/element';
17
+
20
18
  /**
21
19
  * Internal dependencies
22
20
  */
23
21
  import { getSupportedGlobalStylesPanels, useSetting, useStyle } from './hooks';
22
+ import { getTypographyFontSizeValue } from './typography-utils';
24
23
 
25
24
  export function useHasTypographyPanel( name ) {
25
+ const hasFontFamily = useHasFontFamilyControl( name );
26
26
  const hasLineHeight = useHasLineHeightControl( name );
27
27
  const hasFontAppearance = useHasAppearanceControl( name );
28
28
  const hasLetterSpacing = useHasLetterSpacingControl( name );
29
29
  const supports = getSupportedGlobalStylesPanels( name );
30
30
  return (
31
+ hasFontFamily ||
31
32
  hasLineHeight ||
32
33
  hasFontAppearance ||
33
34
  hasLetterSpacing ||
@@ -35,6 +36,12 @@ export function useHasTypographyPanel( name ) {
35
36
  );
36
37
  }
37
38
 
39
+ function useHasFontFamilyControl( name ) {
40
+ const supports = getSupportedGlobalStylesPanels( name );
41
+ const [ fontFamilies ] = useSetting( 'typography.fontFamilies', name );
42
+ return supports.includes( 'fontFamily' ) && !! fontFamilies?.length;
43
+ }
44
+
38
45
  function useHasLineHeightControl( name ) {
39
46
  const supports = getSupportedGlobalStylesPanels( name );
40
47
  return (
@@ -54,6 +61,23 @@ function useHasAppearanceControl( name ) {
54
61
  return hasFontStyles || hasFontWeights;
55
62
  }
56
63
 
64
+ function useAppearanceControlLabel( name ) {
65
+ const supports = getSupportedGlobalStylesPanels( name );
66
+ const hasFontStyles =
67
+ useSetting( 'typography.fontStyle', name )[ 0 ] &&
68
+ supports.includes( 'fontStyle' );
69
+ const hasFontWeights =
70
+ useSetting( 'typography.fontWeight', name )[ 0 ] &&
71
+ supports.includes( 'fontWeight' );
72
+ if ( ! hasFontStyles ) {
73
+ return __( 'Font weight' );
74
+ }
75
+ if ( ! hasFontWeights ) {
76
+ return __( 'Font style' );
77
+ }
78
+ return __( 'Appearance' );
79
+ }
80
+
57
81
  function useHasLetterSpacingControl( name, element ) {
58
82
  const setting = useSetting( 'typography.letterSpacing', name )[ 0 ];
59
83
  if ( ! setting ) {
@@ -78,16 +102,69 @@ function useHasTextTransformControl( name, element ) {
78
102
  return supports.includes( 'textTransform' );
79
103
  }
80
104
 
81
- export default function TypographyPanel( { name, element } ) {
82
- const [ selectedLevel, setCurrentTab ] = useState( 'heading' );
105
+ function useStyleWithReset( path, blockName ) {
106
+ const [ style, setStyle ] = useStyle( path, blockName );
107
+ const [ userStyle ] = useStyle( path, blockName, 'user' );
108
+ const hasStyle = () => !! userStyle;
109
+ const resetStyle = () => setStyle( undefined );
110
+ return [ style, setStyle, hasStyle, resetStyle ];
111
+ }
112
+
113
+ function useFontAppearance( prefix, name ) {
114
+ const [ fontStyle, setFontStyle ] = useStyle(
115
+ prefix + 'typography.fontStyle',
116
+ name
117
+ );
118
+ const [ userFontStyle ] = useStyle(
119
+ prefix + 'typography.fontStyle',
120
+ name,
121
+ 'user'
122
+ );
123
+ const [ fontWeight, setFontWeight ] = useStyle(
124
+ prefix + 'typography.fontWeight',
125
+ name
126
+ );
127
+ const [ userFontWeight ] = useStyle(
128
+ prefix + 'typography.fontWeight',
129
+ name,
130
+ 'user'
131
+ );
132
+ const hasFontAppearance = () => !! userFontStyle || !! userFontWeight;
133
+ const resetFontAppearance = () => {
134
+ setFontStyle( undefined );
135
+ setFontWeight( undefined );
136
+ };
137
+ return {
138
+ fontStyle,
139
+ setFontStyle,
140
+ fontWeight,
141
+ setFontWeight,
142
+ hasFontAppearance,
143
+ resetFontAppearance,
144
+ };
145
+ }
146
+
147
+ export default function TypographyPanel( { name, element, headingLevel } ) {
83
148
  const supports = getSupportedGlobalStylesPanels( name );
84
149
  let prefix = '';
85
150
  if ( element === 'heading' ) {
86
- prefix = `elements.${ selectedLevel }.`;
151
+ prefix = `elements.${ headingLevel }.`;
87
152
  } else if ( element && element !== 'text' ) {
88
153
  prefix = `elements.${ element }.`;
89
154
  }
155
+ const [ fluidTypography ] = useSetting( 'typography.fluid', name );
90
156
  const [ fontSizes ] = useSetting( 'typography.fontSizes', name );
157
+
158
+ // Convert static font size values to fluid font sizes if fluidTypography is activated.
159
+ const fontSizesWithFluidValues = fontSizes.map( ( font ) => {
160
+ if ( !! fluidTypography ) {
161
+ font.size = getTypographyFontSizeValue( font, {
162
+ fluid: fluidTypography,
163
+ } );
164
+ }
165
+ return font;
166
+ } );
167
+
91
168
  const disableCustomFontSizes = ! useSetting(
92
169
  'typography.customFontSize',
93
170
  name
@@ -99,142 +176,99 @@ export default function TypographyPanel( { name, element } ) {
99
176
  const hasFontWeights =
100
177
  useSetting( 'typography.fontWeight', name )[ 0 ] &&
101
178
  supports.includes( 'fontWeight' );
179
+ const hasFontFamilyEnabled = useHasFontFamilyControl( name );
102
180
  const hasLineHeightEnabled = useHasLineHeightControl( name );
103
181
  const hasAppearanceControl = useHasAppearanceControl( name );
182
+ const appearanceControlLabel = useAppearanceControlLabel( name );
104
183
  const hasLetterSpacingControl = useHasLetterSpacingControl( name, element );
105
184
  const hasTextTransformControl = useHasTextTransformControl( name, element );
106
185
 
107
186
  /* Disable font size controls when the option to style all headings is selected. */
108
187
  let hasFontSizeEnabled = supports.includes( 'fontSize' );
109
- if ( element === 'heading' && selectedLevel === 'heading' ) {
188
+ if ( element === 'heading' && headingLevel === 'heading' ) {
110
189
  hasFontSizeEnabled = false;
111
190
  }
112
191
 
113
- const [ fontFamily, setFontFamily ] = useStyle(
114
- prefix + 'typography.fontFamily',
115
- name
116
- );
117
- const [ fontSize, setFontSize ] = useStyle(
118
- prefix + 'typography.fontSize',
119
- name
120
- );
192
+ const [ fontFamily, setFontFamily, hasFontFamily, resetFontFamily ] =
193
+ useStyleWithReset( prefix + 'typography.fontFamily', name );
194
+ const [ fontSize, setFontSize, hasFontSize, resetFontSize ] =
195
+ useStyleWithReset( prefix + 'typography.fontSize', name );
196
+ const {
197
+ fontStyle,
198
+ setFontStyle,
199
+ fontWeight,
200
+ setFontWeight,
201
+ hasFontAppearance,
202
+ resetFontAppearance,
203
+ } = useFontAppearance( prefix, name );
204
+ const [ lineHeight, setLineHeight, hasLineHeight, resetLineHeight ] =
205
+ useStyleWithReset( prefix + 'typography.lineHeight', name );
206
+ const [
207
+ letterSpacing,
208
+ setLetterSpacing,
209
+ hasLetterSpacing,
210
+ resetLetterSpacing,
211
+ ] = useStyleWithReset( prefix + 'typography.letterSpacing', name );
212
+ const [
213
+ textTransform,
214
+ setTextTransform,
215
+ hasTextTransform,
216
+ resetTextTransform,
217
+ ] = useStyleWithReset( prefix + 'typography.textTransform', name );
121
218
 
122
- const [ fontStyle, setFontStyle ] = useStyle(
123
- prefix + 'typography.fontStyle',
124
- name
125
- );
126
- const [ fontWeight, setFontWeight ] = useStyle(
127
- prefix + 'typography.fontWeight',
128
- name
129
- );
130
- const [ lineHeight, setLineHeight ] = useStyle(
131
- prefix + 'typography.lineHeight',
132
- name
133
- );
134
- const [ letterSpacing, setLetterSpacing ] = useStyle(
135
- prefix + 'typography.letterSpacing',
136
- name
137
- );
138
- const [ textTransform, setTextTransform ] = useStyle(
139
- prefix + 'typography.textTransform',
140
- name
141
- );
142
- const [ backgroundColor ] = useStyle( prefix + 'color.background', name );
143
- const [ gradientValue ] = useStyle( prefix + 'color.gradient', name );
144
- const [ color ] = useStyle( prefix + 'color.text', name );
145
- const extraStyles =
146
- element === 'link'
147
- ? {
148
- textDecoration: 'underline',
149
- }
150
- : {};
219
+ const resetAll = () => {
220
+ resetFontFamily();
221
+ resetFontSize();
222
+ resetFontAppearance();
223
+ resetLineHeight();
224
+ resetLetterSpacing();
225
+ resetTextTransform();
226
+ };
151
227
 
152
228
  return (
153
- <PanelBody className="edit-site-typography-panel" initialOpen={ true }>
154
- <div
155
- className="edit-site-typography-panel__preview"
156
- style={ {
157
- fontFamily: fontFamily ?? 'serif',
158
- background: gradientValue ?? backgroundColor,
159
- color,
160
- fontSize,
161
- fontStyle,
162
- fontWeight,
163
- letterSpacing,
164
- ...extraStyles,
165
- } }
166
- >
167
- Aa
168
- </div>
169
- <Grid columns={ 2 } rowGap={ 16 } columnGap={ 8 }>
170
- { element === 'heading' && (
171
- <div className="edit-site-typography-panel__full-width-control">
172
- <ToggleGroupControl
173
- label={ __( 'Select heading level' ) }
174
- hideLabelFromVision
175
- value={ selectedLevel }
176
- onChange={ setCurrentTab }
177
- isBlock
178
- size="__unstable-large"
179
- __nextHasNoMarginBottom
180
- >
181
- <ToggleGroupControlOption
182
- value="heading"
183
- /* translators: 'All' refers to selecting all heading levels
184
- and applying the same style to h1-h6. */
185
- label={ __( 'All' ) }
186
- />
187
- <ToggleGroupControlOption
188
- value="h1"
189
- label={ __( 'H1' ) }
190
- />
191
- <ToggleGroupControlOption
192
- value="h2"
193
- label={ __( 'H2' ) }
194
- />
195
- <ToggleGroupControlOption
196
- value="h3"
197
- label={ __( 'H3' ) }
198
- />
199
- <ToggleGroupControlOption
200
- value="h4"
201
- label={ __( 'H4' ) }
202
- />
203
- <ToggleGroupControlOption
204
- value="h5"
205
- label={ __( 'H5' ) }
206
- />
207
- <ToggleGroupControlOption
208
- value="h6"
209
- label={ __( 'H6' ) }
210
- />
211
- </ToggleGroupControl>
212
- </div>
213
- ) }
214
- { supports.includes( 'fontFamily' ) && (
215
- <div className="edit-site-typography-panel__full-width-control">
216
- <FontFamilyControl
217
- fontFamilies={ fontFamilies }
218
- value={ fontFamily }
219
- onChange={ setFontFamily }
220
- size="__unstable-large"
221
- __nextHasNoMarginBottom
222
- />
223
- </div>
224
- ) }
225
- { hasFontSizeEnabled && (
226
- <div className="edit-site-typography-panel__full-width-control">
227
- <FontSizePicker
228
- value={ fontSize }
229
- onChange={ setFontSize }
230
- fontSizes={ fontSizes }
231
- disableCustomFontSizes={ disableCustomFontSizes }
232
- size="__unstable-large"
233
- __nextHasNoMarginBottom
234
- />
235
- </div>
236
- ) }
237
- { hasAppearanceControl && (
229
+ <ToolsPanel label={ __( 'Typography' ) } resetAll={ resetAll }>
230
+ { hasFontFamilyEnabled && (
231
+ <ToolsPanelItem
232
+ label={ __( 'Font family' ) }
233
+ hasValue={ hasFontFamily }
234
+ onDeselect={ resetFontFamily }
235
+ isShownByDefault
236
+ >
237
+ <FontFamilyControl
238
+ fontFamilies={ fontFamilies }
239
+ value={ fontFamily }
240
+ onChange={ setFontFamily }
241
+ size="__unstable-large"
242
+ __nextHasNoMarginBottom
243
+ />
244
+ </ToolsPanelItem>
245
+ ) }
246
+ { hasFontSizeEnabled && (
247
+ <ToolsPanelItem
248
+ label={ __( 'Font size' ) }
249
+ hasValue={ hasFontSize }
250
+ onDeselect={ resetFontSize }
251
+ isShownByDefault
252
+ >
253
+ <FontSizePicker
254
+ value={ fontSize }
255
+ onChange={ setFontSize }
256
+ fontSizes={ fontSizesWithFluidValues }
257
+ disableCustomFontSizes={ disableCustomFontSizes }
258
+ withReset={ false }
259
+ size="__unstable-large"
260
+ __nextHasNoMarginBottom
261
+ />
262
+ </ToolsPanelItem>
263
+ ) }
264
+ { hasAppearanceControl && (
265
+ <ToolsPanelItem
266
+ className="single-column"
267
+ label={ appearanceControlLabel }
268
+ hasValue={ hasFontAppearance }
269
+ onDeselect={ resetFontAppearance }
270
+ isShownByDefault
271
+ >
238
272
  <FontAppearanceControl
239
273
  value={ {
240
274
  fontStyle,
@@ -252,8 +286,16 @@ export default function TypographyPanel( { name, element } ) {
252
286
  size="__unstable-large"
253
287
  __nextHasNoMarginBottom
254
288
  />
255
- ) }
256
- { hasLineHeightEnabled && (
289
+ </ToolsPanelItem>
290
+ ) }
291
+ { hasLineHeightEnabled && (
292
+ <ToolsPanelItem
293
+ className="single-column"
294
+ label={ __( 'Line height' ) }
295
+ hasValue={ hasLineHeight }
296
+ onDeselect={ resetLineHeight }
297
+ isShownByDefault
298
+ >
257
299
  <LineHeightControl
258
300
  __nextHasNoMarginBottom
259
301
  __unstableInputWidth="auto"
@@ -261,28 +303,41 @@ export default function TypographyPanel( { name, element } ) {
261
303
  onChange={ setLineHeight }
262
304
  size="__unstable-large"
263
305
  />
264
- ) }
265
- { hasLetterSpacingControl && (
306
+ </ToolsPanelItem>
307
+ ) }
308
+ { hasLetterSpacingControl && (
309
+ <ToolsPanelItem
310
+ className="single-column"
311
+ label={ __( 'Letter spacing' ) }
312
+ hasValue={ hasLetterSpacing }
313
+ onDeselect={ resetLetterSpacing }
314
+ isShownByDefault
315
+ >
266
316
  <LetterSpacingControl
267
317
  value={ letterSpacing }
268
318
  onChange={ setLetterSpacing }
269
319
  size="__unstable-large"
270
320
  __unstableInputWidth="auto"
271
321
  />
272
- ) }
273
- { hasTextTransformControl && (
274
- <div className="edit-site-typography-panel__full-width-control">
275
- <TextTransformControl
276
- value={ textTransform }
277
- onChange={ setTextTransform }
278
- showNone
279
- isBlock
280
- size="__unstable-large"
281
- __nextHasNoMarginBottom
282
- />
283
- </div>
284
- ) }
285
- </Grid>
286
- </PanelBody>
322
+ </ToolsPanelItem>
323
+ ) }
324
+ { hasTextTransformControl && (
325
+ <ToolsPanelItem
326
+ label={ __( 'Letter case' ) }
327
+ hasValue={ hasTextTransform }
328
+ onDeselect={ resetTextTransform }
329
+ isShownByDefault
330
+ >
331
+ <TextTransformControl
332
+ value={ textTransform }
333
+ onChange={ setTextTransform }
334
+ showNone
335
+ isBlock
336
+ size="__unstable-large"
337
+ __nextHasNoMarginBottom
338
+ />
339
+ </ToolsPanelItem>
340
+ ) }
341
+ </ToolsPanel>
287
342
  );
288
343
  }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { useStyle } from './hooks';
5
+
6
+ export default function TypographyPreview( { name, element, headingLevel } ) {
7
+ let prefix = '';
8
+ if ( element === 'heading' ) {
9
+ prefix = `elements.${ headingLevel }.`;
10
+ } else if ( element && element !== 'text' ) {
11
+ prefix = `elements.${ element }.`;
12
+ }
13
+
14
+ const [ fontFamily ] = useStyle( prefix + 'typography.fontFamily', name );
15
+ const [ gradientValue ] = useStyle( prefix + 'color.gradient', name );
16
+ const [ backgroundColor ] = useStyle( prefix + 'color.background', name );
17
+ const [ color ] = useStyle( prefix + 'color.text', name );
18
+ const [ fontSize ] = useStyle( prefix + 'typography.fontSize', name );
19
+ const [ fontStyle ] = useStyle( prefix + 'typography.fontStyle', name );
20
+ const [ fontWeight ] = useStyle( prefix + 'typography.fontWeight', name );
21
+ const [ letterSpacing ] = useStyle(
22
+ prefix + 'typography.letterSpacing',
23
+ name
24
+ );
25
+ const extraStyles =
26
+ element === 'link'
27
+ ? {
28
+ textDecoration: 'underline',
29
+ }
30
+ : {};
31
+
32
+ return (
33
+ <div
34
+ className="edit-site-typography-preview"
35
+ style={ {
36
+ fontFamily: fontFamily ?? 'serif',
37
+ background: gradientValue ?? backgroundColor,
38
+ color,
39
+ fontSize,
40
+ fontStyle,
41
+ fontWeight,
42
+ letterSpacing,
43
+ ...extraStyles,
44
+ } }
45
+ >
46
+ Aa
47
+ </div>
48
+ );
49
+ }