@wordpress/edit-post 7.34.0 → 8.0.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 (252) hide show
  1. package/CHANGELOG.md +15 -2
  2. package/build/commands/use-commands.js +56 -0
  3. package/build/commands/use-commands.js.map +1 -0
  4. package/build/components/{header/fullscreen-mode-close/index.js → back-button/fullscreen-mode-close.js} +18 -16
  5. package/build/components/back-button/fullscreen-mode-close.js.map +1 -0
  6. package/build/components/back-button/index.js +57 -0
  7. package/build/components/back-button/index.js.map +1 -0
  8. package/build/components/header/header-toolbar/index.native.js +63 -62
  9. package/build/components/header/header-toolbar/index.native.js.map +1 -1
  10. package/build/components/header/index.native.js +2 -2
  11. package/build/components/header/index.native.js.map +1 -1
  12. package/build/components/init-pattern-modal/index.js +50 -43
  13. package/build/components/init-pattern-modal/index.js.map +1 -1
  14. package/build/components/layout/index.js +134 -156
  15. package/build/components/layout/index.js.map +1 -1
  16. package/build/components/layout/index.native.js +28 -21
  17. package/build/components/layout/index.native.js.map +1 -1
  18. package/build/components/{visual-editor → layout}/use-padding-appender.js +6 -1
  19. package/build/components/layout/use-padding-appender.js.map +1 -0
  20. package/build/components/layout/use-should-iframe.js +46 -0
  21. package/build/components/layout/use-should-iframe.js.map +1 -0
  22. package/build/components/meta-boxes/index.js +10 -9
  23. package/build/components/meta-boxes/index.js.map +1 -1
  24. package/build/components/meta-boxes/meta-boxes-area/index.js +13 -13
  25. package/build/components/meta-boxes/meta-boxes-area/index.js.map +1 -1
  26. package/build/components/more-menu/index.js +49 -0
  27. package/build/components/more-menu/index.js.map +1 -0
  28. package/build/components/{header/more-menu → more-menu}/manage-patterns-menu-item.js +6 -5
  29. package/build/components/more-menu/manage-patterns-menu-item.js.map +1 -0
  30. package/build/components/{header/more-menu → more-menu}/welcome-guide-menu-item.js +2 -2
  31. package/build/components/more-menu/welcome-guide-menu-item.js.map +1 -0
  32. package/build/components/preferences-modal/enable-custom-fields.js +23 -18
  33. package/build/components/preferences-modal/enable-custom-fields.js.map +1 -1
  34. package/build/components/preferences-modal/index.js +4 -4
  35. package/build/components/preferences-modal/index.js.map +1 -1
  36. package/build/components/preferences-modal/meta-boxes-section.js +13 -13
  37. package/build/components/preferences-modal/meta-boxes-section.js.map +1 -1
  38. package/build/components/visual-editor/header.native.js +11 -10
  39. package/build/components/visual-editor/header.native.js.map +1 -1
  40. package/build/components/visual-editor/index.native.js +3 -3
  41. package/build/components/visual-editor/index.native.js.map +1 -1
  42. package/build/components/welcome-guide/default.js +50 -33
  43. package/build/components/welcome-guide/default.js.map +1 -1
  44. package/build/components/welcome-guide/image.js +13 -12
  45. package/build/components/welcome-guide/image.js.map +1 -1
  46. package/build/components/welcome-guide/index.js +2 -2
  47. package/build/components/welcome-guide/index.js.map +1 -1
  48. package/build/components/welcome-guide/template.js +12 -8
  49. package/build/components/welcome-guide/template.js.map +1 -1
  50. package/build/deprecated.js +9 -9
  51. package/build/deprecated.js.map +1 -1
  52. package/build/editor.js +16 -11
  53. package/build/editor.js.map +1 -1
  54. package/build/editor.native.js +18 -12
  55. package/build/editor.native.js.map +1 -1
  56. package/build/index.js +12 -13
  57. package/build/index.js.map +1 -1
  58. package/build/index.native.js +2 -2
  59. package/build/index.native.js.map +1 -1
  60. package/build/store/selectors.js +1 -1
  61. package/build/store/selectors.js.map +1 -1
  62. package/build-module/commands/use-commands.js +49 -0
  63. package/build-module/commands/use-commands.js.map +1 -0
  64. package/build-module/components/{header/fullscreen-mode-close/index.js → back-button/fullscreen-mode-close.js} +18 -16
  65. package/build-module/components/back-button/fullscreen-mode-close.js.map +1 -0
  66. package/build-module/components/back-button/index.js +49 -0
  67. package/build-module/components/back-button/index.js.map +1 -0
  68. package/build-module/components/header/header-toolbar/index.native.js +64 -62
  69. package/build-module/components/header/header-toolbar/index.native.js.map +1 -1
  70. package/build-module/components/header/index.native.js +2 -2
  71. package/build-module/components/header/index.native.js.map +1 -1
  72. package/build-module/components/init-pattern-modal/index.js +52 -43
  73. package/build-module/components/init-pattern-modal/index.js.map +1 -1
  74. package/build-module/components/layout/index.js +139 -159
  75. package/build-module/components/layout/index.js.map +1 -1
  76. package/build-module/components/layout/index.native.js +30 -21
  77. package/build-module/components/layout/index.native.js.map +1 -1
  78. package/build-module/components/{visual-editor → layout}/use-padding-appender.js +6 -1
  79. package/build-module/components/layout/use-padding-appender.js.map +1 -0
  80. package/build-module/components/layout/use-should-iframe.js +39 -0
  81. package/build-module/components/layout/use-should-iframe.js.map +1 -0
  82. package/build-module/components/meta-boxes/index.js +12 -9
  83. package/build-module/components/meta-boxes/index.js.map +1 -1
  84. package/build-module/components/meta-boxes/meta-boxes-area/index.js +13 -11
  85. package/build-module/components/meta-boxes/meta-boxes-area/index.js.map +1 -1
  86. package/build-module/components/more-menu/index.js +43 -0
  87. package/build-module/components/more-menu/index.js.map +1 -0
  88. package/build-module/components/{header/more-menu → more-menu}/manage-patterns-menu-item.js +6 -5
  89. package/build-module/components/more-menu/manage-patterns-menu-item.js.map +1 -0
  90. package/build-module/components/{header/more-menu → more-menu}/welcome-guide-menu-item.js +2 -2
  91. package/build-module/components/more-menu/welcome-guide-menu-item.js.map +1 -0
  92. package/build-module/components/preferences-modal/enable-custom-fields.js +25 -18
  93. package/build-module/components/preferences-modal/enable-custom-fields.js.map +1 -1
  94. package/build-module/components/preferences-modal/index.js +4 -4
  95. package/build-module/components/preferences-modal/index.js.map +1 -1
  96. package/build-module/components/preferences-modal/meta-boxes-section.js +14 -13
  97. package/build-module/components/preferences-modal/meta-boxes-section.js.map +1 -1
  98. package/build-module/components/visual-editor/header.native.js +11 -10
  99. package/build-module/components/visual-editor/header.native.js.map +1 -1
  100. package/build-module/components/visual-editor/index.native.js +3 -3
  101. package/build-module/components/visual-editor/index.native.js.map +1 -1
  102. package/build-module/components/welcome-guide/default.js +52 -33
  103. package/build-module/components/welcome-guide/default.js.map +1 -1
  104. package/build-module/components/welcome-guide/image.js +14 -12
  105. package/build-module/components/welcome-guide/image.js.map +1 -1
  106. package/build-module/components/welcome-guide/index.js +2 -2
  107. package/build-module/components/welcome-guide/index.js.map +1 -1
  108. package/build-module/components/welcome-guide/template.js +14 -8
  109. package/build-module/components/welcome-guide/template.js.map +1 -1
  110. package/build-module/deprecated.js +9 -9
  111. package/build-module/deprecated.js.map +1 -1
  112. package/build-module/editor.js +17 -11
  113. package/build-module/editor.js.map +1 -1
  114. package/build-module/editor.native.js +18 -12
  115. package/build-module/editor.native.js.map +1 -1
  116. package/build-module/index.js +10 -7
  117. package/build-module/index.js.map +1 -1
  118. package/build-module/index.native.js +2 -2
  119. package/build-module/index.native.js.map +1 -1
  120. package/build-module/store/selectors.js +1 -1
  121. package/build-module/store/selectors.js.map +1 -1
  122. package/build-style/style-rtl.css +31 -392
  123. package/build-style/style.css +31 -392
  124. package/package.json +33 -33
  125. package/src/commands/use-commands.js +48 -0
  126. package/src/components/{header/fullscreen-mode-close/index.js → back-button/fullscreen-mode-close.js} +3 -3
  127. package/src/components/back-button/index.js +34 -0
  128. package/src/components/{header/fullscreen-mode-close → back-button}/style.scss +16 -2
  129. package/src/components/{header/fullscreen-mode-close/test/index.js → back-button/test/fullscreen-mode-close.js} +1 -1
  130. package/src/components/layout/index.js +151 -207
  131. package/src/components/layout/style.scss +9 -17
  132. package/src/components/{visual-editor → layout}/use-padding-appender.js +7 -1
  133. package/src/components/layout/use-should-iframe.js +40 -0
  134. package/src/components/meta-boxes/meta-boxes-area/index.js +4 -8
  135. package/src/components/{header/more-menu → more-menu}/index.js +2 -2
  136. package/src/components/{header/more-menu → more-menu}/manage-patterns-menu-item.js +1 -1
  137. package/src/index.js +11 -6
  138. package/src/store/selectors.js +8 -5
  139. package/src/style.scss +3 -10
  140. package/src/test/__snapshots__/editor.native.js.snap +72 -0
  141. package/src/test/editor.native.js +77 -0
  142. package/build/components/header/fullscreen-mode-close/index.js.map +0 -1
  143. package/build/components/header/index.js +0 -158
  144. package/build/components/header/index.js.map +0 -1
  145. package/build/components/header/main-dashboard-button/index.js +0 -33
  146. package/build/components/header/main-dashboard-button/index.js.map +0 -1
  147. package/build/components/header/more-menu/index.js +0 -43
  148. package/build/components/header/more-menu/index.js.map +0 -1
  149. package/build/components/header/more-menu/manage-patterns-menu-item.js.map +0 -1
  150. package/build/components/header/more-menu/welcome-guide-menu-item.js.map +0 -1
  151. package/build/components/sidebar/post-format/index.js +0 -21
  152. package/build/components/sidebar/post-format/index.js.map +0 -1
  153. package/build/components/sidebar/post-pending-status/index.js +0 -26
  154. package/build/components/sidebar/post-pending-status/index.js.map +0 -1
  155. package/build/components/sidebar/post-slug/index.js +0 -21
  156. package/build/components/sidebar/post-slug/index.js.map +0 -1
  157. package/build/components/sidebar/post-status/index.js +0 -92
  158. package/build/components/sidebar/post-status/index.js.map +0 -1
  159. package/build/components/sidebar/post-sticky/index.js +0 -26
  160. package/build/components/sidebar/post-sticky/index.js.map +0 -1
  161. package/build/components/sidebar/post-trash/index.js +0 -16
  162. package/build/components/sidebar/post-trash/index.js.map +0 -1
  163. package/build/components/sidebar/post-visibility/index.js +0 -78
  164. package/build/components/sidebar/post-visibility/index.js.map +0 -1
  165. package/build/components/sidebar/settings-header/index.js +0 -53
  166. package/build/components/sidebar/settings-header/index.js.map +0 -1
  167. package/build/components/sidebar/settings-sidebar/index.js +0 -193
  168. package/build/components/sidebar/settings-sidebar/index.js.map +0 -1
  169. package/build/components/text-editor/index.js +0 -61
  170. package/build/components/text-editor/index.js.map +0 -1
  171. package/build/components/visual-editor/block-inspector-button.js +0 -55
  172. package/build/components/visual-editor/block-inspector-button.js.map +0 -1
  173. package/build/components/visual-editor/index.js +0 -92
  174. package/build/components/visual-editor/index.js.map +0 -1
  175. package/build/components/visual-editor/use-padding-appender.js.map +0 -1
  176. package/build/hooks/commands/use-common-commands.js +0 -119
  177. package/build/hooks/commands/use-common-commands.js.map +0 -1
  178. package/build/hooks/components/index.js +0 -11
  179. package/build/hooks/components/index.js.map +0 -1
  180. package/build/hooks/index.js +0 -5
  181. package/build/hooks/index.js.map +0 -1
  182. package/build/hooks/validate-multiple-use/index.js +0 -134
  183. package/build/hooks/validate-multiple-use/index.js.map +0 -1
  184. package/build-module/components/header/fullscreen-mode-close/index.js.map +0 -1
  185. package/build-module/components/header/index.js +0 -150
  186. package/build-module/components/header/index.js.map +0 -1
  187. package/build-module/components/header/main-dashboard-button/index.js +0 -26
  188. package/build-module/components/header/main-dashboard-button/index.js.map +0 -1
  189. package/build-module/components/header/more-menu/index.js +0 -35
  190. package/build-module/components/header/more-menu/index.js.map +0 -1
  191. package/build-module/components/header/more-menu/manage-patterns-menu-item.js.map +0 -1
  192. package/build-module/components/header/more-menu/welcome-guide-menu-item.js.map +0 -1
  193. package/build-module/components/sidebar/post-format/index.js +0 -13
  194. package/build-module/components/sidebar/post-format/index.js.map +0 -1
  195. package/build-module/components/sidebar/post-pending-status/index.js +0 -18
  196. package/build-module/components/sidebar/post-pending-status/index.js.map +0 -1
  197. package/build-module/components/sidebar/post-slug/index.js +0 -13
  198. package/build-module/components/sidebar/post-slug/index.js.map +0 -1
  199. package/build-module/components/sidebar/post-status/index.js +0 -84
  200. package/build-module/components/sidebar/post-status/index.js.map +0 -1
  201. package/build-module/components/sidebar/post-sticky/index.js +0 -18
  202. package/build-module/components/sidebar/post-sticky/index.js.map +0 -1
  203. package/build-module/components/sidebar/post-trash/index.js +0 -9
  204. package/build-module/components/sidebar/post-trash/index.js.map +0 -1
  205. package/build-module/components/sidebar/post-visibility/index.js +0 -70
  206. package/build-module/components/sidebar/post-visibility/index.js.map +0 -1
  207. package/build-module/components/sidebar/settings-header/index.js +0 -46
  208. package/build-module/components/sidebar/settings-header/index.js.map +0 -1
  209. package/build-module/components/sidebar/settings-sidebar/index.js +0 -185
  210. package/build-module/components/sidebar/settings-sidebar/index.js.map +0 -1
  211. package/build-module/components/text-editor/index.js +0 -54
  212. package/build-module/components/text-editor/index.js.map +0 -1
  213. package/build-module/components/visual-editor/block-inspector-button.js +0 -47
  214. package/build-module/components/visual-editor/block-inspector-button.js.map +0 -1
  215. package/build-module/components/visual-editor/index.js +0 -84
  216. package/build-module/components/visual-editor/index.js.map +0 -1
  217. package/build-module/components/visual-editor/use-padding-appender.js.map +0 -1
  218. package/build-module/hooks/commands/use-common-commands.js +0 -112
  219. package/build-module/hooks/commands/use-common-commands.js.map +0 -1
  220. package/build-module/hooks/components/index.js +0 -8
  221. package/build-module/hooks/components/index.js.map +0 -1
  222. package/build-module/hooks/index.js +0 -6
  223. package/build-module/hooks/index.js.map +0 -1
  224. package/build-module/hooks/validate-multiple-use/index.js +0 -132
  225. package/build-module/hooks/validate-multiple-use/index.js.map +0 -1
  226. package/src/components/header/index.js +0 -156
  227. package/src/components/header/main-dashboard-button/index.js +0 -28
  228. package/src/components/header/style.scss +0 -251
  229. package/src/components/sidebar/post-format/index.js +0 -20
  230. package/src/components/sidebar/post-format/style.scss +0 -5
  231. package/src/components/sidebar/post-pending-status/index.js +0 -27
  232. package/src/components/sidebar/post-slug/index.js +0 -17
  233. package/src/components/sidebar/post-slug/style.scss +0 -5
  234. package/src/components/sidebar/post-status/index.js +0 -128
  235. package/src/components/sidebar/post-sticky/index.js +0 -27
  236. package/src/components/sidebar/post-trash/index.js +0 -12
  237. package/src/components/sidebar/post-visibility/index.js +0 -88
  238. package/src/components/sidebar/post-visibility/style.scss +0 -5
  239. package/src/components/sidebar/settings-header/index.js +0 -49
  240. package/src/components/sidebar/settings-sidebar/index.js +0 -247
  241. package/src/components/sidebar/style.scss +0 -18
  242. package/src/components/text-editor/index.js +0 -63
  243. package/src/components/text-editor/style.scss +0 -71
  244. package/src/components/visual-editor/block-inspector-button.js +0 -59
  245. package/src/components/visual-editor/index.js +0 -101
  246. package/src/components/visual-editor/style.scss +0 -53
  247. package/src/hooks/commands/use-common-commands.js +0 -126
  248. package/src/hooks/components/index.js +0 -13
  249. package/src/hooks/index.js +0 -5
  250. package/src/hooks/validate-multiple-use/index.js +0 -163
  251. /package/src/components/{header/fullscreen-mode-close/test/__snapshots__/index.js.snap → back-button/test/__snapshots__/fullscreen-mode-close.js.snap} +0 -0
  252. /package/src/components/{header/more-menu → more-menu}/welcome-guide-menu-item.js +0 -0
