@wordpress/edit-site 3.0.1-next.253d9b6e21.0 → 3.0.3

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 (276) hide show
  1. package/README.md +1 -1
  2. package/build/components/block-editor/back-button.js +60 -0
  3. package/build/components/block-editor/back-button.js.map +1 -0
  4. package/build/components/block-editor/index.js +20 -5
  5. package/build/components/block-editor/index.js.map +1 -1
  6. package/build/components/edit-template-part-menu-button/index.js +63 -0
  7. package/build/components/edit-template-part-menu-button/index.js.map +1 -0
  8. package/build/components/editor/global-styles-provider.js +15 -2
  9. package/build/components/editor/global-styles-provider.js.map +1 -1
  10. package/build/components/editor/global-styles-renderer.js +8 -8
  11. package/build/components/editor/global-styles-renderer.js.map +1 -1
  12. package/build/components/editor/index.js +7 -7
  13. package/build/components/editor/index.js.map +1 -1
  14. package/build/components/editor/utils.js +4 -9
  15. package/build/components/editor/utils.js.map +1 -1
  16. package/build/components/{sidebar → global-styles}/border-panel.js +2 -2
  17. package/build/components/global-styles/border-panel.js.map +1 -0
  18. package/build/components/{sidebar → global-styles}/color-palette-panel.js +4 -2
  19. package/build/components/global-styles/color-palette-panel.js.map +1 -0
  20. package/build/components/{sidebar → global-styles}/color-panel.js +24 -21
  21. package/build/components/global-styles/color-panel.js.map +1 -0
  22. package/build/components/global-styles/context-menu.js +58 -0
  23. package/build/components/global-styles/context-menu.js.map +1 -0
  24. package/build/components/{sidebar → global-styles}/dimensions-panel.js +58 -8
  25. package/build/components/global-styles/dimensions-panel.js.map +1 -0
  26. package/build/components/global-styles/header.js +54 -0
  27. package/build/components/global-styles/header.js.map +1 -0
  28. package/build/components/global-styles/index.js +89 -0
  29. package/build/components/global-styles/index.js.map +1 -0
  30. package/build/components/global-styles/navigation-button.js +43 -0
  31. package/build/components/global-styles/navigation-button.js.map +1 -0
  32. package/build/components/global-styles/palette.js +57 -0
  33. package/build/components/global-styles/palette.js.map +1 -0
  34. package/build/components/global-styles/preview.js +59 -0
  35. package/build/components/global-styles/preview.js.map +1 -0
  36. package/build/components/global-styles/screen-block-list.js +76 -0
  37. package/build/components/global-styles/screen-block-list.js.map +1 -0
  38. package/build/components/global-styles/screen-block.js +45 -0
  39. package/build/components/global-styles/screen-block.js.map +1 -0
  40. package/build/components/global-styles/screen-color-palette.js +48 -0
  41. package/build/components/global-styles/screen-color-palette.js.map +1 -0
  42. package/build/components/global-styles/screen-colors.js +51 -0
  43. package/build/components/global-styles/screen-colors.js.map +1 -0
  44. package/build/components/global-styles/screen-layout.js +60 -0
  45. package/build/components/global-styles/screen-layout.js.map +1 -0
  46. package/build/components/global-styles/screen-root.js +44 -0
  47. package/build/components/global-styles/screen-root.js.map +1 -0
  48. package/build/components/global-styles/screen-typography.js +50 -0
  49. package/build/components/global-styles/screen-typography.js.map +1 -0
  50. package/build/components/global-styles/subtitle.js +25 -0
  51. package/build/components/global-styles/subtitle.js.map +1 -0
  52. package/build/components/{sidebar → global-styles}/typography-panel.js +1 -3
  53. package/build/components/global-styles/typography-panel.js.map +1 -0
  54. package/build/components/header/document-actions/index.js +1 -1
  55. package/build/components/header/document-actions/index.js.map +1 -1
  56. package/build/components/header/plugin-more-menu-item/index.js +82 -0
  57. package/build/components/header/plugin-more-menu-item/index.js.map +1 -0
  58. package/build/components/header/plugin-sidebar-more-menu-item/index.js +75 -0
  59. package/build/components/header/plugin-sidebar-more-menu-item/index.js.map +1 -0
  60. package/build/components/header/undo-redo/redo.js +1 -1
  61. package/build/components/header/undo-redo/redo.js.map +1 -1
  62. package/build/components/header/undo-redo/undo.js +1 -1
  63. package/build/components/header/undo-redo/undo.js.map +1 -1
  64. package/build/components/keyboard-shortcuts/index.js +2 -10
  65. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  66. package/build/components/navigation-sidebar/index.js +1 -1
  67. package/build/components/navigation-sidebar/index.js.map +1 -1
  68. package/build/components/navigation-sidebar/navigation-panel/constants.js +10 -10
  69. package/build/components/navigation-sidebar/navigation-panel/constants.js.map +1 -1
  70. package/build/components/navigation-sidebar/navigation-panel/content-navigation-item.js +1 -3
  71. package/build/components/navigation-sidebar/navigation-panel/content-navigation-item.js.map +1 -1
  72. package/build/components/save-button/index.js +1 -1
  73. package/build/components/save-button/index.js.map +1 -1
  74. package/build/components/secondary-sidebar/inserter-sidebar.js +2 -1
  75. package/build/components/secondary-sidebar/inserter-sidebar.js.map +1 -1
  76. package/build/components/sidebar/global-styles-sidebar.js +11 -161
  77. package/build/components/sidebar/global-styles-sidebar.js.map +1 -1
  78. package/build/components/sidebar/index.js +1 -6
  79. package/build/components/sidebar/index.js.map +1 -1
  80. package/build/components/sidebar/plugin-sidebar/index.js +95 -0
  81. package/build/components/sidebar/plugin-sidebar/index.js.map +1 -0
  82. package/build/components/template-details/index.js +12 -6
  83. package/build/components/template-details/index.js.map +1 -1
  84. package/build/components/template-details/template-areas.js +73 -0
  85. package/build/components/template-details/template-areas.js.map +1 -0
  86. package/build/components/template-part-converter/convert-to-regular.js +3 -3
  87. package/build/components/template-part-converter/convert-to-regular.js.map +1 -1
  88. package/build/components/template-part-converter/index.js +1 -1
  89. package/build/components/template-part-converter/index.js.map +1 -1
  90. package/build/components/url-query-controller/index.js +1 -1
  91. package/build/components/url-query-controller/index.js.map +1 -1
  92. package/build/index.js +24 -0
  93. package/build/index.js.map +1 -1
  94. package/build/store/actions.js +60 -7
  95. package/build/store/actions.js.map +1 -1
  96. package/build/store/constants.js +19 -1
  97. package/build/store/constants.js.map +1 -1
  98. package/build/store/reducer.js +16 -7
  99. package/build/store/reducer.js.map +1 -1
  100. package/build/store/selectors.js +91 -9
  101. package/build/store/selectors.js.map +1 -1
  102. package/build-module/components/block-editor/back-button.js +48 -0
  103. package/build-module/components/block-editor/back-button.js.map +1 -0
  104. package/build-module/components/block-editor/index.js +17 -5
  105. package/build-module/components/block-editor/index.js.map +1 -1
  106. package/build-module/components/edit-template-part-menu-button/index.js +49 -0
  107. package/build-module/components/edit-template-part-menu-button/index.js.map +1 -0
  108. package/build-module/components/editor/global-styles-provider.js +16 -3
  109. package/build-module/components/editor/global-styles-provider.js.map +1 -1
  110. package/build-module/components/editor/global-styles-renderer.js +8 -8
  111. package/build-module/components/editor/global-styles-renderer.js.map +1 -1
  112. package/build-module/components/editor/index.js +4 -5
  113. package/build-module/components/editor/index.js.map +1 -1
  114. package/build-module/components/editor/utils.js +2 -7
  115. package/build-module/components/editor/utils.js.map +1 -1
  116. package/build-module/components/{sidebar → global-styles}/border-panel.js +2 -2
  117. package/build-module/components/global-styles/border-panel.js.map +1 -0
  118. package/build-module/components/{sidebar → global-styles}/color-palette-panel.js +4 -2
  119. package/build-module/components/global-styles/color-palette-panel.js.map +1 -0
  120. package/build-module/components/{sidebar → global-styles}/color-panel.js +25 -22
  121. package/build-module/components/global-styles/color-panel.js.map +1 -0
  122. package/build-module/components/global-styles/context-menu.js +41 -0
  123. package/build-module/components/global-styles/context-menu.js.map +1 -0
  124. package/build-module/components/{sidebar → global-styles}/dimensions-panel.js +58 -9
  125. package/build-module/components/global-styles/dimensions-panel.js.map +1 -0
  126. package/build-module/components/global-styles/header.js +41 -0
  127. package/build-module/components/global-styles/header.js.map +1 -0
  128. package/build-module/components/global-styles/index.js +70 -0
  129. package/build-module/components/global-styles/index.js.map +1 -0
  130. package/build-module/components/global-styles/navigation-button.js +31 -0
  131. package/build-module/components/global-styles/navigation-button.js.map +1 -0
  132. package/build-module/components/global-styles/palette.js +43 -0
  133. package/build-module/components/global-styles/palette.js.map +1 -0
  134. package/build-module/components/global-styles/preview.js +50 -0
  135. package/build-module/components/global-styles/preview.js.map +1 -0
  136. package/build-module/components/global-styles/screen-block-list.js +58 -0
  137. package/build-module/components/global-styles/screen-block-list.js.map +1 -0
  138. package/build-module/components/global-styles/screen-block.js +32 -0
  139. package/build-module/components/global-styles/screen-block.js.map +1 -0
  140. package/build-module/components/global-styles/screen-color-palette.js +35 -0
  141. package/build-module/components/global-styles/screen-color-palette.js.map +1 -0
  142. package/build-module/components/global-styles/screen-colors.js +38 -0
  143. package/build-module/components/global-styles/screen-colors.js.map +1 -0
  144. package/build-module/components/global-styles/screen-layout.js +44 -0
  145. package/build-module/components/global-styles/screen-layout.js.map +1 -0
  146. package/build-module/components/global-styles/screen-root.js +29 -0
  147. package/build-module/components/global-styles/screen-root.js.map +1 -0
  148. package/build-module/components/global-styles/screen-typography.js +37 -0
  149. package/build-module/components/global-styles/screen-typography.js.map +1 -0
  150. package/build-module/components/global-styles/subtitle.js +17 -0
  151. package/build-module/components/global-styles/subtitle.js.map +1 -0
  152. package/build-module/components/{sidebar → global-styles}/typography-panel.js +1 -2
  153. package/build-module/components/global-styles/typography-panel.js.map +1 -0
  154. package/build-module/components/header/document-actions/index.js +1 -1
  155. package/build-module/components/header/document-actions/index.js.map +1 -1
  156. package/build-module/components/header/plugin-more-menu-item/index.js +70 -0
  157. package/build-module/components/header/plugin-more-menu-item/index.js.map +1 -0
  158. package/build-module/components/header/plugin-sidebar-more-menu-item/index.js +64 -0
  159. package/build-module/components/header/plugin-sidebar-more-menu-item/index.js.map +1 -0
  160. package/build-module/components/header/undo-redo/redo.js +1 -1
  161. package/build-module/components/header/undo-redo/redo.js.map +1 -1
  162. package/build-module/components/header/undo-redo/undo.js +1 -1
  163. package/build-module/components/header/undo-redo/undo.js.map +1 -1
  164. package/build-module/components/keyboard-shortcuts/index.js +3 -11
  165. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  166. package/build-module/components/navigation-sidebar/index.js +1 -1
  167. package/build-module/components/navigation-sidebar/index.js.map +1 -1
  168. package/build-module/components/navigation-sidebar/navigation-panel/constants.js +5 -3
  169. package/build-module/components/navigation-sidebar/navigation-panel/constants.js.map +1 -1
  170. package/build-module/components/navigation-sidebar/navigation-panel/content-navigation-item.js +1 -3
  171. package/build-module/components/navigation-sidebar/navigation-panel/content-navigation-item.js.map +1 -1
  172. package/build-module/components/save-button/index.js +1 -1
  173. package/build-module/components/save-button/index.js.map +1 -1
  174. package/build-module/components/secondary-sidebar/inserter-sidebar.js +2 -1
  175. package/build-module/components/secondary-sidebar/inserter-sidebar.js.map +1 -1
  176. package/build-module/components/sidebar/global-styles-sidebar.js +13 -159
  177. package/build-module/components/sidebar/global-styles-sidebar.js.map +1 -1
  178. package/build-module/components/sidebar/index.js +2 -7
  179. package/build-module/components/sidebar/index.js.map +1 -1
  180. package/build-module/components/sidebar/plugin-sidebar/index.js +84 -0
  181. package/build-module/components/sidebar/plugin-sidebar/index.js.map +1 -0
  182. package/build-module/components/template-details/index.js +13 -8
  183. package/build-module/components/template-details/index.js.map +1 -1
  184. package/build-module/components/template-details/template-areas.js +60 -0
  185. package/build-module/components/template-details/template-areas.js.map +1 -0
  186. package/build-module/components/template-part-converter/convert-to-regular.js +3 -3
  187. package/build-module/components/template-part-converter/convert-to-regular.js.map +1 -1
  188. package/build-module/components/template-part-converter/index.js +1 -1
  189. package/build-module/components/template-part-converter/index.js.map +1 -1
  190. package/build-module/components/url-query-controller/index.js +1 -1
  191. package/build-module/components/url-query-controller/index.js.map +1 -1
  192. package/build-module/index.js +3 -0
  193. package/build-module/index.js.map +1 -1
  194. package/build-module/store/actions.js +51 -7
  195. package/build-module/store/actions.js.map +1 -1
  196. package/build-module/store/constants.js +13 -0
  197. package/build-module/store/constants.js.map +1 -1
  198. package/build-module/store/reducer.js +16 -7
  199. package/build-module/store/reducer.js.map +1 -1
  200. package/build-module/store/selectors.js +85 -9
  201. package/build-module/store/selectors.js.map +1 -1
  202. package/build-style/style-rtl.css +158 -19
  203. package/build-style/style.css +158 -19
  204. package/package.json +26 -26
  205. package/src/components/block-editor/back-button.js +44 -0
  206. package/src/components/block-editor/index.js +18 -2
  207. package/src/components/block-editor/style.scss +26 -0
  208. package/src/components/edit-template-part-menu-button/index.js +57 -0
  209. package/src/components/editor/global-styles-provider.js +19 -3
  210. package/src/components/editor/global-styles-renderer.js +8 -5
  211. package/src/components/editor/index.js +5 -8
  212. package/src/components/editor/test/global-styles-provider.js +131 -0
  213. package/src/components/editor/test/global-styles-renderer.js +1 -1
  214. package/src/components/editor/test/utils.js +146 -0
  215. package/src/components/editor/utils.js +2 -7
  216. package/src/components/{sidebar → global-styles}/border-panel.js +2 -2
  217. package/src/components/{sidebar → global-styles}/color-palette-panel.js +13 -11
  218. package/src/components/{sidebar → global-styles}/color-panel.js +43 -28
  219. package/src/components/global-styles/context-menu.js +54 -0
  220. package/src/components/{sidebar → global-styles}/dimensions-panel.js +60 -9
  221. package/src/components/global-styles/header.js +50 -0
  222. package/src/components/global-styles/index.js +81 -0
  223. package/src/components/global-styles/navigation-button.js +35 -0
  224. package/src/components/global-styles/palette.js +67 -0
  225. package/src/components/global-styles/preview.js +41 -0
  226. package/src/components/global-styles/screen-block-list.js +59 -0
  227. package/src/components/global-styles/screen-block.js +28 -0
  228. package/src/components/global-styles/screen-color-palette.js +33 -0
  229. package/src/components/global-styles/screen-colors.js +36 -0
  230. package/src/components/global-styles/screen-layout.js +45 -0
  231. package/src/components/global-styles/screen-root.js +43 -0
  232. package/src/components/global-styles/screen-typography.js +33 -0
  233. package/src/components/global-styles/style.scss +35 -0
  234. package/src/components/global-styles/subtitle.js +10 -0
  235. package/src/components/{sidebar → global-styles}/typography-panel.js +1 -2
  236. package/src/components/header/document-actions/index.js +1 -1
  237. package/src/components/header/plugin-more-menu-item/index.js +71 -0
  238. package/src/components/header/plugin-sidebar-more-menu-item/index.js +64 -0
  239. package/src/components/header/undo-redo/redo.js +4 -1
  240. package/src/components/header/undo-redo/undo.js +4 -1
  241. package/src/components/keyboard-shortcuts/index.js +25 -40
  242. package/src/components/navigation-sidebar/index.js +1 -1
  243. package/src/components/navigation-sidebar/navigation-panel/constants.js +9 -4
  244. package/src/components/navigation-sidebar/navigation-panel/content-navigation-item.js +1 -1
  245. package/src/components/navigation-sidebar/navigation-panel/style.scss +1 -0
  246. package/src/components/navigation-sidebar/navigation-toggle/style.scss +3 -2
  247. package/src/components/save-button/index.js +1 -1
  248. package/src/components/secondary-sidebar/inserter-sidebar.js +1 -0
  249. package/src/components/sidebar/global-styles-sidebar.js +14 -187
  250. package/src/components/sidebar/index.js +2 -7
  251. package/src/components/sidebar/plugin-sidebar/index.js +80 -0
  252. package/src/components/sidebar/style.scss +40 -0
  253. package/src/components/template-details/index.js +17 -7
  254. package/src/components/template-details/style.scss +36 -27
  255. package/src/components/template-details/template-areas.js +66 -0
  256. package/src/components/template-part-converter/convert-to-regular.js +2 -8
  257. package/src/components/template-part-converter/index.js +1 -1
  258. package/src/components/url-query-controller/index.js +1 -1
  259. package/src/index.js +3 -0
  260. package/src/store/actions.js +59 -7
  261. package/src/store/constants.js +15 -0
  262. package/src/store/reducer.js +26 -12
  263. package/src/store/selectors.js +96 -9
  264. package/src/store/test/reducer.js +40 -23
  265. package/src/store/test/selectors.js +34 -3
  266. package/src/style.scss +1 -0
  267. package/build/components/sidebar/border-panel.js.map +0 -1
  268. package/build/components/sidebar/color-palette-panel.js.map +0 -1
  269. package/build/components/sidebar/color-panel.js.map +0 -1
  270. package/build/components/sidebar/dimensions-panel.js.map +0 -1
  271. package/build/components/sidebar/typography-panel.js.map +0 -1
  272. package/build-module/components/sidebar/border-panel.js.map +0 -1
  273. package/build-module/components/sidebar/color-palette-panel.js.map +0 -1
  274. package/build-module/components/sidebar/color-panel.js.map +0 -1
  275. package/build-module/components/sidebar/dimensions-panel.js.map +0 -1
  276. package/build-module/components/sidebar/typography-panel.js.map +0 -1
