@wordpress/edit-post 7.24.1 → 7.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE.md +1 -1
  3. package/build/components/browser-url/index.js +3 -2
  4. package/build/components/browser-url/index.js.map +1 -1
  5. package/build/components/header/index.js +35 -33
  6. package/build/components/header/index.js.map +1 -1
  7. package/build/components/header/mode-switcher/index.js +1 -1
  8. package/build/components/header/mode-switcher/index.js.map +1 -1
  9. package/build/components/header/more-menu/index.js +2 -1
  10. package/build/components/header/more-menu/index.js.map +1 -1
  11. package/build/components/header/writing-menu/index.js +22 -18
  12. package/build/components/header/writing-menu/index.js.map +1 -1
  13. package/build/components/keyboard-shortcuts/index.js +1 -20
  14. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  15. package/build/components/layout/index.js +45 -38
  16. package/build/components/layout/index.js.map +1 -1
  17. package/build/components/layout/index.native.js +3 -1
  18. package/build/components/layout/index.native.js.map +1 -1
  19. package/build/components/meta-boxes/meta-box-visibility.js +2 -6
  20. package/build/components/meta-boxes/meta-box-visibility.js.map +1 -1
  21. package/build/components/preferences-modal/index.js +87 -54
  22. package/build/components/preferences-modal/index.js.map +1 -1
  23. package/build/components/preferences-modal/options/enable-feature.js +23 -23
  24. package/build/components/preferences-modal/options/enable-feature.js.map +1 -1
  25. package/build/components/preferences-modal/options/enable-panel.js +3 -6
  26. package/build/components/preferences-modal/options/enable-panel.js.map +1 -1
  27. package/build/components/sidebar/plugin-document-setting-panel/index.js +3 -3
  28. package/build/components/sidebar/plugin-document-setting-panel/index.js.map +1 -1
  29. package/build/components/sidebar/plugin-sidebar/index.js +2 -10
  30. package/build/components/sidebar/plugin-sidebar/index.js.map +1 -1
  31. package/build/components/sidebar/post-status/index.js +3 -5
  32. package/build/components/sidebar/post-status/index.js.map +1 -1
  33. package/build/components/sidebar/settings-header/index.js +17 -43
  34. package/build/components/sidebar/settings-header/index.js.map +1 -1
  35. package/build/components/sidebar/settings-sidebar/index.js +80 -26
  36. package/build/components/sidebar/settings-sidebar/index.js.map +1 -1
  37. package/build/components/start-page-options/index.js +3 -3
  38. package/build/components/start-page-options/index.js.map +1 -1
  39. package/build/components/visual-editor/index.js +20 -257
  40. package/build/components/visual-editor/index.js.map +1 -1
  41. package/build/components/welcome-guide/index.js +6 -3
  42. package/build/components/welcome-guide/index.js.map +1 -1
  43. package/build/editor.js +20 -30
  44. package/build/editor.js.map +1 -1
  45. package/build/editor.native.js +3 -11
  46. package/build/editor.native.js.map +1 -1
  47. package/build/hooks/commands/use-common-commands.js +16 -12
  48. package/build/hooks/commands/use-common-commands.js.map +1 -1
  49. package/build/hooks/use-post-history.js +79 -0
  50. package/build/hooks/use-post-history.js.map +1 -0
  51. package/build/index.js +24 -20
  52. package/build/index.js.map +1 -1
  53. package/build/index.native.js +7 -1
  54. package/build/index.native.js.map +1 -1
  55. package/build/plugins/welcome-guide-menu-item/index.js +2 -6
  56. package/build/plugins/welcome-guide-menu-item/index.js.map +1 -1
  57. package/build/store/actions.js +94 -112
  58. package/build/store/actions.js.map +1 -1
  59. package/build/store/reducer.js +1 -95
  60. package/build/store/reducer.js.map +1 -1
  61. package/build/store/selectors.js +86 -48
  62. package/build/store/selectors.js.map +1 -1
  63. package/build-module/components/browser-url/index.js +3 -2
  64. package/build-module/components/browser-url/index.js.map +1 -1
  65. package/build-module/components/header/index.js +37 -35
  66. package/build-module/components/header/index.js.map +1 -1
  67. package/build-module/components/header/mode-switcher/index.js +1 -1
  68. package/build-module/components/header/mode-switcher/index.js.map +1 -1
  69. package/build-module/components/header/more-menu/index.js +2 -1
  70. package/build-module/components/header/more-menu/index.js.map +1 -1
  71. package/build-module/components/header/writing-menu/index.js +23 -19
  72. package/build-module/components/header/writing-menu/index.js.map +1 -1
  73. package/build-module/components/keyboard-shortcuts/index.js +1 -20
  74. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  75. package/build-module/components/layout/index.js +46 -38
  76. package/build-module/components/layout/index.js.map +1 -1
  77. package/build-module/components/layout/index.native.js +4 -2
  78. package/build-module/components/layout/index.native.js.map +1 -1
  79. package/build-module/components/meta-boxes/meta-box-visibility.js +2 -6
  80. package/build-module/components/meta-boxes/meta-box-visibility.js.map +1 -1
  81. package/build-module/components/preferences-modal/index.js +87 -54
  82. package/build-module/components/preferences-modal/index.js.map +1 -1
  83. package/build-module/components/preferences-modal/options/enable-feature.js +22 -23
  84. package/build-module/components/preferences-modal/options/enable-feature.js.map +1 -1
  85. package/build-module/components/preferences-modal/options/enable-panel.js +3 -7
  86. package/build-module/components/preferences-modal/options/enable-panel.js.map +1 -1
  87. package/build-module/components/sidebar/plugin-document-setting-panel/index.js +3 -3
  88. package/build-module/components/sidebar/plugin-document-setting-panel/index.js.map +1 -1
  89. package/build-module/components/sidebar/plugin-sidebar/index.js +2 -10
  90. package/build-module/components/sidebar/plugin-sidebar/index.js.map +1 -1
  91. package/build-module/components/sidebar/post-status/index.js +4 -6
  92. package/build-module/components/sidebar/post-status/index.js.map +1 -1
  93. package/build-module/components/sidebar/settings-header/index.js +20 -46
  94. package/build-module/components/sidebar/settings-header/index.js.map +1 -1
  95. package/build-module/components/sidebar/settings-sidebar/index.js +80 -27
  96. package/build-module/components/sidebar/settings-sidebar/index.js.map +1 -1
  97. package/build-module/components/start-page-options/index.js +3 -3
  98. package/build-module/components/start-page-options/index.js.map +1 -1
  99. package/build-module/components/visual-editor/index.js +24 -261
  100. package/build-module/components/visual-editor/index.js.map +1 -1
  101. package/build-module/components/welcome-guide/index.js +6 -3
  102. package/build-module/components/welcome-guide/index.js.map +1 -1
  103. package/build-module/editor.js +20 -30
  104. package/build-module/editor.js.map +1 -1
  105. package/build-module/editor.native.js +3 -11
  106. package/build-module/editor.native.js.map +1 -1
  107. package/build-module/hooks/commands/use-common-commands.js +16 -12
  108. package/build-module/hooks/commands/use-common-commands.js.map +1 -1
  109. package/build-module/hooks/use-post-history.js +73 -0
  110. package/build-module/hooks/use-post-history.js.map +1 -0
  111. package/build-module/index.js +19 -12
  112. package/build-module/index.js.map +1 -1
  113. package/build-module/index.native.js +7 -1
  114. package/build-module/index.native.js.map +1 -1
  115. package/build-module/plugins/welcome-guide-menu-item/index.js +2 -6
  116. package/build-module/plugins/welcome-guide-menu-item/index.js.map +1 -1
  117. package/build-module/store/actions.js +86 -105
  118. package/build-module/store/actions.js.map +1 -1
  119. package/build-module/store/reducer.js +1 -92
  120. package/build-module/store/reducer.js.map +1 -1
  121. package/build-module/store/selectors.js +76 -38
  122. package/build-module/store/selectors.js.map +1 -1
  123. package/build-style/style-rtl.css +65 -473
  124. package/build-style/style.css +65 -473
  125. package/package.json +32 -32
  126. package/src/components/browser-url/index.js +4 -2
  127. package/src/components/header/index.js +45 -46
  128. package/src/components/header/mode-switcher/index.js +2 -1
  129. package/src/components/header/more-menu/index.js +1 -0
  130. package/src/components/header/style.scss +63 -37
  131. package/src/components/header/writing-menu/index.js +24 -24
  132. package/src/components/keyboard-shortcut-help-modal/test/index.js +0 -15
  133. package/src/components/keyboard-shortcuts/index.js +1 -23
  134. package/src/components/layout/index.js +31 -39
  135. package/src/components/layout/index.native.js +9 -1
  136. package/src/components/meta-boxes/meta-box-visibility.js +2 -8
  137. package/src/components/preferences-modal/index.js +128 -97
  138. package/src/components/preferences-modal/options/enable-feature.js +26 -21
  139. package/src/components/preferences-modal/options/enable-panel.js +3 -7
  140. package/src/components/preferences-modal/test/__snapshots__/meta-boxes-section.js.snap +187 -175
  141. package/src/components/preferences-modal/test/index.js +1 -52
  142. package/src/components/sidebar/plugin-document-setting-panel/index.js +3 -3
  143. package/src/components/sidebar/plugin-sidebar/index.js +1 -9
  144. package/src/components/sidebar/post-status/index.js +5 -5
  145. package/src/components/sidebar/settings-header/index.js +19 -71
  146. package/src/components/sidebar/settings-sidebar/index.js +125 -60
  147. package/src/components/sidebar/style.scss +4 -12
  148. package/src/components/start-page-options/index.js +3 -3
  149. package/src/components/text-editor/style.scss +0 -6
  150. package/src/components/visual-editor/index.js +26 -359
  151. package/src/components/visual-editor/style.scss +0 -15
  152. package/src/components/welcome-guide/index.js +4 -2
  153. package/src/editor.js +36 -35
  154. package/src/editor.native.js +2 -23
  155. package/src/hooks/commands/use-common-commands.js +14 -16
  156. package/src/hooks/use-post-history.js +73 -0
  157. package/src/index.js +24 -13
  158. package/src/index.native.js +8 -1
  159. package/src/plugins/welcome-guide-menu-item/index.js +3 -6
  160. package/src/store/actions.js +80 -131
  161. package/src/store/reducer.js +0 -93
  162. package/src/store/selectors.js +97 -55
  163. package/src/store/test/actions.js +10 -131
  164. package/src/store/test/reducer.js +1 -108
  165. package/src/store/test/selectors.js +0 -50
  166. package/src/style.scss +1 -8
  167. package/src/test/__snapshots__/editor.native.js.snap +21 -0
  168. package/src/test/editor.native.js +107 -56
  169. package/build/components/device-preview/index.js +0 -72
  170. package/build/components/device-preview/index.js.map +0 -1
  171. package/build/components/header/document-actions/index.js +0 -82
  172. package/build/components/header/document-actions/index.js.map +0 -1
  173. package/build/components/header/header-toolbar/index.js +0 -156
  174. package/build/components/header/header-toolbar/index.js.map +0 -1
  175. package/build/components/secondary-sidebar/inserter-sidebar.js +0 -73
  176. package/build/components/secondary-sidebar/inserter-sidebar.js.map +0 -1
  177. package/build/components/secondary-sidebar/list-view-outline.js +0 -112
  178. package/build/components/secondary-sidebar/list-view-outline.js.map +0 -1
  179. package/build/components/secondary-sidebar/list-view-sidebar.js +0 -148
  180. package/build/components/secondary-sidebar/list-view-sidebar.js.map +0 -1
  181. package/build/components/sidebar/discussion-panel/index.js +0 -59
  182. package/build/components/sidebar/discussion-panel/index.js.map +0 -1
  183. package/build/components/sidebar/featured-image/index.js +0 -70
  184. package/build/components/sidebar/featured-image/index.js.map +0 -1
  185. package/build/components/sidebar/last-revision/index.js +0 -21
  186. package/build/components/sidebar/last-revision/index.js.map +0 -1
  187. package/build/components/sidebar/page-attributes/index.js +0 -65
  188. package/build/components/sidebar/page-attributes/index.js.map +0 -1
  189. package/build/components/sidebar/plugin-post-excerpt/index.js +0 -72
  190. package/build/components/sidebar/plugin-post-excerpt/index.js.map +0 -1
  191. package/build/components/sidebar/post-excerpt/index.js +0 -54
  192. package/build/components/sidebar/post-excerpt/index.js.map +0 -1
  193. package/build/components/sidebar/post-taxonomies/index.js +0 -30
  194. package/build/components/sidebar/post-taxonomies/index.js.map +0 -1
  195. package/build/components/sidebar/post-taxonomies/taxonomy-panel.js +0 -56
  196. package/build/components/sidebar/post-taxonomies/taxonomy-panel.js.map +0 -1
  197. package/build/components/sidebar/post-template/create-modal.js +0 -99
  198. package/build/components/sidebar/post-template/create-modal.js.map +0 -1
  199. package/build/components/sidebar/post-template/form.js +0 -110
  200. package/build/components/sidebar/post-template/form.js.map +0 -1
  201. package/build/components/sidebar/post-template/index.js +0 -106
  202. package/build/components/sidebar/post-template/index.js.map +0 -1
  203. package/build/components/view-link/index.js +0 -53
  204. package/build/components/view-link/index.js.map +0 -1
  205. package/build-module/components/device-preview/index.js +0 -65
  206. package/build-module/components/device-preview/index.js.map +0 -1
  207. package/build-module/components/header/document-actions/index.js +0 -74
  208. package/build-module/components/header/document-actions/index.js.map +0 -1
  209. package/build-module/components/header/header-toolbar/index.js +0 -148
  210. package/build-module/components/header/header-toolbar/index.js.map +0 -1
  211. package/build-module/components/secondary-sidebar/inserter-sidebar.js +0 -66
  212. package/build-module/components/secondary-sidebar/inserter-sidebar.js.map +0 -1
  213. package/build-module/components/secondary-sidebar/list-view-outline.js +0 -105
  214. package/build-module/components/secondary-sidebar/list-view-outline.js.map +0 -1
  215. package/build-module/components/secondary-sidebar/list-view-sidebar.js +0 -140
  216. package/build-module/components/secondary-sidebar/list-view-sidebar.js.map +0 -1
  217. package/build-module/components/sidebar/discussion-panel/index.js +0 -52
  218. package/build-module/components/sidebar/discussion-panel/index.js.map +0 -1
  219. package/build-module/components/sidebar/featured-image/index.js +0 -63
  220. package/build-module/components/sidebar/featured-image/index.js.map +0 -1
  221. package/build-module/components/sidebar/last-revision/index.js +0 -13
  222. package/build-module/components/sidebar/last-revision/index.js.map +0 -1
  223. package/build-module/components/sidebar/page-attributes/index.js +0 -57
  224. package/build-module/components/sidebar/page-attributes/index.js.map +0 -1
  225. package/build-module/components/sidebar/plugin-post-excerpt/index.js +0 -64
  226. package/build-module/components/sidebar/plugin-post-excerpt/index.js.map +0 -1
  227. package/build-module/components/sidebar/post-excerpt/index.js +0 -47
  228. package/build-module/components/sidebar/post-excerpt/index.js.map +0 -1
  229. package/build-module/components/sidebar/post-taxonomies/index.js +0 -21
  230. package/build-module/components/sidebar/post-taxonomies/index.js.map +0 -1
  231. package/build-module/components/sidebar/post-taxonomies/taxonomy-panel.js +0 -48
  232. package/build-module/components/sidebar/post-taxonomies/taxonomy-panel.js.map +0 -1
  233. package/build-module/components/sidebar/post-template/create-modal.js +0 -92
  234. package/build-module/components/sidebar/post-template/create-modal.js.map +0 -1
  235. package/build-module/components/sidebar/post-template/form.js +0 -102
  236. package/build-module/components/sidebar/post-template/form.js.map +0 -1
  237. package/build-module/components/sidebar/post-template/index.js +0 -98
  238. package/build-module/components/sidebar/post-template/index.js.map +0 -1
  239. package/build-module/components/view-link/index.js +0 -46
  240. package/build-module/components/view-link/index.js.map +0 -1
  241. package/src/components/device-preview/index.js +0 -73
  242. package/src/components/header/document-actions/index.js +0 -82
  243. package/src/components/header/document-actions/style.scss +0 -64
  244. package/src/components/header/header-toolbar/index.js +0 -182
  245. package/src/components/header/header-toolbar/style.scss +0 -114
  246. package/src/components/keyboard-shortcut-help-modal/test/__snapshots__/index.js.snap +0 -929
  247. package/src/components/secondary-sidebar/inserter-sidebar.js +0 -71
  248. package/src/components/secondary-sidebar/list-view-outline.js +0 -98
  249. package/src/components/secondary-sidebar/list-view-sidebar.js +0 -170
  250. package/src/components/secondary-sidebar/style.scss +0 -120
  251. package/src/components/sidebar/discussion-panel/index.js +0 -62
  252. package/src/components/sidebar/featured-image/index.js +0 -67
  253. package/src/components/sidebar/last-revision/index.js +0 -17
  254. package/src/components/sidebar/last-revision/style.scss +0 -10
  255. package/src/components/sidebar/page-attributes/index.js +0 -65
  256. package/src/components/sidebar/plugin-post-excerpt/index.js +0 -61
  257. package/src/components/sidebar/plugin-post-excerpt/test/index.js +0 -36
  258. package/src/components/sidebar/post-excerpt/index.js +0 -59
  259. package/src/components/sidebar/post-taxonomies/index.js +0 -30
  260. package/src/components/sidebar/post-taxonomies/taxonomy-panel.js +0 -48
  261. package/src/components/sidebar/post-template/create-modal.js +0 -140
  262. package/src/components/sidebar/post-template/form.js +0 -141
  263. package/src/components/sidebar/post-template/index.js +0 -120
  264. package/src/components/sidebar/post-template/style.scss +0 -22
  265. package/src/components/sidebar/settings-header/style.scss +0 -74
  266. package/src/components/sidebar/template/style.scss +0 -35
  267. package/src/components/view-link/index.js +0 -48
