@wordpress/edit-site 3.0.8 → 3.0.12

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 (258) 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 +56 -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/index.js +3 -2
  70. package/build/components/template-details/index.js.map +1 -1
  71. package/build/components/template-part-converter/convert-to-template-part.js +20 -84
  72. package/build/components/template-part-converter/convert-to-template-part.js.map +1 -1
  73. package/build/components/welcome-guide/editor.js +58 -0
  74. package/build/components/welcome-guide/editor.js.map +1 -0
  75. package/build/components/welcome-guide/image.js +27 -0
  76. package/build/components/welcome-guide/image.js.map +1 -0
  77. package/build/components/welcome-guide/index.js +49 -0
  78. package/build/components/welcome-guide/index.js.map +1 -0
  79. package/build/components/welcome-guide/styles.js +83 -0
  80. package/build/components/welcome-guide/styles.js.map +1 -0
  81. package/build/index.js +36 -6
  82. package/build/index.js.map +1 -1
  83. package/build/plugins/index.js +4 -2
  84. package/build/plugins/index.js.map +1 -1
  85. package/build/plugins/welcome-guide-menu-item.js +39 -0
  86. package/build/plugins/welcome-guide-menu-item.js.map +1 -0
  87. package/build/store/actions.js +50 -24
  88. package/build/store/actions.js.map +1 -1
  89. package/build/store/defaults.js +4 -1
  90. package/build/store/defaults.js.map +1 -1
  91. package/build/store/selectors.js +25 -5
  92. package/build/store/selectors.js.map +1 -1
  93. package/build/utils/is-template-removable.js +21 -0
  94. package/build/utils/is-template-removable.js.map +1 -0
  95. package/build-module/components/add-new-template/index.js +36 -0
  96. package/build-module/components/add-new-template/index.js.map +1 -0
  97. package/build-module/components/add-new-template/new-template-part.js +79 -0
  98. package/build-module/components/add-new-template/new-template-part.js.map +1 -0
  99. package/build-module/components/add-new-template/new-template.js +114 -0
  100. package/build-module/components/add-new-template/new-template.js.map +1 -0
  101. package/build-module/components/block-editor/index.js +2 -1
  102. package/build-module/components/block-editor/index.js.map +1 -1
  103. package/build-module/components/create-template-part-modal/index.js +102 -0
  104. package/build-module/components/create-template-part-modal/index.js.map +1 -0
  105. package/build-module/components/editor/index.js +19 -17
  106. package/build-module/components/editor/index.js.map +1 -1
  107. package/build-module/components/global-styles/color-palette-panel.js +29 -7
  108. package/build-module/components/global-styles/color-palette-panel.js.map +1 -1
  109. package/build-module/components/global-styles/global-styles-provider.js +10 -43
  110. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  111. package/build-module/components/global-styles/gradients-palette-panel.js +46 -0
  112. package/build-module/components/global-styles/gradients-palette-panel.js.map +1 -0
  113. package/build-module/components/global-styles/hooks.js +30 -28
  114. package/build-module/components/global-styles/hooks.js.map +1 -1
  115. package/build-module/components/global-styles/palette.js +12 -5
  116. package/build-module/components/global-styles/palette.js.map +1 -1
  117. package/build-module/components/global-styles/screen-background-color.js +2 -1
  118. package/build-module/components/global-styles/screen-background-color.js.map +1 -1
  119. package/build-module/components/global-styles/screen-block-list.js +7 -1
  120. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  121. package/build-module/components/global-styles/screen-color-palette.js +22 -3
  122. package/build-module/components/global-styles/screen-color-palette.js.map +1 -1
  123. package/build-module/components/global-styles/screen-link-color.js +2 -1
  124. package/build-module/components/global-styles/screen-link-color.js.map +1 -1
  125. package/build-module/components/global-styles/screen-text-color.js +2 -1
  126. package/build-module/components/global-styles/screen-text-color.js.map +1 -1
  127. package/build-module/components/global-styles/screen-typography-element.js +41 -0
  128. package/build-module/components/global-styles/screen-typography-element.js.map +1 -0
  129. package/build-module/components/global-styles/screen-typography.js +70 -6
  130. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  131. package/build-module/components/global-styles/typography-panel.js +28 -8
  132. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  133. package/build-module/components/global-styles/ui.js +11 -0
  134. package/build-module/components/global-styles/ui.js.map +1 -1
  135. package/build-module/components/global-styles/use-global-styles-output.js +2 -2
  136. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  137. package/build-module/components/global-styles/utils.js +1 -1
  138. package/build-module/components/global-styles/utils.js.map +1 -1
  139. package/build-module/components/header/index.js +1 -3
  140. package/build-module/components/header/index.js.map +1 -1
  141. package/build-module/components/keyboard-shortcuts/index.js +26 -0
  142. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  143. package/build-module/components/list/actions/index.js +85 -0
  144. package/build-module/components/list/actions/index.js.map +1 -0
  145. package/build-module/components/list/actions/rename-menu-item.js +101 -0
  146. package/build-module/components/list/actions/rename-menu-item.js.map +1 -0
  147. package/build-module/components/list/added-by.js +166 -0
  148. package/build-module/components/list/added-by.js.map +1 -0
  149. package/build-module/components/list/header.js +37 -0
  150. package/build-module/components/list/header.js.map +1 -0
  151. package/build-module/components/list/index.js +81 -0
  152. package/build-module/components/list/index.js.map +1 -0
  153. package/build-module/components/list/table.js +98 -0
  154. package/build-module/components/list/table.js.map +1 -0
  155. package/build-module/components/list/use-register-shortcuts.js +41 -0
  156. package/build-module/components/list/use-register-shortcuts.js.map +1 -0
  157. package/build-module/components/navigation-sidebar/index.js +26 -10
  158. package/build-module/components/navigation-sidebar/index.js.map +1 -1
  159. package/build-module/components/navigation-sidebar/navigation-panel/index.js +41 -44
  160. package/build-module/components/navigation-sidebar/navigation-panel/index.js.map +1 -1
  161. package/build-module/components/navigation-sidebar/navigation-toggle/index.js +6 -18
  162. package/build-module/components/navigation-sidebar/navigation-toggle/index.js.map +1 -1
  163. package/build-module/components/template-details/index.js +3 -2
  164. package/build-module/components/template-details/index.js.map +1 -1
  165. package/build-module/components/template-part-converter/convert-to-template-part.js +20 -84
  166. package/build-module/components/template-part-converter/convert-to-template-part.js.map +1 -1
  167. package/build-module/components/welcome-guide/editor.js +45 -0
  168. package/build-module/components/welcome-guide/editor.js.map +1 -0
  169. package/build-module/components/welcome-guide/image.js +19 -0
  170. package/build-module/components/welcome-guide/image.js.map +1 -0
  171. package/build-module/components/welcome-guide/index.js +35 -0
  172. package/build-module/components/welcome-guide/index.js.map +1 -0
  173. package/build-module/components/welcome-guide/styles.js +69 -0
  174. package/build-module/components/welcome-guide/styles.js.map +1 -0
  175. package/build-module/index.js +28 -3
  176. package/build-module/index.js.map +1 -1
  177. package/build-module/plugins/index.js +3 -2
  178. package/build-module/plugins/index.js.map +1 -1
  179. package/build-module/plugins/welcome-guide-menu-item.js +27 -0
  180. package/build-module/plugins/welcome-guide-menu-item.js.map +1 -0
  181. package/build-module/store/actions.js +51 -25
  182. package/build-module/store/actions.js.map +1 -1
  183. package/build-module/store/defaults.js +4 -1
  184. package/build-module/store/defaults.js.map +1 -1
  185. package/build-module/store/selectors.js +21 -3
  186. package/build-module/store/selectors.js.map +1 -1
  187. package/build-module/utils/is-template-removable.js +14 -0
  188. package/build-module/utils/is-template-removable.js.map +1 -0
  189. package/build-style/style-rtl.css +468 -33
  190. package/build-style/style.css +468 -33
  191. package/package.json +10 -8
  192. package/src/components/add-new-template/index.js +30 -0
  193. package/src/components/add-new-template/new-template-part.js +81 -0
  194. package/src/components/add-new-template/new-template.js +136 -0
  195. package/src/components/add-new-template/style.scss +11 -0
  196. package/src/components/block-editor/index.js +2 -0
  197. package/src/components/create-template-part-modal/index.js +132 -0
  198. package/src/components/{template-part-converter → create-template-part-modal}/style.scss +9 -9
  199. package/src/components/editor/index.js +22 -15
  200. package/src/components/editor/style.scss +8 -0
  201. package/src/components/global-styles/color-palette-panel.js +64 -7
  202. package/src/components/global-styles/global-styles-provider.js +7 -36
  203. package/src/components/global-styles/gradients-palette-panel.js +79 -0
  204. package/src/components/global-styles/hooks.js +59 -27
  205. package/src/components/global-styles/palette.js +30 -10
  206. package/src/components/global-styles/screen-background-color.js +1 -0
  207. package/src/components/global-styles/screen-block-list.js +11 -1
  208. package/src/components/global-styles/screen-color-palette.js +30 -3
  209. package/src/components/global-styles/screen-link-color.js +1 -0
  210. package/src/components/global-styles/screen-text-color.js +1 -0
  211. package/src/components/global-styles/screen-typography-element.js +39 -0
  212. package/src/components/global-styles/screen-typography.js +84 -3
  213. package/src/components/global-styles/style.scss +33 -0
  214. package/src/components/global-styles/test/use-global-styles-output.js +3 -3
  215. package/src/components/global-styles/test/utils.js +1 -1
  216. package/src/components/global-styles/typography-panel.js +37 -7
  217. package/src/components/global-styles/ui.js +9 -0
  218. package/src/components/global-styles/use-global-styles-output.js +2 -2
  219. package/src/components/global-styles/utils.js +1 -1
  220. package/src/components/header/index.js +0 -6
  221. package/src/components/keyboard-shortcuts/index.js +32 -0
  222. package/src/components/list/actions/index.js +95 -0
  223. package/src/components/list/actions/rename-menu-item.js +134 -0
  224. package/src/components/list/added-by.js +179 -0
  225. package/src/components/list/header.js +34 -0
  226. package/src/components/list/index.js +96 -0
  227. package/src/components/list/style.scss +208 -0
  228. package/src/components/list/table.js +121 -0
  229. package/src/components/list/use-register-shortcuts.js +45 -0
  230. package/src/components/navigation-sidebar/index.js +24 -8
  231. package/src/components/navigation-sidebar/navigation-panel/index.js +57 -51
  232. package/src/components/navigation-sidebar/navigation-panel/style.scss +4 -2
  233. package/src/components/navigation-sidebar/navigation-toggle/index.js +24 -36
  234. package/src/components/navigation-sidebar/navigation-toggle/test/index.js +2 -0
  235. package/src/components/sidebar/style.scss +2 -1
  236. package/src/components/template-details/index.js +3 -2
  237. package/src/components/template-part-converter/convert-to-template-part.js +20 -140
  238. package/src/components/welcome-guide/editor.js +63 -0
  239. package/src/components/welcome-guide/image.js +11 -0
  240. package/src/components/welcome-guide/index.js +33 -0
  241. package/src/components/welcome-guide/style.scss +37 -0
  242. package/src/components/welcome-guide/styles.js +116 -0
  243. package/src/index.js +31 -3
  244. package/src/plugins/index.js +3 -1
  245. package/src/plugins/welcome-guide-menu-item.js +35 -0
  246. package/src/store/actions.js +85 -35
  247. package/src/store/defaults.js +4 -1
  248. package/src/store/selectors.js +22 -4
  249. package/src/store/test/actions.js +0 -30
  250. package/src/store/test/selectors.js +24 -0
  251. package/src/style.scss +9 -6
  252. package/src/utils/is-template-removable.js +13 -0
  253. package/build/components/header/navigation-link/index.js +0 -87
  254. package/build/components/header/navigation-link/index.js.map +0 -1
  255. package/build-module/components/header/navigation-link/index.js +0 -74
  256. package/build-module/components/header/navigation-link/index.js.map +0 -1
  257. package/src/components/header/navigation-link/index.js +0 -71
  258. package/src/components/header/navigation-link/style.scss +0 -69
