@wordpress/editor 14.11.0 → 14.12.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 (165) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +0 -8
  3. package/build/components/collab-sidebar/add-comment.js +5 -6
  4. package/build/components/collab-sidebar/add-comment.js.map +1 -1
  5. package/build/components/collab-sidebar/index.js +75 -73
  6. package/build/components/collab-sidebar/index.js.map +1 -1
  7. package/build/components/commands/index.js +142 -34
  8. package/build/components/commands/index.js.map +1 -1
  9. package/build/components/create-template-part-modal/index.js +1 -0
  10. package/build/components/create-template-part-modal/index.js.map +1 -1
  11. package/build/components/document-bar/index.js +9 -3
  12. package/build/components/document-bar/index.js.map +1 -1
  13. package/build/components/document-tools/index.js +8 -4
  14. package/build/components/document-tools/index.js.map +1 -1
  15. package/build/components/editor-interface/index.js +1 -2
  16. package/build/components/editor-interface/index.js.map +1 -1
  17. package/build/components/global-styles-provider/index.js +20 -8
  18. package/build/components/global-styles-provider/index.js.map +1 -1
  19. package/build/components/header/index.js +10 -12
  20. package/build/components/header/index.js.map +1 -1
  21. package/build/components/more-menu/index.js +9 -7
  22. package/build/components/more-menu/index.js.map +1 -1
  23. package/build/components/post-taxonomies/flat-term-selector.js +10 -8
  24. package/build/components/post-taxonomies/flat-term-selector.js.map +1 -1
  25. package/build/components/post-template/swap-template-button.js +0 -3
  26. package/build/components/post-template/swap-template-button.js.map +1 -1
  27. package/build/components/post-transform-panel/index.js +0 -3
  28. package/build/components/post-transform-panel/index.js.map +1 -1
  29. package/build/components/preferences-modal/index.js +26 -22
  30. package/build/components/preferences-modal/index.js.map +1 -1
  31. package/build/components/preview-dropdown/index.js +23 -4
  32. package/build/components/preview-dropdown/index.js.map +1 -1
  33. package/build/components/provider/use-block-editor-settings.js +10 -9
  34. package/build/components/provider/use-block-editor-settings.js.map +1 -1
  35. package/build/components/sidebar/post-summary.js +2 -2
  36. package/build/components/sidebar/post-summary.js.map +1 -1
  37. package/build/components/start-page-options/index.js +0 -3
  38. package/build/components/start-page-options/index.js.map +1 -1
  39. package/build/components/start-template-options/index.js +0 -3
  40. package/build/components/start-template-options/index.js.map +1 -1
  41. package/build/components/visual-editor/index.js +5 -2
  42. package/build/components/visual-editor/index.js.map +1 -1
  43. package/build/store/actions.js +65 -16
  44. package/build/store/actions.js.map +1 -1
  45. package/build/store/constants.js +0 -2
  46. package/build/store/constants.js.map +1 -1
  47. package/build/store/index.js +0 -4
  48. package/build/store/index.js.map +1 -1
  49. package/build/store/selectors.js +2 -2
  50. package/build/store/selectors.js.map +1 -1
  51. package/build-module/components/collab-sidebar/add-comment.js +5 -6
  52. package/build-module/components/collab-sidebar/add-comment.js.map +1 -1
  53. package/build-module/components/collab-sidebar/index.js +76 -74
  54. package/build-module/components/collab-sidebar/index.js.map +1 -1
  55. package/build-module/components/commands/index.js +145 -38
  56. package/build-module/components/commands/index.js.map +1 -1
  57. package/build-module/components/create-template-part-modal/index.js +1 -0
  58. package/build-module/components/create-template-part-modal/index.js.map +1 -1
  59. package/build-module/components/document-bar/index.js +10 -4
  60. package/build-module/components/document-bar/index.js.map +1 -1
  61. package/build-module/components/document-tools/index.js +8 -4
  62. package/build-module/components/document-tools/index.js.map +1 -1
  63. package/build-module/components/editor-interface/index.js +1 -2
  64. package/build-module/components/editor-interface/index.js.map +1 -1
  65. package/build-module/components/global-styles-provider/index.js +20 -8
  66. package/build-module/components/global-styles-provider/index.js.map +1 -1
  67. package/build-module/components/header/index.js +10 -12
  68. package/build-module/components/header/index.js.map +1 -1
  69. package/build-module/components/more-menu/index.js +9 -7
  70. package/build-module/components/more-menu/index.js.map +1 -1
  71. package/build-module/components/post-taxonomies/flat-term-selector.js +10 -8
  72. package/build-module/components/post-taxonomies/flat-term-selector.js.map +1 -1
  73. package/build-module/components/post-template/swap-template-button.js +0 -3
  74. package/build-module/components/post-template/swap-template-button.js.map +1 -1
  75. package/build-module/components/post-transform-panel/index.js +0 -3
  76. package/build-module/components/post-transform-panel/index.js.map +1 -1
  77. package/build-module/components/preferences-modal/index.js +26 -22
  78. package/build-module/components/preferences-modal/index.js.map +1 -1
  79. package/build-module/components/preview-dropdown/index.js +24 -5
  80. package/build-module/components/preview-dropdown/index.js.map +1 -1
  81. package/build-module/components/provider/use-block-editor-settings.js +11 -10
  82. package/build-module/components/provider/use-block-editor-settings.js.map +1 -1
  83. package/build-module/components/sidebar/post-summary.js +2 -2
  84. package/build-module/components/sidebar/post-summary.js.map +1 -1
  85. package/build-module/components/start-page-options/index.js +0 -3
  86. package/build-module/components/start-page-options/index.js.map +1 -1
  87. package/build-module/components/start-template-options/index.js +0 -3
  88. package/build-module/components/start-template-options/index.js.map +1 -1
  89. package/build-module/components/visual-editor/index.js +5 -2
  90. package/build-module/components/visual-editor/index.js.map +1 -1
  91. package/build-module/store/actions.js +61 -14
  92. package/build-module/store/actions.js.map +1 -1
  93. package/build-module/store/constants.js +0 -2
  94. package/build-module/store/constants.js.map +1 -1
  95. package/build-module/store/index.js +0 -4
  96. package/build-module/store/index.js.map +1 -1
  97. package/build-module/store/selectors.js +2 -2
  98. package/build-module/store/selectors.js.map +1 -1
  99. package/build-style/style-rtl.css +22 -6
  100. package/build-style/style.css +22 -6
  101. package/build-types/components/collab-sidebar/add-comment.d.ts.map +1 -1
  102. package/build-types/components/collab-sidebar/index.d.ts.map +1 -1
  103. package/build-types/components/commands/index.d.ts.map +1 -1
  104. package/build-types/components/create-template-part-modal/index.d.ts.map +1 -1
  105. package/build-types/components/document-bar/index.d.ts.map +1 -1
  106. package/build-types/components/document-tools/index.d.ts.map +1 -1
  107. package/build-types/components/editor-interface/index.d.ts.map +1 -1
  108. package/build-types/components/global-styles-provider/index.d.ts.map +1 -1
  109. package/build-types/components/header/index.d.ts +1 -2
  110. package/build-types/components/header/index.d.ts.map +1 -1
  111. package/build-types/components/more-menu/index.d.ts.map +1 -1
  112. package/build-types/components/post-taxonomies/flat-term-selector.d.ts.map +1 -1
  113. package/build-types/components/post-template/hooks.d.ts +2 -2
  114. package/build-types/components/post-template/swap-template-button.d.ts.map +1 -1
  115. package/build-types/components/post-transform-panel/index.d.ts.map +1 -1
  116. package/build-types/components/preferences-modal/index.d.ts.map +1 -1
  117. package/build-types/components/preview-dropdown/index.d.ts.map +1 -1
  118. package/build-types/components/provider/use-block-editor-settings.d.ts.map +1 -1
  119. package/build-types/components/start-page-options/index.d.ts.map +1 -1
  120. package/build-types/components/start-template-options/index.d.ts.map +1 -1
  121. package/build-types/components/visual-editor/index.d.ts.map +1 -1
  122. package/build-types/dataviews/store/reducer.d.ts +5 -2
  123. package/build-types/dataviews/store/reducer.d.ts.map +1 -1
  124. package/build-types/lock-unlock.d.ts +2 -2
  125. package/build-types/store/actions.d.ts +9 -1
  126. package/build-types/store/actions.d.ts.map +1 -1
  127. package/build-types/store/constants.d.ts +0 -2
  128. package/build-types/store/constants.d.ts.map +1 -1
  129. package/build-types/store/index.d.ts +9 -11
  130. package/build-types/store/index.d.ts.map +1 -1
  131. package/build-types/store/reducer.d.ts +24 -4
  132. package/build-types/store/reducer.d.ts.map +1 -1
  133. package/build-types/store/selectors.d.ts +3 -3
  134. package/build-types/store/selectors.d.ts.map +1 -1
  135. package/package.json +4 -3
  136. package/src/components/collab-sidebar/add-comment.js +17 -20
  137. package/src/components/collab-sidebar/index.js +79 -88
  138. package/src/components/commands/index.js +390 -270
  139. package/src/components/create-template-part-modal/index.js +1 -0
  140. package/src/components/document-bar/index.js +10 -1
  141. package/src/components/document-bar/style.scss +13 -0
  142. package/src/components/document-tools/index.js +7 -1
  143. package/src/components/editor-interface/index.js +0 -1
  144. package/src/components/global-styles-provider/index.js +20 -8
  145. package/src/components/header/index.js +18 -10
  146. package/src/components/more-menu/index.js +12 -7
  147. package/src/components/plugin-post-publish-panel/test/__snapshots__/index.js.snap +1 -1
  148. package/src/components/post-taxonomies/flat-term-selector.js +8 -8
  149. package/src/components/post-template/swap-template-button.js +0 -3
  150. package/src/components/post-transform-panel/index.js +0 -3
  151. package/src/components/preferences-modal/index.js +26 -19
  152. package/src/components/preferences-modal/test/index.js +1 -1
  153. package/src/components/preview-dropdown/index.js +45 -16
  154. package/src/components/provider/use-block-editor-settings.js +10 -9
  155. package/src/components/sidebar/post-summary.js +1 -1
  156. package/src/components/sidebar/style.scss +1 -3
  157. package/src/components/start-page-options/index.js +0 -3
  158. package/src/components/start-template-options/index.js +0 -3
  159. package/src/components/visual-editor/index.js +7 -1
  160. package/src/components/visual-editor/style.scss +11 -0
  161. package/src/store/actions.js +110 -33
  162. package/src/store/constants.ts +0 -2
  163. package/src/store/index.js +0 -4
  164. package/src/store/selectors.js +2 -2
  165. package/tsconfig.tsbuildinfo +1 -1