@@ -6,24 +6,13 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { PostTitle, store as editorStore } from '@wordpress/editor';
10
9
  import {
11
- BlockList,
12
- BlockTools,
13
- store as blockEditorStore,
14
- __unstableUseTypewriter as useTypewriter,
15
- __unstableUseTypingObserver as useTypingObserver,
16
- __experimentalUseResizeCanvas as useResizeCanvas,
17
- useSettings,
18
- __experimentalRecursionProvider as RecursionProvider,
19
- privateApis as blockEditorPrivateApis,
20
- } from '@wordpress/block-editor';
21
- import { useEffect, useRef, useMemo } from '@wordpress/element';
22
- import { __unstableMotion as motion } from '@wordpress/components';
10
+ store as editorStore,
11
+ privateApis as editorPrivateApis,
12
+ } from '@wordpress/editor';
13
+ import { useMemo } from '@wordpress/element';
23
14
  import { useSelect } from '@wordpress/data';
24
- import { useMergeRefs } from '@wordpress/compose';
25
- import { parse, store as blocksStore } from '@wordpress/blocks';
26
- import { store as coreStore } from '@wordpress/core-data';
15
+ import { store as blocksStore } from '@wordpress/blocks';
27
16
 
28
17
  /**
29
18
  * Internal dependencies
@@ -31,398 +20,76 @@ import { store as coreStore } from '@wordpress/core-data';
31
20
  import { store as editPostStore } from '../../store';
32
21
  import { unlock } from '../../lock-unlock';
33
22
 
34
- const {
35
- LayoutStyle,
36
- useLayoutClasses,
37
- useLayoutStyles,
38
- ExperimentalBlockCanvas: BlockCanvas,
39
- } = unlock( blockEditorPrivateApis );
23
+ const { EditorCanvas } = unlock( editorPrivateApis );
40
24
 
41
25
  const isGutenbergPlugin = process.env.IS_GUTENBERG_PLUGIN ? true : false;
42
26
 
43
- /**
44
- * Given an array of nested blocks, find the first Post Content
45
- * block inside it, recursing through any nesting levels,
46
- * and return its attributes.
47
- *
48
- * @param {Array} blocks A list of blocks.
49
- *
50
- * @return {Object | undefined} The Post Content block.
51
- */
52
- function getPostContentAttributes( blocks ) {
53
- for ( let i = 0; i < blocks.length; i++ ) {
54
- if ( blocks[ i ].name === 'core/post-content' ) {
55
- return blocks[ i ].attributes;
56
- }
57
- if ( blocks[ i ].innerBlocks.length ) {
58
- const nestedPostContent = getPostContentAttributes(
59
- blocks[ i ].innerBlocks
60
- );
61
-
62
- if ( nestedPostContent ) {
63
- return nestedPostContent;
64
- }
65
- }
66
- }
67
- }
68
-
69
- function checkForPostContentAtRootLevel( blocks ) {
70
- for ( let i = 0; i < blocks.length; i++ ) {
71
- if ( blocks[ i ].name === 'core/post-content' ) {
72
- return true;
73
- }
74
- }
75
- return false;
76
- }
77
-
78
27
  export default function VisualEditor( { styles } ) {
79
28
  const {
80
- deviceType,
81
29
  isWelcomeGuideVisible,
82
- isTemplateMode,
83
- postContentAttributes,
84
- editedPostTemplate = {},
85
- wrapperBlockName,
86
- wrapperUniqueId,
30
+ renderingMode,
87
31
  isBlockBasedTheme,
88
32
  hasV3BlocksOnly,
89
33
  } = useSelect( ( select ) => {
90
- const {
91
- isFeatureActive,
92
- isEditingTemplate,
93
- getEditedPostTemplate,
94
- __experimentalGetPreviewDeviceType,
95
- } = select( editPostStore );
96
- const { getCurrentPostId, getCurrentPostType, getEditorSettings } =
97
- select( editorStore );
34
+ const { isFeatureActive } = select( editPostStore );
35
+ const { getEditorSettings, getRenderingMode } = select( editorStore );
98
36
  const { getBlockTypes } = select( blocksStore );
99
- const _isTemplateMode = isEditingTemplate();
100
- const postTypeSlug = getCurrentPostType();
101
- let _wrapperBlockName;
102
-
103
- if ( postTypeSlug === 'wp_block' ) {
104
- _wrapperBlockName = 'core/block';
105
- } else if ( ! _isTemplateMode ) {
106
- _wrapperBlockName = 'core/post-content';
107
- }
108
-
109
37
  const editorSettings = getEditorSettings();
110
- const supportsTemplateMode = editorSettings.supportsTemplateMode;
111
- const postType = select( coreStore ).getPostType( postTypeSlug );
112
- const canEditTemplate = select( coreStore ).canUser(
113
- 'create',
114
- 'templates'
115
- );
116
38
 
117
39
  return {
118
- deviceType: __experimentalGetPreviewDeviceType(),
119
40
  isWelcomeGuideVisible: isFeatureActive( 'welcomeGuide' ),
120
- isTemplateMode: _isTemplateMode,
121
- postContentAttributes: getEditorSettings().postContentAttributes,
122
- // Post template fetch returns a 404 on classic themes, which
123
- // messes with e2e tests, so check it's a block theme first.
124
- editedPostTemplate:
125
- postType?.viewable && supportsTemplateMode && canEditTemplate
126
- ? getEditedPostTemplate()
127
- : undefined,
128
- wrapperBlockName: _wrapperBlockName,
129
- wrapperUniqueId: getCurrentPostId(),
41
+ renderingMode: getRenderingMode(),
130
42
  isBlockBasedTheme: editorSettings.__unstableIsBlockBasedTheme,
131
43
  hasV3BlocksOnly: getBlockTypes().every( ( type ) => {
132
44
  return type.apiVersion >= 3;
133
45
  } ),
134
46
  };
135
47
  }, [] );
136
- const { isCleanNewPost } = useSelect( editorStore );
137
48
  const hasMetaBoxes = useSelect(
138
49
  ( select ) => select( editPostStore ).hasMetaBoxes(),
139
50
  []
140
51
  );
141
- const {
142
- hasRootPaddingAwareAlignments,
143
- isFocusMode,
144
- themeHasDisabledLayoutStyles,
145
- themeSupportsLayout,
146
- } = useSelect( ( select ) => {
147
- const _settings = select( blockEditorStore ).getSettings();
148
- return {
149
- themeHasDisabledLayoutStyles: _settings.disableLayoutStyles,
150
- themeSupportsLayout: _settings.supportsLayout,
151
- isFocusMode: _settings.focusMode,
152
- hasRootPaddingAwareAlignments:
153
- _settings.__experimentalFeatures?.useRootPaddingAwareAlignments,
154
- };
155
- }, [] );
156
- const desktopCanvasStyles = {
157
- height: '100%',
158
- width: '100%',
159
- marginLeft: 'auto',
160
- marginRight: 'auto',
161
- display: 'flex',
162
- flexFlow: 'column',
163
- // Default background color so that grey
164
- // .edit-post-editor-regions__content color doesn't show through.
165
- background: 'white',
166
- };
167
- const templateModeStyles = {
168
- ...desktopCanvasStyles,
169
- borderRadius: '2px 2px 0 0',
170
- border: '1px solid #ddd',
171
- borderBottom: 0,
172
- };
173
- const resizedCanvasStyles = useResizeCanvas( deviceType, isTemplateMode );
174
- const [ globalLayoutSettings ] = useSettings( 'layout' );
175
- const previewMode = 'is-' + deviceType.toLowerCase() + '-preview';
176
-
177
- let animatedStyles = isTemplateMode
178
- ? templateModeStyles
179
- : desktopCanvasStyles;
180
- if ( resizedCanvasStyles ) {
181
- animatedStyles = resizedCanvasStyles;
182
- }
183
52
 
184
53
  let paddingBottom;
185
54
 
186
55
  // Add a constant padding for the typewritter effect. When typing at the
187
56
  // bottom, there needs to be room to scroll up.
188
- if ( ! hasMetaBoxes && ! resizedCanvasStyles && ! isTemplateMode ) {
57
+ if ( ! hasMetaBoxes && renderingMode === 'post-only' ) {
189
58
  paddingBottom = '40vh';
190
59
  }
191
60
 
192
- const ref = useRef();
193
- const contentRef = useMergeRefs( [ ref, useTypewriter() ] );
194
-
195
- // fallbackLayout is used if there is no Post Content,
196
- // and for Post Title.
197
- const fallbackLayout = useMemo( () => {
198
- if ( isTemplateMode ) {
199
- return { type: 'default' };
200
- }
201
-
202
- if ( themeSupportsLayout ) {
203
- // We need to ensure support for wide and full alignments,
204
- // so we add the constrained type.
205
- return { ...globalLayoutSettings, type: 'constrained' };
206
- }
207
- // Set default layout for classic themes so all alignments are supported.
208
- return { type: 'default' };
209
- }, [ isTemplateMode, themeSupportsLayout, globalLayoutSettings ] );
210
-
211
- const newestPostContentAttributes = useMemo( () => {
212
- if ( ! editedPostTemplate?.content && ! editedPostTemplate?.blocks ) {
213
- return postContentAttributes;
214
- }
215
- // When in template editing mode, we can access the blocks directly.
216
- if ( editedPostTemplate?.blocks ) {
217
- return getPostContentAttributes( editedPostTemplate?.blocks );
218
- }
219
- // If there are no blocks, we have to parse the content string.
220
- // Best double-check it's a string otherwise the parse function gets unhappy.
221
- const parseableContent =
222
- typeof editedPostTemplate?.content === 'string'
223
- ? editedPostTemplate?.content
224
- : '';
225
-
226
- return getPostContentAttributes( parse( parseableContent ) ) || {};
227
- }, [
228
- editedPostTemplate?.content,
229
- editedPostTemplate?.blocks,
230
- postContentAttributes,
231
- ] );
232
-
233
- const hasPostContentAtRootLevel = useMemo( () => {
234
- if ( ! editedPostTemplate?.content && ! editedPostTemplate?.blocks ) {
235
- return false;
236
- }
237
- // When in template editing mode, we can access the blocks directly.
238
- if ( editedPostTemplate?.blocks ) {
239
- return checkForPostContentAtRootLevel( editedPostTemplate?.blocks );
240
- }
241
- // If there are no blocks, we have to parse the content string.
242
- // Best double-check it's a string otherwise the parse function gets unhappy.
243
- const parseableContent =
244
- typeof editedPostTemplate?.content === 'string'
245
- ? editedPostTemplate?.content
246
- : '';
247
-
248
- return (
249
- checkForPostContentAtRootLevel( parse( parseableContent ) ) || false
250
- );
251
- }, [ editedPostTemplate?.content, editedPostTemplate?.blocks ] );
252
-
253
- const { layout = {}, align = '' } = newestPostContentAttributes || {};
254
-
255
- const postContentLayoutClasses = useLayoutClasses(
256
- newestPostContentAttributes,
257
- 'core/post-content'
258
- );
259
-
260
- const blockListLayoutClass = classnames(
261
- {
262
- 'is-layout-flow': ! themeSupportsLayout,
263
- },
264
- themeSupportsLayout && postContentLayoutClasses,
265
- align && `align${ align }`
266
- );
267
-
268
- const postContentLayoutStyles = useLayoutStyles(
269
- newestPostContentAttributes,
270
- 'core/post-content',
271
- '.block-editor-block-list__layout.is-root-container'
272
- );
273
-
274
- // Update type for blocks using legacy layouts.
275
- const postContentLayout = useMemo( () => {
276
- return layout &&
277
- ( layout?.type === 'constrained' ||
278
- layout?.inherit ||
279
- layout?.contentSize ||
280
- layout?.wideSize )
281
- ? { ...globalLayoutSettings, ...layout, type: 'constrained' }
282
- : { ...globalLayoutSettings, ...layout, type: 'default' };
283
- }, [
284
- layout?.type,
285
- layout?.inherit,
286
- layout?.contentSize,
287
- layout?.wideSize,
288
- globalLayoutSettings,
289
- ] );
290
-
291
- // If there is a Post Content block we use its layout for the block list;
292
- // if not, this must be a classic theme, in which case we use the fallback layout.
293
- const blockListLayout = postContentAttributes
294
- ? postContentLayout
295
- : fallbackLayout;
296
-
297
- const postEditorLayout =
298
- blockListLayout?.type === 'default' && ! hasPostContentAtRootLevel
299
- ? fallbackLayout
300
- : blockListLayout;
301
-
302
- const observeTypingRef = useTypingObserver();
303
- const titleRef = useRef();
304
- useEffect( () => {
305
- if ( isWelcomeGuideVisible || ! isCleanNewPost() ) {
306
- return;
307
- }
308
- titleRef?.current?.focus();
309
- }, [ isWelcomeGuideVisible, isCleanNewPost ] );
310
-
311
61
  styles = useMemo(
312
62
  () => [
313
63
  ...styles,
314
64
  {
315
65
  // We should move this in to future to the body.
316
- css:
317
- `.edit-post-visual-editor__post-title-wrapper{margin-top:4rem}` +
318
- ( paddingBottom
319
- ? `body{padding-bottom:${ paddingBottom }}`
320
- : '' ),
66
+ css: paddingBottom
67
+ ? `body{padding-bottom:${ paddingBottom }}`
68
+ : '',
321
69
  },
322
70
  ],
323
- [ styles ]
71
+ [ styles, paddingBottom ]
324
72
  );
325
73
 
326
- // Add some styles for alignwide/alignfull Post Content and its children.
327
- const alignCSS = `.is-root-container.alignwide { max-width: var(--wp--style--global--wide-size); margin-left: auto; margin-right: auto;}
328
- .is-root-container.alignwide:where(.is-layout-flow) > :not(.alignleft):not(.alignright) { max-width: var(--wp--style--global--wide-size);}
329
- .is-root-container.alignfull { max-width: none; margin-left: auto; margin-right: auto;}
330
- .is-root-container.alignfull:where(.is-layout-flow) > :not(.alignleft):not(.alignright) { max-width: none;}`;
331
-
332
74
  const isToBeIframed =
333
75
  ( ( hasV3BlocksOnly || ( isGutenbergPlugin && isBlockBasedTheme ) ) &&
334
76
  ! hasMetaBoxes ) ||
335
- isTemplateMode ||
336
- deviceType === 'Tablet' ||
337
- deviceType === 'Mobile';
77
+ renderingMode === 'template-only';
338
78
 
339
79
  return (
340
- <BlockTools
341
- __unstableContentRef={ ref }
80
+ <div
342
81
  className={ classnames( 'edit-post-visual-editor', {
343
- 'is-template-mode': isTemplateMode,
82
+ 'is-template-mode': renderingMode === 'template-only',
344
83
  'has-inline-canvas': ! isToBeIframed,
345
84
  } ) }
346
85
  >
347
- <motion.div
348
- className="edit-post-visual-editor__content-area"
349
- animate={ {
350
- padding: isTemplateMode ? '48px 48px 0' : 0,
351
- } }
352
- >
353
- <motion.div
354
- animate={ animatedStyles }
355
- initial={ desktopCanvasStyles }
356
- className={ previewMode }
357
- >
358
- <BlockCanvas
359
- shouldIframe={ isToBeIframed }
360
- contentRef={ contentRef }
361
- styles={ styles }
362
- height="100%"
363
- >
364
- { themeSupportsLayout &&
365
- ! themeHasDisabledLayoutStyles &&
366
- ! isTemplateMode && (
367
- <>
368
- <LayoutStyle
369
- selector=".edit-post-visual-editor__post-title-wrapper"
370
- layout={ fallbackLayout }
371
- />
372
- <LayoutStyle
373
- selector=".block-editor-block-list__layout.is-root-container"
374
- layout={ postEditorLayout }
375
- />
376
- { align && (
377
- <LayoutStyle css={ alignCSS } />
378
- ) }
379
- { postContentLayoutStyles && (
380
- <LayoutStyle
381
- layout={ postContentLayout }
382
- css={ postContentLayoutStyles }
383
- />
384
- ) }
385
- </>
386
- ) }
387
- { ! isTemplateMode && (
388
- <div
389
- className={ classnames(
390
- 'edit-post-visual-editor__post-title-wrapper',
391
- {
392
- 'is-focus-mode': isFocusMode,
393
- 'has-global-padding':
394
- hasRootPaddingAwareAlignments,
395
- }
396
- ) }
397
- contentEditable={ false }
398
- ref={ observeTypingRef }
399
- >
400
- <PostTitle ref={ titleRef } />
401
- </div>
402
- ) }
403
- <RecursionProvider
404
- blockName={ wrapperBlockName }
405
- uniqueId={ wrapperUniqueId }
406
- >
407
- <BlockList
408
- className={
409
- isTemplateMode
410
- ? 'wp-site-blocks'
411
- : `${ blockListLayoutClass } wp-block-post-content` // Ensure root level blocks receive default/flow blockGap styling rules.
412
- }
413
- layout={ blockListLayout }
414
- dropZoneElement={
415
- // When iframed, pass in the html element of the iframe to
416
- // ensure the drop zone extends to the edges of the iframe.
417
- isToBeIframed
418
- ? ref.current?.parentNode
419
- : ref.current
420
- }
421
- />
422
- </RecursionProvider>
423
- </BlockCanvas>
424
- </motion.div>
425
- </motion.div>
426
- </BlockTools>
86
+ <EditorCanvas
87
+ disableIframe={ ! isToBeIframed }
88
+ styles={ styles }
89
+ // We should auto-focus the canvas (title) on load.
90
+ // eslint-disable-next-line jsx-a11y/no-autofocus
91
+ autoFocus={ ! isWelcomeGuideVisible }
92
+ />
93
+ </div>
427
94
  );
428
95
  }
@@ -38,21 +38,6 @@
38
38
  // See also https://www.w3.org/TR/CSS22/visudet.html#the-height-property.
39
39
  }
