@wordpress/edit-post 6.6.0 → 6.9.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 (178) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -1
  3. package/build/components/block-manager/category.js.map +1 -1
  4. package/build/components/block-manager/index.js +12 -4
  5. package/build/components/block-manager/index.js.map +1 -1
  6. package/build/components/device-preview/index.js.map +1 -1
  7. package/build/components/editor-initialization/listener-hooks.js.map +1 -1
  8. package/build/components/header/fullscreen-mode-close/index.js.map +1 -1
  9. package/build/components/header/header-toolbar/index.js.map +1 -1
  10. package/build/components/header/index.js.map +1 -1
  11. package/build/components/header/mode-switcher/index.js.map +1 -1
  12. package/build/components/header/post-publish-button-or-toggle.js.map +1 -1
  13. package/build/components/header/template-title/delete-template.js.map +1 -1
  14. package/build/components/header/template-title/index.js.map +1 -1
  15. package/build/components/header/tools-more-menu-group/index.js.map +1 -1
  16. package/build/components/keyboard-shortcut-help-modal/config.js +12 -0
  17. package/build/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  18. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  19. package/build/components/layout/actions-panel.js.map +1 -1
  20. package/build/components/layout/index.js.map +1 -1
  21. package/build/components/layout/index.native.js.map +1 -1
  22. package/build/components/preferences-modal/options/enable-custom-fields.js.map +1 -1
  23. package/build/components/preferences-modal/options/enable-panel.js.map +1 -1
  24. package/build/components/preferences-modal/options/enable-publish-sidebar.js.map +1 -1
  25. package/build/components/secondary-sidebar/inserter-sidebar.js.map +1 -1
  26. package/build/components/sidebar/discussion-panel/index.js.map +1 -1
  27. package/build/components/sidebar/featured-image/index.js.map +1 -1
  28. package/build/components/sidebar/page-attributes/index.js.map +1 -1
  29. package/build/components/sidebar/plugin-document-setting-panel/index.js.map +1 -1
  30. package/build/components/sidebar/plugin-post-status-info/index.js +2 -2
  31. package/build/components/sidebar/plugin-post-status-info/index.js.map +1 -1
  32. package/build/components/sidebar/plugin-sidebar/index.js.map +1 -1
  33. package/build/components/sidebar/post-excerpt/index.js.map +1 -1
  34. package/build/components/sidebar/post-link/index.js.map +1 -1
  35. package/build/components/sidebar/post-schedule/index.js +14 -7
  36. package/build/components/sidebar/post-schedule/index.js.map +1 -1
  37. package/build/components/sidebar/post-status/index.js +4 -2
  38. package/build/components/sidebar/post-status/index.js.map +1 -1
  39. package/build/components/sidebar/post-template/create-modal.js +116 -0
  40. package/build/components/sidebar/post-template/create-modal.js.map +1 -0
  41. package/build/components/sidebar/post-template/form.js +123 -0
  42. package/build/components/sidebar/post-template/form.js.map +1 -0
  43. package/build/components/sidebar/post-template/index.js +123 -0
  44. package/build/components/sidebar/post-template/index.js.map +1 -0
  45. package/build/components/sidebar/settings-sidebar/index.js +1 -3
  46. package/build/components/sidebar/settings-sidebar/index.js.map +1 -1
  47. package/build/components/start-page-options/index.js +31 -13
  48. package/build/components/start-page-options/index.js.map +1 -1
  49. package/build/components/visual-editor/block-inspector-button.js +3 -7
  50. package/build/components/visual-editor/block-inspector-button.js.map +1 -1
  51. package/build/editor.js +1 -1
  52. package/build/editor.js.map +1 -1
  53. package/build/editor.native.js +9 -1
  54. package/build/editor.native.js.map +1 -1
  55. package/build/plugins/copy-content-menu-item/index.js +1 -1
  56. package/build/plugins/copy-content-menu-item/index.js.map +1 -1
  57. package/build/store/actions.js.map +1 -1
  58. package/build/store/selectors.js +8 -8
  59. package/build/store/selectors.js.map +1 -1
  60. package/build-module/components/block-manager/category.js.map +1 -1
  61. package/build-module/components/block-manager/index.js +13 -5
  62. package/build-module/components/block-manager/index.js.map +1 -1
  63. package/build-module/components/device-preview/index.js.map +1 -1
  64. package/build-module/components/editor-initialization/listener-hooks.js.map +1 -1
  65. package/build-module/components/header/fullscreen-mode-close/index.js.map +1 -1
  66. package/build-module/components/header/header-toolbar/index.js.map +1 -1
  67. package/build-module/components/header/index.js.map +1 -1
  68. package/build-module/components/header/mode-switcher/index.js.map +1 -1
  69. package/build-module/components/header/post-publish-button-or-toggle.js.map +1 -1
  70. package/build-module/components/header/template-title/delete-template.js.map +1 -1
  71. package/build-module/components/header/template-title/index.js.map +1 -1
  72. package/build-module/components/header/tools-more-menu-group/index.js.map +1 -1
  73. package/build-module/components/keyboard-shortcut-help-modal/config.js +12 -0
  74. package/build-module/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  75. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  76. package/build-module/components/layout/actions-panel.js.map +1 -1
  77. package/build-module/components/layout/index.js.map +1 -1
  78. package/build-module/components/layout/index.native.js.map +1 -1
  79. package/build-module/components/preferences-modal/options/enable-custom-fields.js.map +1 -1
  80. package/build-module/components/preferences-modal/options/enable-panel.js.map +1 -1
  81. package/build-module/components/preferences-modal/options/enable-publish-sidebar.js.map +1 -1
  82. package/build-module/components/secondary-sidebar/inserter-sidebar.js.map +1 -1
  83. package/build-module/components/sidebar/discussion-panel/index.js.map +1 -1
  84. package/build-module/components/sidebar/featured-image/index.js.map +1 -1
  85. package/build-module/components/sidebar/page-attributes/index.js.map +1 -1
  86. package/build-module/components/sidebar/plugin-document-setting-panel/index.js.map +1 -1
  87. package/build-module/components/sidebar/plugin-post-status-info/index.js +2 -2
  88. package/build-module/components/sidebar/plugin-post-status-info/index.js.map +1 -1
  89. package/build-module/components/sidebar/plugin-sidebar/index.js.map +1 -1
  90. package/build-module/components/sidebar/post-excerpt/index.js.map +1 -1
  91. package/build-module/components/sidebar/post-link/index.js.map +1 -1
  92. package/build-module/components/sidebar/post-schedule/index.js +15 -5
  93. package/build-module/components/sidebar/post-schedule/index.js.map +1 -1
  94. package/build-module/components/sidebar/post-status/index.js +3 -2
  95. package/build-module/components/sidebar/post-status/index.js.map +1 -1
  96. package/build-module/components/sidebar/post-template/create-modal.js +104 -0
  97. package/build-module/components/sidebar/post-template/create-modal.js.map +1 -0
  98. package/build-module/components/sidebar/post-template/form.js +106 -0
  99. package/build-module/components/sidebar/post-template/form.js.map +1 -0
  100. package/build-module/components/sidebar/post-template/index.js +109 -0
  101. package/build-module/components/sidebar/post-template/index.js.map +1 -0
  102. package/build-module/components/sidebar/settings-sidebar/index.js +1 -2
  103. package/build-module/components/sidebar/settings-sidebar/index.js.map +1 -1
  104. package/build-module/components/start-page-options/index.js +32 -14
  105. package/build-module/components/start-page-options/index.js.map +1 -1
  106. package/build-module/components/visual-editor/block-inspector-button.js +3 -5
  107. package/build-module/components/visual-editor/block-inspector-button.js.map +1 -1
  108. package/build-module/editor.js +2 -2
  109. package/build-module/editor.js.map +1 -1
  110. package/build-module/editor.native.js +10 -2
  111. package/build-module/editor.native.js.map +1 -1
  112. package/build-module/plugins/copy-content-menu-item/index.js +1 -1
  113. package/build-module/plugins/copy-content-menu-item/index.js.map +1 -1
  114. package/build-module/store/actions.js.map +1 -1
  115. package/build-module/store/selectors.js +8 -7
  116. package/build-module/store/selectors.js.map +1 -1
  117. package/build-style/style-rtl.css +60 -49
  118. package/build-style/style.css +60 -49
  119. package/package.json +28 -28
  120. package/src/components/block-manager/category.js +2 -2
  121. package/src/components/block-manager/index.js +15 -4
  122. package/src/components/device-preview/index.js +4 -6
  123. package/src/components/editor-initialization/listener-hooks.js +2 -3
  124. package/src/components/header/fullscreen-mode-close/index.js +2 -3
  125. package/src/components/header/header-toolbar/index.js +6 -11
  126. package/src/components/header/index.js +6 -9
  127. package/src/components/header/mode-switcher/index.js +4 -4
  128. package/src/components/header/post-publish-button-or-toggle.js +4 -6
  129. package/src/components/header/template-title/delete-template.js +2 -3
  130. package/src/components/header/template-title/index.js +2 -3
  131. package/src/components/header/tools-more-menu-group/index.js +2 -3
  132. package/src/components/keyboard-shortcut-help-modal/config.js +8 -0
  133. package/src/components/keyboard-shortcut-help-modal/test/__snapshots__/index.js.snap +14 -0
  134. package/src/components/keyboard-shortcut-help-modal/test/index.js +2 -1
  135. package/src/components/keyboard-shortcuts/index.js +4 -8
  136. package/src/components/layout/actions-panel.js +6 -9
  137. package/src/components/layout/index.js +12 -21
  138. package/src/components/layout/index.native.js +4 -5
  139. package/src/components/preferences-modal/options/enable-custom-fields.js +2 -2
  140. package/src/components/preferences-modal/options/enable-panel.js +2 -3
  141. package/src/components/preferences-modal/options/enable-publish-sidebar.js +2 -3
  142. package/src/components/secondary-sidebar/inserter-sidebar.js +2 -3
  143. package/src/components/sidebar/discussion-panel/index.js +2 -3
  144. package/src/components/sidebar/featured-image/index.js +2 -3
  145. package/src/components/sidebar/page-attributes/index.js +2 -3
  146. package/src/components/sidebar/plugin-document-setting-panel/index.js +2 -3
  147. package/src/components/sidebar/plugin-post-status-info/index.js +2 -2
  148. package/src/components/sidebar/plugin-sidebar/index.js +2 -3
  149. package/src/components/sidebar/post-excerpt/index.js +2 -3
  150. package/src/components/sidebar/post-link/index.js +2 -3
  151. package/src/components/sidebar/post-schedule/index.js +8 -4
  152. package/src/components/sidebar/post-schedule/style.scss +19 -6
  153. package/src/components/sidebar/post-status/index.js +5 -4
  154. package/src/components/sidebar/post-template/create-modal.js +146 -0
  155. package/src/components/sidebar/post-template/form.js +140 -0
  156. package/src/components/sidebar/post-template/index.js +101 -0
  157. package/src/components/sidebar/post-template/style.scss +46 -0
  158. package/src/components/sidebar/post-visibility/style.scss +5 -4
  159. package/src/components/sidebar/settings-sidebar/index.js +0 -2
  160. package/src/components/start-page-options/index.js +48 -28
  161. package/src/components/visual-editor/block-inspector-button.js +4 -8
  162. package/src/editor.js +8 -10
  163. package/src/editor.native.js +13 -6
  164. package/src/plugins/copy-content-menu-item/index.js +1 -1
  165. package/src/store/actions.js +322 -295
  166. package/src/store/selectors.js +21 -24
  167. package/src/style.scss +1 -1
  168. package/build/components/sidebar/template/actions.js +0 -167
  169. package/build/components/sidebar/template/actions.js.map +0 -1
  170. package/build/components/sidebar/template/index.js +0 -164
  171. package/build/components/sidebar/template/index.js.map +0 -1
  172. package/build-module/components/sidebar/template/actions.js +0 -153
  173. package/build-module/components/sidebar/template/actions.js.map +0 -1
  174. package/build-module/components/sidebar/template/index.js +0 -145
  175. package/build-module/components/sidebar/template/index.js.map +0 -1
  176. package/src/components/sidebar/template/actions.js +0 -203
  177. package/src/components/sidebar/template/index.js +0 -164
  178. package/src/components/sidebar/template/style.scss +0 -43
