@wordpress/edit-site 3.0.10 → 3.0.14

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 (186) hide show
  1. package/build/components/add-new-template/new-template-part.js +34 -18
  2. package/build/components/add-new-template/new-template-part.js.map +1 -1
  3. package/build/components/add-new-template/new-template.js +41 -23
  4. package/build/components/add-new-template/new-template.js.map +1 -1
  5. package/build/components/block-editor/index.js +3 -1
  6. package/build/components/block-editor/index.js.map +1 -1
  7. package/build/components/editor/index.js +12 -6
  8. package/build/components/editor/index.js.map +1 -1
  9. package/build/components/global-styles/color-palette-panel.js +29 -6
  10. package/build/components/global-styles/color-palette-panel.js.map +1 -1
  11. package/build/components/global-styles/global-styles-provider.js +5 -43
  12. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  13. package/build/components/global-styles/gradients-palette-panel.js +71 -0
  14. package/build/components/global-styles/gradients-palette-panel.js.map +1 -0
  15. package/build/components/global-styles/hooks.js +5 -5
  16. package/build/components/global-styles/hooks.js.map +1 -1
  17. package/build/components/global-styles/palette.js +11 -5
  18. package/build/components/global-styles/palette.js.map +1 -1
  19. package/build/components/global-styles/screen-background-color.js +3 -1
  20. package/build/components/global-styles/screen-background-color.js.map +1 -1
  21. package/build/components/global-styles/screen-color-palette.js +23 -3
  22. package/build/components/global-styles/screen-color-palette.js.map +1 -1
  23. package/build/components/global-styles/screen-link-color.js +3 -1
  24. package/build/components/global-styles/screen-link-color.js.map +1 -1
  25. package/build/components/global-styles/screen-text-color.js +3 -1
  26. package/build/components/global-styles/screen-text-color.js.map +1 -1
  27. package/build/components/global-styles/screen-typography-element.js +54 -0
  28. package/build/components/global-styles/screen-typography-element.js.map +1 -0
  29. package/build/components/global-styles/screen-typography.js +74 -6
  30. package/build/components/global-styles/screen-typography.js.map +1 -1
  31. package/build/components/global-styles/typography-panel.js +28 -8
  32. package/build/components/global-styles/typography-panel.js.map +1 -1
  33. package/build/components/global-styles/ui.js +12 -0
  34. package/build/components/global-styles/ui.js.map +1 -1
  35. package/build/components/global-styles/use-global-styles-output.js +2 -2
  36. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  37. package/build/components/global-styles/utils.js +1 -1
  38. package/build/components/global-styles/utils.js.map +1 -1
  39. package/build/components/keyboard-shortcuts/index.js +26 -0
  40. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  41. package/build/components/list/actions/index.js +104 -0
  42. package/build/components/list/actions/index.js.map +1 -0
  43. package/build/components/list/actions/rename-menu-item.js +112 -0
  44. package/build/components/list/actions/rename-menu-item.js.map +1 -0
  45. package/build/components/list/added-by.js +180 -0
  46. package/build/components/list/added-by.js.map +1 -0
  47. package/build/components/list/index.js +54 -7
  48. package/build/components/list/index.js.map +1 -1
  49. package/build/components/list/table.js +58 -68
  50. package/build/components/list/table.js.map +1 -1
  51. package/build/components/list/use-register-shortcuts.js +52 -0
  52. package/build/components/list/use-register-shortcuts.js.map +1 -0
  53. package/build/components/navigation-sidebar/index.js +24 -9
  54. package/build/components/navigation-sidebar/index.js.map +1 -1
  55. package/build/components/navigation-sidebar/navigation-panel/index.js +35 -17
  56. package/build/components/navigation-sidebar/navigation-panel/index.js.map +1 -1
  57. package/build/components/navigation-sidebar/navigation-toggle/index.js +14 -5
  58. package/build/components/navigation-sidebar/navigation-toggle/index.js.map +1 -1
  59. package/build/components/template-details/edit-template-title.js +33 -0
  60. package/build/components/template-details/edit-template-title.js.map +1 -0
  61. package/build/components/template-details/index.js +8 -4
  62. package/build/components/template-details/index.js.map +1 -1
  63. package/build/components/template-details/template-areas.js +1 -1
  64. package/build/components/template-details/template-areas.js.map +1 -1
  65. package/build/index.js +8 -2
  66. package/build/index.js.map +1 -1
  67. package/build/store/actions.js +47 -18
  68. package/build/store/actions.js.map +1 -1
  69. package/build/store/selectors.js +25 -5
  70. package/build/store/selectors.js.map +1 -1
  71. package/build-module/components/add-new-template/new-template-part.js +30 -17
  72. package/build-module/components/add-new-template/new-template-part.js.map +1 -1
  73. package/build-module/components/add-new-template/new-template.js +40 -24
  74. package/build-module/components/add-new-template/new-template.js.map +1 -1
  75. package/build-module/components/block-editor/index.js +2 -1
  76. package/build-module/components/block-editor/index.js.map +1 -1
  77. package/build-module/components/editor/index.js +13 -7
  78. package/build-module/components/editor/index.js.map +1 -1
  79. package/build-module/components/global-styles/color-palette-panel.js +29 -7
  80. package/build-module/components/global-styles/color-palette-panel.js.map +1 -1
  81. package/build-module/components/global-styles/global-styles-provider.js +6 -39
  82. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  83. package/build-module/components/global-styles/gradients-palette-panel.js +60 -0
  84. package/build-module/components/global-styles/gradients-palette-panel.js.map +1 -0
  85. package/build-module/components/global-styles/hooks.js +5 -5
  86. package/build-module/components/global-styles/hooks.js.map +1 -1
  87. package/build-module/components/global-styles/palette.js +12 -5
  88. package/build-module/components/global-styles/palette.js.map +1 -1
  89. package/build-module/components/global-styles/screen-background-color.js +3 -1
  90. package/build-module/components/global-styles/screen-background-color.js.map +1 -1
  91. package/build-module/components/global-styles/screen-color-palette.js +22 -3
  92. package/build-module/components/global-styles/screen-color-palette.js.map +1 -1
  93. package/build-module/components/global-styles/screen-link-color.js +3 -1
  94. package/build-module/components/global-styles/screen-link-color.js.map +1 -1
  95. package/build-module/components/global-styles/screen-text-color.js +3 -1
  96. package/build-module/components/global-styles/screen-text-color.js.map +1 -1
  97. package/build-module/components/global-styles/screen-typography-element.js +41 -0
  98. package/build-module/components/global-styles/screen-typography-element.js.map +1 -0
  99. package/build-module/components/global-styles/screen-typography.js +70 -6
  100. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  101. package/build-module/components/global-styles/typography-panel.js +28 -8
  102. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  103. package/build-module/components/global-styles/ui.js +11 -0
  104. package/build-module/components/global-styles/ui.js.map +1 -1
  105. package/build-module/components/global-styles/use-global-styles-output.js +2 -2
  106. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  107. package/build-module/components/global-styles/utils.js +1 -1
  108. package/build-module/components/global-styles/utils.js.map +1 -1
  109. package/build-module/components/keyboard-shortcuts/index.js +26 -0
  110. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  111. package/build-module/components/list/actions/index.js +85 -0
  112. package/build-module/components/list/actions/index.js.map +1 -0
  113. package/build-module/components/list/actions/rename-menu-item.js +101 -0
  114. package/build-module/components/list/actions/rename-menu-item.js.map +1 -0
  115. package/build-module/components/list/added-by.js +166 -0
  116. package/build-module/components/list/added-by.js.map +1 -0
  117. package/build-module/components/list/index.js +49 -8
  118. package/build-module/components/list/index.js.map +1 -1
  119. package/build-module/components/list/table.js +60 -70
  120. package/build-module/components/list/table.js.map +1 -1
  121. package/build-module/components/list/use-register-shortcuts.js +41 -0
  122. package/build-module/components/list/use-register-shortcuts.js.map +1 -0
  123. package/build-module/components/navigation-sidebar/index.js +22 -10
  124. package/build-module/components/navigation-sidebar/index.js.map +1 -1
  125. package/build-module/components/navigation-sidebar/navigation-panel/index.js +33 -18
  126. package/build-module/components/navigation-sidebar/navigation-panel/index.js.map +1 -1
  127. package/build-module/components/navigation-sidebar/navigation-toggle/index.js +14 -6
  128. package/build-module/components/navigation-sidebar/navigation-toggle/index.js.map +1 -1
  129. package/build-module/components/template-details/edit-template-title.js +23 -0
  130. package/build-module/components/template-details/edit-template-title.js.map +1 -0
  131. package/build-module/components/template-details/index.js +7 -4
  132. package/build-module/components/template-details/index.js.map +1 -1
  133. package/build-module/components/template-details/template-areas.js +1 -1
  134. package/build-module/components/template-details/template-areas.js.map +1 -1
  135. package/build-module/index.js +8 -3
  136. package/build-module/index.js.map +1 -1
  137. package/build-module/store/actions.js +48 -19
  138. package/build-module/store/actions.js.map +1 -1
  139. package/build-module/store/selectors.js +21 -3
  140. package/build-module/store/selectors.js.map +1 -1
  141. package/build-style/style-rtl.css +146 -21
  142. package/build-style/style.css +146 -21
  143. package/package.json +10 -8
  144. package/src/components/add-new-template/new-template-part.js +32 -18
  145. package/src/components/add-new-template/new-template.js +39 -20
  146. package/src/components/block-editor/index.js +2 -0
  147. package/src/components/editor/index.js +17 -6
  148. package/src/components/global-styles/color-palette-panel.js +64 -7
  149. package/src/components/global-styles/global-styles-provider.js +3 -33
  150. package/src/components/global-styles/gradients-palette-panel.js +99 -0
  151. package/src/components/global-styles/hooks.js +4 -4
  152. package/src/components/global-styles/palette.js +30 -10
  153. package/src/components/global-styles/screen-background-color.js +2 -0
  154. package/src/components/global-styles/screen-color-palette.js +30 -3
  155. package/src/components/global-styles/screen-link-color.js +2 -0
  156. package/src/components/global-styles/screen-text-color.js +2 -0
  157. package/src/components/global-styles/screen-typography-element.js +39 -0
  158. package/src/components/global-styles/screen-typography.js +84 -3
  159. package/src/components/global-styles/style.scss +45 -6
  160. package/src/components/global-styles/test/use-global-styles-output.js +1 -1
  161. package/src/components/global-styles/test/utils.js +1 -1
  162. package/src/components/global-styles/typography-panel.js +37 -7
  163. package/src/components/global-styles/ui.js +9 -0
  164. package/src/components/global-styles/use-global-styles-output.js +2 -2
  165. package/src/components/global-styles/utils.js +1 -1
  166. package/src/components/keyboard-shortcuts/index.js +32 -0
  167. package/src/components/list/actions/index.js +95 -0
  168. package/src/components/list/actions/rename-menu-item.js +134 -0
  169. package/src/components/list/added-by.js +179 -0
  170. package/src/components/list/index.js +63 -5
  171. package/src/components/list/style.scss +106 -11
  172. package/src/components/list/table.js +65 -76
  173. package/src/components/list/use-register-shortcuts.js +45 -0
  174. package/src/components/navigation-sidebar/index.js +21 -12
  175. package/src/components/navigation-sidebar/navigation-panel/index.js +32 -15
  176. package/src/components/navigation-sidebar/navigation-toggle/index.js +29 -17
  177. package/src/components/navigation-sidebar/navigation-toggle/test/index.js +2 -0
  178. package/src/components/sidebar/style.scss +2 -1
  179. package/src/components/template-details/edit-template-title.js +28 -0
  180. package/src/components/template-details/index.js +15 -10
  181. package/src/components/template-details/template-areas.js +1 -1
  182. package/src/index.js +10 -2
  183. package/src/store/actions.js +82 -34
  184. package/src/store/selectors.js +22 -4
  185. package/src/store/test/actions.js +0 -24
  186. package/src/store/test/selectors.js +24 -0