40
40
 
41
- // Ideally this wrapper div is not needed but if we want to match the positioning of blocks
42
- // .block-editor-block-list__layout and block-editor-block-list__block
43
- // We need to have two DOM elements.
44
- .edit-post-visual-editor__post-title-wrapper {
45
- .editor-post-title {
46
- // Center.
47
- margin-left: auto;
48
- margin-right: auto;
49
- }
50
-
51
- // Add extra margin at the top, to push down the Title area in the post editor.
52
- margin-top: 4rem;
53
- margin-bottom: var(--wp--style--block-gap);
54
- }
55
-
56
41
  .edit-post-visual-editor__content-area {
57
42
  width: 100%;
58
43
  height: 100%;
@@ -2,6 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useSelect } from '@wordpress/data';
5
+ import { store as editorStore } from '@wordpress/editor';
5
6
 
6
7
  /**
7
8
  * Internal dependencies
@@ -12,8 +13,9 @@ import { store as editPostStore } from '../../store';
12
13
 
13
14
  export default function WelcomeGuide() {
14
15
  const { isActive, isTemplateMode } = useSelect( ( select ) => {
15
- const { isFeatureActive, isEditingTemplate } = select( editPostStore );
16
- const _isTemplateMode = isEditingTemplate();
16
+ const { isFeatureActive } = select( editPostStore );
17
+ const { getRenderingMode } = select( editorStore );
18
+ const _isTemplateMode = getRenderingMode() === 'template-only';
17
19
  const feature = _isTemplateMode
18
20
  ? 'welcomeGuideTemplate'
19
21
  : 'welcomeGuide';
package/src/editor.js CHANGED
@@ -22,27 +22,33 @@ import Layout from './components/layout';
22
22
  import EditorInitialization from './components/editor-initialization';
23
23
  import { store as editPostStore } from './store';
24
24
  import { unlock } from './lock-unlock';
25
+ import usePostHistory from './hooks/use-post-history';
25
26
 
26
27
  const { ExperimentalEditorProvider } = unlock( editorPrivateApis );
27
28
 
28
- function Editor( { postId, postType, settings, initialEdits, ...props } ) {
29
+ function Editor( {
30
+ postId: initialPostId,
31
+ postType: initialPostType,
32
+ settings,
33
+ initialEdits,
34
+ ...props
35
+ } ) {
36
+ const { currentPost, getPostLinkProps, goBack } = usePostHistory(
37
+ initialPostId,
38
+ initialPostType
39
+ );
40
+
29
41
  const {
30
- hasFixedToolbar,
31
- focusMode,
32
- isDistractionFree,
33
42
  hasInlineToolbar,
34
43
  post,
35
44
  preferredStyleVariations,
36
45
  hiddenBlockTypes,
37
46
  blockTypes,
38
- keepCaretInsideBlock,
39
- isTemplateMode,
40
47
  template,
41
48
  } = useSelect(
42
49
  ( select ) => {
43
50
  const {
44
51
  isFeatureActive,
45
- isEditingTemplate,
46
52
  getEditedPostTemplate,
47
53
  getHiddenBlockTypes,
48
54
  } = select( editPostStore );
@@ -51,28 +57,33 @@ function Editor( { postId, postType, settings, initialEdits, ...props } ) {
51
57
  const { getEditorSettings } = select( editorStore );
52
58
  const { getBlockTypes } = select( blocksStore );
53
59
  const isTemplate = [ 'wp_template', 'wp_template_part' ].includes(
54
- postType
60
+ currentPost.postType
55
61
  );
56
62
  // Ideally the initializeEditor function should be called using the ID of the REST endpoint.
57
63
  // to avoid the special case.
58
64
  let postObject;
59
65
  if ( isTemplate ) {
60
- const posts = getEntityRecords( 'postType', postType, {
61
- wp_id: postId,
62
- } );
66
+ const posts = getEntityRecords(
67
+ 'postType',
68
+ currentPost.postType,
69
+ {
70
+ wp_id: currentPost.postId,
71
+ }
72
+ );
63
73
  postObject = posts?.[ 0 ];
64
74
  } else {
65
- postObject = getEntityRecord( 'postType', postType, postId );
75
+ postObject = getEntityRecord(
76
+ 'postType',
77
+ currentPost.postType,
78
+ currentPost.postId
79
+ );
66
80
  }
67
81
  const supportsTemplateMode =
68
82
  getEditorSettings().supportsTemplateMode;
69
- const isViewable = getPostType( postType )?.viewable ?? false;
83
+ const isViewable =
84
+ getPostType( currentPost.postType )?.viewable ?? false;
70
85
  const canEditTemplate = canUser( 'create', 'templates' );
71
-
72
86
  return {
73
- hasFixedToolbar: isFeatureActive( 'fixedToolbar' ),
74
- focusMode: isFeatureActive( 'focusMode' ),
75
- isDistractionFree: isFeatureActive( 'distractionFree' ),
76
87
  hasInlineToolbar: isFeatureActive( 'inlineToolbar' ),
77
88
  preferredStyleVariations: select( preferencesStore ).get(
78
89
  'core/edit-post',
@@ -80,8 +91,6 @@ function Editor( { postId, postType, settings, initialEdits, ...props } ) {
80
91
  ),
81
92
  hiddenBlockTypes: getHiddenBlockTypes(),
82
93
  blockTypes: getBlockTypes(),
83
- keepCaretInsideBlock: isFeatureActive( 'keepCaretInsideBlock' ),
84
- isTemplateMode: isEditingTemplate(),
85
94
  template:
86
95
  supportsTemplateMode && isViewable && canEditTemplate
87
96
  ? getEditedPostTemplate()
@@ -89,27 +98,22 @@ function Editor( { postId, postType, settings, initialEdits, ...props } ) {
89
98
  post: postObject,
90
99
  };
91
100
  },
92
- [ postType, postId ]
101
+ [ currentPost.postType, currentPost.postId ]
93
102
  );
94
103
 
95
- const { updatePreferredStyleVariations, setIsInserterOpened } =
96
- useDispatch( editPostStore );
104
+ const { updatePreferredStyleVariations } = useDispatch( editPostStore );
97
105
 
98
106
  const editorSettings = useMemo( () => {
99
107
  const result = {
100
108
  ...settings,
109
+ getPostLinkProps,
110
+ goBack,
101
111
  __experimentalPreferredStyleVariations: {
102
112
  value: preferredStyleVariations,
103
113
  onChange: updatePreferredStyleVariations,
104
114
  },
105
- hasFixedToolbar,
106
- focusMode,
107
- isDistractionFree,
108
115
  hasInlineToolbar,
109
116
 
110
- // This is marked as experimental to give time for the quick inserter to mature.
111
- __experimentalSetIsInserterOpened: setIsInserterOpened,
112
- keepCaretInsideBlock,
113
117
  // Keep a reference of the `allowedBlockTypes` from the server to handle use cases
114
118
  // where we need to differentiate if a block is disabled by the user or some plugin.
115
119
  defaultAllowedBlockTypes: settings.allowedBlockTypes,
@@ -133,16 +137,13 @@ function Editor( { postId, postType, settings, initialEdits, ...props } ) {
133
137
  return result;
134
138
  }, [
135
139
  settings,
136
- hasFixedToolbar,
137
140
  hasInlineToolbar,
138
- focusMode,
139
- isDistractionFree,
140
141
  hiddenBlockTypes,
141
142
  blockTypes,
142
143
  preferredStyleVariations,
143
- setIsInserterOpened,
144
144
  updatePreferredStyleVariations,
145
- keepCaretInsideBlock,
145
+ getPostLinkProps,
146
+ goBack,
146
147
  ] );
147
148
 
148
149
  if ( ! post ) {
@@ -156,12 +157,12 @@ function Editor( { postId, postType, settings, initialEdits, ...props } ) {
156
157
  post={ post }
157
158
  initialEdits={ initialEdits }
158
159
  useSubRegistry={ false }
159
- __unstableTemplate={ isTemplateMode ? template : undefined }
160
+ __unstableTemplate={ template }
160
161
  { ...props }
161
162
  >
162
163
  <ErrorBoundary>
163
164
  <CommandMenu />
164
- <EditorInitialization postId={ postId } />
165
+ <EditorInitialization postId={ currentPost.postId } />
165
166
  <Layout />
166
167
  </ErrorBoundary>
167
168
  <PostLockedModal />