@@ -11,7 +11,7 @@ import { useSelect } from '@wordpress/data';
11
11
  /**
12
12
  * Internal dependencies
13
13
  */
14
- import FullscreenModeClose from '../';
14
+ import FullscreenModeClose from '../fullscreen-mode-close';
15
15
 
16
16
  jest.mock( '@wordpress/data/src/components/use-select', () => {
17
17
  // This allows us to tweak the returned value on each test.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import classnames from 'classnames';
4
+ import clsx from 'clsx';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -10,84 +10,78 @@ import {
10
10
  AutosaveMonitor,
11
11
  LocalAutosaveMonitor,
12
12
  UnsavedChangesWarning,
13
- EditorNotices,
14
13
  EditorKeyboardShortcutsRegister,
15
- EditorKeyboardShortcuts,
16
14
  EditorSnackbars,
17
15
  store as editorStore,
18
16
  privateApis as editorPrivateApis,
19
17
  } from '@wordpress/editor';
20
18
  import { useSelect, useDispatch } from '@wordpress/data';
21
19
  import {
22
- BlockBreadcrumb,
23
- BlockToolbar,
24
20
  privateApis as blockEditorPrivateApis,
25
21
  store as blockEditorStore,
26
22
  } from '@wordpress/block-editor';
27
- import { ScrollLock } from '@wordpress/components';
28
23
  import { useViewportMatch } from '@wordpress/compose';
29
24
  import { PluginArea } from '@wordpress/plugins';
30
- import { __, _x, sprintf } from '@wordpress/i18n';
31
- import { useState, useEffect, useCallback, useMemo } from '@wordpress/element';
32
- import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';
25
+ import { __, sprintf } from '@wordpress/i18n';
26
+ import { useCallback, useMemo } from '@wordpress/element';
33
27
  import { store as noticesStore } from '@wordpress/notices';
34
28
  import { store as preferencesStore } from '@wordpress/preferences';
35
29
  import { privateApis as commandsPrivateApis } from '@wordpress/commands';
36
30
  import { privateApis as coreCommandsPrivateApis } from '@wordpress/core-commands';
37
31
  import { privateApis as blockLibraryPrivateApis } from '@wordpress/block-library';
32
+ import { addQueryArgs } from '@wordpress/url';
38
33
 
39
34
  /**
40
35
  * Internal dependencies
41
36
  */
42
- import TextEditor from '../text-editor';
43
- import VisualEditor from '../visual-editor';
37
+ import BackButton from '../back-button';
44
38
  import EditPostKeyboardShortcuts from '../keyboard-shortcuts';
45
39
  import InitPatternModal from '../init-pattern-modal';
46
40
  import BrowserURL from '../browser-url';
47
- import Header from '../header';
48
- import SettingsSidebar from '../sidebar/settings-sidebar';
49
41
  import MetaBoxes from '../meta-boxes';
42
+ import PostEditorMoreMenu from '../more-menu';
50
43
  import WelcomeGuide from '../welcome-guide';
51
44
  import { store as editPostStore } from '../../store';
52
45
  import { unlock } from '../../lock-unlock';
53
- import useCommonCommands from '../../hooks/commands/use-common-commands';
46
+ import useEditPostCommands from '../../commands/use-commands';
47
+ import { usePaddingAppender } from './use-padding-appender';
48
+ import { useShouldIframe } from './use-should-iframe';
54
49
 
55
50
  const { getLayoutStyles } = unlock( blockEditorPrivateApis );
56
51
  const { useCommands } = unlock( coreCommandsPrivateApis );
57
52
  const { useCommandContext } = unlock( commandsPrivateApis );
58
- const {
59
- InserterSidebar,
60
- ListViewSidebar,
61
- ComplementaryArea,
62
- FullscreenMode,
63
- SavePublishPanels,
64
- InterfaceSkeleton,
65
- interfaceStore,
66
- } = unlock( editorPrivateApis );
53
+ const { EditorInterface, FullscreenMode, Sidebar } =
54
+ unlock( editorPrivateApis );
67
55
  const { BlockKeyboardShortcuts } = unlock( blockLibraryPrivateApis );
68
-
69
- const interfaceLabels = {
70
- /* translators: accessibility text for the editor top bar landmark region. */
71
- header: __( 'Editor top bar' ),
72
- /* translators: accessibility text for the editor content landmark region. */
73
- body: __( 'Editor content' ),
74
- /* translators: accessibility text for the editor settings landmark region. */
75
- sidebar: __( 'Editor settings' ),
76
- /* translators: accessibility text for the editor publish landmark region. */
77
- actions: __( 'Editor publish' ),
78
- /* translators: accessibility text for the editor footer landmark region. */
79
- footer: __( 'Editor footer' ),
80
- };
56
+ const DESIGN_POST_TYPES = [
57
+ 'wp_template',
58
+ 'wp_template_part',
59
+ 'wp_block',
60
+ 'wp_navigation',
61
+ ];
81
62
 
82
63
  function useEditorStyles() {
83
- const { hasThemeStyleSupport, editorSettings } = useSelect(
84
- ( select ) => ( {
64
+ const {
65
+ hasThemeStyleSupport,
66
+ editorSettings,
67
+ isZoomedOutView,
68
+ hasMetaBoxes,
69
+ renderingMode,
70
+ postType,
71
+ } = useSelect( ( select ) => {
72
+ const { __unstableGetEditorMode } = select( blockEditorStore );
73
+ const { getCurrentPostType, getRenderingMode } = select( editorStore );
74
+ const _postType = getCurrentPostType();
75
+ return {
85
76
  hasThemeStyleSupport:
86
77
  select( editPostStore ).isFeatureActive( 'themeStyles' ),
87
78
  editorSettings: select( editorStore ).getEditorSettings(),
88
- } ),
89
- []
90
- );
79
+ isZoomedOutView: __unstableGetEditorMode() === 'zoom-out',
80
+ hasMetaBoxes: select( editPostStore ).hasMetaBoxes(),
81
+ renderingMode: getRenderingMode(),
82
+ postType: _postType,
83
+ };
84
+ }, [] );
91
85
 
92
86
  // Compute the default styles.
93
87
  return useMemo( () => {
@@ -121,7 +115,24 @@ function useEditorStyles() {
121
115
  } );
122
116
  }
123
117
 
124
- return hasThemeStyles ? editorSettings.styles : defaultEditorStyles;
118
+ const baseStyles = hasThemeStyles
119
+ ? editorSettings.styles ?? []
120
+ : defaultEditorStyles;
121
+
122
+ // Add a constant padding for the typewritter effect. When typing at the
123
+ // bottom, there needs to be room to scroll up.
124
+ if (
125
+ ! isZoomedOutView &&
126
+ ! hasMetaBoxes &&
127
+ renderingMode === 'post-only' &&
128
+ ! DESIGN_POST_TYPES.includes( postType )
129
+ ) {
130
+ baseStyles.push( {
131
+ css: 'body{padding-bottom: 40vh}',
132
+ } );
133
+ }
134
+
135
+ return baseStyles;
125
136
  }, [
126
137
  editorSettings.defaultEditorStyles,
127
138
  editorSettings.disableLayoutStyles,
@@ -132,107 +143,56 @@ function useEditorStyles() {
132
143
 
133
144
  function Layout( { initialPost } ) {
134
145
  useCommands();
135
- useCommonCommands();
136
-
137
- const isMobileViewport = useViewportMatch( 'medium', '<' );
138
- const isHugeViewport = useViewportMatch( 'huge', '>=' );
146
+ useEditPostCommands();
139
147
  const isWideViewport = useViewportMatch( 'large' );
140
- const isLargeViewport = useViewportMatch( 'medium' );
141
-
142
- const { closeGeneralSidebar } = useDispatch( editPostStore );
148
+ const paddingAppenderRef = usePaddingAppender();
149
+ const shouldIframe = useShouldIframe();
143
150
  const { createErrorNotice } = useDispatch( noticesStore );
144
- const { setIsInserterOpened } = useDispatch( editorStore );
145
151
  const {
146
152
  mode,
147
153
  isFullscreenActive,
148
- isRichEditingEnabled,
149
154
  sidebarIsOpened,
150
155
  hasActiveMetaboxes,
151
- previousShortcut,
152
- nextShortcut,
153
156
  hasBlockSelected,
154
- isInserterOpened,
155
- isListViewOpened,
156
157
  showIconLabels,
157
158
  isDistractionFree,
158
159
  showBlockBreadcrumbs,
159
160
  showMetaBoxes,
160
- documentLabel,
161
161
  hasHistory,
162
- hasBlockBreadcrumbs,
162
+ isEditingTemplate,
163
+ isWelcomeGuideVisible,
163
164
  } = useSelect( ( select ) => {
164
165
  const { get } = select( preferencesStore );
165
- const { getEditorSettings, getPostTypeLabel } = select( editorStore );
166
- const editorSettings = getEditorSettings();
167
- const postTypeLabel = getPostTypeLabel();
166
+ const { getEditorSettings } = select( editorStore );
167
+ const { isFeatureActive } = select( editPostStore );
168
168
 
169
169
  return {
170
- showMetaBoxes:
171
- select( editorStore ).getRenderingMode() === 'post-only',
172
- sidebarIsOpened: !! (
173
- select( interfaceStore ).getActiveComplementaryArea( 'core' ) ||
174
- select( editorStore ).isPublishSidebarOpened()
175
- ),
170
+ mode: select( editorStore ).getEditorMode(),
176
171
  isFullscreenActive:
177
172
  select( editPostStore ).isFeatureActive( 'fullscreenMode' ),
178
- isInserterOpened: select( editorStore ).isInserterOpened(),
179
- isListViewOpened: select( editorStore ).isListViewOpened(),
180
- mode: select( editorStore ).getEditorMode(),
181
- isRichEditingEnabled: editorSettings.richEditingEnabled,
182
173
  hasActiveMetaboxes: select( editPostStore ).hasMetaBoxes(),
183
- previousShortcut: select(
184
- keyboardShortcutsStore
185
- ).getAllShortcutKeyCombinations( 'core/editor/previous-region' ),
186
- nextShortcut: select(
187
- keyboardShortcutsStore
188
- ).getAllShortcutKeyCombinations( 'core/editor/next-region' ),
174
+ hasBlockSelected:
175
+ !! select( blockEditorStore ).getBlockSelectionStart(),
189
176
  showIconLabels: get( 'core', 'showIconLabels' ),
190
177
  isDistractionFree: get( 'core', 'distractionFree' ),
191
178
  showBlockBreadcrumbs: get( 'core', 'showBlockBreadcrumbs' ),
192
- // translators: Default label for the Document in the Block Breadcrumb.
193
- documentLabel: postTypeLabel || _x( 'Document', 'noun' ),
194
- hasBlockSelected:
195
- !! select( blockEditorStore ).getBlockSelectionStart(),
179
+ showMetaBoxes:
180
+ select( editorStore ).getRenderingMode() === 'post-only',
196
181
  hasHistory: !! getEditorSettings().onNavigateToPreviousEntityRecord,
197
- hasBlockBreadcrumbs: get( 'core', 'showBlockBreadcrumbs' ),
182
+ isEditingTemplate:
183
+ select( editorStore ).getCurrentPostType() === 'wp_template',
184
+ isWelcomeGuideVisible: isFeatureActive( 'welcomeGuide' ),
198
185
  };
199
186
  }, [] );
200
187
 
201
188
  // Set the right context for the command palette
202
189
  const commandContext = hasBlockSelected
203
190
  ? 'block-selection-edit'
204
- : 'post-editor-edit';
191
+ : 'entity-edit';
205
192
  useCommandContext( commandContext );
206
193
 
207
194
  const styles = useEditorStyles();
208
195
 
209
- // Inserter and Sidebars are mutually exclusive
210
- useEffect( () => {
211
- if ( sidebarIsOpened && ! isHugeViewport ) {
212
- setIsInserterOpened( false );
213
- }
214
- }, [ isHugeViewport, setIsInserterOpened, sidebarIsOpened ] );
215
- useEffect( () => {
216
- if ( isInserterOpened && ! isHugeViewport ) {
217
- closeGeneralSidebar();
218
- }
219
- }, [ closeGeneralSidebar, isInserterOpened, isHugeViewport ] );
220
-
221
- // Local state for save panel.
222
- // Note 'truthy' callback implies an open panel.
223
- const [ entitiesSavedStatesCallback, setEntitiesSavedStatesCallback ] =
224
- useState( false );
225
-
226
- const closeEntitiesSavedStates = useCallback(
227
- ( arg ) => {
228
- if ( typeof entitiesSavedStatesCallback === 'function' ) {
229
- entitiesSavedStatesCallback( arg );
230
- }
231
- setEntitiesSavedStatesCallback( false );
232
- },
233
- [ entitiesSavedStatesCallback ]
234
- );
235
-
236
196
  // We need to add the show-icon-labels class to the body element so it is applied to modals.
237
197
  if ( showIconLabels ) {
238
198
  document.body.classList.add( 'show-icon-labels' );
@@ -240,35 +200,14 @@ function Layout( { initialPost } ) {
240
200
  document.body.classList.remove( 'show-icon-labels' );
241
201
  }
242
202
 
243
- const className = classnames( 'edit-post-layout', 'is-mode-' + mode, {
203
+ const className = clsx( 'edit-post-layout', 'is-mode-' + mode, {
244
204
  'is-sidebar-opened': sidebarIsOpened,
245
205
  'has-metaboxes': hasActiveMetaboxes,
246
206
  'is-distraction-free': isDistractionFree && isWideViewport,
247
- 'is-entity-save-view-open': !! entitiesSavedStatesCallback,
248
207
  'has-block-breadcrumbs':
249
- hasBlockBreadcrumbs && ! isDistractionFree && isWideViewport,
208
+ showBlockBreadcrumbs && ! isDistractionFree && isWideViewport,
250
209
  } );
251
210
 
252
- const secondarySidebarLabel = isListViewOpened
253
- ? __( 'Document Overview' )
254
- : __( 'Block Library' );
255
-
256
- const secondarySidebar = () => {
257
- if ( mode === 'visual' && isInserterOpened ) {
258
- return (
259
- <InserterSidebar
260
- closeGeneralSidebar={ closeGeneralSidebar }
261
- isRightSidebarOpen={ sidebarIsOpened }
262
- />
263
- );
264
- }
265
- if ( mode === 'visual' && isListViewOpened ) {
266
- return <ListViewSidebar />;
267
- }
268
-
269
- return null;
270
- };
271
-
272
211
  function onPluginAreaError( name ) {
273
212
  createErrorNotice(
274
213
  sprintf(
@@ -281,6 +220,58 @@ function Layout( { initialPost } ) {
281
220
  );
282
221
  }
283
222
 
223
+ const { createSuccessNotice } = useDispatch( noticesStore );
224
+
225
+ const onActionPerformed = useCallback(
226
+ ( actionId, items ) => {
227
+ switch ( actionId ) {
228
+ case 'move-to-trash':
229
+ {
230
+ document.location.href = addQueryArgs( 'edit.php', {
231
+ trashed: 1,
232
+ post_type: items[ 0 ].type,
233
+ ids: items[ 0 ].id,
234
+ } );
235
+ }
236
+ break;
237
+ case 'duplicate-post':
238
+ {
239
+ const newItem = items[ 0 ];
240
+ const title =
241
+ typeof newItem.title === 'string'
242
+ ? newItem.title
243
+ : newItem.title?.rendered;
244
+ createSuccessNotice(
245
+ sprintf(
246
+ // translators: %s: Title of the created post e.g: "Post 1".
247
+ __( '"%s" successfully created.' ),
248
+ title
249
+ ),
250
+ {
251
+ type: 'snackbar',
252
+ id: 'duplicate-post-action',
253
+ actions: [
254
+ {
255
+ label: __( 'Edit' ),
256
+ onClick: () => {
257
+ const postId = newItem.id;
258
+ document.location.href =
259
+ addQueryArgs( 'post.php', {
260
+ post: postId,
261
+ action: 'edit',
262
+ } );
263
+ },
264
+ },
265
+ ],
266
+ }
267
+ );
268
+ }
269
+ break;
270
+ }
271
+ },
272
+ [ createSuccessNotice ]
273
+ );
274
+
284
275
  return (
285
276
  <>
286
277
  <FullscreenMode isActive={ isFullscreenActive } />
@@ -290,85 +281,38 @@ function Layout( { initialPost } ) {
290
281
  <LocalAutosaveMonitor />
291
282
  <EditPostKeyboardShortcuts />
292
283
  <EditorKeyboardShortcutsRegister />
293
- <EditorKeyboardShortcuts />
294
284
  <BlockKeyboardShortcuts />
295
-
296
- <InterfaceSkeleton
297
- isDistractionFree={ isDistractionFree && isWideViewport }
298
- className={ className }
299
- labels={ {
300
- ...interfaceLabels,
301
- secondarySidebar: secondarySidebarLabel,
302
- } }
303
- header={
304
- <Header
305
- setEntitiesSavedStatesCallback={
306
- setEntitiesSavedStatesCallback
307
- }
308
- initialPost={ initialPost }
309
- />
310
- }
311
- editorNotices={ <EditorNotices /> }
312
- secondarySidebar={ secondarySidebar() }
313
- sidebar={
314
- ! isDistractionFree && (
315
- <ComplementaryArea.Slot scope="core" />
316
- )
317
- }
318
- notices={ <EditorSnackbars /> }
319
- content={
320
- <>
321
- { ! isDistractionFree && <EditorNotices /> }
322
- { ( mode === 'text' || ! isRichEditingEnabled ) && (
323
- <TextEditor />
324
- ) }
325
- { ! isLargeViewport && <BlockToolbar hideDragHandle /> }
326
- { isRichEditingEnabled && mode === 'visual' && (
327
- <VisualEditor styles={ styles } />
328
- ) }
329
- { ! isDistractionFree && showMetaBoxes && (
330
- <div className="edit-post-layout__metaboxes">
331
- <MetaBoxes location="normal" />
332
- <MetaBoxes location="advanced" />
333
- </div>
334
- ) }
335
- { isMobileViewport && sidebarIsOpened && (
336
- <ScrollLock />
337
- ) }
338
- </>
339
- }
340
- footer={
341
- ! isDistractionFree &&
342
- ! isMobileViewport &&
343
- showBlockBreadcrumbs &&
344
- isRichEditingEnabled &&
345
- mode === 'visual' && (
346
- <div className="edit-post-layout__footer">
347
- <BlockBreadcrumb rootLabelText={ documentLabel } />
348
- </div>
349
- )
350
- }
351
- actions={
352
- <SavePublishPanels
353
- closeEntitiesSavedStates={ closeEntitiesSavedStates }
354
- isEntitiesSavedStatesOpen={
355
- entitiesSavedStatesCallback
356
- }
357
- setEntitiesSavedStatesCallback={
358
- setEntitiesSavedStatesCallback
359
- }
360
- forceIsDirtyPublishPanel={ hasActiveMetaboxes }
361
- />
362
- }
363
- shortcuts={ {
364
- previous: previousShortcut,
365
- next: nextShortcut,
366
- } }
367
- />
368
285
  <WelcomeGuide />
369
286
  <InitPatternModal />
370
287
  <PluginArea onError={ onPluginAreaError } />
371
- { ! isDistractionFree && <SettingsSidebar /> }
288
+ { ! isDistractionFree && (
289
+ <Sidebar
290
+ onActionPerformed={ onActionPerformed }
291
+ extraPanels={
292
+ ! isEditingTemplate && <MetaBoxes location="side" />
293
+ }
294
+ />
295
+ ) }
296
+ <PostEditorMoreMenu />
297
+ <BackButton initialPost={ initialPost } />
298
+ <EditorSnackbars />
299
+ <EditorInterface
300
+ className={ className }
301
+ styles={ styles }
302
+ forceIsDirty={ hasActiveMetaboxes }
303
+ contentRef={ paddingAppenderRef }
304
+ disableIframe={ ! shouldIframe }
305
+ // We should auto-focus the canvas (title) on load.
306
+ // eslint-disable-next-line jsx-a11y/no-autofocus
307
+ autoFocus={ ! isWelcomeGuideVisible }
308
+ >
309
+ { ! isDistractionFree && showMetaBoxes && (
310
+ <div className="edit-post-layout__metaboxes">
311
+ <MetaBoxes location="normal" />
312
+ <MetaBoxes location="advanced" />
313
+ </div>
314
+ ) }
315
+ </EditorInterface>
372
316
  </>
373
317
  );
374
318
  }
@@ -1,28 +1,20 @@
1
+ .editor-visual-editor {
2
+ flex: 1 0 auto;
3
+ height: auto;
4
+ }
5
+
1
6
  .edit-post-layout__metaboxes {
2
7
  flex-shrink: 0;
3
8
  clear: both;
4
9
  }
5
10
 
6
11
  // Adjust the position of the notices
7
- .edit-post-layout .components-editor-notices__snackbar {
12
+ .components-editor-notices__snackbar {
8
13
  position: fixed;
9
14
  right: 0;
10
- bottom: 16px;
11
- padding-left: 16px;
12
- padding-right: 16px;
13
- }
14
-
15
- .is-distraction-free {
16
- .components-editor-notices__snackbar {
17
- bottom: 16px;
18
- }
19
- }
20
-
21
- // Adjust the position of the notices when breadcrumbs are present
22
- .has-block-breadcrumbs {
23
- .components-editor-notices__snackbar {
24
- bottom: 40px;
25
- }
15
+ bottom: 24px;
16
+ padding-left: 24px;
17
+ padding-right: 24px;
26
18
  }
27
19
 
28
20
  @include editor-left(".edit-post-layout .components-editor-notices__snackbar");
@@ -27,7 +27,7 @@ export function usePaddingAppender() {
27
27
  return;
28
28
  }
29
29
 
30
- // only handle clicks under the last child
30
+ // Only handle clicks under the last child.
31
31
  const lastChild = node.lastElementChild;
32
32
  if ( ! lastChild ) {
33
33
  return;
@@ -44,6 +44,12 @@ export function usePaddingAppender() {
44
44
  .select( blockEditorStore )
45
45
  .getBlockOrder( '' );
46
46
  const lastBlockClientId = blockOrder[ blockOrder.length - 1 ];
47
+
48
+ // Do nothing when only default block appender is present.
49
+ if ( ! lastBlockClientId ) {
50
+ return;
51
+ }
52
+
47
53
  const lastBlock = registry
48
54
  .select( blockEditorStore )
49
55
  .getBlock( lastBlockClientId );
@@ -0,0 +1,40 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { store as editorStore } from '@wordpress/editor';
5
+ import { useSelect } from '@wordpress/data';
6
+ import { store as blocksStore } from '@wordpress/blocks';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import { store as editPostStore } from '../../store';
12
+
13
+ const isGutenbergPlugin = globalThis.IS_GUTENBERG_PLUGIN ? true : false;
14
+
15
+ export function useShouldIframe() {
16
+ const {
17
+ isBlockBasedTheme,
18
+ hasV3BlocksOnly,
19
+ isEditingTemplate,
20
+ hasMetaBoxes,
21
+ } = useSelect( ( select ) => {
22
+ const { getEditorSettings, getCurrentPostType } = select( editorStore );
23
+ const { getBlockTypes } = select( blocksStore );
24
+ const editorSettings = getEditorSettings();
25
+ return {
26
+ isBlockBasedTheme: editorSettings.__unstableIsBlockBasedTheme,
27
+ hasV3BlocksOnly: getBlockTypes().every( ( type ) => {
28
+ return type.apiVersion >= 3;
29
+ } ),
30
+ isEditingTemplate: getCurrentPostType() === 'wp_template',
31
+ hasMetaBoxes: select( editPostStore ).hasMetaBoxes(),
32
+ };
33
+ }, [] );
34
+
35
+ return (
36
+ ( ( hasV3BlocksOnly || ( isGutenbergPlugin && isBlockBasedTheme ) ) &&
37
+ ! hasMetaBoxes ) ||
38
+ isEditingTemplate
39
+ );
40
+ }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import classnames from 'classnames';
4
+ import clsx from 'clsx';
5
5
 
6
6
  /**
7
7
  * WordPress dependencies
@@ -48,13 +48,9 @@ function MetaBoxesArea( { location } ) {
48
48
  return select( editPostStore ).isSavingMetaBoxes();
49
49
  }, [] );
50
50
 
51
- const classes = classnames(
52
- 'edit-post-meta-boxes-area',
53
- `is-${ location }`,
54
- {
55
- 'is-loading': isSaving,
56
- }
57
- );
51
+ const classes = clsx( 'edit-post-meta-boxes-area', `is-${ location }`, {
52
+ 'is-loading': isSaving,
53
+ } );
58
54
 
59
55
  return (
60
56
  <div className={ classes }>
@@ -10,10 +10,10 @@ import { displayShortcut } from '@wordpress/keycodes';
10
10
  /**
11
11
  * Internal dependencies
12
12
  */
13
- import { unlock } from '../../../lock-unlock';
13
+ import { unlock } from '../../lock-unlock';
14
14
  import ManagePatternsMenuItem from './manage-patterns-menu-item';
15
15
  import WelcomeGuideMenuItem from './welcome-guide-menu-item';
16
- import EditPostPreferencesModal from '../../preferences-modal';
16
+ import EditPostPreferencesModal from '../preferences-modal';
17
17
 
18
18
  const { ToolsMoreMenuGroup, ViewMoreMenuGroup } = unlock( editorPrivateApis );
19
19
 
@@ -20,7 +20,7 @@ function ManagePatternsMenuItem() {
20
20
  // The site editor and templates both check whether the user has
21
21
  // edit_theme_options capabilities. We can leverage that here and not
22
22
  // display the manage patterns link if the user can't access it.
23
- return canUser( 'read', 'templates' ) ? patternsUrl : defaultUrl;
23
+ return canUser( 'create', 'templates' ) ? patternsUrl : defaultUrl;
24
24
  }, [] );
25
25
 
26
26
  return (
package/src/index.js CHANGED
@@ -14,13 +14,19 @@ import {
14
14
  registerLegacyWidgetBlock,
15
15
  registerWidgetGroupBlock,
16
16
  } from '@wordpress/widgets';
17
- import { store as editorStore } from '@wordpress/editor';
17
+ import {
18
+ store as editorStore,
19
+ privateApis as editorPrivateApis,
20
+ } from '@wordpress/editor';
18
21
 
19
22
  /**
20
23
  * Internal dependencies
21
24
  */
22
- import './hooks';
23
25
  import Editor from './editor';
26
+ import { unlock } from './lock-unlock';
27
+
28
+ const { BackButton: __experimentalMainDashboardButton } =
29
+ unlock( editorPrivateApis );
24
30
 
25
31
  /**
26
32
  * Initializes and returns an instance of Editor.
@@ -80,7 +86,7 @@ export function initializeEditor(
80
86
  registerCoreBlocks();
81
87
  registerLegacyWidgetBlock( { inserter: false } );
82
88
  registerWidgetGroupBlock( { inserter: false } );
83
- if ( process.env.IS_GUTENBERG_PLUGIN ) {
89
+ if ( globalThis.IS_GUTENBERG_PLUGIN ) {
84
90
  __experimentalRegisterExperimentalCoreBlocks( {
85
91
  enableFSEBlocks: settings.__unstableEnableFullSiteEditingBlocks,
86
92
  } );
@@ -152,8 +158,7 @@ export function reinitializeEditor() {
152
158
  } );
153
159
  }
154
160
 
155
- export { default as __experimentalFullscreenModeClose } from './components/header/fullscreen-mode-close';
156
- export { default as __experimentalMainDashboardButton } from './components/header/main-dashboard-button';
157
-
161
+ export { default as __experimentalFullscreenModeClose } from './components/back-button/fullscreen-mode-close';
162
+ export { __experimentalMainDashboardButton };
158
163
  export { store } from './store';
159
164
  export * from './deprecated';