@@ -0,0 +1,99 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { noop } from 'lodash';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import {
10
+ __experimentalVStack as VStack,
11
+ __experimentalPaletteEdit as PaletteEdit,
12
+ DuotonePicker,
13
+ __experimentalHeading as Heading,
14
+ } from '@wordpress/components';
15
+ import { __ } from '@wordpress/i18n';
16
+
17
+ /**
18
+ * Internal dependencies
19
+ */
20
+ import { useSetting } from './hooks';
21
+
22
+ export default function GradientPalettePanel( { name } ) {
23
+ const [ themeGradients, setThemeGradients ] = useSetting(
24
+ 'color.gradients.theme',
25
+ name
26
+ );
27
+ const [ baseThemeGradients ] = useSetting(
28
+ 'color.gradients.theme',
29
+ name,
30
+ 'base'
31
+ );
32
+ const [ defaultGradients, setDefaultGradients ] = useSetting(
33
+ 'color.gradients.default',
34
+ name
35
+ );
36
+ const [ baseDefaultGradients ] = useSetting(
37
+ 'color.gradients.default',
38
+ name,
39
+ 'base'
40
+ );
41
+ const [ customGradients, setCustomGradients ] = useSetting(
42
+ 'color.gradients.custom',
43
+ name
44
+ );
45
+
46
+ const [ defaultPaletteEnabled ] = useSetting(
47
+ 'color.defaultGradients',
48
+ name
49
+ );
50
+ const [ duotonePalette ] = useSetting( 'color.duotone' ) || [];
51
+ return (
52
+ <VStack
53
+ className="edit-site-global-styles-gradient-palette-panel"
54
+ spacing={ 10 }
55
+ >
56
+ <div>
57
+ <Heading className="edit-site-global-styles-gradient-palette-panel__duotone-heading">
58
+ { __( 'Duotone' ) }
59
+ </Heading>
60
+ <DuotonePicker
61
+ duotonePalette={ duotonePalette }
62
+ disableCustomDuotone={ true }
63
+ disableCustomColors={ true }
64
+ clearable={ false }
65
+ onChange={ noop }
66
+ />
67
+ </div>
68
+ { !! themeGradients && !! themeGradients.length && (
69
+ <PaletteEdit
70
+ canReset={ themeGradients !== baseThemeGradients }
71
+ canOnlyChangeValues
72
+ gradients={ themeGradients }
73
+ onChange={ setThemeGradients }
74
+ paletteLabel={ __( 'Theme' ) }
75
+ />
76
+ ) }
77
+ { !! defaultGradients &&
78
+ !! defaultGradients.length &&
79
+ !! defaultPaletteEnabled && (
80
+ <PaletteEdit
81
+ canReset={ defaultGradients !== baseDefaultGradients }
82
+ canOnlyChangeValues
83
+ gradients={ defaultGradients }
84
+ onChange={ setDefaultGradients }
85
+ paletteLabel={ __( 'Default' ) }
86
+ />
87
+ ) }
88
+ <PaletteEdit
89
+ gradients={ customGradients }
90
+ onChange={ setCustomGradients }
91
+ paletteLabel={ __( 'Custom' ) }
92
+ emptyMessage={ __(
93
+ 'Custom gradients are empty! Add some gradients to create your own palette.'
94
+ ) }
95
+ slugPrefix="custom-"
96
+ />
97
+ </VStack>
98
+ );
99
+ }
@@ -49,7 +49,7 @@ export function useSetting( path, blockName, source = 'all' ) {
49
49
  setUserConfig( ( currentConfig ) => {
50
50
  const newUserConfig = cloneDeep( currentConfig );
51
51
  const pathToSet = PATHS_WITH_MERGE[ path ]
52
- ? fullPath + '.user'
52
+ ? fullPath + '.custom'
53
53
  : fullPath;
54
54
  set( newUserConfig, pathToSet, newValue );
55
55
 
@@ -65,7 +65,7 @@ export function useSetting( path, blockName, source = 'all' ) {
65
65
  const getSettingValue = ( configToUse ) => {
66
66
  const result = get( configToUse, currentPath );
67
67
  if ( PATHS_WITH_MERGE[ path ] ) {
68
- return result?.user ?? result?.theme ?? result?.default;
68
+ return result?.custom ?? result?.theme ?? result?.default;
69
69
  }
70
70
  return result;
71
71
  };
@@ -218,7 +218,7 @@ export function getSupportedGlobalStylesPanels( name ) {
218
218
  }
219
219
 
220
220
  export function useColorsPerOrigin( name ) {
221
- const [ customColors ] = useSetting( 'color.palette.user', name );
221
+ const [ customColors ] = useSetting( 'color.palette.custom', name );
222
222
  const [ themeColors ] = useSetting( 'color.palette.theme', name );
223
223
  const [ defaultColors ] = useSetting( 'color.palette.default', name );
224
224
  const [ shouldDisplayDefaultColors ] = useSetting( 'color.defaultPalette' );
@@ -261,7 +261,7 @@ export function useColorsPerOrigin( name ) {
261
261
  }
262
262
 
263
263
  export function useGradientsPerOrigin( name ) {
264
- const [ customGradients ] = useSetting( 'color.gradients.user', name );
264
+ const [ customGradients ] = useSetting( 'color.gradients.custom', name );
265
265
  const [ themeGradients ] = useSetting( 'color.gradients.theme', name );
266
266
  const [ defaultGradients ] = useSetting( 'color.gradients.default', name );
267
267
  const [ shouldDisplayDefaultGradients ] = useSetting(
@@ -11,6 +11,7 @@ import {
11
11
  ColorIndicator,
12
12
  } from '@wordpress/components';
13
13
  import { __, _n, sprintf } from '@wordpress/i18n';
14
+ import { useMemo } from '@wordpress/element';
14
15
 
15
16
  /**
16
17
  * Internal dependencies
@@ -22,18 +23,43 @@ import { useSetting } from './hooks';
22
23
  const EMPTY_COLORS = [];
23
24
 
24
25
  function Palette( { name } ) {
25
- const [ colorsSetting ] = useSetting( 'color.palette.user', name );
26
- const colors = colorsSetting || EMPTY_COLORS;
26
+ const [ customColors ] = useSetting( 'color.palette.custom' );
27
+ const [ themeColors ] = useSetting( 'color.palette.theme' );
28
+ const [ defaultColors ] = useSetting( 'color.palette.default' );
29
+
30
+ const [ defaultPaletteEnabled ] = useSetting(
31
+ 'color.defaultPalette',
32
+ name
33
+ );
34
+ const colors = useMemo(
35
+ () => [
36
+ ...( customColors || EMPTY_COLORS ),
37
+ ...( themeColors || EMPTY_COLORS ),
38
+ ...( defaultColors && defaultPaletteEnabled
39
+ ? defaultColors
40
+ : EMPTY_COLORS ),
41
+ ],
42
+ [ customColors, themeColors, defaultColors, defaultPaletteEnabled ]
43
+ );
44
+
27
45
  const screenPath = ! name
28
46
  ? '/colors/palette'
29
47
  : '/blocks/' + name + '/colors/palette';
48
+ const paletteButtonText =
49
+ colors.length > 0
50
+ ? sprintf(
51
+ // Translators: %d: Number of palette colors.
52
+ _n( '%d color', '%d colors', colors.length ),
53
+ colors.length
54
+ )
55
+ : __( 'Add custom colors' );
30
56
 
31
57
  return (
32
58
  <VStack spacing={ 3 }>
33
59
  <Subtitle>{ __( 'Palette' ) }</Subtitle>
34
60
  <ItemGroup isBordered isSeparated>
35
61
  <NavigationButton path={ screenPath }>
36
- <HStack>
62
+ <HStack isReversed={ colors.length === 0 }>
37
63
  <FlexBlock>
38
64
  <ZStack isLayered={ false } offset={ -8 }>
39
65
  { colors.slice( 0, 5 ).map( ( { color } ) => (
@@ -44,13 +70,7 @@ function Palette( { name } ) {
44
70
  ) ) }
45
71
  </ZStack>
46
72
  </FlexBlock>
47
- <FlexItem>
48
- { sprintf(
49
- // Translators: %d: Number of palette colors.
50
- _n( '%d color', '%d colors', colors.length ),
51
- colors.length
52
- ) }
53
- </FlexItem>
73
+ <FlexItem>{ paletteButtonText }</FlexItem>
54
74
  </HStack>
55
75
  </NavigationButton>
56
76
  </ItemGroup>
@@ -104,6 +104,8 @@ function ScreenBackgroundColor( { name } ) {
104
104
  disableCustomGradients={ ! areCustomGradientsEnabled }
105
105
  __experimentalHasMultipleOrigins
106
106
  showTitle={ false }
107
+ enableAlpha
108
+ __experimentalIsRenderedInSidebar
107
109
  />
108
110
  </>
109
111
  );
@@ -2,26 +2,53 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
+ import {
6
+ __experimentalToggleGroupControl as ToggleGroupControl,
7
+ __experimentalToggleGroupControlOption as ToggleGroupControlOption,
8
+ } from '@wordpress/components';
9
+ import { useState } from '@wordpress/element';
5
10
 
6
11
  /**
7
12
  * Internal dependencies
8
13
  */
9
14
  import ColorPalettePanel from './color-palette-panel';
15
+ import GradientPalettePanel from './gradients-palette-panel';
10
16
  import ScreenHeader from './header';
11
17
 
12
18
  function ScreenColorPalette( { name } ) {
19
+ const [ currentTab, setCurrentTab ] = useState( 'solid' );
13
20
  const parentMenu = name === undefined ? '' : '/blocks/' + name;
14
21
 
15
22
  return (
16
23
  <>
17
24
  <ScreenHeader
18
25
  back={ parentMenu + '/colors' }
19
- title={ __( 'Color Palette' ) }
26
+ title={ __( 'Palette' ) }
20
27
  description={ __(
21
- 'Color palettes are used to provide default color options for blocks and various design tools. Here you can edit the colors with their labels.'
28
+ 'Palettes are used to provide default color options for blocks and various design tools. Here you can edit the colors with their labels.'
22
29
  ) }
23
30
  />
24
- <ColorPalettePanel name={ name } />
31
+ <ToggleGroupControl
32
+ className="edit-site-screen-color-palette-toggle"
33
+ value={ currentTab }
34
+ onChange={ setCurrentTab }
35
+ label={ __( 'Select palette type' ) }
36
+ hideLabelFromVision
37
+ isBlock
38
+ >
39
+ <ToggleGroupControlOption
40
+ value="solid"
41
+ label={ __( 'Solid' ) }
42
+ />
43
+ <ToggleGroupControlOption
44
+ value="gradient"
45
+ label={ __( 'Gradient' ) }
46
+ />
47
+ </ToggleGroupControl>
48
+ { currentTab === 'solid' && <ColorPalettePanel name={ name } /> }
49
+ { currentTab === 'gradient' && (
50
+ <GradientPalettePanel name={ name } />
51
+ ) }
25
52
  </>
26
53
  );
27
54
  }
@@ -70,6 +70,8 @@ function ScreenLinkColor( { name } ) {
70
70
  disableCustomColors={ ! areCustomSolidsEnabled }
71
71
  __experimentalHasMultipleOrigins
72
72
  showTitle={ false }
73
+ enableAlpha
74
+ __experimentalIsRenderedInSidebar
73
75
  />
74
76
  </>
75
77
  );
@@ -62,6 +62,8 @@ function ScreenTextColor( { name } ) {
62
62
  disableCustomColors={ ! areCustomSolidsEnabled }
63
63
  __experimentalHasMultipleOrigins
64
64
  showTitle={ false }
65
+ enableAlpha
66
+ __experimentalIsRenderedInSidebar
65
67
  />
66
68
  </>
67
69
  );
@@ -0,0 +1,39 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import TypographyPanel from './typography-panel';
10
+ import ScreenHeader from './header';
11
+
12
+ const elements = {
13
+ text: {
14
+ description: __( 'Manage the fonts used on the site.' ),
15
+ title: __( 'Text' ),
16
+ },
17
+ link: {
18
+ description: __( 'Manage the fonts and typography used on the links.' ),
19
+ title: __( 'Links' ),
20
+ },
21
+ };
22
+
23
+ function ScreenTypographyElement( { name, element } ) {
24
+ const parentMenu =
25
+ name === undefined ? '/typography' : '/blocks/' + name + '/typography';
26
+
27
+ return (
28
+ <>
29
+ <ScreenHeader
30
+ back={ parentMenu }
31
+ title={ elements[ element ].title }
32
+ description={ elements[ element ].description }
33
+ />
34
+ <TypographyPanel name={ name } element={ element } />
35
+ </>
36
+ );
37
+ }
38
+
39
+ export default ScreenTypographyElement;
@@ -2,12 +2,69 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
+ import {
6
+ __experimentalItemGroup as ItemGroup,
7
+ __experimentalVStack as VStack,
8
+ __experimentalHStack as HStack,
9
+ FlexItem,
10
+ } from '@wordpress/components';
5
11
 
6
12
  /**
7
13
  * Internal dependencies
8
14
  */
9
- import TypographyPanel from './typography-panel';
10
15
  import ScreenHeader from './header';
16
+ import NavigationButton from './navigation-button';
17
+ import { useStyle } from './hooks';
18
+ import Subtitle from './subtitle';
19
+ import TypographyPanel from './typography-panel';
20
+
21
+ function Item( { name, parentMenu, element, label } ) {
22
+ const hasSupport = ! name;
23
+ const prefix =
24
+ element === 'text' || ! element ? '' : `elements.${ element }.`;
25
+ const extraStyles =
26
+ element === 'link'
27
+ ? {
28
+ textDecoration: 'underline',
29
+ }
30
+ : {};
31
+ const [ fontFamily ] = useStyle( prefix + 'typography.fontFamily', name );
32
+ const [ fontStyle ] = useStyle( prefix + 'typography.fontStyle', name );
33
+ const [ fontWeight ] = useStyle( prefix + 'typography.fontWeight', name );
34
+ const [ letterSpacing ] = useStyle(
35
+ prefix + 'typography.letterSpacing',
36
+ name
37
+ );
38
+ const [ backgroundColor ] = useStyle( prefix + 'color.background', name );
39
+ const [ gradientValue ] = useStyle( prefix + 'color.gradient', name );
40
+ const [ color ] = useStyle( prefix + 'color.text', name );
41
+
42
+ if ( ! hasSupport ) {
43
+ return null;
44
+ }
45
+
46
+ return (
47
+ <NavigationButton path={ parentMenu + '/typography/' + element }>
48
+ <HStack justify="flex-start">
49
+ <FlexItem
50
+ className="edit-site-global-styles-screen-typography__indicator"
51
+ style={ {
52
+ fontFamily: fontFamily ?? 'serif',
53
+ background: gradientValue ?? backgroundColor,
54
+ color,
55
+ fontStyle,
56
+ fontWeight,
57
+ letterSpacing,
58
+ ...extraStyles,
59
+ } }
60
+ >
61
+ { __( 'Aa' ) }
62
+ </FlexItem>
63
+ <FlexItem>{ label }</FlexItem>
64
+ </HStack>
65
+ </NavigationButton>
66
+ );
67
+ }
11
68
 
12
69
  function ScreenTypography( { name } ) {
13
70
  const parentMenu = name === undefined ? '' : '/blocks/' + name;
@@ -18,10 +75,34 @@ function ScreenTypography( { name } ) {
18
75
  back={ parentMenu ? parentMenu : '/' }
19
76
  title={ __( 'Typography' ) }
20
77
  description={ __(
21
- 'Manage the fonts used on the website and the default aspect of different global elements.'
78
+ 'Manage the typography settings for different elements.'
22
79
  ) }
23
80
  />
24
- <TypographyPanel name={ name } />
81
+
82
+ { ! name && (
83
+ <div className="edit-site-global-styles-screen-typography">
84
+ <VStack spacing={ 3 }>
85
+ <Subtitle>{ __( 'Elements' ) }</Subtitle>
86
+ <ItemGroup isBordered isSeparated>
87
+ <Item
88
+ name={ name }
89
+ parentMenu={ parentMenu }
90
+ element="text"
91
+ label={ __( 'Text' ) }
92
+ />
93
+ <Item
94
+ name={ name }
95
+ parentMenu={ parentMenu }
96
+ element="link"
97
+ label={ __( 'Links' ) }
98
+ />
99
+ </ItemGroup>
100
+ </VStack>
101
+ </div>
102
+ ) }
103
+
104
+ { /* no typogrpahy elements support yet for blocks */ }
105
+ { !! name && <TypographyPanel name={ name } element="text" /> }
25
106
  </>
26
107
  );
27
108
  }
@@ -15,6 +15,30 @@
15
15
  }
16
16
  }
17
17
 
18
+ .edit-site-typography-panel__preview {
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ min-height: 100px;
23
+ margin-bottom: $grid-unit-20;
24
+ background: $gray-100;
25
+ border-radius: $radius-block-ui;
26
+ }
27
+
28
+ .edit-site-global-styles-screen-typography {
29
+ margin: $grid-unit-20;
30
+ }
31
+
32
+ .edit-site-global-styles-screen-typography__indicator {
33
+ height: 24px;
34
+ width: 24px;
35
+ font-size: 14px;
36
+ display: flex !important;
37
+ align-items: center;
38
+ justify-content: center;
39
+ border-radius: $radius-block-ui;
40
+ }
41
+
18
42
  .edit-site-global-styles-screen-colors {
19
43
  margin: $grid-unit-20;
20
44
 
@@ -22,15 +46,13 @@
22
46
  margin-left: 0;
23
47
  display: block;
24
48
  border-radius: 50%;
25
- border: 0;
26
49
  height: 24px;
27
50
  width: 24px;
28
51
  padding: 0;
29
- background-image:
30
- repeating-linear-gradient(45deg, $gray-200 25%, transparent 25%, transparent 75%, $gray-200 75%, $gray-200),
31
- repeating-linear-gradient(45deg, $gray-200 25%, transparent 25%, transparent 75%, $gray-200 75%, $gray-200);
32
- background-position: 0 0, 25px 25px;
33
- background-size: calc(2 * 5px) calc(2 * 5px);
52
+ border: $border-width solid $gray-300;
53
+
54
+ // Show a diagonal line (crossed out) for empty swatches.
55
+ background: linear-gradient(-45deg, transparent 48%, $gray-300 48%, $gray-300 52%, transparent 52%);
34
56
  }
35
57
  }
36
58
 
@@ -44,3 +66,20 @@
44
66
  text-transform: uppercase;
45
67
  font-weight: 500;
46
68
  }
69
+
70
+ .edit-site-screen-color-palette-toggle.edit-site-screen-color-palette-toggle {
71
+ margin-right: $grid-unit-20;
72
+ margin-left: $grid-unit-20;
73
+ width: unset;
74
+ .components-toggle-group-control {
75
+ min-height: $grid-unit-40;
76
+ }
77
+ }
78
+
79
+ h2.edit-site-global-styles-gradient-palette-panel__duotone-heading.components-heading {
80
+ text-transform: uppercase;
81
+ line-height: $grid-unit-30;
82
+ font-weight: 500;
83
+ font-size: 11px;
84
+ margin-bottom: $grid-unit-10;
85
+ }
@@ -206,7 +206,7 @@ describe( 'global styles renderer', () => {
206
206
  settings: {
207
207
  color: {
208
208
  palette: {
209
- user: [
209
+ custom: [
210
210
  {
211
211
  name: 'White',
212
212
  slug: 'white',
@@ -21,7 +21,7 @@ describe( 'editor utils', () => {
21
21
  name: 'Secondary',
22
22
  },
23
23
  ],
24
- user: [
24
+ custom: [
25
25
  {
26
26
  slug: 'primary',
27
27
  color: '#007cba',
@@ -54,8 +54,10 @@ function useHasLetterSpacingControl( name ) {
54
54
  );
55
55
  }
56
56
 
57
- export default function TypographyPanel( { name } ) {
57
+ export default function TypographyPanel( { name, element } ) {
58
58
  const supports = getSupportedGlobalStylesPanels( name );
59
+ const prefix =
60
+ element === 'text' || ! element ? '' : `elements.${ element }.`;
59
61
  const [ fontSizes ] = useSetting( 'typography.fontSizes', name );
60
62
  const disableCustomFontSizes = ! useSetting(
61
63
  'typography.customFontSize',
@@ -73,30 +75,58 @@ export default function TypographyPanel( { name } ) {
73
75
  const hasLetterSpacingControl = useHasLetterSpacingControl( name );
74
76
 
75
77
  const [ fontFamily, setFontFamily ] = useStyle(
76
- 'typography.fontFamily',
78
+ prefix + 'typography.fontFamily',
79
+ name
80
+ );
81
+ const [ fontSize, setFontSize ] = useStyle(
82
+ prefix + 'typography.fontSize',
77
83
  name
78
84
  );
79
- const [ fontSize, setFontSize ] = useStyle( 'typography.fontSize', name );
80
85
 
81
86
  const [ fontStyle, setFontStyle ] = useStyle(
82
- 'typography.fontStyle',
87
+ prefix + 'typography.fontStyle',
83
88
  name
84
89
  );
85
90
  const [ fontWeight, setFontWeight ] = useStyle(
86
- 'typography.fontWeight',
91
+ prefix + 'typography.fontWeight',
87
92
  name
88
93
  );
89
94
  const [ lineHeight, setLineHeight ] = useStyle(
90
- 'typography.lineHeight',
95
+ prefix + 'typography.lineHeight',
91
96
  name
92
97
  );
93
98
  const [ letterSpacing, setLetterSpacing ] = useStyle(
94
- 'typography.letterSpacing',
99
+ prefix + 'typography.letterSpacing',
95
100
  name
96
101
  );
102
+ const [ backgroundColor ] = useStyle( prefix + 'color.background', name );
103
+ const [ gradientValue ] = useStyle( prefix + 'color.gradient', name );
104
+ const [ color ] = useStyle( prefix + 'color.text', name );
105
+ const extraStyles =
106
+ element === 'link'
107
+ ? {
108
+ textDecoration: 'underline',
109
+ }
110
+ : {};
97
111
 
98
112
  return (
99
113
  <PanelBody className="edit-site-typography-panel" initialOpen={ true }>
114
+ <div
115
+ className="edit-site-typography-panel__preview"
116
+ style={ {
117
+ fontFamily: fontFamily ?? 'serif',
118
+ background: gradientValue ?? backgroundColor,
119
+ color,
120
+ fontSize,
121
+ fontStyle,
122
+ fontWeight,
123
+ letterSpacing,
124
+ ...extraStyles,
125
+ } }
126
+ >
127
+ Aa
128
+ </div>
129
+
100
130
  { supports.includes( 'fontFamily' ) && (
101
131
  <FontFamilyControl
102
132
  fontFamilies={ fontFamilies }
@@ -14,6 +14,7 @@ import ScreenRoot from './screen-root';
14
14
  import ScreenBlockList from './screen-block-list';
15
15
  import ScreenBlock from './screen-block';
16
16
  import ScreenTypography from './screen-typography';
17
+ import ScreenTypographyElement from './screen-typography-element';
17
18
  import ScreenColors from './screen-colors';
18
19
  import ScreenColorPalette from './screen-color-palette';
19
20
  import ScreenBackgroundColor from './screen-background-color';
@@ -30,6 +31,14 @@ function ContextScreens( { name } ) {
30
31
  <ScreenTypography name={ name } />
31
32
  </NavigatorScreen>
32
33
 
34
+ <NavigatorScreen path={ parentMenu + '/typography/text' }>
35
+ <ScreenTypographyElement name={ name } element="text" />
36
+ </NavigatorScreen>
37
+
38
+ <NavigatorScreen path={ parentMenu + '/typography/link' }>
39
+ <ScreenTypographyElement name={ name } element="link" />
40
+ </NavigatorScreen>
41
+
33
42
  <NavigatorScreen path={ parentMenu + '/colors' }>
34
43
  <ScreenColors name={ name } />
35
44
  </NavigatorScreen>
@@ -60,7 +60,7 @@ function getPresetsDeclarations( blockPresets = {} ) {
60
60
  PRESET_METADATA,
61
61
  ( declarations, { path, valueKey, cssVarInfix } ) => {
62
62
  const presetByOrigin = get( blockPresets, path, [] );
63
- [ 'default', 'theme', 'user' ].forEach( ( origin ) => {
63
+ [ 'default', 'theme', 'custom' ].forEach( ( origin ) => {
64
64
  if ( presetByOrigin[ origin ] ) {
65
65
  presetByOrigin[ origin ].forEach( ( value ) => {
66
66
  declarations.push(
@@ -94,7 +94,7 @@ function getPresetsClasses( blockSelector, blockPresets = {} ) {
94
94
  }
95
95
 
96
96
  const presetByOrigin = get( blockPresets, path, [] );
97
- [ 'default', 'theme', 'user' ].forEach( ( origin ) => {
97
+ [ 'default', 'theme', 'custom' ].forEach( ( origin ) => {
98
98
  if ( presetByOrigin[ origin ] ) {
99
99
  presetByOrigin[ origin ].forEach( ( { slug } ) => {
100
100
  classes.forEach( ( { classSuffix, propertyName } ) => {
@@ -90,7 +90,7 @@ function findInPresetsBy(
90
90
  for ( const presetByOrigin of orderedPresetsByOrigin ) {
91
91
  if ( presetByOrigin ) {
92
92
  // Preset origins ordered by priority.
93
- const origins = [ 'user', 'theme', 'default' ];
93
+ const origins = [ 'custom', 'theme', 'default' ];
94
94
  for ( const origin of origins ) {
95
95
  const presets = presetByOrigin[ origin ];
96
96
  if ( presets ) {