@wordpress/edit-site 3.0.9 → 3.0.13

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 (263) hide show
  1. package/build/components/add-new-template/index.js +49 -0
  2. package/build/components/add-new-template/index.js.map +1 -0
  3. package/build/components/add-new-template/new-template-part.js +95 -0
  4. package/build/components/add-new-template/new-template-part.js.map +1 -0
  5. package/build/components/add-new-template/new-template.js +133 -0
  6. package/build/components/add-new-template/new-template.js.map +1 -0
  7. package/build/components/block-editor/index.js +3 -1
  8. package/build/components/block-editor/index.js.map +1 -1
  9. package/build/components/create-template-part-modal/index.js +115 -0
  10. package/build/components/create-template-part-modal/index.js.map +1 -0
  11. package/build/components/editor/index.js +20 -16
  12. package/build/components/editor/index.js.map +1 -1
  13. package/build/components/global-styles/color-palette-panel.js +29 -6
  14. package/build/components/global-styles/color-palette-panel.js.map +1 -1
  15. package/build/components/global-styles/global-styles-provider.js +9 -47
  16. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  17. package/build/components/global-styles/gradients-palette-panel.js +71 -0
  18. package/build/components/global-styles/gradients-palette-panel.js.map +1 -0
  19. package/build/components/global-styles/hooks.js +29 -27
  20. package/build/components/global-styles/hooks.js.map +1 -1
  21. package/build/components/global-styles/palette.js +11 -5
  22. package/build/components/global-styles/palette.js.map +1 -1
  23. package/build/components/global-styles/screen-background-color.js +2 -1
  24. package/build/components/global-styles/screen-background-color.js.map +1 -1
  25. package/build/components/global-styles/screen-block-list.js +9 -1
  26. package/build/components/global-styles/screen-block-list.js.map +1 -1
  27. package/build/components/global-styles/screen-color-palette.js +23 -3
  28. package/build/components/global-styles/screen-color-palette.js.map +1 -1
  29. package/build/components/global-styles/screen-link-color.js +2 -1
  30. package/build/components/global-styles/screen-link-color.js.map +1 -1
  31. package/build/components/global-styles/screen-text-color.js +2 -1
  32. package/build/components/global-styles/screen-text-color.js.map +1 -1
  33. package/build/components/global-styles/screen-typography-element.js +54 -0
  34. package/build/components/global-styles/screen-typography-element.js.map +1 -0
  35. package/build/components/global-styles/screen-typography.js +74 -6
  36. package/build/components/global-styles/screen-typography.js.map +1 -1
  37. package/build/components/global-styles/typography-panel.js +28 -8
  38. package/build/components/global-styles/typography-panel.js.map +1 -1
  39. package/build/components/global-styles/ui.js +12 -0
  40. package/build/components/global-styles/ui.js.map +1 -1
  41. package/build/components/global-styles/use-global-styles-output.js +2 -2
  42. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  43. package/build/components/global-styles/utils.js +1 -1
  44. package/build/components/global-styles/utils.js.map +1 -1
  45. package/build/components/header/index.js +1 -5
  46. package/build/components/header/index.js.map +1 -1
  47. package/build/components/keyboard-shortcuts/index.js +26 -0
  48. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  49. package/build/components/list/actions/index.js +104 -0
  50. package/build/components/list/actions/index.js.map +1 -0
  51. package/build/components/list/actions/rename-menu-item.js +112 -0
  52. package/build/components/list/actions/rename-menu-item.js.map +1 -0
  53. package/build/components/list/added-by.js +180 -0
  54. package/build/components/list/added-by.js.map +1 -0
  55. package/build/components/list/header.js +50 -0
  56. package/build/components/list/header.js.map +1 -0
  57. package/build/components/list/index.js +102 -0
  58. package/build/components/list/index.js.map +1 -0
  59. package/build/components/list/table.js +114 -0
  60. package/build/components/list/table.js.map +1 -0
  61. package/build/components/list/use-register-shortcuts.js +52 -0
  62. package/build/components/list/use-register-shortcuts.js.map +1 -0
  63. package/build/components/navigation-sidebar/index.js +26 -10
  64. package/build/components/navigation-sidebar/index.js.map +1 -1
  65. package/build/components/navigation-sidebar/navigation-panel/index.js +42 -44
  66. package/build/components/navigation-sidebar/navigation-panel/index.js.map +1 -1
  67. package/build/components/navigation-sidebar/navigation-toggle/index.js +5 -17
  68. package/build/components/navigation-sidebar/navigation-toggle/index.js.map +1 -1
  69. package/build/components/template-details/edit-template-title.js +33 -0
  70. package/build/components/template-details/edit-template-title.js.map +1 -0
  71. package/build/components/template-details/index.js +8 -3
  72. package/build/components/template-details/index.js.map +1 -1
  73. package/build/components/template-part-converter/convert-to-template-part.js +20 -84
  74. package/build/components/template-part-converter/convert-to-template-part.js.map +1 -1
  75. package/build/components/welcome-guide/editor.js +58 -0
  76. package/build/components/welcome-guide/editor.js.map +1 -0
  77. package/build/components/welcome-guide/image.js +27 -0
  78. package/build/components/welcome-guide/image.js.map +1 -0
  79. package/build/components/welcome-guide/index.js +49 -0
  80. package/build/components/welcome-guide/index.js.map +1 -0
  81. package/build/components/welcome-guide/styles.js +83 -0
  82. package/build/components/welcome-guide/styles.js.map +1 -0
  83. package/build/index.js +36 -6
  84. package/build/index.js.map +1 -1
  85. package/build/plugins/index.js +4 -2
  86. package/build/plugins/index.js.map +1 -1
  87. package/build/plugins/welcome-guide-menu-item.js +39 -0
  88. package/build/plugins/welcome-guide-menu-item.js.map +1 -0
  89. package/build/store/actions.js +50 -24
  90. package/build/store/actions.js.map +1 -1
  91. package/build/store/defaults.js +4 -1
  92. package/build/store/defaults.js.map +1 -1
  93. package/build/store/selectors.js +25 -5
  94. package/build/store/selectors.js.map +1 -1
  95. package/build/utils/is-template-removable.js +21 -0
  96. package/build/utils/is-template-removable.js.map +1 -0
  97. package/build-module/components/add-new-template/index.js +36 -0
  98. package/build-module/components/add-new-template/index.js.map +1 -0
  99. package/build-module/components/add-new-template/new-template-part.js +79 -0
  100. package/build-module/components/add-new-template/new-template-part.js.map +1 -0
  101. package/build-module/components/add-new-template/new-template.js +114 -0
  102. package/build-module/components/add-new-template/new-template.js.map +1 -0
  103. package/build-module/components/block-editor/index.js +2 -1
  104. package/build-module/components/block-editor/index.js.map +1 -1
  105. package/build-module/components/create-template-part-modal/index.js +102 -0
  106. package/build-module/components/create-template-part-modal/index.js.map +1 -0
  107. package/build-module/components/editor/index.js +19 -17
  108. package/build-module/components/editor/index.js.map +1 -1
  109. package/build-module/components/global-styles/color-palette-panel.js +29 -7
  110. package/build-module/components/global-styles/color-palette-panel.js.map +1 -1
  111. package/build-module/components/global-styles/global-styles-provider.js +10 -43
  112. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  113. package/build-module/components/global-styles/gradients-palette-panel.js +60 -0
  114. package/build-module/components/global-styles/gradients-palette-panel.js.map +1 -0
  115. package/build-module/components/global-styles/hooks.js +30 -28
  116. package/build-module/components/global-styles/hooks.js.map +1 -1
  117. package/build-module/components/global-styles/palette.js +12 -5
  118. package/build-module/components/global-styles/palette.js.map +1 -1
  119. package/build-module/components/global-styles/screen-background-color.js +2 -1
  120. package/build-module/components/global-styles/screen-background-color.js.map +1 -1
  121. package/build-module/components/global-styles/screen-block-list.js +7 -1
  122. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  123. package/build-module/components/global-styles/screen-color-palette.js +22 -3
  124. package/build-module/components/global-styles/screen-color-palette.js.map +1 -1
  125. package/build-module/components/global-styles/screen-link-color.js +2 -1
  126. package/build-module/components/global-styles/screen-link-color.js.map +1 -1
  127. package/build-module/components/global-styles/screen-text-color.js +2 -1
  128. package/build-module/components/global-styles/screen-text-color.js.map +1 -1
  129. package/build-module/components/global-styles/screen-typography-element.js +41 -0
  130. package/build-module/components/global-styles/screen-typography-element.js.map +1 -0
  131. package/build-module/components/global-styles/screen-typography.js +70 -6
  132. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  133. package/build-module/components/global-styles/typography-panel.js +28 -8
  134. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  135. package/build-module/components/global-styles/ui.js +11 -0
  136. package/build-module/components/global-styles/ui.js.map +1 -1
  137. package/build-module/components/global-styles/use-global-styles-output.js +2 -2
  138. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  139. package/build-module/components/global-styles/utils.js +1 -1
  140. package/build-module/components/global-styles/utils.js.map +1 -1
  141. package/build-module/components/header/index.js +1 -3
  142. package/build-module/components/header/index.js.map +1 -1
  143. package/build-module/components/keyboard-shortcuts/index.js +26 -0
  144. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  145. package/build-module/components/list/actions/index.js +85 -0
  146. package/build-module/components/list/actions/index.js.map +1 -0
  147. package/build-module/components/list/actions/rename-menu-item.js +101 -0
  148. package/build-module/components/list/actions/rename-menu-item.js.map +1 -0
  149. package/build-module/components/list/added-by.js +166 -0
  150. package/build-module/components/list/added-by.js.map +1 -0
  151. package/build-module/components/list/header.js +37 -0
  152. package/build-module/components/list/header.js.map +1 -0
  153. package/build-module/components/list/index.js +81 -0
  154. package/build-module/components/list/index.js.map +1 -0
  155. package/build-module/components/list/table.js +98 -0
  156. package/build-module/components/list/table.js.map +1 -0
  157. package/build-module/components/list/use-register-shortcuts.js +41 -0
  158. package/build-module/components/list/use-register-shortcuts.js.map +1 -0
  159. package/build-module/components/navigation-sidebar/index.js +26 -10
  160. package/build-module/components/navigation-sidebar/index.js.map +1 -1
  161. package/build-module/components/navigation-sidebar/navigation-panel/index.js +41 -44
  162. package/build-module/components/navigation-sidebar/navigation-panel/index.js.map +1 -1
  163. package/build-module/components/navigation-sidebar/navigation-toggle/index.js +6 -18
  164. package/build-module/components/navigation-sidebar/navigation-toggle/index.js.map +1 -1
  165. package/build-module/components/template-details/edit-template-title.js +23 -0
  166. package/build-module/components/template-details/edit-template-title.js.map +1 -0
  167. package/build-module/components/template-details/index.js +7 -3
  168. package/build-module/components/template-details/index.js.map +1 -1
  169. package/build-module/components/template-part-converter/convert-to-template-part.js +20 -84
  170. package/build-module/components/template-part-converter/convert-to-template-part.js.map +1 -1
  171. package/build-module/components/welcome-guide/editor.js +45 -0
  172. package/build-module/components/welcome-guide/editor.js.map +1 -0
  173. package/build-module/components/welcome-guide/image.js +19 -0
  174. package/build-module/components/welcome-guide/image.js.map +1 -0
  175. package/build-module/components/welcome-guide/index.js +35 -0
  176. package/build-module/components/welcome-guide/index.js.map +1 -0
  177. package/build-module/components/welcome-guide/styles.js +69 -0
  178. package/build-module/components/welcome-guide/styles.js.map +1 -0
  179. package/build-module/index.js +28 -3
  180. package/build-module/index.js.map +1 -1
  181. package/build-module/plugins/index.js +3 -2
  182. package/build-module/plugins/index.js.map +1 -1
  183. package/build-module/plugins/welcome-guide-menu-item.js +27 -0
  184. package/build-module/plugins/welcome-guide-menu-item.js.map +1 -0
  185. package/build-module/store/actions.js +51 -25
  186. package/build-module/store/actions.js.map +1 -1
  187. package/build-module/store/defaults.js +4 -1
  188. package/build-module/store/defaults.js.map +1 -1
  189. package/build-module/store/selectors.js +21 -3
  190. package/build-module/store/selectors.js.map +1 -1
  191. package/build-module/utils/is-template-removable.js +14 -0
  192. package/build-module/utils/is-template-removable.js.map +1 -0
  193. package/build-style/style-rtl.css +477 -34
  194. package/build-style/style.css +477 -34
  195. package/package.json +10 -8
  196. package/src/components/add-new-template/index.js +30 -0
  197. package/src/components/add-new-template/new-template-part.js +81 -0
  198. package/src/components/add-new-template/new-template.js +136 -0
  199. package/src/components/add-new-template/style.scss +11 -0
  200. package/src/components/block-editor/index.js +2 -0
  201. package/src/components/create-template-part-modal/index.js +132 -0
  202. package/src/components/{template-part-converter → create-template-part-modal}/style.scss +9 -9
  203. package/src/components/editor/index.js +22 -15
  204. package/src/components/editor/style.scss +8 -0
  205. package/src/components/global-styles/color-palette-panel.js +64 -7
  206. package/src/components/global-styles/global-styles-provider.js +7 -36
  207. package/src/components/global-styles/gradients-palette-panel.js +99 -0
  208. package/src/components/global-styles/hooks.js +59 -27
  209. package/src/components/global-styles/palette.js +30 -10
  210. package/src/components/global-styles/screen-background-color.js +1 -0
  211. package/src/components/global-styles/screen-block-list.js +11 -1
  212. package/src/components/global-styles/screen-color-palette.js +30 -3
  213. package/src/components/global-styles/screen-link-color.js +1 -0
  214. package/src/components/global-styles/screen-text-color.js +1 -0
  215. package/src/components/global-styles/screen-typography-element.js +39 -0
  216. package/src/components/global-styles/screen-typography.js +84 -3
  217. package/src/components/global-styles/style.scss +42 -1
  218. package/src/components/global-styles/test/use-global-styles-output.js +3 -3
  219. package/src/components/global-styles/test/utils.js +1 -1
  220. package/src/components/global-styles/typography-panel.js +37 -7
  221. package/src/components/global-styles/ui.js +9 -0
  222. package/src/components/global-styles/use-global-styles-output.js +2 -2
  223. package/src/components/global-styles/utils.js +1 -1
  224. package/src/components/header/index.js +0 -6
  225. package/src/components/keyboard-shortcuts/index.js +32 -0
  226. package/src/components/list/actions/index.js +95 -0
  227. package/src/components/list/actions/rename-menu-item.js +134 -0
  228. package/src/components/list/added-by.js +179 -0
  229. package/src/components/list/header.js +34 -0
  230. package/src/components/list/index.js +96 -0
  231. package/src/components/list/style.scss +208 -0
  232. package/src/components/list/table.js +121 -0
  233. package/src/components/list/use-register-shortcuts.js +45 -0
  234. package/src/components/navigation-sidebar/index.js +24 -8
  235. package/src/components/navigation-sidebar/navigation-panel/index.js +57 -51
  236. package/src/components/navigation-sidebar/navigation-panel/style.scss +4 -2
  237. package/src/components/navigation-sidebar/navigation-toggle/index.js +24 -36
  238. package/src/components/navigation-sidebar/navigation-toggle/test/index.js +2 -0
  239. package/src/components/sidebar/style.scss +2 -1
  240. package/src/components/template-details/edit-template-title.js +28 -0
  241. package/src/components/template-details/index.js +15 -9
  242. package/src/components/template-part-converter/convert-to-template-part.js +20 -140
  243. package/src/components/welcome-guide/editor.js +63 -0
  244. package/src/components/welcome-guide/image.js +11 -0
  245. package/src/components/welcome-guide/index.js +33 -0
  246. package/src/components/welcome-guide/style.scss +37 -0
  247. package/src/components/welcome-guide/styles.js +116 -0
  248. package/src/index.js +31 -3
  249. package/src/plugins/index.js +3 -1
  250. package/src/plugins/welcome-guide-menu-item.js +35 -0
  251. package/src/store/actions.js +85 -35
  252. package/src/store/defaults.js +4 -1
  253. package/src/store/selectors.js +22 -4
  254. package/src/store/test/actions.js +0 -30
  255. package/src/store/test/selectors.js +24 -0
  256. package/src/style.scss +9 -6
  257. package/src/utils/is-template-removable.js +13 -0
  258. package/build/components/header/navigation-link/index.js +0 -87
  259. package/build/components/header/navigation-link/index.js.map +0 -1
  260. package/build-module/components/header/navigation-link/index.js +0 -74
  261. package/build-module/components/header/navigation-link/index.js.map +0 -1
  262. package/src/components/header/navigation-link/index.js +0 -71
  263. package/src/components/header/navigation-link/style.scss +0 -69