@@ -0,0 +1,116 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useDispatch } from '@wordpress/data';
5
+ import { ExternalLink, Guide } from '@wordpress/components';
6
+ import { __ } from '@wordpress/i18n';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import WelcomeGuideImage from './image';
12
+ import { store as editSiteStore } from '../../store';
13
+
14
+ export default function WelcomeGuideStyles() {
15
+ const { toggleFeature } = useDispatch( editSiteStore );
16
+
17
+ return (
18
+ <Guide
19
+ className="edit-site-welcome-guide"
20
+ contentLabel={ __( 'Welcome to styles' ) }
21
+ finishButtonText={ __( 'Get Started' ) }
22
+ onFinish={ () => toggleFeature( 'welcomeGuideStyles' ) }
23
+ pages={ [
24
+ {
25
+ image: (
26
+ <WelcomeGuideImage
27
+ nonAnimatedSrc="https://s.w.org/images/block-editor/welcome-to-styles.svg?1"
28
+ animatedSrc="https://s.w.org/images/block-editor/welcome-to-styles.gif?1"
29
+ />
30
+ ),
31
+ content: (
32
+ <>
33
+ <h1 className="edit-site-welcome-guide__heading">
34
+ { __( 'Welcome to Styles' ) }
35
+ </h1>
36
+ <p className="edit-site-welcome-guide__text">
37
+ { __(
38
+ 'Tweak your site, or give it a whole new look! Get creative — how about a new color palette for your buttons, or choosing a new font? Take a look at what you can do here.'
39
+ ) }
40
+ </p>
41
+ </>
42
+ ),
43
+ },
44
+ {
45
+ image: (
46
+ <WelcomeGuideImage
47
+ nonAnimatedSrc="https://s.w.org/images/block-editor/set-the-design.svg?1"
48
+ animatedSrc="https://s.w.org/images/block-editor/set-the-design.gif?1"
49
+ />
50
+ ),
51
+ content: (
52
+ <>
53
+ <h1 className="edit-site-welcome-guide__heading">
54
+ { __( 'Set the design' ) }
55
+ </h1>
56
+ <p className="edit-site-welcome-guide__text">
57
+ { __(
58
+ 'You can customize your site as much as you like with different colors, typography, and layouts. Or if you prefer, just leave it up to your theme to handle! '
59
+ ) }
60
+ </p>
61
+ </>
62
+ ),
63
+ },
64
+ {
65
+ image: (
66
+ <WelcomeGuideImage
67
+ nonAnimatedSrc="https://s.w.org/images/block-editor/personalize-blocks.svg?1"
68
+ animatedSrc="https://s.w.org/images/block-editor/personalize-blocks.gif?1"
69
+ />
70
+ ),
71
+ content: (
72
+ <>
73
+ <h1 className="edit-site-welcome-guide__heading">
74
+ { __( 'Personalize blocks' ) }
75
+ </h1>
76
+ <p className="edit-site-welcome-guide__text">
77
+ { __(
78
+ 'You can adjust your blocks to ensure a cohesive experience across your site — add your unique colors to a branded Button block, or adjust the Heading block to your preferred size.'
79
+ ) }
80
+ </p>
81
+ </>
82
+ ),
83
+ },
84
+ {
85
+ image: (
86
+ <WelcomeGuideImage
87
+ nonAnimatedSrc="https://s.w.org/images/block-editor/welcome-documentation.svg"
88
+ animatedSrc="https://s.w.org/images/block-editor/welcome-documentation.gif"
89
+ />
90
+ ),
91
+ content: (
92
+ <>
93
+ <h1 className="edit-site-welcome-guide__heading">
94
+ { __( 'Learn more' ) }
95
+ </h1>
96
+ <p className="edit-site-welcome-guide__text">
97
+ { __(
98
+ 'New to block themes and styling your site? '
99
+ ) }
100
+ <ExternalLink
101
+ href={ __(
102
+ 'https://wordpress.org/support/article/wordpress-editor/'
103
+ ) }
104
+ >
105
+ { __(
106
+ 'Here’s a detailed guide to learn how to make the most of it.'
107
+ ) }
108
+ </ExternalLink>
109
+ </p>
110
+ </>
111
+ ),
112
+ },
113
+ ] }
114
+ />
115
+ );
116
+ }
package/src/index.js CHANGED
@@ -6,20 +6,23 @@ import {
6
6
  registerCoreBlocks,
7
7
  __experimentalRegisterExperimentalCoreBlocks,
8
8
  } from '@wordpress/block-library';