@@ -6,6 +6,7 @@ import {
6
6
  __experimentalToolsPanel as ToolsPanel,
7
7
  __experimentalToolsPanelItem as ToolsPanelItem,
8
8
  __experimentalBoxControl as BoxControl,
9
+ __experimentalUnitControl as UnitControl,
9
10
  __experimentalUseCustomUnits as useCustomUnits,
10
11
  } from '@wordpress/components';
11
12
  import { __experimentalUseCustomSides as useCustomSides } from '@wordpress/block-editor';
@@ -15,11 +16,14 @@ import { __experimentalUseCustomSides as useCustomSides } from '@wordpress/block
15
16
  */
16
17
  import { useSetting } from '../editor/utils';
17
18
 
19
+ const AXIAL_SIDES = [ 'horizontal', 'vertical' ];
20
+
18
21
  export function useHasDimensionsPanel( context ) {
19
22
  const hasPadding = useHasPadding( context );
20
23
  const hasMargin = useHasMargin( context );
24
+ const hasGap = useHasGap( context );
21
25
 
22
- return hasPadding || hasMargin;
26
+ return hasPadding || hasMargin || hasGap;
23
27
  }
24
28
 
25
29
  function useHasPadding( { name, supports } ) {
@@ -34,6 +38,12 @@ function useHasMargin( { name, supports } ) {
34
38
  return settings && supports.includes( 'margin' );
35
39
  }
36
40
 
41
+ function useHasGap( { name, supports } ) {
42
+ const settings = useSetting( 'spacing.blockGap', name );
43
+
44
+ return settings && supports.includes( '--wp--style--block-gap' );
45
+ }
46
+
37
47
  function filterValuesBySides( values, sides ) {
38
48
  if ( ! sides ) {
39
49
  // If no custom side configuration all sides are opted into by default.
@@ -42,7 +52,17 @@ function filterValuesBySides( values, sides ) {
42
52
 
43
53
  // Only include sides opted into within filtered values.
44
54
  const filteredValues = {};
45
- sides.forEach( ( side ) => ( filteredValues[ side ] = values[ side ] ) );
55
+ sides.forEach( ( side ) => {
56
+ if ( side === 'vertical' ) {
57
+ filteredValues.top = values.top;
58
+ filteredValues.bottom = values.bottom;
59
+ }
60
+ if ( side === 'horizontal' ) {
61
+ filteredValues.left = values.left;
62
+ filteredValues.right = values.right;
63
+ }
64
+ filteredValues[ side ] = values[ side ];
65
+ } );
46
66
 
47
67
  return filteredValues;
48
68
  }
@@ -66,6 +86,7 @@ export default function DimensionsPanel( { context, getStyle, setStyle } ) {
66
86
  const { name } = context;
67
87
  const showPaddingControl = useHasPadding( context );
68
88
  const showMarginControl = useHasMargin( context );
89
+ const showGapControl = useHasGap( context );
69
90
  const units = useCustomUnits( {
70
91
  availableUnits: useSetting( 'spacing.units', name ) || [
71
92
  '%',
@@ -78,6 +99,9 @@ export default function DimensionsPanel( { context, getStyle, setStyle } ) {
78
99
 
79
100
  const paddingValues = splitStyleValue( getStyle( name, 'padding' ) );
80
101
  const paddingSides = useCustomSides( name, 'padding' );
102
+ const isAxialPadding =
103
+ paddingSides &&
104
+ paddingSides.some( ( side ) => AXIAL_SIDES.includes( side ) );
81
105
 
82
106
  const setPaddingValues = ( newPaddingValues ) => {
83
107
  const padding = filterValuesBySides( newPaddingValues, paddingSides );
@@ -85,10 +109,13 @@ export default function DimensionsPanel( { context, getStyle, setStyle } ) {
85
109
  };
86
110
  const resetPaddingValue = () => setPaddingValues( {} );
87
111
  const hasPaddingValue = () =>
88
- paddingValues && Object.keys( paddingValues ).length;
112
+ !! paddingValues && Object.keys( paddingValues ).length;
89
113
 
90
114
  const marginValues = splitStyleValue( getStyle( name, 'margin' ) );
91
115
  const marginSides = useCustomSides( name, 'margin' );
116
+ const isAxialMargin =
117
+ marginSides &&
118
+ marginSides.some( ( side ) => AXIAL_SIDES.includes( side ) );
92
119
 
93
120
  const setMarginValues = ( newMarginValues ) => {
94
121
  const margin = filterValuesBySides( newMarginValues, marginSides );
@@ -96,19 +123,24 @@ export default function DimensionsPanel( { context, getStyle, setStyle } ) {
96
123
  };
97
124
  const resetMarginValue = () => setMarginValues( {} );
98
125
  const hasMarginValue = () =>
99
- marginValues && Object.keys( marginValues ).length;
126
+ !! marginValues && Object.keys( marginValues ).length;
127
+
128
+ const gapValue = getStyle( name, '--wp--style--block-gap' );
129
+
130
+ const setGapValue = ( newGapValue ) => {
131
+ setStyle( name, '--wp--style--block-gap', newGapValue );
132
+ };
133
+ const resetGapValue = () => setGapValue( undefined );
134
+ const hasGapValue = () => !! gapValue;
100
135
 
101
136
  const resetAll = () => {
102
137
  resetPaddingValue();
103
138
  resetMarginValue();
139
+ resetGapValue();
104
140
  };
105
141
 
106
142
  return (
107
- <ToolsPanel
108
- label={ __( 'Dimensions options' ) }
109
- header={ __( 'Dimensions' ) }
110
- resetAll={ resetAll }
111
- >
143
+ <ToolsPanel label={ __( 'Dimensions' ) } resetAll={ resetAll }>
112
144
  { showPaddingControl && (
113
145
  <ToolsPanelItem
114
146
  hasValue={ hasPaddingValue }
@@ -123,6 +155,7 @@ export default function DimensionsPanel( { context, getStyle, setStyle } ) {
123
155
  sides={ paddingSides }
124
156
  units={ units }
125
157
  allowReset={ false }
158
+ splitOnAxis={ isAxialPadding }
126
159
  />
127
160
  </ToolsPanelItem>
128
161
  ) }
@@ -140,6 +173,24 @@ export default function DimensionsPanel( { context, getStyle, setStyle } ) {
140
173
  sides={ marginSides }
141
174
  units={ units }
142
175
  allowReset={ false }
176
+ splitOnAxis={ isAxialMargin }
177
+ />
178
+ </ToolsPanelItem>
179
+ ) }
180
+ { showGapControl && (
181
+ <ToolsPanelItem
182
+ hasValue={ hasGapValue }
183
+ label={ __( 'Block spacing' ) }
184
+ onDeselect={ resetGapValue }
185
+ isShownByDefault={ true }
186
+ >
187
+ <UnitControl
188
+ label={ __( 'Block spacing' ) }
189
+ __unstableInputWidth="80px"
190
+ min={ 0 }
191
+ onChange={ setGapValue }
192
+ units={ units }
193
+ value={ gapValue }
143
194
  />
144
195
  </ToolsPanelItem>
145
196
  ) }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ __experimentalHStack as HStack,
6
+ __experimentalVStack as VStack,
7
+ __experimentalSpacer as Spacer,
8
+ __experimentalHeading as Heading,
9
+ __experimentalView as View,
10
+ } from '@wordpress/components';
11
+ import { isRTL, __ } from '@wordpress/i18n';
12
+ import { chevronRight, chevronLeft, Icon } from '@wordpress/icons';
13
+
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+ import NavigationButton from './navigation-button';
18
+
19
+ function ScreenHeader( { back, title, description } ) {
20
+ return (
21
+ <VStack spacing={ 2 }>
22
+ <HStack spacing={ 2 }>
23
+ <View>
24
+ <NavigationButton
25
+ path={ back }
26
+ icon={
27
+ <Icon
28
+ icon={ isRTL() ? chevronRight : chevronLeft }
29
+ variant="muted"
30
+ />
31
+ }
32
+ size="small"
33
+ isBack
34
+ aria-label={ __( 'Navigate to the previous view' ) }
35
+ />
36
+ </View>
37
+ <Spacer>
38
+ <Heading level={ 5 }>{ title }</Heading>
39
+ </Spacer>
40
+ </HStack>
41
+ { description && (
42
+ <p className="edit-site-global-styles-header__description">
43
+ { description }
44
+ </p>
45
+ ) }
46
+ </VStack>
47
+ );
48
+ }
49
+
50
+ export default ScreenHeader;
@@ -0,0 +1,81 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { map } from 'lodash';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import {
10
+ __experimentalNavigatorProvider as NavigatorProvider,
11
+ __experimentalNavigatorScreen as NavigatorScreen,
12
+ } from '@wordpress/components';
13
+
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+ import { useGlobalStylesContext } from '../editor/global-styles-provider';
18
+ import ScreenRoot from './screen-root';
19
+ import ScreenBlockList from './screen-block-list';
20
+ import ScreenBlock from './screen-block';
21
+ import ScreenTypography from './screen-typography';
22
+ import ScreenColors from './screen-colors';
23
+ import ScreenColorPalette from './screen-color-palette';
24
+ import ScreenLayout from './screen-layout';
25
+
26
+ function ContextScreens( { name } ) {
27
+ const parentMenu = name === undefined ? '' : '/blocks/' + name;
28
+
29
+ return (
30
+ <>
31
+ <NavigatorScreen path={ parentMenu + '/typography' }>
32
+ <ScreenTypography name={ name } />
33
+ </NavigatorScreen>
34
+
35
+ <NavigatorScreen path={ parentMenu + '/colors' }>
36
+ <ScreenColors name={ name } />
37
+ </NavigatorScreen>
38
+
39
+ <NavigatorScreen path={ parentMenu + '/colors/palette' }>
40
+ <ScreenColorPalette name={ name } />
41
+ </NavigatorScreen>
42
+
43
+ <NavigatorScreen path={ parentMenu + '/layout' }>
44
+ <ScreenLayout name={ name } />
45
+ </NavigatorScreen>
46
+ </>
47
+ );
48
+ }
49
+
50
+ function GlobalStyles() {
51
+ const { blocks } = useGlobalStylesContext();
52
+
53
+ return (
54
+ <NavigatorProvider initialPath="/">
55
+ <NavigatorScreen path="/">
56
+ <ScreenRoot />
57
+ </NavigatorScreen>
58
+
59
+ <NavigatorScreen path="/blocks">
60
+ <ScreenBlockList />
61
+ </NavigatorScreen>
62
+
63
+ { map( blocks, ( block, name ) => (
64
+ <NavigatorScreen
65
+ key={ 'menu-block-' + name }
66
+ path={ '/blocks/' + name }
67
+ >
68
+ <ScreenBlock name={ name } />
69
+ </NavigatorScreen>
70
+ ) ) }
71
+
72
+ <ContextScreens />
73
+
74
+ { map( blocks, ( _, name ) => (
75
+ <ContextScreens key={ 'screens-block-' + name } name={ name } />
76
+ ) ) }
77
+ </NavigatorProvider>
78
+ );
79
+ }
80
+
81
+ export default GlobalStyles;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ __experimentalUseNavigator as useNavigator,
6
+ __experimentalItem as Item,
7
+ FlexItem,
8
+ __experimentalHStack as HStack,
9
+ } from '@wordpress/components';
10
+ import { Icon } from '@wordpress/icons';
11
+
12
+ function NavigationButton( {
13
+ path,
14
+ icon,
15
+ children,
16
+ isBack = false,
17
+ ...props
18
+ } ) {
19
+ const navigator = useNavigator();
20
+ return (
21
+ <Item onClick={ () => navigator.push( path, { isBack } ) } { ...props }>
22
+ { icon && (
23
+ <HStack justify="flex-start">
24
+ <FlexItem>
25
+ <Icon icon={ icon } size={ 24 } />
26
+ </FlexItem>
27
+ <FlexItem>{ children }</FlexItem>
28
+ </HStack>
29
+ ) }
30
+ { ! icon && children }
31
+ </Item>
32
+ );
33
+ }
34
+
35
+ export default NavigationButton;
@@ -0,0 +1,67 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ __experimentalItemGroup as ItemGroup,
6
+ FlexItem,
7
+ __experimentalHStack as HStack,
8
+ __experimentalZStack as ZStack,
9
+ __experimentalVStack as VStack,
10
+ FlexBlock,
11
+ ColorIndicator,
12
+ } from '@wordpress/components';
13
+ import { __, _n, sprintf } from '@wordpress/i18n';
14
+
15
+ /**
16
+ * Internal dependencies
17
+ */
18
+ import Subtitle from './subtitle';
19
+ import { useSetting } from '../editor/utils';
20
+ import NavigationButton from './navigation-button';
21
+
22
+ function Palette( { contextName } ) {
23
+ const colors = useSetting( 'color.palette', contextName );
24
+ const screenPath =
25
+ contextName === 'root'
26
+ ? '/colors/palette'
27
+ : '/blocks/' + contextName + '/colors/palette';
28
+
29
+ return (
30
+ <div className="edit-site-global-style-palette">
31
+ <VStack spacing={ 1 }>
32
+ <Subtitle>{ __( 'Palette' ) }</Subtitle>
33
+ <ItemGroup isBordered isSeparated>
34
+ <NavigationButton path={ screenPath }>
35
+ <HStack>
36
+ <FlexBlock>
37
+ <ZStack isLayered={ false } offset={ -8 }>
38
+ { colors
39
+ .slice( 0, 5 )
40
+ .map( ( { color } ) => (
41
+ <ColorIndicator
42
+ key={ color }
43
+ colorValue={ color }
44
+ />
45
+ ) ) }
46
+ </ZStack>
47
+ </FlexBlock>
48
+ <FlexItem>
49
+ { sprintf(
50
+ // Translators: %d: Number of palette colors.
51
+ _n(
52
+ '%d color',
53
+ '%d colors',
54
+ colors.length
55
+ ),
56
+ colors.length
57
+ ) }
58
+ </FlexItem>
59
+ </HStack>
60
+ </NavigationButton>
61
+ </ItemGroup>
62
+ </VStack>
63
+ </div>
64
+ );
65
+ }
66
+
67
+ export default Palette;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ __experimentalHStack as HStack,
6
+ __experimentalVStack as VStack,
7
+ Card,
8
+ ColorIndicator,
9
+ } from '@wordpress/components';
10
+
11
+ /**
12
+ * Internal dependencies
13
+ */ import { useGlobalStylesContext } from '../editor/global-styles-provider';
14
+
15
+ const StylesPreview = () => {
16
+ const { getStyle } = useGlobalStylesContext();
17
+ const fontFamily = getStyle( 'root', 'fontFamily' ) ?? 'serif';
18
+ const textColor = getStyle( 'root', 'color' ) ?? 'black';
19
+ const linkColor = getStyle( 'root', 'linkColor' ) ?? 'blue';
20
+ const backgroundColor = getStyle( 'root', 'backgroundColor' ) ?? 'white';
21
+
22
+ return (
23
+ <Card
24
+ className="edit-site-global-styles-preview"
25
+ style={ { background: backgroundColor } }
26
+ >
27
+ <HStack spacing={ 5 }>
28
+ <div>
29
+ <span style={ { fontFamily, fontSize: '80px' } }>A</span>
30
+ <span style={ { fontFamily, fontSize: '80px' } }>a</span>
31
+ </div>
32
+ <VStack spacing={ 2 }>
33
+ <ColorIndicator colorValue={ textColor } />
34
+ <ColorIndicator colorValue={ linkColor } />
35
+ </VStack>
36
+ </HStack>
37
+ </Card>
38
+ );
39
+ };
40
+
41
+ export default StylesPreview;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { getBlockType } from '@wordpress/blocks';
5
+ import { __ } from '@wordpress/i18n';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import { useGlobalStylesContext } from '../editor/global-styles-provider';
11
+ import { useHasBorderPanel } from './border-panel';
12
+ import { useHasColorPanel } from './color-panel';
13
+ import { useHasDimensionsPanel } from './dimensions-panel';
14
+ import { useHasTypographyPanel } from './typography-panel';
15
+ import ScreenHeader from './header';
16
+ import NavigationButton from './navigation-button';
17
+
18
+ function BlockMenuItem( { block } ) {
19
+ const { blocks } = useGlobalStylesContext();
20
+ const context = blocks[ block.name ];
21
+ const hasTypographyPanel = useHasTypographyPanel( context );
22
+ const hasColorPanel = useHasColorPanel( context );
23
+ const hasBorderPanel = useHasBorderPanel( context );
24
+ const hasDimensionsPanel = useHasDimensionsPanel( context );
25
+ const hasLayoutPanel = hasBorderPanel || hasDimensionsPanel;
26
+ const hasBlockMenuItem =
27
+ hasTypographyPanel || hasColorPanel || hasLayoutPanel;
28
+
29
+ if ( ! hasBlockMenuItem ) {
30
+ return null;
31
+ }
32
+
33
+ return (
34
+ <NavigationButton path={ '/blocks/' + block.name }>
35
+ { block.title }
36
+ </NavigationButton>
37
+ );
38
+ }
39
+
40
+ function ScreenBlockList() {
41
+ const { blocks } = useGlobalStylesContext();
42
+ const visibleBlocks = Object.keys( blocks )
43
+ .map( ( name ) => getBlockType( name ) )
44
+ .filter( ( blockType ) => !! blockType );
45
+
46
+ return (
47
+ <>
48
+ <ScreenHeader back="/" title={ __( 'Blocks' ) } />
49
+ { visibleBlocks.map( ( block ) => (
50
+ <BlockMenuItem
51
+ block={ block }
52
+ key={ 'menu-itemblock-' + block.name }
53
+ />
54
+ ) ) }
55
+ </>
56
+ );
57
+ }
58
+
59
+ export default ScreenBlockList;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { getBlockType } from '@wordpress/blocks';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { useGlobalStylesContext } from '../editor/global-styles-provider';
10
+ import ContextMenu from './context-menu';
11
+ import ScreenHeader from './header';
12
+
13
+ function ScreenBlock( { name } ) {
14
+ const blockType = getBlockType( name );
15
+ const { blocks } = useGlobalStylesContext();
16
+
17
+ return (
18
+ <>
19
+ <ScreenHeader back="/blocks" title={ blockType.title } />
20
+ <ContextMenu
21
+ parentMenu={ '/blocks/' + name }
22
+ context={ blocks[ name ] }
23
+ />
24
+ </>
25
+ );
26
+ }
27
+
28
+ export default ScreenBlock;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { useGlobalStylesContext } from '../editor/global-styles-provider';
10
+ import ColorPalettePanel from './color-palette-panel';
11
+ import ScreenHeader from './header';
12
+
13
+ function ScreenColorPalette( { name } ) {
14
+ const { getSetting, setSetting } = useGlobalStylesContext();
15
+ const parentMenu = name === undefined ? '' : '/blocks/' + name;
16
+
17
+ return (
18
+ <>
19
+ <ScreenHeader
20
+ back={ parentMenu + '/colors' }
21
+ title={ __( 'Color Palette' ) }
22
+ description={ __( 'Edit the color palette.' ) }
23
+ />
24
+ <ColorPalettePanel
25
+ contextName={ name }
26
+ getSetting={ getSetting }
27
+ setSetting={ setSetting }
28
+ />
29
+ </>
30
+ );
31
+ }
32
+
33
+ export default ScreenColorPalette;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { useGlobalStylesContext } from '../editor/global-styles-provider';
10
+ import ColorPanel from './color-panel';
11
+ import ScreenHeader from './header';
12
+
13
+ function ScreenColors( { name } ) {
14
+ const { root, blocks, getStyle, setStyle } = useGlobalStylesContext();
15
+ const context = name === undefined ? root : blocks[ name ];
16
+ const parentMenu = name === undefined ? '' : '/blocks/' + name;
17
+
18
+ return (
19
+ <>
20
+ <ScreenHeader
21
+ back={ parentMenu ? parentMenu : '/' }
22
+ title={ __( 'Colors' ) }
23
+ description={ __(
24
+ 'Manage color palettes and how they affect the different elements of the site.'
25
+ ) }
26
+ />
27
+ <ColorPanel
28
+ context={ context }
29
+ getStyle={ getStyle }
30
+ setStyle={ setStyle }
31
+ />
32
+ </>
33
+ );
34
+ }
35
+
36
+ export default ScreenColors;
@@ -0,0 +1,45 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { useGlobalStylesContext } from '../editor/global-styles-provider';
10
+ import BorderPanel, { useHasBorderPanel } from './border-panel';
11
+ import DimensionsPanel, { useHasDimensionsPanel } from './dimensions-panel';
12
+ import ScreenHeader from './header';
13
+
14
+ function ScreenLayout( { name } ) {
15
+ const { root, blocks, getStyle, setStyle } = useGlobalStylesContext();
16
+ const context = name === undefined ? root : blocks[ name ];
17
+ const parentMenu = name === undefined ? '' : '/blocks/' + name;
18
+ const hasBorderPanel = useHasBorderPanel( context );
19
+ const hasDimensionsPanel = useHasDimensionsPanel( context );
20
+
21
+ return (
22
+ <>
23
+ <ScreenHeader
24
+ back={ parentMenu ? parentMenu : '/' }
25
+ title={ __( 'Layout' ) }
26
+ />
27
+ { hasDimensionsPanel && (
28
+ <DimensionsPanel
29
+ context={ context }
30
+ getStyle={ getStyle }
31
+ setStyle={ setStyle }
32
+ />
33
+ ) }
34
+ { hasBorderPanel && (
35
+ <BorderPanel
36
+ context={ context }
37
+ getStyle={ getStyle }
38
+ setStyle={ setStyle }
39
+ />
40
+ ) }
41
+ </>
42
+ );
43
+ }
44
+
45
+ export default ScreenLayout;
@@ -0,0 +1,43 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ __experimentalItemGroup as ItemGroup,
6
+ __experimentalItem as Item,
7
+ } from '@wordpress/components';
8
+ import { __ } from '@wordpress/i18n';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import StylesPreview from './preview';
14
+ import NavigationButton from './navigation-button';
15
+ import { useGlobalStylesContext } from '../editor/global-styles-provider';
16
+ import ContextMenu from './context-menu';
17
+
18
+ function ScreenRoot() {
19
+ const { root } = useGlobalStylesContext();
20
+
21
+ return (
22
+ <>
23
+ <StylesPreview />
24
+
25
+ <ContextMenu context={ root } />
26
+
27
+ <ItemGroup>
28
+ <Item>
29
+ <p>
30
+ { __(
31
+ 'Customize the appearance of specific blocks for the whole site.'
32
+ ) }
33
+ </p>
34
+ </Item>
35
+ <NavigationButton path="/blocks">
36
+ { __( 'Blocks' ) }
37
+ </NavigationButton>
38
+ </ItemGroup>
39
+ </>
40
+ );
41
+ }
42
+
43
+ export default ScreenRoot;