@@ -1,30 +1,46 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
+ import { useEffect } from '@wordpress/element';
4
5
  import { createSlotFill } from '@wordpress/components';
5
- import { useSelect } from '@wordpress/data';
6
+ import { useViewportMatch } from '@wordpress/compose';
7
+ import { useDispatch } from '@wordpress/data';
6
8
 
7
9
  /**
8
10
  * Internal dependencies
9
11
  */
12
+ import { store as editSiteStore } from '../../store';
10
13
  import NavigationPanel from './navigation-panel';
11
14
  import NavigationToggle from './navigation-toggle';
12
- import { store as editSiteStore } from '../../store';
13
15
 
14
16
  export const {
15
17
  Fill: NavigationPanelPreviewFill,
16
18
  Slot: NavigationPanelPreviewSlot,
17
19
  } = createSlotFill( 'EditSiteNavigationPanelPreview' );
18
20
 
19
- export default function NavigationSidebar() {
20
- const isNavigationOpen = useSelect( ( select ) => {
21
- return select( editSiteStore ).isNavigationOpened();
22
- }, [] );
21
+ export default function NavigationSidebar( {
22
+ isDefaultOpen = false,
23
+ activeTemplateType,
24
+ } ) {
25
+ const isDesktopViewport = useViewportMatch( 'medium' );
26
+ const { setIsNavigationPanelOpened } = useDispatch( editSiteStore );
27
+
28
+ useEffect( () => {
29
+ // When transitioning to desktop open the navigation if `isDefaultOpen` is true.
30
+ if ( isDefaultOpen && isDesktopViewport ) {
31
+ setIsNavigationPanelOpened( true );
32
+ }
33
+
34
+ // When transitioning to mobile/tablet, close the navigation.
35
+ if ( ! isDesktopViewport ) {
36
+ setIsNavigationPanelOpened( false );
37
+ }
38
+ }, [ isDefaultOpen, isDesktopViewport, setIsNavigationPanelOpened ] );
23
39
 
24
40
  return (
25
41
  <>
26
- <NavigationToggle isOpen={ isNavigationOpen } />
27
- <NavigationPanel isOpen={ isNavigationOpen } />
42
+ <NavigationToggle />
43
+ <NavigationPanel activeItem={ activeTemplateType } />
28
44
  <NavigationPanelPreviewSlot />
29
45
  </>
30
46
  );
@@ -9,6 +9,9 @@ import classnames from 'classnames';
9
9
  import {
10
10
  __experimentalNavigation as Navigation,
11
11
  __experimentalNavigationBackButton as NavigationBackButton,
12
+ __experimentalNavigationGroup as NavigationGroup,
13
+ __experimentalNavigationItem as NavigationItem,
14
+ __experimentalNavigationMenu as NavigationMenu,
12
15
  } from '@wordpress/components';
13
16
  import { store as coreDataStore } from '@wordpress/core-data';
14
17
  import { useSelect, useDispatch } from '@wordpress/data';
@@ -16,65 +19,43 @@ import { useEffect, useRef } from '@wordpress/element';
16
19
  import { __ } from '@wordpress/i18n';
17
20
  import { ESCAPE } from '@wordpress/keycodes';
18
21
  import { decodeEntities } from '@wordpress/html-entities';
22
+ import { addQueryArgs } from '@wordpress/url';
23
+ import {
24
+ home as siteIcon,
25
+ layout as templateIcon,
26
+ symbolFilled as templatePartIcon,
27
+ } from '@wordpress/icons';
19
28
 
20
29
  /**
21
30
  * Internal dependencies
22
31
  */
23
- import SiteMenu from './menus';
24
32
  import MainDashboardButton from '../../main-dashboard-button';
25
33
  import { store as editSiteStore } from '../../../store';
26
- import { MENU_ROOT } from './constants';
27
34
 
28
- const NavigationPanel = ( { isOpen } ) => {
29
- const {
30
- page: { context: { postType, postId } = {} } = {},
31
- editedPostId,
32
- editedPostType,
33
- activeMenu,
34
- siteTitle,
35
- } = useSelect( ( select ) => {
36
- const {
37
- getEditedPostType,
38
- getEditedPostId,
39
- getNavigationPanelActiveMenu,
40
- getPage,
41
- } = select( editSiteStore );
35
+ const SITE_EDITOR_KEY = 'site-editor';
36
+
37
+ const NavigationPanel = ( { activeItem = SITE_EDITOR_KEY } ) => {
38
+ const { isNavigationOpen, siteTitle } = useSelect( ( select ) => {
42
39
  const { getEntityRecord } = select( coreDataStore );
43
40
 
44
41
  const siteData =
45
42
  getEntityRecord( 'root', '__unstableBase', undefined ) || {};
46
43
 
47
44
  return {
48
- page: getPage(),
49
- editedPostId: getEditedPostId(),
50
- editedPostType: getEditedPostType(),
51
- activeMenu: getNavigationPanelActiveMenu(),
52
45
  siteTitle: siteData.name,
46
+ isNavigationOpen: select( editSiteStore ).isNavigationOpened(),
53
47
  };
54
48
  }, [] );
55
-
56
- const {
57
- setNavigationPanelActiveMenu: setActive,
58
- setIsNavigationPanelOpened,
59
- } = useDispatch( editSiteStore );
60
-
61
- let activeItem;
62
- if ( activeMenu !== MENU_ROOT ) {
63
- if ( activeMenu.startsWith( 'content' ) ) {
64
- activeItem = `${ postType }-${ postId }`;
65
- } else {
66
- activeItem = `${ editedPostType }-${ editedPostId }`;
67
- }
68
- }
49
+ const { setIsNavigationPanelOpened } = useDispatch( editSiteStore );
69
50
 
70
51
  // Ensures focus is moved to the panel area when it is activated
71
52
  // from a separate component (such as document actions in the header).
72
53
  const panelRef = useRef();
73
54
  useEffect( () => {
74
- if ( isOpen ) {
55
+ if ( isNavigationOpen ) {
75
56
  panelRef.current.focus();
76
57
  }
77
- }, [ activeMenu, isOpen ] );
58
+ }, [ activeItem, isNavigationOpen ] );
78
59
 
79
60
  const closeOnEscape = ( event ) => {
80
61
  if ( event.keyCode === ESCAPE && ! event.defaultPrevented ) {
@@ -87,7 +68,7 @@ const NavigationPanel = ( { isOpen } ) => {
87
68
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions
88
69
  <div
89
70
  className={ classnames( `edit-site-navigation-panel`, {
90
- 'is-open': isOpen,
71
+ 'is-open': isNavigationOpen,
91
72
  } ) }
92
73
  ref={ panelRef }
93
74
  tabIndex="-1"
@@ -100,21 +81,46 @@ const NavigationPanel = ( { isOpen } ) => {
100
81
  </div>
101
82
  </div>
102
83
  <div className="edit-site-navigation-panel__scroll-container">
103
- <Navigation
104
- activeItem={ activeItem }
105
- activeMenu={ activeMenu }
106
- onActivateMenu={ setActive }
107
- >
108
- { activeMenu === MENU_ROOT && (
109
- <MainDashboardButton.Slot>
110
- <NavigationBackButton
111
- backButtonLabel={ __( 'Dashboard' ) }
112
- className="edit-site-navigation-panel__back-to-dashboard"
113
- href="index.php"
84
+ <Navigation activeItem={ activeItem }>
85
+ <MainDashboardButton.Slot>
86
+ <NavigationBackButton
87
+ backButtonLabel={ __( 'Dashboard' ) }
88
+ className="edit-site-navigation-panel__back-to-dashboard"
89
+ href="index.php"
90
+ />
91
+ </MainDashboardButton.Slot>
92
+
93
+ <NavigationMenu>
94
+ <NavigationGroup title={ __( 'Editor' ) }>
95
+ <NavigationItem
96
+ icon={ siteIcon }
97
+ title={ __( 'Site' ) }
98
+ item={ SITE_EDITOR_KEY }
99
+ href={ addQueryArgs( window.location.href, {
100
+ postId: undefined,
101
+ postType: undefined,
102
+ } ) }
103
+ />
104
+ <NavigationItem
105
+ icon={ templateIcon }
106
+ title={ __( 'Templates' ) }
107
+ item="wp_template"
108
+ href={ addQueryArgs( window.location.href, {
109
+ postId: undefined,
110
+ postType: 'wp_template',
111
+ } ) }
112
+ />
113
+ <NavigationItem
114
+ icon={ templatePartIcon }
115
+ title={ __( 'Template Parts' ) }
116
+ item="wp_template_part"
117
+ href={ addQueryArgs( window.location.href, {
118
+ postId: undefined,
119
+ postType: 'wp_template_part',
120
+ } ) }
114
121
  />
115
- </MainDashboardButton.Slot>
116
- ) }
117
- <SiteMenu />
122
+ </NavigationGroup>
123
+ </NavigationMenu>
118
124
  </Navigation>
119
125
  </div>
120
126
  </div>
@@ -9,8 +9,10 @@
9
9
  @include reduce-motion("transition");
10
10
 
11
11
  // Footer is visible from medium so we subtract footer's height
12
- @include break-medium() {
13
- height: calc(100% - #{$button-size-small + $border-width});
12
+ .interface-interface-skeleton.has-footer & {
13
+ @include break-medium() {
14
+ height: calc(100% - #{$button-size-small + $border-width});
15
+ }
14
16
  }
15
17
  }
16
18
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { useDispatch, useSelect } from '@wordpress/data';
4
+ import { useSelect, useDispatch } from '@wordpress/data';
5
5
  import {
6
6
  Button,
7
7
  Icon,
@@ -17,44 +17,31 @@ import { useReducedMotion } from '@wordpress/compose';
17
17
  */
18
18
  import { store as editSiteStore } from '../../../store';
19
19
 
20
- function NavigationToggle( { icon, isOpen } ) {
21
- const {
22
- isRequestingSiteIcon,
23
- navigationPanelMenu,
24
- siteIconUrl,
25
- } = useSelect( ( select ) => {
26
- const { getCurrentTemplateNavigationPanelSubMenu } = select(
27
- editSiteStore
28
- );
29
- const { getEntityRecord, isResolving } = select( coreDataStore );
30
- const siteData =
31
- getEntityRecord( 'root', '__unstableBase', undefined ) || {};
32
-
33
- return {
34
- isRequestingSiteIcon: isResolving( 'core', 'getEntityRecord', [
35
- 'root',
36
- '__unstableBase',
37
- undefined,
38
- ] ),
39
- navigationPanelMenu: getCurrentTemplateNavigationPanelSubMenu(),
40
- siteIconUrl: siteData.site_icon_url,
41
- };
42
- }, [] );
20
+ function NavigationToggle( { icon } ) {
21
+ const { isNavigationOpen, isRequestingSiteIcon, siteIconUrl } = useSelect(
22
+ ( select ) => {
23
+ const { getEntityRecord, isResolving } = select( coreDataStore );
24
+ const siteData =
25
+ getEntityRecord( 'root', '__unstableBase', undefined ) || {};
43
26
 
44
- const {
45
- openNavigationPanelToMenu,
46
- setIsNavigationPanelOpened,
47
- } = useDispatch( editSiteStore );
27
+ return {
28
+ isNavigationOpen: select( editSiteStore ).isNavigationOpened(),
29
+ isRequestingSiteIcon: isResolving( 'core', 'getEntityRecord', [
30
+ 'root',
31
+ '__unstableBase',
32
+ undefined,
33
+ ] ),
34
+ siteIconUrl: siteData.site_icon_url,
35
+ };
36
+ },
37
+ []
38
+ );
39
+ const { setIsNavigationPanelOpened } = useDispatch( editSiteStore );
48
40
 
49
41
  const disableMotion = useReducedMotion();
50
42
 
51
- const toggleNavigationPanel = () => {
52
- if ( isOpen ) {
53
- setIsNavigationPanelOpened( false );
54
- return;
55
- }
56
- openNavigationPanelToMenu( navigationPanelMenu );
57
- };
43
+ const toggleNavigationPanel = () =>
44
+ setIsNavigationPanelOpened( ! isNavigationOpen );
58
45
 
59
46
  let buttonIcon = <Icon size="36px" icon={ wordpress } />;
60
47
 
@@ -84,7 +71,8 @@ function NavigationToggle( { icon, isOpen } ) {
84
71
  return (
85
72
  <motion.div
86
73
  className={
87
- 'edit-site-navigation-toggle' + ( isOpen ? ' is-open' : '' )
74
+ 'edit-site-navigation-toggle' +
75
+ ( isNavigationOpen ? ' is-open' : '' )
88
76
  }
89
77
  whileHover="expand"
90
78
  >
@@ -34,6 +34,7 @@ describe( 'NavigationToggle', () => {
34
34
  site_icon_url: 'https://fakeUrl.com',
35
35
  } ),
36
36
  isResolving: () => false,
37
+ isNavigationOpened: () => false,
37
38
  } ) );
38
39
  } );
39
40
 
@@ -53,6 +54,7 @@ describe( 'NavigationToggle', () => {
53
54
  site_icon_url: '',
54
55
  } ),
55
56
  isResolving: () => false,
57
+ isNavigationOpened: () => false,
56
58
  } ) );
57
59
  } );
58
60
 
@@ -62,7 +62,8 @@
62
62
  padding: 0 $grid-unit-20;
63
63
  }
64
64
 
65
- .edit-site-global-styles-color-palette-panel {
65
+ .edit-site-global-styles-color-palette-panel,
66
+ .edit-site-global-styles-gradient-palette-panel {
66
67
  padding: $grid-unit-20;
67
68
  }
68
69
 
@@ -0,0 +1,28 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { TextControl } from '@wordpress/components';
6
+ import { useEntityProp } from '@wordpress/core-data';
7
+
8
+ export default function EditTemplateTitle( { template } ) {
9
+ const [ title, setTitle ] = useEntityProp(
10
+ 'postType',
11
+ template.type,
12
+ 'title',
13
+ template.id
14
+ );
15
+
16
+ return (
17
+ <TextControl
18
+ label={ __( 'Title' ) }
19
+ value={ title }
20
+ help={ __(
21
+ 'Give the template a title that indicates its purpose, e.g. "Full Width".'
22
+ ) }
23
+ onChange={ ( newTitle ) => {
24
+ setTitle( newTitle || template.slug );
25
+ } }
26
+ />
27
+ );
28
+ }
@@ -24,6 +24,7 @@ import {
24
24
  } from '../navigation-sidebar/navigation-panel/constants';
25
25
  import { store as editSiteStore } from '../../store';
26
26
  import TemplateAreas from './template-areas';
27
+ import EditTemplateTitle from './edit-template-title';
27
28
 
28
29
  export default function TemplateDetails( { template, onClose } ) {
29
30
  const { title, description } = useSelect(
@@ -55,13 +56,17 @@ export default function TemplateDetails( { template, onClose } ) {
55
56
  return (
56
57
  <div className="edit-site-template-details">
57
58
  <div className="edit-site-template-details__group">
58
- <Heading
59
- level={ 4 }
60
- weight={ 600 }
61
- className="edit-site-template-details__title"
62
- >
63
- { title }
64
- </Heading>
59
+ { template.is_custom ? (
60
+ <EditTemplateTitle template={ template } />
61
+ ) : (
62
+ <Heading
63
+ level={ 4 }
64
+ weight={ 600 }
65
+ className="edit-site-template-details__title"
66
+ >
67
+ { title }
68
+ </Heading>
69
+ ) }
65
70
 
66
71
  { description && (
67
72
  <Text
@@ -90,9 +95,10 @@ export default function TemplateDetails( { template, onClose } ) {
90
95
 
91
96
  <Button
92
97
  className="edit-site-template-details__show-all-button"
93
- href={ addQueryArgs( 'edit.php', {
98
+ href={ addQueryArgs( window.location.href, {
94
99
  // TODO: We should update this to filter by template part's areas as well.
95
- post_type: template.type,
100
+ postId: undefined,
101
+ postType: template.type,
96
102
  } ) }
97
103
  >
98
104
  { sprintf(
@@ -6,61 +6,36 @@ import { kebabCase } from 'lodash';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { useDispatch, useSelect } from '@wordpress/data';
9
+ import { useDispatch } from '@wordpress/data';
10
10
  import {
11
11
  BlockSettingsMenuControls,
12
12
  store as blockEditorStore,
13
13
  } from '@wordpress/block-editor';
14
- import {
15
- MenuItem,
16
- Icon,
17
- BaseControl,
18
- TextControl,
19
- Flex,
20
- FlexItem,
21
- FlexBlock,
22
- Button,
23
- Modal,
24
- __experimentalRadioGroup as RadioGroup,
25
- __experimentalRadio as Radio,
26
- } from '@wordpress/components';
27
- import { useInstanceId } from '@wordpress/compose';
14
+ import { MenuItem } from '@wordpress/components';
28
15
  import { createBlock, serialize } from '@wordpress/blocks';
29
16
  import { __ } from '@wordpress/i18n';
30
17
  import { useState } from '@wordpress/element';
31
18
  import { store as coreStore } from '@wordpress/core-data';
32
19
  import { store as noticesStore } from '@wordpress/notices';
33
- import { store as editorStore } from '@wordpress/editor';
34
- import { check } from '@wordpress/icons';
35
20
 
36
21
  /**
37
22
  * Internal dependencies
38
23
  */
39
- import { TEMPLATE_PART_AREA_GENERAL } from '../../store/constants';
24
+ import CreateTemplatePartModal from '../create-template-part-modal';
40
25
 
41
26
  export default function ConvertToTemplatePart( { clientIds, blocks } ) {
42
- const instanceId = useInstanceId( ConvertToTemplatePart );
43
27
  const [ isModalOpen, setIsModalOpen ] = useState( false );
44
- const [ title, setTitle ] = useState( '' );
45
28
  const { replaceBlocks } = useDispatch( blockEditorStore );
46
29
  const { saveEntityRecord } = useDispatch( coreStore );
47
30
  const { createSuccessNotice } = useDispatch( noticesStore );
48
- const [ area, setArea ] = useState( TEMPLATE_PART_AREA_GENERAL );
49
-
50
- const templatePartAreas = useSelect(
51
- ( select ) =>
52
- select( editorStore ).__experimentalGetDefaultTemplatePartAreas(),
53
- []
54
- );
55
31
 
56
- const onConvert = async ( templatePartTitle ) => {
57
- const defaultTitle = __( 'Untitled Template Part' );
32
+ const onConvert = async ( { title, area } ) => {
58
33
  const templatePart = await saveEntityRecord(
59
34
  'postType',
60
35
  'wp_template_part',
61
36
  {
62
- slug: kebabCase( templatePartTitle || defaultTitle ),
63
- title: templatePartTitle || defaultTitle,
37
+ slug: kebabCase( title ),
38
+ title,
64
39
  content: serialize( blocks ),
65
40
  area,
66
41
  }
@@ -78,122 +53,27 @@ export default function ConvertToTemplatePart( { clientIds, blocks } ) {
78
53
  };
79
54
 
80
55
  return (
81
- <BlockSettingsMenuControls>
82
- { ( { onClose } ) => (
83
- <>
56
+ <>
57
+ <BlockSettingsMenuControls>
58
+ { ( { onClose } ) => (
84
59
  <MenuItem
85
60
  onClick={ () => {
86
61
  setIsModalOpen( true );
62
+ onClose();
87
63
  } }
88
64
  >
89
65
  { __( 'Make template part' ) }
90
66
  </MenuItem>
91
- { isModalOpen && (
92
- <Modal
93
- title={ __( 'Create a template part' ) }
94
- closeLabel={ __( 'Close' ) }
95
- onRequestClose={ () => {
96
- setIsModalOpen( false );
97
- setTitle( '' );
98
- } }
99
- overlayClassName="edit-site-template-part-converter__modal"
100
- >
101
- <form
102
- onSubmit={ ( event ) => {
103
- event.preventDefault();
104
- onConvert( title );
105
- setIsModalOpen( false );
106
- setTitle( '' );
107
- onClose();
108
- } }
109
- >
110
- <TextControl
111
- label={ __( 'Name' ) }
112
- value={ title }
113
- onChange={ setTitle }
114
- />
115
- <BaseControl
116
- label={ __( 'Area' ) }
117
- id={ `edit-site-template-part-converter__area-selection-${ instanceId }` }
118
- className="edit-site-template-part-converter__area-base-control"
119
- >
120
- <RadioGroup
121
- label={ __( 'Area' ) }
122
- className="edit-site-template-part-converter__area-radio-group"
123
- id={ `edit-site-template-part-converter__area-selection-${ instanceId }` }
124
- onChange={ setArea }
125
- checked={ area }
126
- >
127
- { templatePartAreas.map(
128
- ( {
129
- icon,
130
- label,
131
- area: value,
132
- description,
133
- } ) => (
134
- <Radio
135
- key={ label }
136
- value={ value }
137
- className="edit-site-template-part-converter__area-radio"
138
- >
139
- <Flex
140
- align="start"
141
- justify="start"
142
- >
143
- <FlexItem>
144
- <Icon
145
- icon={ icon }
146
- />
147
- </FlexItem>
148
- <FlexBlock className="edit-site-template-part-converter__option-label">
149
- { label }
150
- <div>
151
- { description }
152
- </div>
153
- </FlexBlock>
154
-
155
- <FlexItem className="edit-site-template-part-converter__checkbox">
156
- { area ===
157
- value && (
158
- <Icon
159
- icon={
160
- check
161
- }
162
- />
163
- ) }
164
- </FlexItem>
165
- </Flex>
166
- </Radio>
167
- )
168
- ) }
169
- </RadioGroup>
170
- </BaseControl>
171
- <Flex
172
- className="edit-site-template-part-converter__convert-modal-actions"
173
- justify="flex-end"
174
- >
175
- <FlexItem>
176
- <Button
177
- variant="secondary"
178
- onClick={ () => {
179
- setIsModalOpen( false );
180
- setTitle( '' );
181
- } }
182
- >
183
- { __( 'Cancel' ) }
184
- </Button>
185
- </FlexItem>
186
- <FlexItem>
187
- <Button variant="primary" type="submit">
188
- { __( 'Create' ) }
189
- </Button>
190
- </FlexItem>
191
- </Flex>
192
- </form>
193
- </Modal>
194
- ) }
195
- </>
67
+ ) }
68
+ </BlockSettingsMenuControls>
69
+ { isModalOpen && (
70
+ <CreateTemplatePartModal
71
+ closeModal={ () => {
72
+ setIsModalOpen( false );
73
+ } }
74
+ onCreate={ onConvert }
75
+ />
196
76
  ) }
197
- </BlockSettingsMenuControls>
77
+ </>
198
78
  );
199
79
  }
@@ -0,0 +1,63 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useDispatch } from '@wordpress/data';
5
+ import { Guide } from '@wordpress/components';
6
+ import { __ } from '@wordpress/i18n';
7
+ import { createInterpolateElement } from '@wordpress/element';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import WelcomeGuideImage from './image';
13
+ import { store as editSiteStore } from '../../store';
14
+
15
+ export default function WelcomeGuideEditor() {
16
+ const { toggleFeature } = useDispatch( editSiteStore );
17
+
18
+ return (
19
+ <Guide
20
+ className="edit-site-welcome-guide"
21
+ contentLabel={ __( 'Welcome to the site editor' ) }
22
+ finishButtonText={ __( 'Get Started' ) }
23
+ onFinish={ () => toggleFeature( 'welcomeGuide' ) }
24
+ pages={ [
25
+ {
26
+ image: (
27
+ <WelcomeGuideImage
28
+ nonAnimatedSrc="https://s.w.org/images/block-editor/edit-your-site.svg?1"
29
+ animatedSrc="https://s.w.org/images/block-editor/edit-your-site.gif?1"
30
+ />
31
+ ),
32
+ content: (
33
+ <>
34
+ <h1 className="edit-site-welcome-guide__heading">
35
+ { __( 'Edit your site' ) }
36
+ </h1>
37
+ <p className="edit-site-welcome-guide__text">
38
+ { __(
39
+ 'Design everything on your site — from the header right down to the footer — using blocks.'
40
+ ) }
41
+ </p>
42
+ <p className="edit-site-welcome-guide__text">
43
+ { createInterpolateElement(
44
+ __(
45
+ 'Click <StylesIconImage /> to start designing your blocks, and choose your typography, layout, and colors.'
46
+ ),
47
+ {
48
+ StylesIconImage: (
49
+ <img
50
+ alt={ __( 'styles' ) }
51
+ src="data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 4c-4.4 0-8 3.6-8 8v.1c0 4.1 3.2 7.5 7.2 7.9h.8c4.4 0 8-3.6 8-8s-3.6-8-8-8zm0 15V5c3.9 0 7 3.1 7 7s-3.1 7-7 7z' fill='%231E1E1E'/%3E%3C/svg%3E%0A"
52
+ />
53
+ ),
54
+ }
55
+ ) }
56
+ </p>
57
+ </>
58
+ ),
59
+ },
60
+ ] }
61
+ />
62
+ );
63
+ }