@@ -18,15 +18,11 @@ import { store as editPostStore } from '../../store';
18
18
 
19
19
  function KeyboardShortcuts() {
20
20
  const { getBlockSelectionStart } = useSelect( blockEditorStore );
21
- const {
22
- getEditorMode,
23
- isEditorSidebarOpened,
24
- isListViewOpened,
25
- } = useSelect( editPostStore );
21
+ const { getEditorMode, isEditorSidebarOpened, isListViewOpened } =
22
+ useSelect( editPostStore );
26
23
  const isModeToggleDisabled = useSelect( ( select ) => {
27
- const { richEditingEnabled, codeEditingEnabled } = select(
28
- editorStore
29
- ).getEditorSettings();
24
+ const { richEditingEnabled, codeEditingEnabled } =
25
+ select( editorStore ).getEditorSettings();
30
26
  return ! richEditingEnabled || ! codeEditingEnabled;
31
27
  }, [] );
32
28
 
@@ -26,9 +26,8 @@ export default function ActionsPanel( {
26
26
  closeEntitiesSavedStates,
27
27
  isEntitiesSavedStatesOpen,
28
28
  } ) {
29
- const { closePublishSidebar, togglePublishSidebar } = useDispatch(
30
- editPostStore
31
- );
29
+ const { closePublishSidebar, togglePublishSidebar } =
30
+ useDispatch( editPostStore );
32
31
  const {
33
32
  publishSidebarOpened,
34
33
  hasActiveMetaboxes,
@@ -36,14 +35,12 @@ export default function ActionsPanel( {
36
35
  hasNonPostEntityChanges,
37
36
  } = useSelect( ( select ) => {
38
37
  return {
39
- publishSidebarOpened: select(
40
- editPostStore
41
- ).isPublishSidebarOpened(),
38
+ publishSidebarOpened:
39
+ select( editPostStore ).isPublishSidebarOpened(),
42
40
  hasActiveMetaboxes: select( editPostStore ).hasMetaBoxes(),
43
41
  isSavingMetaBoxes: select( editPostStore ).isSavingMetaBoxes(),
44
- hasNonPostEntityChanges: select(
45
- editorStore
46
- ).hasNonPostEntityChanges(),
42
+ hasNonPostEntityChanges:
43
+ select( editorStore ).hasNonPostEntityChanges(),
47
44
  };
48
45
  }, [] );
49
46
 
@@ -66,11 +66,8 @@ const interfaceLabels = {
66
66
  function Layout( { styles } ) {
67
67
  const isMobileViewport = useViewportMatch( 'medium', '<' );
68
68
  const isHugeViewport = useViewportMatch( 'huge', '>=' );
69
- const {
70
- openGeneralSidebar,
71
- closeGeneralSidebar,
72
- setIsInserterOpened,
73
- } = useDispatch( editPostStore );
69
+ const { openGeneralSidebar, closeGeneralSidebar, setIsInserterOpened } =
70
+ useDispatch( editPostStore );
74
71
  const { createErrorNotice } = useDispatch( noticesStore );
75
72
  const {
76
73
  mode,
@@ -96,17 +93,15 @@ function Layout( { styles } ) {
96
93
 
97
94
  return {
98
95
  isTemplateMode: select( editPostStore ).isEditingTemplate(),
99
- hasFixedToolbar: select( editPostStore ).isFeatureActive(
100
- 'fixedToolbar'
101
- ),
96
+ hasFixedToolbar:
97
+ select( editPostStore ).isFeatureActive( 'fixedToolbar' ),
102
98
  sidebarIsOpened: !! (
103
99
  select( interfaceStore ).getActiveComplementaryArea(
104
100
  editPostStore.name
105
101
  ) || select( editPostStore ).isPublishSidebarOpened()
106
102
  ),
107
- isFullscreenActive: select( editPostStore ).isFeatureActive(
108
- 'fullscreenMode'
109
- ),
103
+ isFullscreenActive:
104
+ select( editPostStore ).isFeatureActive( 'fullscreenMode' ),
110
105
  isInserterOpened: select( editPostStore ).isInserterOpened(),
111
106
  isListViewOpened: select( editPostStore ).isListViewOpened(),
112
107
  mode: select( editPostStore ).getEditorMode(),
@@ -118,12 +113,10 @@ function Layout( { styles } ) {
118
113
  nextShortcut: select(
119
114
  keyboardShortcutsStore
120
115
  ).getAllShortcutKeyCombinations( 'core/edit-post/next-region' ),
121
- showIconLabels: select( editPostStore ).isFeatureActive(
122
- 'showIconLabels'
123
- ),
124
- hasReducedUI: select( editPostStore ).isFeatureActive(
125
- 'reducedUI'
126
- ),
116
+ showIconLabels:
117
+ select( editPostStore ).isFeatureActive( 'showIconLabels' ),
118
+ hasReducedUI:
119
+ select( editPostStore ).isFeatureActive( 'reducedUI' ),
127
120
  showBlockBreadcrumbs: select( editPostStore ).isFeatureActive(
128
121
  'showBlockBreadcrumbs'
129
122
  ),
@@ -156,10 +149,8 @@ function Layout( { styles } ) {
156
149
 
157
150
  // Local state for save panel.
158
151
  // Note 'truthy' callback implies an open panel.
159
- const [
160
- entitiesSavedStatesCallback,
161
- setEntitiesSavedStatesCallback,
162
- ] = useState( false );
152
+ const [ entitiesSavedStatesCallback, setEntitiesSavedStatesCallback ] =
153
+ useState( false );
163
154
  const closeEntitiesSavedStates = useCallback(
164
155
  ( arg ) => {
165
156
  if ( typeof entitiesSavedStatesCallback === 'function' ) {
@@ -187,13 +187,12 @@ class Layout extends Component {
187
187
 
188
188
  export default compose( [
189
189
  withSelect( ( select ) => {
190
- const { __unstableIsEditorReady: isEditorReady } = select(
191
- editorStore
192
- );
190
+ const { __unstableIsEditorReady: isEditorReady } =
191
+ select( editorStore );
193
192
  const { getEditorMode } = select( editPostStore );
194
193
  const { getSettings } = select( blockEditorStore );
195
- const globalStyles = getSettings()?.__experimentalGlobalStylesBaseStyles
196
- ?.color;
194
+ const globalStyles =
195
+ getSettings()?.__experimentalGlobalStylesBaseStyles?.color;
197
196
 
198
197
  return {
199
198
  isReady: isEditorReady(),
@@ -55,6 +55,6 @@ export function EnableCustomFieldsOption( { label, areCustomFieldsEnabled } ) {
55
55
  }
56
56
 
57
57
  export default withSelect( ( select ) => ( {
58
- areCustomFieldsEnabled: !! select( editorStore ).getEditorSettings()
59
- .enableCustomFields,
58
+ areCustomFieldsEnabled:
59
+ !! select( editorStore ).getEditorSettings().enableCustomFields,
60
60
  } ) )( EnableCustomFieldsOption );
@@ -12,9 +12,8 @@ import { store as editPostStore } from '../../../store';
12
12
 
13
13
  export default compose(
14
14
  withSelect( ( select, { panelName } ) => {
15
- const { isEditorPanelEnabled, isEditorPanelRemoved } = select(
16
- editPostStore
17
- );
15
+ const { isEditorPanelEnabled, isEditorPanelRemoved } =
16
+ select( editPostStore );
18
17
  return {
19
18
  isRemoved: isEditorPanelRemoved( panelName ),
20
19
  isChecked: isEditorPanelEnabled( panelName ),
@@ -12,9 +12,8 @@ export default compose(
12
12
  isChecked: select( editorStore ).isPublishSidebarEnabled(),
13
13
  } ) ),
14
14
  withDispatch( ( dispatch ) => {
15
- const { enablePublishSidebar, disablePublishSidebar } = dispatch(
16
- editorStore
17
- );
15
+ const { enablePublishSidebar, disablePublishSidebar } =
16
+ dispatch( editorStore );
18
17
  return {
19
18
  onChange: ( isEnabled ) =>
20
19
  isEnabled ? enablePublishSidebar() : disablePublishSidebar(),
@@ -19,9 +19,8 @@ import { store as editPostStore } from '../../store';
19
19
 
20
20
  export default function InserterSidebar() {
21
21
  const { insertionPoint, showMostUsedBlocks } = useSelect( ( select ) => {
22
- const { isFeatureActive, __experimentalGetInsertionPoint } = select(
23
- editPostStore
24
- );
22
+ const { isFeatureActive, __experimentalGetInsertionPoint } =
23
+ select( editPostStore );
25
24
  return {
26
25
  insertionPoint: __experimentalGetInsertionPoint(),
27
26
  showMostUsedBlocks: isFeatureActive( 'mostUsedBlocks' ),
@@ -52,9 +52,8 @@ function DiscussionPanel( { isEnabled, isOpened, onTogglePanel } ) {
52
52
  export default compose( [
53
53
  withSelect( ( select ) => {
54
54
  return {
55
- isEnabled: select( editPostStore ).isEditorPanelEnabled(
56
- PANEL_NAME
57
- ),
55
+ isEnabled:
56
+ select( editPostStore ).isEditorPanelEnabled( PANEL_NAME ),
58
57
  isOpened: select( editPostStore ).isEditorPanelOpened( PANEL_NAME ),
59
58
  };
60
59
  } ),
@@ -52,9 +52,8 @@ function FeaturedImage( { isEnabled, isOpened, postType, onTogglePanel } ) {
52
52
  const applyWithSelect = withSelect( ( select ) => {
53
53
  const { getEditedPostAttribute } = select( editorStore );
54
54
  const { getPostType } = select( coreStore );
55
- const { isEditorPanelEnabled, isEditorPanelOpened } = select(
56
- editPostStore
57
- );
55
+ const { isEditorPanelEnabled, isEditorPanelOpened } =
56
+ select( editPostStore );
58
57
 
59
58
  return {
60
59
  postType: getPostType( getEditedPostAttribute( 'type' ) ),
@@ -30,9 +30,8 @@ const PANEL_NAME = 'page-attributes';
30
30
  export function PageAttributes() {
31
31
  const { isEnabled, isOpened, postType } = useSelect( ( select ) => {
32
32
  const { getEditedPostAttribute } = select( editorStore );
33
- const { isEditorPanelEnabled, isEditorPanelOpened } = select(
34
- editPostStore
35
- );
33
+ const { isEditorPanelEnabled, isEditorPanelOpened } =
34
+ select( editPostStore );
36
35
  const { getPostType } = select( coreStore );
37
36
  return {
38
37
  isEnabled: isEditorPanelEnabled( PANEL_NAME ),
@@ -114,9 +114,8 @@ const PluginDocumentSettingPanel = compose(
114
114
  withSelect( ( select, { panelName } ) => {
115
115
  return {
116
116
  opened: select( editPostStore ).isEditorPanelOpened( panelName ),
117
- isEnabled: select( editPostStore ).isEditorPanelEnabled(
118
- panelName
119
- ),
117
+ isEnabled:
118
+ select( editPostStore ).isEditorPanelEnabled( panelName ),
120
119
  };
121
120
  } ),
122
121
  withDispatch( ( dispatch, { panelName } ) => ( {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Defines as extensibility slot for the Status & visibility panel.
2
+ * Defines as extensibility slot for the Summary panel.
3
3
  */
4
4
 
5
5
  /**
@@ -10,7 +10,7 @@ import { createSlotFill, PanelRow } from '@wordpress/components';
10
10
  export const { Fill, Slot } = createSlotFill( 'PluginPostStatusInfo' );
11
11
 
12
12
  /**
13
- * Renders a row in the Status & visibility panel of the Document sidebar.
13
+ * Renders a row in the Summary panel of the Document sidebar.
14
14
  * It should be noted that this is named and implemented around the function it serves
15
15
  * and not its location, which may change in future iterations.
16
16
  *
@@ -84,9 +84,8 @@ export default function PluginSidebarEditPost( { className, ...props } ) {
84
84
  shortcut: select(
85
85
  keyboardShortcutsStore
86
86
  ).getShortcutRepresentation( 'core/edit-post/toggle-sidebar' ),
87
- showIconLabels: select( editPostStore ).isFeatureActive(
88
- 'showIconLabels'
89
- ),
87
+ showIconLabels:
88
+ select( editPostStore ).isFeatureActive( 'showIconLabels' ),
90
89
  };
91
90
  }, [] );
92
91
  return (
@@ -41,9 +41,8 @@ function PostExcerpt( { isEnabled, isOpened, onTogglePanel } ) {
41
41
  export default compose( [
42
42
  withSelect( ( select ) => {
43
43
  return {
44
- isEnabled: select( editPostStore ).isEditorPanelEnabled(
45
- PANEL_NAME
46
- ),
44
+ isEnabled:
45
+ select( editPostStore ).isEditorPanelEnabled( PANEL_NAME ),
47
46
  isOpened: select( editPostStore ).isEditorPanelOpened( PANEL_NAME ),
48
47
  };
49
48
  } ),
@@ -139,9 +139,8 @@ export default compose( [
139
139
  getEditedPostAttribute,
140
140
  getEditedPostSlug,
141
141
  } = select( editorStore );
142
- const { isEditorPanelEnabled, isEditorPanelOpened } = select(
143
- editPostStore
144
- );
142
+ const { isEditorPanelEnabled, isEditorPanelOpened } =
143
+ select( editPostStore );
145
144
  const { getPostType } = select( coreStore );
146
145
 
147
146
  const { link } = getCurrentPost();
@@ -8,11 +8,14 @@ import {
8
8
  PostSchedule as PostScheduleForm,
9
9
  PostScheduleLabel,
10
10
  PostScheduleCheck,
11
+ usePostScheduleLabel,
11
12
  } from '@wordpress/editor';
12
13
 
13
- export function PostSchedule() {
14
+ export default function PostSchedule() {
14
15
  const anchorRef = useRef();
15
16
 
17
+ const fullLabel = usePostScheduleLabel( { full: true } );
18
+
16
19
  return (
17
20
  <PostScheduleCheck>
18
21
  <PanelRow className="edit-post-post-schedule" ref={ anchorRef }>
@@ -28,16 +31,17 @@ export function PostSchedule() {
28
31
  onClick={ onToggle }
29
32
  aria-expanded={ isOpen }
30
33
  variant="tertiary"
34
+ label={ fullLabel }
31
35
  >
32
36
  <PostScheduleLabel />
33
37
  </Button>
34
38
  </>
35
39
  ) }
36
- renderContent={ () => <PostScheduleForm /> }
40
+ renderContent={ ( { onClose } ) => (
41
+ <PostScheduleForm onClose={ onClose } />
42
+ ) }
37
43
  />
38
44
  </PanelRow>
39
45
  </PostScheduleCheck>
40
46
  );
41
47
  }
42
-
43
- export default PostSchedule;
@@ -1,20 +1,33 @@
1
1
  .edit-post-post-schedule {
2
2
  width: 100%;
3
3
  position: relative;
4
- justify-content: left;
4
+ justify-content: flex-start;
5
+ align-items: flex-start;
5
6
 
6
7
  span {
7
8
  display: block;
8
9
  width: 45%;
10
+ flex-shrink: 0;
11
+ padding: 6px 0;
9
12
  }
10
13
  }
11
14
 
12
15
  .components-button.edit-post-post-schedule__toggle {
13
- text-align: right;
16
+ text-align: left;
17
+ white-space: normal;
18
+ height: auto;
19
+
20
+ // This span is added by the Popover in Tooltip when no anchorRef is
21
+ // provided. We set its width to 0 so that it does not cause the button text
22
+ // to wrap to a new line when displaying the tooltip. A better fix would be
23
+ // to pass anchorRef and avoid the need for a span alltogether, which is
24
+ // what this PR allows us to do:
25
+ // https://github.com/WordPress/gutenberg/pull/41268.
26
+ span {
27
+ width: 0;
28
+ }
14
29
  }
15
30
 
16
- // Zero out a blanket padding that is set on the dropdown component.
17
- // The datetime component has its own padding.
18
- .edit-post-post-schedule__dialog .components-popover__content {
19
- padding: 0;
31
+ .edit-post-post-schedule__dialog .block-editor-publish-date-time-picker {
32
+ margin: $grid-unit-10;
20
33
  }
@@ -19,6 +19,7 @@ import PostFormat from '../post-format';
19
19
  import PostPendingStatus from '../post-pending-status';
20
20
  import PluginPostStatusInfo from '../plugin-post-status-info';
21
21
  import { store as editPostStore } from '../../../store';
22
+ import PostTemplate from '../post-template';
22
23
 
23
24
  /**
24
25
  * Module Constants
@@ -29,7 +30,7 @@ function PostStatus( { isOpened, onTogglePanel } ) {
29
30
  return (
30
31
  <PanelBody
31
32
  className="edit-post-post-status"
32
- title={ __( 'Status & visibility' ) }
33
+ title={ __( 'Summary' ) }
33
34
  opened={ isOpened }
34
35
  onToggle={ onTogglePanel }
35
36
  >
@@ -38,6 +39,7 @@ function PostStatus( { isOpened, onTogglePanel } ) {
38
39
  <>
39
40
  <PostVisibility />
40
41
  <PostSchedule />
42
+ <PostTemplate />
41
43
  <PostFormat />
42
44
  <PostSticky />
43
45
  <PostPendingStatus />
@@ -56,9 +58,8 @@ export default compose( [
56
58
  withSelect( ( select ) => {
57
59
  // We use isEditorPanelRemoved to hide the panel if it was programatically removed. We do
58
60
  // not use isEditorPanelEnabled since this panel should not be disabled through the UI.
59
- const { isEditorPanelRemoved, isEditorPanelOpened } = select(
60
- editPostStore
61
- );
61
+ const { isEditorPanelRemoved, isEditorPanelOpened } =
62
+ select( editPostStore );
62
63
  return {
63
64
  isRemoved: isEditorPanelRemoved( PANEL_NAME ),
64
65
  isOpened: isEditorPanelOpened( PANEL_NAME ),
@@ -0,0 +1,146 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useSelect, useDispatch } from '@wordpress/data';
5
+ import { store as editorStore } from '@wordpress/editor';
6
+ import { useState } from '@wordpress/element';
7
+ import { serialize, createBlock } from '@wordpress/blocks';
8
+ import {
9
+ Modal,
10
+ Flex,
11
+ FlexItem,
12
+ TextControl,
13
+ Button,
14
+ } from '@wordpress/components';
15
+ import { __ } from '@wordpress/i18n';
16
+ import { cleanForSlug } from '@wordpress/url';
17
+
18
+ /**
19
+ * Internal dependencies
20
+ */
21
+ import { store as editPostStore } from '../../../store';
22
+
23
+ const DEFAULT_TITLE = __( 'Custom Template' );
24
+
25
+ export default function PostTemplateCreateModal( { onClose } ) {
26
+ const defaultBlockTemplate = useSelect(
27
+ ( select ) =>
28
+ select( editorStore ).getEditorSettings().defaultBlockTemplate,
29
+ []
30
+ );
31
+
32
+ const { __unstableCreateTemplate, __unstableSwitchToTemplateMode } =
33
+ useDispatch( editPostStore );
34
+
35
+ const [ title, setTitle ] = useState( '' );
36
+
37
+ const [ isBusy, setIsBusy ] = useState( false );
38
+
39
+ const cancel = () => {
40
+ setTitle( '' );
41
+ onClose();
42
+ };
43
+
44
+ const submit = async ( event ) => {
45
+ event.preventDefault();
46
+
47
+ if ( isBusy ) {
48
+ return;
49
+ }
50
+
51
+ setIsBusy( true );
52
+
53
+ const newTemplateContent =
54
+ defaultBlockTemplate ??
55
+ serialize( [
56
+ createBlock(
57
+ 'core/group',
58
+ {
59
+ tagName: 'header',
60
+ layout: { inherit: true },
61
+ },
62
+ [
63
+ createBlock( 'core/site-title' ),
64
+ createBlock( 'core/site-tagline' ),
65
+ ]
66
+ ),
67
+ createBlock( 'core/separator' ),
68
+ createBlock(
69
+ 'core/group',
70
+ {
71
+ tagName: 'main',
72
+ },
73
+ [
74
+ createBlock(
75
+ 'core/group',
76
+ {
77
+ layout: { inherit: true },
78
+ },
79
+ [ createBlock( 'core/post-title' ) ]
80
+ ),
81
+ createBlock( 'core/post-content', {
82
+ layout: { inherit: true },
83
+ } ),
84
+ ]
85
+ ),
86
+ ] );
87
+
88
+ await __unstableCreateTemplate( {
89
+ slug: cleanForSlug( title || DEFAULT_TITLE ),
90
+ content: newTemplateContent,
91
+ title: title || DEFAULT_TITLE,
92
+ } );
93
+
94
+ setIsBusy( false );
95
+ cancel();
96
+
97
+ __unstableSwitchToTemplateMode( true );
98
+ };
99
+
100
+ return (
101
+ <Modal
102
+ title={ __( 'Create custom template' ) }
103
+ closeLabel={ __( 'Close' ) }
104
+ onRequestClose={ cancel }
105
+ className="edit-post-post-template__create-modal"
106
+ >
107
+ <form
108
+ className="edit-post-post-template__create-form"
109
+ onSubmit={ submit }
110
+ >
111
+ <Flex align="flex-start" gap={ 8 }>
112
+ <FlexItem>
113
+ <TextControl
114
+ label={ __( 'Name' ) }
115
+ value={ title }
116
+ onChange={ setTitle }
117
+ placeholder={ DEFAULT_TITLE }
118
+ disabled={ isBusy }
119
+ help={ __(
120
+ 'Describe the purpose of the template, e.g. "Full Width". Custom templates can be applied to any post or page.'
121
+ ) }
122
+ />
123
+ </FlexItem>
124
+ </Flex>
125
+
126
+ <Flex justify="flex-end" expanded={ false }>
127
+ <FlexItem>
128
+ <Button variant="tertiary" onClick={ cancel }>
129
+ { __( 'Cancel' ) }
130
+ </Button>
131
+ </FlexItem>
132
+ <FlexItem>
133
+ <Button
134
+ variant="primary"
135
+ type="submit"
136
+ isBusy={ isBusy }
137
+ aria-disabled={ isBusy }
138
+ >
139
+ { __( 'Create' ) }
140
+ </Button>
141
+ </FlexItem>
142
+ </Flex>
143
+ </form>
144
+ </Modal>
145
+ );
146
+ }