9
- import { dispatch } from '@wordpress/data';
9
+ import { dispatch, select } from '@wordpress/data';
10
10
  import { render, unmountComponentAtNode } from '@wordpress/element';
11
11
  import {
12
12
  __experimentalFetchLinkSuggestions as fetchLinkSuggestions,
13
13
  __experimentalFetchUrlData as fetchUrlData,
14
14
  } from '@wordpress/core-data';
15
+ import { store as editorStore } from '@wordpress/editor';
16
+ import { store as viewportStore } from '@wordpress/viewport';
15
17
 
16
18
  /**
17
19
  * Internal dependencies
18
20
  */
19
21
  import './plugins';
20
22
  import './hooks';
21
- import './store';
23
+ import { store as editSiteStore } from './store';
22
24
  import Editor from './components/editor';
25
+ import List from './components/list';
23
26
 
24
27
  /**
25
28
  * Reinitializes the editor after the user chooses to reboot the editor after
@@ -44,7 +47,7 @@ export function reinitializeEditor( target, settings ) {
44
47
  * @param {string} id ID of the root element to render the screen in.
45
48
  * @param {Object} settings Editor settings.
46
49
  */
47
- export function initialize( id, settings ) {
50
+ export function initializeEditor( id, settings ) {
48
51
  settings.__experimentalFetchLinkSuggestions = ( search, searchOptions ) =>
49
52
  fetchLinkSuggestions( search, searchOptions, settings );
50
53
  settings.__experimentalFetchRichUrlData = fetchUrlData;
@@ -67,6 +70,31 @@ export function initialize( id, settings ) {
67
70
  );
68
71
  }
69
72
 
73
+ /**
74
+ * Initializes the site editor templates list screen.
75
+ *
76
+ * @param {string} id ID of the root element to render the screen in.
77
+ * @param {string} templateType The type of the list. "wp_template" or "wp_template_part".
78
+ * @param {Object} settings Editor settings.
79
+ */
80
+ export function initializeList( id, templateType, settings ) {
81
+ const target = document.getElementById( id );
82
+
83
+ dispatch( editorStore ).updateEditorSettings( {
84
+ defaultTemplateTypes: settings.defaultTemplateTypes,
85
+ defaultTemplatePartAreas: settings.defaultTemplatePartAreas,
86
+ } );
87
+
88
+ // Default the navigation panel to be opened when we're in a bigger screen.
89
+ // We update the store synchronously before rendering so that we won't
90
+ // trigger an unnecessary re-render with useEffect.
91
+ dispatch( editSiteStore ).setIsNavigationPanelOpened(
92
+ select( viewportStore ).isViewportMatch( 'medium' )
93
+ );
94
+
95
+ render( <List templateType={ templateType } />, target );
96
+ }
97
+
70
98
  export { default as __experimentalMainDashboardButton } from './components/main-dashboard-button';
71
99
  export { default as __experimentalNavigationToggle } from './components/navigation-sidebar/navigation-toggle';
72
100
  export { default as PluginSidebar } from './components/sidebar/plugin-sidebar';
@@ -16,6 +16,7 @@ import { download } from '@wordpress/icons';
16
16
  * Internal dependencies
17
17
  */
18
18
  import ToolsMoreMenuGroup from '../components/header/tools-more-menu-group';
19
+ import WelcomeGuideMenuItem from './welcome-guide-menu-item';
19
20
 
20
21
  registerPlugin( 'edit-site', {
21
22
  render() {
@@ -27,7 +28,7 @@ registerPlugin( 'edit-site', {
27
28
  icon={ download }
28
29
  onClick={ () =>
29
30
  apiFetch( {
30
- path: '/__experimental/edit-site/v1/export',
31
+ path: '/wp-block-editor/v1/export',
31
32
  parse: false,
32
33
  } )
33
34
  .then( ( res ) => res.blob() )
@@ -45,6 +46,7 @@ registerPlugin( 'edit-site', {
45
46
  >
46
47
  { __( 'Export' ) }
47
48
  </MenuItem>
49
+ <WelcomeGuideMenuItem />
48
50
  </ToolsMoreMenuGroup>
49
51
  </>
50
52
  );
@@ -0,0 +1,35 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { useDispatch, useSelect } from '@wordpress/data';
6
+ import { MenuItem } from '@wordpress/components';
7
+ import { store as interfaceStore } from '@wordpress/interface';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import { store as editSiteStore } from '../store';
13
+
14
+ export default function WelcomeGuideMenuItem() {
15
+ const { toggleFeature } = useDispatch( editSiteStore );
16
+ const isStylesOpen = useSelect( ( select ) => {
17
+ const sidebar = select( interfaceStore ).getActiveComplementaryArea(
18
+ editSiteStore.name
19
+ );
20
+
21
+ return sidebar === 'edit-site/global-styles';
22
+ }, [] );
23
+
24
+ return (
25
+ <MenuItem
26
+ onClick={ () =>
27
+ toggleFeature(
28
+ isStylesOpen ? 'welcomeGuideStyles' : 'welcomeGuide'
29
+ )
30
+ }
31
+ >
32
+ { __( 'Welcome Guide' ) }
33
+ </MenuItem>
34
+ );
35
+ }
@@ -5,7 +5,7 @@ import { parse, __unstableSerializeAndClean } from '@wordpress/blocks';
5
5
  import { controls, dispatch } from '@wordpress/data';
6
6
  import { apiFetch } from '@wordpress/data-controls';
7
7
  import { addQueryArgs, getPathAndQueryString } from '@wordpress/url';
8
- import { __ } from '@wordpress/i18n';
8
+ import { __, sprintf } from '@wordpress/i18n';
9
9
  import { store as noticesStore } from '@wordpress/notices';
10
10
  import { store as coreStore } from '@wordpress/core-data';
11
11
  import { store as interfaceStore } from '@wordpress/interface';
@@ -106,17 +106,56 @@ export function* addTemplate( template ) {
106
106
  }
107
107
 
108
108
  /**
109
- * Removes a template, and updates the current page and template.
109
+ * Removes a template.
110
110
  *
111
- * @param {number} templateId The template ID.
111
+ * @param {Object} template The template object.
112
112
  */
113
- export function* removeTemplate( templateId ) {
114
- yield apiFetch( {
115
- path: `/wp/v2/templates/${ templateId }`,
116
- method: 'DELETE',
117
- } );
118
- const page = yield controls.select( editSiteStoreName, 'getPage' );
119
- yield controls.dispatch( editSiteStoreName, 'setPage', page );
113
+ export function* removeTemplate( template ) {
114
+ try {
115
+ yield controls.dispatch(
116
+ coreStore,
117
+ 'deleteEntityRecord',
118
+ 'postType',
119
+ template.type,
120
+ template.id,
121
+ { force: true }
122
+ );
123
+
124
+ const lastError = yield controls.select(
125
+ coreStore,
126
+ 'getLastEntityDeleteError',
127
+ 'postType',
128
+ template.type,
129
+ template.id
130
+ );
131
+
132
+ if ( lastError ) {
133
+ throw lastError;
134
+ }
135
+
136
+ yield controls.dispatch(
137
+ noticesStore,
138
+ 'createSuccessNotice',
139
+ sprintf(
140
+ /* translators: The template/part's name. */
141
+ __( '"%s" removed.' ),
142
+ template.title.rendered
143
+ ),
144
+ { type: 'snackbar' }
145
+ );
146
+ } catch ( error ) {
147
+ const errorMessage =
148
+ error.message && error.code !== 'unknown_error'
149
+ ? error.message
150
+ : __( 'An error occurred while deleting the template.' );
151
+
152
+ yield controls.dispatch(
153
+ noticesStore,
154
+ 'createErrorNotice',
155
+ errorMessage,
156
+ { type: 'snackbar' }
157
+ );
158
+ }
120
159
  }
121
160
 
122
161
  /**
@@ -336,9 +375,12 @@ export function setIsListViewOpened( isOpen ) {
336
375
  /**
337
376
  * Reverts a template to its original theme-provided file.
338
377
  *
339
- * @param {Object} template The template to revert.
378
+ * @param {Object} template The template to revert.
379
+ * @param {Object} [options]
380
+ * @param {boolean} [options.allowUndo] Whether to allow the user to undo
381
+ * reverting the template. Default true.
340
382
  */
341
- export function* revertTemplate( template ) {
383
+ export function* revertTemplate( template, { allowUndo = true } = {} ) {
342
384
  if ( ! isTemplateRevertable( template ) ) {
343
385
  yield controls.dispatch(
344
386
  noticesStore,
@@ -426,32 +468,40 @@ export function* revertTemplate( template ) {
426
468
  }
427
469
  );
428
470
 
429
- const undoRevert = async () => {
430
- await dispatch( coreStore ).editEntityRecord(
431
- 'postType',
432
- template.type,
433
- edited.id,
471
+ if ( allowUndo ) {
472
+ const undoRevert = async () => {
473
+ await dispatch( coreStore ).editEntityRecord(
474
+ 'postType',
475
+ template.type,
476
+ edited.id,
477
+ {
478
+ content: serializeBlocks,
479
+ blocks: edited.blocks,
480
+ source: 'custom',
481
+ }
482
+ );
483
+ };
484
+ yield controls.dispatch(
485
+ noticesStore,
486
+ 'createSuccessNotice',
487
+ __( 'Template reverted.' ),
434
488
  {
435
- content: serializeBlocks,
436
- blocks: edited.blocks,
437
- source: 'custom',
489
+ type: 'snackbar',
490
+ actions: [
491
+ {
492
+ label: __( 'Undo' ),
493
+ onClick: undoRevert,
494
+ },
495
+ ],
438
496
  }
439
497
  );
440
- };
441
- yield controls.dispatch(
442
- noticesStore,
443
- 'createSuccessNotice',
444
- __( 'Template reverted.' ),
445
- {
446
- type: 'snackbar',
447
- actions: [
448
- {
449
- label: __( 'Undo' ),
450
- onClick: undoRevert,
451
- },
452
- ],
453
- }
454
- );
498
+ } else {
499
+ yield controls.dispatch(
500
+ noticesStore,
501
+ 'createSuccessNotice',
502
+ __( 'Template reverted.' )
503
+ );
504
+ }
455
505
  } catch ( error ) {
456
506
  const errorMessage =
457
507
  error.message && error.code !== 'unknown_error'
@@ -1,3 +1,6 @@
1
1
  export const PREFERENCES_DEFAULTS = {
2
- features: {},
2
+ features: {
3
+ welcomeGuide: true,
4
+ welcomeGuideStyles: true,
5
+ },
3
6
  };
@@ -11,6 +11,7 @@ import { store as coreDataStore } from '@wordpress/core-data';
11
11
  import { createRegistrySelector } from '@wordpress/data';
12
12
  import { uploadMedia } from '@wordpress/media-utils';
13
13
  import { isTemplatePart } from '@wordpress/blocks';
14
+ import { Platform } from '@wordpress/element';
14
15
 
15
16
  /**
16
17
  * Internal dependencies
@@ -64,6 +65,22 @@ export const getCanUserCreateMedia = createRegistrySelector( ( select ) => () =>
64
65
  select( coreDataStore ).canUser( 'create', 'media' )
65
66
  );
66
67
 
68
+ /**
69
+ * Returns any available Reusable blocks.
70
+ *
71
+ * @param {Object} state Global application state.
72
+ *
73
+ * @return {Array} The available reusable blocks.
74
+ */
75
+ export const getReusableBlocks = createRegistrySelector( ( select ) => () => {
76
+ const isWeb = Platform.OS === 'web';
77
+ return isWeb
78
+ ? select( coreDataStore ).getEntityRecords( 'postType', 'wp_block', {
79
+ per_page: -1,
80
+ } )
81
+ : [];
82
+ } );
83
+
67
84
  /**
68
85
  * Returns the settings, taking into account active features and permissions.
69
86
  *
@@ -80,6 +97,7 @@ export const getSettings = createSelector(
80
97
  focusMode: isFeatureActive( state, 'focusMode' ),
81
98
  hasFixedToolbar: isFeatureActive( state, 'fixedToolbar' ),
82
99
  __experimentalSetIsInserterOpened: setIsInserterOpen,
100
+ __experimentalReusableBlocks: getReusableBlocks( state ),
83
101
  };
84
102
 
85
103
  const canUserCreateMedia = getCanUserCreateMedia( state );
@@ -101,6 +119,7 @@ export const getSettings = createSelector(
101
119
  state.settings,
102
120
  isFeatureActive( state, 'focusMode' ),
103
121
  isFeatureActive( state, 'fixedToolbar' ),
122
+ getReusableBlocks( state ),
104
123
  ]
105
124
  );
106
125
 
@@ -309,10 +328,9 @@ export const getCurrentTemplateTemplateParts = createRegistrySelector(
309
328
  templateId
310
329
  );
311
330
 
312
- const templateParts = select( coreDataStore ).getEntityRecords(
313
- 'postType',
314
- 'wp_template_part'
315
- );
331
+ const templateParts = select(
332
+ coreDataStore
333
+ ).getEntityRecords( 'postType', 'wp_template_part', { per_page: -1 } );
316
334
  const templatePartsById = keyBy(
317
335
  templateParts,
318
336
  ( templatePart ) => templatePart.id
@@ -5,7 +5,6 @@ import {
5
5
  toggleFeature,
6
6
  setTemplate,
7
7
  addTemplate,
8
- removeTemplate,
9
8
  setTemplatePart,
10
9
  setPage,
11
10
  showHomepage,
@@ -76,35 +75,6 @@ describe( 'actions', () => {
76
75
  } );
77
76
  } );
78
77
 
79
- describe( 'removeTemplate', () => {
80
- it( 'should issue a REST request to delete the template, then read the current page and then set the page with an updated template list', () => {
81
- const templateId = 1;
82
- const page = { path: '/' };
83
-
84
- const it = removeTemplate( templateId );
85
- expect( it.next().value ).toEqual( {
86
- type: 'API_FETCH',
87
- request: {
88
- path: `/wp/v2/templates/${ templateId }`,
89
- method: 'DELETE',
90
- },
91
- } );
92
- expect( it.next().value ).toEqual( {
93
- type: '@@data/SELECT',
94
- storeKey: 'core/edit-site',
95
- selectorName: 'getPage',
96
- args: [],
97
- } );
98
- expect( it.next( page ).value ).toEqual( {
99
- type: '@@data/DISPATCH',
100
- storeKey: 'core/edit-site',
101
- actionName: 'setPage',
102
- args: [ page ],
103
- } );
104
- expect( it.next().done ).toBe( true );
105
- } );
106
- } );
107
-
108
78
  describe( 'setTemplatePart', () => {
109
79
  it( 'should return the SET_TEMPLATE_PART action', () => {
110
80
  const templatePartId = 1;
@@ -17,6 +17,7 @@ import {
17
17
  getPreviousEditedPostId,
18
18
  getPage,
19
19
  getNavigationPanelActiveMenu,
20
+ getReusableBlocks,
20
21
  isNavigationOpened,
21
22
  isInserterOpened,
22
23
  isListViewOpened,
@@ -24,9 +25,13 @@ import {
24
25
 
25
26
  describe( 'selectors', () => {
26
27
  const canUser = jest.fn( () => true );
28
+ const getEntityRecords = jest.fn( () => [] );
27
29
  getCanUserCreateMedia.registry = {
28
30
  select: jest.fn( () => ( { canUser } ) ),
29
31
  };
32
+ getReusableBlocks.registry = {
33
+ select: jest.fn( () => ( { getEntityRecords } ) ),
34
+ };
30
35
 
31
36
  describe( 'isFeatureActive', () => {
32
37
  it( 'is tolerant to an undefined features preference', () => {
@@ -83,6 +88,22 @@ describe( 'selectors', () => {
83
88
  } );
84
89
  } );
85
90
 
91
+ describe( 'getReusableBlocks', () => {
92
+ it( "selects `getEntityRecords( 'postType', 'wp_block' )` from the core store", () => {
93
+ expect( getReusableBlocks() ).toEqual( [] );
94
+ expect( getReusableBlocks.registry.select ).toHaveBeenCalledWith(
95
+ coreDataStore
96
+ );
97
+ expect( getEntityRecords ).toHaveBeenCalledWith(
98
+ 'postType',
99
+ 'wp_block',
100
+ {
101
+ per_page: -1,
102
+ }
103
+ );
104
+ } );
105
+ } );
106
+
86
107
  describe( 'getSettings', () => {
87
108
  it( "returns the settings when the user can't create media", () => {
88
109
  canUser.mockReturnValueOnce( false );
@@ -94,6 +115,7 @@ describe( 'selectors', () => {
94
115
  focusMode: false,
95
116
  hasFixedToolbar: false,
96
117
  __experimentalSetIsInserterOpened: setInserterOpened,
118
+ __experimentalReusableBlocks: [],
97
119
  } );
98
120
  } );
99
121
 
@@ -108,12 +130,14 @@ describe( 'selectors', () => {
108
130
  },
109
131
  };
110
132
  const setInserterOpened = () => {};
133
+
111
134
  expect( getSettings( state, setInserterOpened ) ).toEqual( {
112
135
  outlineMode: true,
113
136
  key: 'value',
114
137
  focusMode: true,
115
138
  hasFixedToolbar: true,
116
139
  __experimentalSetIsInserterOpened: setInserterOpened,
140
+ __experimentalReusableBlocks: [],
117
141
  mediaUpload: expect.any( Function ),
118
142
  } );
119
143
  } );
package/src/style.scss CHANGED
@@ -5,14 +5,18 @@
5
5
  @import "./components/header/style.scss";
6
6
  @import "./components/header/document-actions/style.scss";
7
7
  @import "./components/header/more-menu/style.scss";
8
- @import "./components/header/navigation-link/style.scss";
8
+ @import "./components/navigation-sidebar/navigation-toggle/style.scss";
9
+ @import "./components/navigation-sidebar/navigation-panel/style.scss";
10
+ @import "./components/list/style.scss";
11
+ @import "./components/add-new-template/style.scss";
9
12
  @import "./components/sidebar/style.scss";
10
13
  @import "./components/sidebar/settings-header/style.scss";
11
14
  @import "./components/sidebar/template-card/style.scss";
12
15
  @import "./components/editor/style.scss";
13
16
  @import "./components/template-details/style.scss";
14
- @import "./components/template-part-converter/style.scss";
17
+ @import "./components/create-template-part-modal/style.scss";
15
18
  @import "./components/secondary-sidebar/style.scss";
19
+ @import "./components/welcome-guide/style.scss";
16
20
 
17
21
  // In order to use mix-blend-mode, this element needs to have an explicitly set background-color.
18
22
  // We scope it to .wp-toolbar to be wp-admin only, to prevent bleed into other implementations.
@@ -37,15 +41,14 @@ body.site-editor-php {
37
41
  @include break-small {
38
42
  bottom: 0;
39
43
  left: 0;
40
- min-height: calc(100vh - #{$admin-bar-height-big});
44
+ min-height: 100vh;
41
45
  position: absolute;
42
46
  right: 0;
43
47
  top: 0;
44
48
  }
45
49
 
46
- // The WP header height changes at this breakpoint.
47
- @include break-medium {
48
- min-height: calc(100vh - #{$admin-bar-height});
50
+ .interface-interface-skeleton {
51
+ top: 0;
49
52
  }
50
53
 
51
54
  // Todo: Remove this rule when edit site gets support
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Check if a template is removable.
3
+ *
4
+ * @param {Object} template The template entity to check.
5
+ * @return {boolean} Whether the template is revertable.
6
+ */
7
+ export default function isTemplateRemovable( template ) {
8
+ if ( ! template ) {
9
+ return false;
10
+ }
11
+
12
+ return template.source === 'custom' && ! template.has_theme_file;
13
+ }