@@ -2,7 +2,7 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useSelect, useDispatch } from '@wordpress/data';
5
- import { __, isRTL } from '@wordpress/i18n';
5
+ import { __, isRTL, sprintf } from '@wordpress/i18n';
6
6
  import {
7
7
  blockDefault,
8
8
  code,
@@ -14,330 +14,450 @@ import {
14
14
  external,
15
15
  keyboard,
16
16
  symbol,
17
+ page,
18
+ layout,
19
+ rotateRight,
20
+ rotateLeft,
17
21
  } from '@wordpress/icons';
18
22
  import { useCommandLoader } from '@wordpress/commands';
19
23
  import { store as preferencesStore } from '@wordpress/preferences';
20
24
  import { store as noticesStore } from '@wordpress/notices';
21
25
  import { store as blockEditorStore } from '@wordpress/block-editor';
22
- import { store as coreStore } from '@wordpress/core-data';
26
+ import { store as coreStore, useEntityRecord } from '@wordpress/core-data';
23
27
  import { store as interfaceStore } from '@wordpress/interface';
28
+ import { decodeEntities } from '@wordpress/html-entities';
24
29
 
25
30
  /**
26
31
  * Internal dependencies
27
32
  */
33
+ import { unlock } from '../../lock-unlock';
28
34
  import { store as editorStore } from '../../store';
29
- import { PATTERN_POST_TYPE } from '../../store/constants';
35
+ import {
36
+ PATTERN_POST_TYPE,
37
+ TEMPLATE_PART_POST_TYPE,
38
+ TEMPLATE_POST_TYPE,
39
+ } from '../../store/constants';
30
40
  import { modalName as patternRenameModalName } from '../pattern-rename-modal';
31
41
  import { modalName as patternDuplicateModalName } from '../pattern-duplicate-modal';
42
+ import isTemplateRevertable from '../../store/utils/is-template-revertable';
32
43
 
33
- function useEditorCommandLoader() {
34
- const {
35
- editorMode,
36
- isListViewOpen,
37
- showBlockBreadcrumbs,
38
- isDistractionFree,
39
- isTopToolbar,
40
- isFocusMode,
41
- isPreviewMode,
42
- isViewable,
43
- isCodeEditingEnabled,
44
- isRichEditingEnabled,
45
- isPublishSidebarEnabled,
46
- } = useSelect( ( select ) => {
47
- const { get } = select( preferencesStore );
48
- const { isListViewOpened, getCurrentPostType, getEditorSettings } =
49
- select( editorStore );
50
- const { getSettings } = select( blockEditorStore );
51
- const { getPostType } = select( coreStore );
52
-
53
- return {
54
- editorMode: get( 'core', 'editorMode' ) ?? 'visual',
55
- isListViewOpen: isListViewOpened(),
56
- showBlockBreadcrumbs: get( 'core', 'showBlockBreadcrumbs' ),
57
- isDistractionFree: get( 'core', 'distractionFree' ),
58
- isFocusMode: get( 'core', 'focusMode' ),
59
- isTopToolbar: get( 'core', 'fixedToolbar' ),
60
- isPreviewMode: getSettings().isPreviewMode,
61
- isViewable: getPostType( getCurrentPostType() )?.viewable ?? false,
62
- isCodeEditingEnabled: getEditorSettings().codeEditingEnabled,
63
- isRichEditingEnabled: getEditorSettings().richEditingEnabled,
64
- isPublishSidebarEnabled:
65
- select( editorStore ).isPublishSidebarEnabled(),
66
- };
67
- }, [] );
68
- const { getActiveComplementaryArea } = useSelect( interfaceStore );
69
- const { toggle } = useDispatch( preferencesStore );
70
- const { createInfoNotice } = useDispatch( noticesStore );
71
- const {
72
- __unstableSaveForPreview,
73
- setIsListViewOpened,
74
- switchEditorMode,
75
- toggleDistractionFree,
76
- } = useDispatch( editorStore );
77
- const { openModal, enableComplementaryArea, disableComplementaryArea } =
78
- useDispatch( interfaceStore );
79
- const { getCurrentPostId } = useSelect( editorStore );
80
- const allowSwitchEditorMode = isCodeEditingEnabled && isRichEditingEnabled;
81
-
82
- if ( isPreviewMode ) {
83
- return { commands: [], isLoading: false };
84
- }
85
-
86
- const commands = [];
87
-
88
- commands.push( {
89
- name: 'core/open-shortcut-help',
90
- label: __( 'Keyboard shortcuts' ),
91
- icon: keyboard,
92
- callback: ( { close } ) => {
93
- close();
94
- openModal( 'editor/keyboard-shortcut-help' );
95
- },
96
- } );
44
+ const getEditorCommandLoader = () =>
45
+ function useEditorCommandLoader() {
46
+ const {
47
+ editorMode,
48
+ isListViewOpen,
49
+ showBlockBreadcrumbs,
50
+ isDistractionFree,
51
+ isFocusMode,
52
+ isPreviewMode,
53
+ isViewable,
54
+ isCodeEditingEnabled,
55
+ isRichEditingEnabled,
56
+ isPublishSidebarEnabled,
57
+ } = useSelect( ( select ) => {
58
+ const { get } = select( preferencesStore );
59
+ const { isListViewOpened, getCurrentPostType, getEditorSettings } =
60
+ select( editorStore );
61
+ const { getSettings } = select( blockEditorStore );
62
+ const { getPostType } = select( coreStore );
97
63
 
98
- commands.push( {
99
- name: 'core/toggle-distraction-free',
100
- label: isDistractionFree
101
- ? __( 'Exit Distraction free' )
102
- : __( 'Enter Distraction free' ),
103
- callback: ( { close } ) => {
104
- toggleDistractionFree();
105
- close();
106
- },
107
- } );
64
+ return {
65
+ editorMode: get( 'core', 'editorMode' ) ?? 'visual',
66
+ isListViewOpen: isListViewOpened(),
67
+ showBlockBreadcrumbs: get( 'core', 'showBlockBreadcrumbs' ),
68
+ isDistractionFree: get( 'core', 'distractionFree' ),
69
+ isFocusMode: get( 'core', 'focusMode' ),
70
+ isPreviewMode: getSettings().isPreviewMode,
71
+ isViewable:
72
+ getPostType( getCurrentPostType() )?.viewable ?? false,
73
+ isCodeEditingEnabled: getEditorSettings().codeEditingEnabled,
74
+ isRichEditingEnabled: getEditorSettings().richEditingEnabled,
75
+ isPublishSidebarEnabled:
76
+ select( editorStore ).isPublishSidebarEnabled(),
77
+ };
78
+ }, [] );
79
+ const { getActiveComplementaryArea } = useSelect( interfaceStore );
80
+ const { toggle } = useDispatch( preferencesStore );
81
+ const { createInfoNotice } = useDispatch( noticesStore );
82
+ const {
83
+ __unstableSaveForPreview,
84
+ setIsListViewOpened,
85
+ switchEditorMode,
86
+ toggleDistractionFree,
87
+ toggleSpotlightMode,
88
+ toggleTopToolbar,
89
+ } = useDispatch( editorStore );
90
+ const { openModal, enableComplementaryArea, disableComplementaryArea } =
91
+ useDispatch( interfaceStore );
92
+ const { getCurrentPostId } = useSelect( editorStore );
93
+ const allowSwitchEditorMode =
94
+ isCodeEditingEnabled && isRichEditingEnabled;
108
95
 
109
- commands.push( {
110
- name: 'core/open-preferences',
111
- label: __( 'Editor preferences' ),
112
- callback: ( { close } ) => {
113
- close();
114
- openModal( 'editor/preferences' );
115
- },
116
- } );
96
+ if ( isPreviewMode ) {
97
+ return { commands: [], isLoading: false };
98
+ }
117
99
 
118
- commands.push( {
119
- name: 'core/toggle-spotlight-mode',
120
- label: isFocusMode
121
- ? __( 'Exit Spotlight mode' )
122
- : __( 'Enter Spotlight mode' ),
123
- callback: ( { close } ) => {
124
- toggle( 'core', 'focusMode' );
125
- close();
126
- createInfoNotice(
127
- isFocusMode ? __( 'Spotlight off.' ) : __( 'Spotlight on.' ),
128
- {
129
- id: 'core/editor/toggle-spotlight-mode/notice',
130
- type: 'snackbar',
131
- actions: [
132
- {
133
- label: __( 'Undo' ),
134
- onClick: () => {
135
- toggle( 'core', 'focusMode' );
136
- },
137
- },
138
- ],
139
- }
140
- );
141
- },
142
- } );
100
+ const commands = [];
143
101
 
144
- commands.push( {
145
- name: 'core/toggle-list-view',
146
- label: isListViewOpen
147
- ? __( 'Close List View' )
148
- : __( 'Open List View' ),
149
- icon: listView,
150
- callback: ( { close } ) => {
151
- setIsListViewOpened( ! isListViewOpen );
152
- close();
153
- createInfoNotice(
154
- isListViewOpen ? __( 'List View off.' ) : __( 'List View on.' ),
155
- {
156
- id: 'core/editor/toggle-list-view/notice',
157
- type: 'snackbar',
158
- }
159
- );
160
- },
161
- } );
102
+ commands.push( {
103
+ name: 'core/open-shortcut-help',
104
+ label: __( 'Keyboard shortcuts' ),
105
+ icon: keyboard,
106
+ callback: ( { close } ) => {
107
+ close();
108
+ openModal( 'editor/keyboard-shortcut-help' );
109
+ },
110
+ } );
162
111
 
163
- commands.push( {
164
- name: 'core/toggle-top-toolbar',
165
- label: __( 'Top toolbar' ),
166
- callback: ( { close } ) => {
167
- toggle( 'core', 'fixedToolbar' );
168
- if ( isDistractionFree ) {
112
+ commands.push( {
113
+ name: 'core/toggle-distraction-free',
114
+ label: isDistractionFree
115
+ ? __( 'Exit Distraction free' )
116
+ : __( 'Enter Distraction free' ),
117
+ callback: ( { close } ) => {
169
118
  toggleDistractionFree();
170
- }
171
- close();
172
- createInfoNotice(
173
- isTopToolbar
174
- ? __( 'Top toolbar off.' )
175
- : __( 'Top toolbar on.' ),
176
- {
177
- id: 'core/editor/toggle-top-toolbar/notice',
178
- type: 'snackbar',
179
- actions: [
180
- {
181
- label: __( 'Undo' ),
182
- onClick: () => {
183
- toggle( 'core', 'fixedToolbar' );
184
- },
185
- },
186
- ],
187
- }
188
- );
189
- },
190
- } );
119
+ close();
120
+ },
121
+ } );
191
122
 
192
- if ( allowSwitchEditorMode ) {
193
123
  commands.push( {
194
- name: 'core/toggle-code-editor',
195
- label:
196
- editorMode === 'visual'
197
- ? __( 'Open code editor' )
198
- : __( 'Exit code editor' ),
199
- icon: code,
124
+ name: 'core/open-preferences',
125
+ label: __( 'Editor preferences' ),
200
126
  callback: ( { close } ) => {
201
- switchEditorMode( editorMode === 'visual' ? 'text' : 'visual' );
202
127
  close();
128
+ openModal( 'editor/preferences' );
203
129
  },
204
130
  } );
205
- }
206
-
207
- commands.push( {
208
- name: 'core/toggle-breadcrumbs',
209
- label: showBlockBreadcrumbs
210
- ? __( 'Hide block breadcrumbs' )
211
- : __( 'Show block breadcrumbs' ),
212
- callback: ( { close } ) => {
213
- toggle( 'core', 'showBlockBreadcrumbs' );
214
- close();
215
- createInfoNotice(
216
- showBlockBreadcrumbs
217
- ? __( 'Breadcrumbs hidden.' )
218
- : __( 'Breadcrumbs visible.' ),
219
- {
220
- id: 'core/editor/toggle-breadcrumbs/notice',
221
- type: 'snackbar',
222
- }
223
- );
224
- },
225
- } );
226
-
227
- commands.push( {
228
- name: 'core/open-settings-sidebar',
229
- label: __( 'Show or hide the Settings panel.' ),
230
- icon: isRTL() ? drawerLeft : drawerRight,
231
- callback: ( { close } ) => {
232
- const activeSidebar = getActiveComplementaryArea( 'core' );
233
- close();
234
- if ( activeSidebar === 'edit-post/document' ) {
235
- disableComplementaryArea( 'core' );
236
- } else {
237
- enableComplementaryArea( 'core', 'edit-post/document' );
238
- }
239
- },
240
- } );
241
131
 
242
- commands.push( {
243
- name: 'core/open-block-inspector',
244
- label: __( 'Show or hide the Block settings panel' ),
245
- icon: blockDefault,
246
- callback: ( { close } ) => {
247
- const activeSidebar = getActiveComplementaryArea( 'core' );
248
- close();
249
- if ( activeSidebar === 'edit-post/block' ) {
250
- disableComplementaryArea( 'core' );
251
- } else {
252
- enableComplementaryArea( 'core', 'edit-post/block' );
253
- }
254
- },
255
- } );
132
+ commands.push( {
133
+ name: 'core/toggle-spotlight-mode',
134
+ label: isFocusMode
135
+ ? __( 'Exit Spotlight mode' )
136
+ : __( 'Enter Spotlight mode' ),
137
+ callback: ( { close } ) => {
138
+ toggleSpotlightMode();
139
+ close();
140
+ },
141
+ } );
256
142
 
257
- commands.push( {
258
- name: 'core/toggle-publish-sidebar',
259
- label: isPublishSidebarEnabled
260
- ? __( 'Disable pre-publish checks' )
261
- : __( 'Enable pre-publish checks' ),
262
- icon: formatListBullets,
263
- callback: ( { close } ) => {
264
- close();
265
- toggle( 'core', 'isPublishSidebarEnabled' );
266
- createInfoNotice(
267
- isPublishSidebarEnabled
268
- ? __( 'Pre-publish checks disabled.' )
269
- : __( 'Pre-publish checks enabled.' ),
270
- {
271
- id: 'core/editor/publish-sidebar/notice',
272
- type: 'snackbar',
273
- }
274
- );
275
- },
276
- } );
143
+ commands.push( {
144
+ name: 'core/toggle-list-view',
145
+ label: isListViewOpen
146
+ ? __( 'Close List View' )
147
+ : __( 'Open List View' ),
148
+ icon: listView,
149
+ callback: ( { close } ) => {
150
+ setIsListViewOpened( ! isListViewOpen );
151
+ close();
152
+ createInfoNotice(
153
+ isListViewOpen
154
+ ? __( 'List View off.' )
155
+ : __( 'List View on.' ),
156
+ {
157
+ id: 'core/editor/toggle-list-view/notice',
158
+ type: 'snackbar',
159
+ }
160
+ );
161
+ },
162
+ } );
277
163
 
278
- if ( isViewable ) {
279
164
  commands.push( {
280
- name: 'core/preview-link',
281
- label: __( 'Preview in a new tab' ),
282
- icon: external,
283
- callback: async ( { close } ) => {
165
+ name: 'core/toggle-top-toolbar',
166
+ label: __( 'Top toolbar' ),
167
+ callback: ( { close } ) => {
168
+ toggleTopToolbar();
284
169
  close();
285
- const postId = getCurrentPostId();
286
- const link = await __unstableSaveForPreview();
287
- window.open( link, `wp-preview-${ postId }` );
288
170
  },
289
171
  } );
290
- }
291
172
 
292
- return {
293
- commands,
294
- isLoading: false,
295
- };
296
- }
173
+ if ( allowSwitchEditorMode ) {
174
+ commands.push( {
175
+ name: 'core/toggle-code-editor',
176
+ label:
177
+ editorMode === 'visual'
178
+ ? __( 'Open code editor' )
179
+ : __( 'Exit code editor' ),
180
+ icon: code,
181
+ callback: ( { close } ) => {
182
+ switchEditorMode(
183
+ editorMode === 'visual' ? 'text' : 'visual'
184
+ );
185
+ close();
186
+ },
187
+ } );
188
+ }
297
189
 
298
- function useEditedEntityContextualCommands() {
299
- const { postType } = useSelect( ( select ) => {
300
- const { getCurrentPostType } = select( editorStore );
301
- return {
302
- postType: getCurrentPostType(),
303
- };
304
- }, [] );
305
- const { openModal } = useDispatch( interfaceStore );
306
- const commands = [];
190
+ commands.push( {
191
+ name: 'core/toggle-breadcrumbs',
192
+ label: showBlockBreadcrumbs
193
+ ? __( 'Hide block breadcrumbs' )
194
+ : __( 'Show block breadcrumbs' ),
195
+ callback: ( { close } ) => {
196
+ toggle( 'core', 'showBlockBreadcrumbs' );
197
+ close();
198
+ createInfoNotice(
199
+ showBlockBreadcrumbs
200
+ ? __( 'Breadcrumbs hidden.' )
201
+ : __( 'Breadcrumbs visible.' ),
202
+ {
203
+ id: 'core/editor/toggle-breadcrumbs/notice',
204
+ type: 'snackbar',
205
+ }
206
+ );
207
+ },
208
+ } );
307
209
 
308
- if ( postType === PATTERN_POST_TYPE ) {
309
210
  commands.push( {
310
- name: 'core/rename-pattern',
311
- label: __( 'Rename pattern' ),
312
- icon: edit,
211
+ name: 'core/open-settings-sidebar',
212
+ label: __( 'Show or hide the Settings panel.' ),
213
+ icon: isRTL() ? drawerLeft : drawerRight,
313
214
  callback: ( { close } ) => {
314
- openModal( patternRenameModalName );
215
+ const activeSidebar = getActiveComplementaryArea( 'core' );
315
216
  close();
217
+ if ( activeSidebar === 'edit-post/document' ) {
218
+ disableComplementaryArea( 'core' );
219
+ } else {
220
+ enableComplementaryArea( 'core', 'edit-post/document' );
221
+ }
316
222
  },
317
223
  } );
224
+
318
225
  commands.push( {
319
- name: 'core/duplicate-pattern',
320
- label: __( 'Duplicate pattern' ),
321
- icon: symbol,
226
+ name: 'core/open-block-inspector',
227
+ label: __( 'Show or hide the Block settings panel' ),
228
+ icon: blockDefault,
322
229
  callback: ( { close } ) => {
323
- openModal( patternDuplicateModalName );
230
+ const activeSidebar = getActiveComplementaryArea( 'core' );
324
231
  close();
232
+ if ( activeSidebar === 'edit-post/block' ) {
233
+ disableComplementaryArea( 'core' );
234
+ } else {
235
+ enableComplementaryArea( 'core', 'edit-post/block' );
236
+ }
325
237
  },
326
238
  } );
327
- }
328
239
 
329
- return { isLoading: false, commands };
330
- }
240
+ commands.push( {
241
+ name: 'core/toggle-publish-sidebar',
242
+ label: isPublishSidebarEnabled
243
+ ? __( 'Disable pre-publish checks' )
244
+ : __( 'Enable pre-publish checks' ),
245
+ icon: formatListBullets,
246
+ callback: ( { close } ) => {
247
+ close();
248
+ toggle( 'core', 'isPublishSidebarEnabled' );
249
+ createInfoNotice(
250
+ isPublishSidebarEnabled
251
+ ? __( 'Pre-publish checks disabled.' )
252
+ : __( 'Pre-publish checks enabled.' ),
253
+ {
254
+ id: 'core/editor/publish-sidebar/notice',
255
+ type: 'snackbar',
256
+ }
257
+ );
258
+ },
259
+ } );
260
+
261
+ if ( isViewable ) {
262
+ commands.push( {
263
+ name: 'core/preview-link',
264
+ label: __( 'Preview in a new tab' ),
265
+ icon: external,
266
+ callback: async ( { close } ) => {
267
+ close();
268
+ const postId = getCurrentPostId();
269
+ const link = await __unstableSaveForPreview();
270
+ window.open( link, `wp-preview-${ postId }` );
271
+ },
272
+ } );
273
+ }
274
+
275
+ return {
276
+ commands,
277
+ isLoading: false,
278
+ };
279
+ };
280
+
281
+ const getEditedEntityContextualCommands = () =>
282
+ function useEditedEntityContextualCommands() {
283
+ const { postType } = useSelect( ( select ) => {
284
+ const { getCurrentPostType } = select( editorStore );
285
+ return {
286
+ postType: getCurrentPostType(),
287
+ };
288
+ }, [] );
289
+ const { openModal } = useDispatch( interfaceStore );
290
+ const commands = [];
291
+
292
+ if ( postType === PATTERN_POST_TYPE ) {
293
+ commands.push( {
294
+ name: 'core/rename-pattern',
295
+ label: __( 'Rename pattern' ),
296
+ icon: edit,
297
+ callback: ( { close } ) => {
298
+ openModal( patternRenameModalName );
299
+ close();
300
+ },
301
+ } );
302
+ commands.push( {
303
+ name: 'core/duplicate-pattern',
304
+ label: __( 'Duplicate pattern' ),
305
+ icon: symbol,
306
+ callback: ( { close } ) => {
307
+ openModal( patternDuplicateModalName );
308
+ close();
309
+ },
310
+ } );
311
+ }
312
+
313
+ return { isLoading: false, commands };
314
+ };
315
+
316
+ const getPageContentFocusCommands = () =>
317
+ function usePageContentFocusCommands() {
318
+ const { onNavigateToEntityRecord, goBack, templateId, isPreviewMode } =
319
+ useSelect( ( select ) => {
320
+ const {
321
+ getRenderingMode,
322
+ getEditorSettings: _getEditorSettings,
323
+ getCurrentTemplateId,
324
+ } = unlock( select( editorStore ) );
325
+ const editorSettings = _getEditorSettings();
326
+ return {
327
+ isTemplateHidden: getRenderingMode() === 'post-only',
328
+ onNavigateToEntityRecord:
329
+ editorSettings.onNavigateToEntityRecord,
330
+ getEditorSettings: _getEditorSettings,
331
+ goBack: editorSettings.onNavigateToPreviousEntityRecord,
332
+ templateId: getCurrentTemplateId(),
333
+ isPreviewMode: editorSettings.isPreviewMode,
334
+ };
335
+ }, [] );
336
+ const { editedRecord: template, hasResolved } = useEntityRecord(
337
+ 'postType',
338
+ 'wp_template',
339
+ templateId
340
+ );
341
+
342
+ if ( isPreviewMode ) {
343
+ return { isLoading: false, commands: [] };
344
+ }
345
+
346
+ const commands = [];
347
+
348
+ if ( templateId && hasResolved ) {
349
+ commands.push( {
350
+ name: 'core/switch-to-template-focus',
351
+ label: sprintf(
352
+ /* translators: %s: template title */
353
+ __( 'Edit template: %s' ),
354
+ decodeEntities( template.title )
355
+ ),
356
+ icon: layout,
357
+ callback: ( { close } ) => {
358
+ onNavigateToEntityRecord( {
359
+ postId: templateId,
360
+ postType: 'wp_template',
361
+ } );
362
+ close();
363
+ },
364
+ } );
365
+ }
366
+
367
+ if ( !! goBack ) {
368
+ commands.push( {
369
+ name: 'core/switch-to-previous-entity',
370
+ label: __( 'Go back' ),
371
+ icon: page,
372
+ callback: ( { close } ) => {
373
+ goBack();
374
+ close();
375
+ },
376
+ } );
377
+ }
378
+
379
+ return { isLoading: false, commands };
380
+ };
381
+
382
+ const getManipulateDocumentCommands = () =>
383
+ function useManipulateDocumentCommands() {
384
+ const { postType, postId } = useSelect( ( select ) => {
385
+ const { getCurrentPostId, getCurrentPostType } =
386
+ select( editorStore );
387
+ return {
388
+ postType: getCurrentPostType(),
389
+ postId: getCurrentPostId(),
390
+ };
391
+ }, [] );
392
+ const { editedRecord: template, hasResolved } = useEntityRecord(
393
+ 'postType',
394
+ postType,
395
+ postId
396
+ );
397
+ // eslint-disable-next-line @wordpress/no-unused-vars-before-return
398
+ const { revertTemplate } = unlock( useDispatch( editorStore ) );
399
+
400
+ if (
401
+ ! hasResolved ||
402
+ ! [ TEMPLATE_PART_POST_TYPE, TEMPLATE_POST_TYPE ].includes(
403
+ postType
404
+ )
405
+ ) {
406
+ return { isLoading: true, commands: [] };
407
+ }
408
+
409
+ const commands = [];
410
+
411
+ if ( isTemplateRevertable( template ) ) {
412
+ const label =
413
+ template.type === TEMPLATE_POST_TYPE
414
+ ? sprintf(
415
+ /* translators: %s: template title */
416
+ __( 'Reset template: %s' ),
417
+ decodeEntities( template.title )
418
+ )
419
+ : sprintf(
420
+ /* translators: %s: template part title */
421
+ __( 'Reset template part: %s' ),
422
+ decodeEntities( template.title )
423
+ );
424
+ commands.push( {
425
+ name: 'core/reset-template',
426
+ label,
427
+ icon: isRTL() ? rotateRight : rotateLeft,
428
+ callback: ( { close } ) => {
429
+ revertTemplate( template );
430
+ close();
431
+ },
432
+ } );
433
+ }
434
+
435
+ return {
436
+ isLoading: ! hasResolved,
437
+ commands,
438
+ };
439
+ };
331
440
 
332
441
  export default function useCommands() {
333
442
  useCommandLoader( {
334
443
  name: 'core/editor/edit-ui',
335
- hook: useEditorCommandLoader,
444
+ hook: getEditorCommandLoader(),
336
445
  } );
337
446
 
338
447
  useCommandLoader( {
339
448
  name: 'core/editor/contextual-commands',
340
- hook: useEditedEntityContextualCommands,
449
+ hook: getEditedEntityContextualCommands(),
341
450
  context: 'entity-edit',
342
451
  } );
452
+
453
+ useCommandLoader( {
454
+ name: 'core/editor/page-content-focus',
455
+ hook: getPageContentFocusCommands(),
456
+ context: 'entity-edit',
457
+ } );
458
+
459
+ useCommandLoader( {
460
+ name: 'core/edit-site/manipulate-document',
461
+ hook: getManipulateDocumentCommands(),
462
+ } );
343
463
  }