@wordpress/editor 13.34.0 → 13.35.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 (263) hide show
  1. package/CHANGELOG.md +10 -4
  2. package/build/bindings/pattern-overrides.js +70 -1
  3. package/build/bindings/pattern-overrides.js.map +1 -1
  4. package/build/components/block-settings-menu/content-only-settings-menu.js +126 -0
  5. package/build/components/block-settings-menu/content-only-settings-menu.js.map +1 -0
  6. package/build/components/block-settings-menu/content-only-settings-menu.native.js +11 -0
  7. package/build/components/block-settings-menu/content-only-settings-menu.native.js.map +1 -0
  8. package/build/components/collapsible-block-toolbar/index.js +2 -2
  9. package/build/components/collapsible-block-toolbar/index.js.map +1 -1
  10. package/build/components/document-bar/index.js +2 -2
  11. package/build/components/document-bar/index.js.map +1 -1
  12. package/build/components/document-outline/item.js +2 -2
  13. package/build/components/document-outline/item.js.map +1 -1
  14. package/build/components/document-tools/index.js +15 -18
  15. package/build/components/document-tools/index.js.map +1 -1
  16. package/build/components/editor-canvas/index.js +19 -8
  17. package/build/components/editor-canvas/index.js.map +1 -1
  18. package/build/components/global-keyboard-shortcuts/register-shortcuts.js +1 -1
  19. package/build/components/global-keyboard-shortcuts/register-shortcuts.js.map +1 -1
  20. package/build/components/global-styles-provider/index.js +130 -0
  21. package/build/components/global-styles-provider/index.js.map +1 -0
  22. package/build/components/header/index.js +147 -0
  23. package/build/components/header/index.js.map +1 -0
  24. package/build/components/inserter-sidebar/index.js +56 -31
  25. package/build/components/inserter-sidebar/index.js.map +1 -1
  26. package/build/components/keyboard-shortcut-help-modal/index.js +2 -2
  27. package/build/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  28. package/build/components/post-actions/actions.js +122 -64
  29. package/build/components/post-actions/actions.js.map +1 -1
  30. package/build/components/post-actions/index.js +7 -14
  31. package/build/components/post-actions/index.js.map +1 -1
  32. package/build/components/post-card-panel/index.js +5 -29
  33. package/build/components/post-card-panel/index.js.map +1 -1
  34. package/build/components/post-comments/index.js +28 -8
  35. package/build/components/post-comments/index.js.map +1 -1
  36. package/build/components/post-discussion/panel.js +103 -21
  37. package/build/components/post-discussion/panel.js.map +1 -1
  38. package/build/components/post-excerpt/panel.js +2 -2
  39. package/build/components/post-excerpt/panel.js.map +1 -1
  40. package/build/components/post-format/panel.js +27 -0
  41. package/build/components/post-format/panel.js.map +1 -0
  42. package/build/components/post-panel-row/index.js +2 -2
  43. package/build/components/post-panel-row/index.js.map +1 -1
  44. package/build/components/post-panel-section/index.js +28 -0
  45. package/build/components/post-panel-section/index.js.map +1 -0
  46. package/build/components/post-pingbacks/index.js +5 -2
  47. package/build/components/post-pingbacks/index.js.map +1 -1
  48. package/build/components/post-saved-state/index.js +2 -2
  49. package/build/components/post-saved-state/index.js.map +1 -1
  50. package/build/components/post-slug/panel.js +27 -0
  51. package/build/components/post-slug/panel.js.map +1 -0
  52. package/build/components/post-status/index.js +4 -4
  53. package/build/components/post-status/index.js.map +1 -1
  54. package/build/components/post-sticky/panel.js +21 -0
  55. package/build/components/post-sticky/panel.js.map +1 -0
  56. package/build/components/post-title/index.js +2 -2
  57. package/build/components/post-title/index.js.map +1 -1
  58. package/build/components/post-title/post-title-raw.js +2 -2
  59. package/build/components/post-title/post-title-raw.js.map +1 -1
  60. package/build/components/post-transform-panel/hooks.js +90 -0
  61. package/build/components/post-transform-panel/hooks.js.map +1 -0
  62. package/build/components/post-transform-panel/index.js +101 -0
  63. package/build/components/post-transform-panel/index.js.map +1 -0
  64. package/build/components/post-trash/panel.js +18 -0
  65. package/build/components/post-trash/panel.js.map +1 -0
  66. package/build/components/post-type-support-check/index.js +1 -1
  67. package/build/components/post-type-support-check/index.js.map +1 -1
  68. package/build/components/preferences-modal/index.js +3 -3
  69. package/build/components/preferences-modal/index.js.map +1 -1
  70. package/build/components/provider/index.js +3 -1
  71. package/build/components/provider/index.js.map +1 -1
  72. package/build/components/provider/use-block-editor-settings.js +21 -3
  73. package/build/components/provider/use-block-editor-settings.js.map +1 -1
  74. package/build/components/sidebar/constants.js +11 -0
  75. package/build/components/sidebar/constants.js.map +1 -0
  76. package/build/components/sidebar/header.js +53 -0
  77. package/build/components/sidebar/header.js.map +1 -0
  78. package/build/components/sidebar/index.js +157 -0
  79. package/build/components/sidebar/index.js.map +1 -0
  80. package/build/components/sidebar/post-summary.js +84 -0
  81. package/build/components/sidebar/post-summary.js.map +1 -0
  82. package/build/components/start-page-options/index.js +5 -7
  83. package/build/components/start-page-options/index.js.map +1 -1
  84. package/build/components/start-template-options/index.js +192 -0
  85. package/build/components/start-template-options/index.js.map +1 -0
  86. package/build/components/template-content-panel/index.js +38 -0
  87. package/build/components/template-content-panel/index.js.map +1 -0
  88. package/build/hooks/pattern-overrides.js +10 -5
  89. package/build/hooks/pattern-overrides.js.map +1 -1
  90. package/build/private-apis.js +7 -12
  91. package/build/private-apis.js.map +1 -1
  92. package/build/private-apis.native.js +72 -0
  93. package/build/private-apis.native.js.map +1 -0
  94. package/build/store/private-selectors.js +6 -1
  95. package/build/store/private-selectors.js.map +1 -1
  96. package/build/store/reducer.js +15 -0
  97. package/build/store/reducer.js.map +1 -1
  98. package/build-module/bindings/pattern-overrides.js +69 -1
  99. package/build-module/bindings/pattern-overrides.js.map +1 -1
  100. package/build-module/components/block-settings-menu/content-only-settings-menu.js +119 -0
  101. package/build-module/components/block-settings-menu/content-only-settings-menu.js.map +1 -0
  102. package/build-module/components/block-settings-menu/content-only-settings-menu.native.js +5 -0
  103. package/build-module/components/block-settings-menu/content-only-settings-menu.native.js.map +1 -0
  104. package/build-module/components/collapsible-block-toolbar/index.js +2 -2
  105. package/build-module/components/collapsible-block-toolbar/index.js.map +1 -1
  106. package/build-module/components/document-bar/index.js +2 -2
  107. package/build-module/components/document-bar/index.js.map +1 -1
  108. package/build-module/components/document-outline/item.js +2 -2
  109. package/build-module/components/document-outline/item.js.map +1 -1
  110. package/build-module/components/document-tools/index.js +16 -19
  111. package/build-module/components/document-tools/index.js.map +1 -1
  112. package/build-module/components/editor-canvas/index.js +19 -8
  113. package/build-module/components/editor-canvas/index.js.map +1 -1
  114. package/build-module/components/global-keyboard-shortcuts/register-shortcuts.js +1 -1
  115. package/build-module/components/global-keyboard-shortcuts/register-shortcuts.js.map +1 -1
  116. package/build-module/components/global-styles-provider/index.js +120 -0
  117. package/build-module/components/global-styles-provider/index.js.map +1 -0
  118. package/build-module/components/header/index.js +139 -0
  119. package/build-module/components/header/index.js.map +1 -0
  120. package/build-module/components/inserter-sidebar/index.js +59 -34
  121. package/build-module/components/inserter-sidebar/index.js.map +1 -1
  122. package/build-module/components/keyboard-shortcut-help-modal/index.js +2 -2
  123. package/build-module/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  124. package/build-module/components/post-actions/actions.js +125 -66
  125. package/build-module/components/post-actions/actions.js.map +1 -1
  126. package/build-module/components/post-actions/index.js +7 -14
  127. package/build-module/components/post-actions/index.js.map +1 -1
  128. package/build-module/components/post-card-panel/index.js +7 -30
  129. package/build-module/components/post-card-panel/index.js.map +1 -1
  130. package/build-module/components/post-comments/index.js +30 -10
  131. package/build-module/components/post-comments/index.js.map +1 -1
  132. package/build-module/components/post-discussion/panel.js +105 -23
  133. package/build-module/components/post-discussion/panel.js.map +1 -1
  134. package/build-module/components/post-excerpt/panel.js +2 -2
  135. package/build-module/components/post-excerpt/panel.js.map +1 -1
  136. package/build-module/components/post-format/panel.js +18 -0
  137. package/build-module/components/post-format/panel.js.map +1 -0
  138. package/build-module/components/post-panel-row/index.js +2 -2
  139. package/build-module/components/post-panel-row/index.js.map +1 -1
  140. package/build-module/components/post-panel-section/index.js +20 -0
  141. package/build-module/components/post-panel-section/index.js.map +1 -0
  142. package/build-module/components/post-pingbacks/index.js +6 -3
  143. package/build-module/components/post-pingbacks/index.js.map +1 -1
  144. package/build-module/components/post-saved-state/index.js +2 -2
  145. package/build-module/components/post-saved-state/index.js.map +1 -1
  146. package/build-module/components/post-slug/panel.js +18 -0
  147. package/build-module/components/post-slug/panel.js.map +1 -0
  148. package/build-module/components/post-status/index.js +4 -4
  149. package/build-module/components/post-status/index.js.map +1 -1
  150. package/build-module/components/post-sticky/panel.js +12 -0
  151. package/build-module/components/post-sticky/panel.js.map +1 -0
  152. package/build-module/components/post-title/index.js +2 -2
  153. package/build-module/components/post-title/index.js.map +1 -1
  154. package/build-module/components/post-title/post-title-raw.js +2 -2
  155. package/build-module/components/post-title/post-title-raw.js.map +1 -1
  156. package/build-module/components/post-transform-panel/hooks.js +83 -0
  157. package/build-module/components/post-transform-panel/hooks.js.map +1 -0
  158. package/build-module/components/post-transform-panel/index.js +94 -0
  159. package/build-module/components/post-transform-panel/index.js.map +1 -0
  160. package/build-module/components/post-trash/panel.js +10 -0
  161. package/build-module/components/post-trash/panel.js.map +1 -0
  162. package/build-module/components/post-type-support-check/index.js +1 -1
  163. package/build-module/components/post-type-support-check/index.js.map +1 -1
  164. package/build-module/components/preferences-modal/index.js +3 -3
  165. package/build-module/components/preferences-modal/index.js.map +1 -1
  166. package/build-module/components/provider/index.js +3 -1
  167. package/build-module/components/provider/index.js.map +1 -1
  168. package/build-module/components/provider/use-block-editor-settings.js +21 -3
  169. package/build-module/components/provider/use-block-editor-settings.js.map +1 -1
  170. package/build-module/components/sidebar/constants.js +5 -0
  171. package/build-module/components/sidebar/constants.js.map +1 -0
  172. package/build-module/components/sidebar/header.js +46 -0
  173. package/build-module/components/sidebar/header.js.map +1 -0
  174. package/build-module/components/sidebar/index.js +149 -0
  175. package/build-module/components/sidebar/index.js.map +1 -0
  176. package/build-module/components/sidebar/post-summary.js +77 -0
  177. package/build-module/components/sidebar/post-summary.js.map +1 -0
  178. package/build-module/components/start-page-options/index.js +5 -7
  179. package/build-module/components/start-page-options/index.js.map +1 -1
  180. package/build-module/components/start-template-options/index.js +185 -0
  181. package/build-module/components/start-template-options/index.js.map +1 -0
  182. package/build-module/components/template-content-panel/index.js +31 -0
  183. package/build-module/components/template-content-panel/index.js.map +1 -0
  184. package/build-module/hooks/pattern-overrides.js +10 -5
  185. package/build-module/hooks/pattern-overrides.js.map +1 -1
  186. package/build-module/private-apis.js +7 -12
  187. package/build-module/private-apis.js.map +1 -1
  188. package/build-module/private-apis.native.js +62 -0
  189. package/build-module/private-apis.native.js.map +1 -0
  190. package/build-module/store/private-selectors.js +3 -0
  191. package/build-module/store/private-selectors.js.map +1 -1
  192. package/build-module/store/reducer.js +14 -0
  193. package/build-module/store/reducer.js.map +1 -1
  194. package/build-style/style-rtl.css +328 -18
  195. package/build-style/style.css +328 -18
  196. package/package.json +38 -36
  197. package/src/bindings/pattern-overrides.js +83 -1
  198. package/src/components/autocompleters/style.scss +1 -2
  199. package/src/components/block-settings-menu/content-only-settings-menu.js +175 -0
  200. package/src/components/block-settings-menu/content-only-settings-menu.native.js +4 -0
  201. package/src/components/block-settings-menu/style.scss +4 -0
  202. package/src/components/collapsible-block-toolbar/index.js +2 -2
  203. package/src/components/document-bar/index.js +2 -2
  204. package/src/components/document-outline/item.js +2 -2
  205. package/src/components/document-tools/index.js +19 -21
  206. package/src/components/editor-canvas/index.js +18 -6
  207. package/src/components/global-keyboard-shortcuts/register-shortcuts.js +1 -1
  208. package/src/components/global-styles-provider/index.js +162 -0
  209. package/src/components/header/index.js +154 -0
  210. package/src/components/header/style.scss +231 -0
  211. package/src/components/inserter-sidebar/index.js +52 -29
  212. package/src/components/inserter-sidebar/style.scss +10 -3
  213. package/src/components/keyboard-shortcut-help-modal/index.js +2 -2
  214. package/src/components/list-view-sidebar/style.scss +1 -0
  215. package/src/components/page-attributes/test/order.js +5 -1
  216. package/src/components/post-actions/actions.js +256 -150
  217. package/src/components/post-actions/index.js +5 -38
  218. package/src/components/post-card-panel/index.js +39 -85
  219. package/src/components/post-comments/index.js +47 -9
  220. package/src/components/post-discussion/panel.js +108 -31
  221. package/src/components/post-discussion/style.scss +26 -0
  222. package/src/components/post-excerpt/panel.js +2 -2
  223. package/src/components/post-format/panel.js +22 -0
  224. package/src/components/post-format/style.scss +6 -0
  225. package/src/components/post-last-revision/test/check.js +5 -1
  226. package/src/components/post-panel-row/index.js +2 -2
  227. package/src/components/post-panel-section/index.js +19 -0
  228. package/src/components/post-panel-section/style.scss +3 -0
  229. package/src/components/post-pingbacks/index.js +11 -2
  230. package/src/components/post-publish-panel/style.scss +5 -0
  231. package/src/components/post-saved-state/index.js +2 -2
  232. package/src/components/post-slug/panel.js +22 -0
  233. package/src/components/post-slug/style.scss +5 -0
  234. package/src/components/post-slug/test/index.js +5 -1
  235. package/src/components/post-status/index.js +4 -4
  236. package/src/components/post-sticky/panel.js +18 -0
  237. package/src/components/post-title/index.js +2 -2
  238. package/src/components/post-title/post-title-raw.js +2 -2
  239. package/src/components/post-transform-panel/hooks.js +114 -0
  240. package/src/components/post-transform-panel/index.js +99 -0
  241. package/src/components/post-trash/panel.js +13 -0
  242. package/src/components/post-type-support-check/index.js +1 -1
  243. package/src/components/post-type-support-check/test/index.js +2 -2
  244. package/src/components/preferences-modal/index.js +3 -3
  245. package/src/components/provider/index.js +4 -0
  246. package/src/components/provider/use-block-editor-settings.js +19 -4
  247. package/src/components/sidebar/constants.js +4 -0
  248. package/src/components/sidebar/header.js +49 -0
  249. package/src/components/sidebar/index.js +200 -0
  250. package/src/components/sidebar/post-summary.js +104 -0
  251. package/src/components/sidebar/style.scss +18 -0
  252. package/src/components/start-page-options/index.js +6 -4
  253. package/src/components/start-template-options/index.js +219 -0
  254. package/src/components/start-template-options/style.scss +55 -0
  255. package/src/components/template-areas/style.scss +0 -1
  256. package/src/components/template-content-panel/index.js +36 -0
  257. package/src/hooks/pattern-overrides.js +12 -6
  258. package/src/private-apis.js +10 -12
  259. package/src/private-apis.native.js +61 -0
  260. package/src/store/private-selectors.js +3 -0
  261. package/src/store/reducer.js +12 -0
  262. package/src/style.scss +7 -0
  263. package/src/components/post-slug/test/check.js +0 -17
@@ -0,0 +1,154 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { useSelect } from '@wordpress/data';
10
+ import { useViewportMatch } from '@wordpress/compose';
11
+ import { __unstableMotion as motion } from '@wordpress/components';
12
+ import { store as preferencesStore } from '@wordpress/preferences';
13
+ import { useState } from '@wordpress/element';
14
+ import { PinnedItems } from '@wordpress/interface';
15
+ import { store as blockEditorStore } from '@wordpress/block-editor';
16
+
17
+ /**
18
+ * Internal dependencies
19
+ */
20
+ import CollapsableBlockToolbar from '../collapsible-block-toolbar';
21
+ import DocumentBar from '../document-bar';
22
+ import DocumentTools from '../document-tools';
23
+ import MoreMenu from '../more-menu';
24
+ import PostPreviewButton from '../post-preview-button';
25
+ import PostPublishButtonOrToggle from '../post-publish-button/post-publish-button-or-toggle';
26
+ import PostSavedState from '../post-saved-state';
27
+ import PostTypeSupportCheck from '../post-type-support-check';
28
+ import PostViewLink from '../post-view-link';
29
+ import PreviewDropdown from '../preview-dropdown';
30
+ import { store as editorStore } from '../../store';
31
+
32
+ const slideY = {
33
+ hidden: { y: '-50px' },
34
+ distractionFreeInactive: { y: 0 },
35
+ hover: { y: 0, transition: { type: 'tween', delay: 0.2 } },
36
+ };
37
+
38
+ function Header( {
39
+ customSaveButton,
40
+ forceIsDirty,
41
+ forceDisableBlockTools,
42
+ setEntitiesSavedStatesCallback,
43
+ title,
44
+ children,
45
+ } ) {
46
+ const isWideViewport = useViewportMatch( 'large' );
47
+ const isLargeViewport = useViewportMatch( 'medium' );
48
+ const {
49
+ isTextEditor,
50
+ isPublishSidebarOpened,
51
+ showIconLabels,
52
+ hasFixedToolbar,
53
+ isNestedEntity,
54
+ isZoomedOutView,
55
+ } = useSelect( ( select ) => {
56
+ const { get: getPreference } = select( preferencesStore );
57
+ const {
58
+ getEditorMode,
59
+ getEditorSettings,
60
+ isPublishSidebarOpened: _isPublishSidebarOpened,
61
+ } = select( editorStore );
62
+ const { __unstableGetEditorMode } = select( blockEditorStore );
63
+
64
+ return {
65
+ isTextEditor: getEditorMode() === 'text',
66
+ isPublishSidebarOpened: _isPublishSidebarOpened(),
67
+ showIconLabels: getPreference( 'core', 'showIconLabels' ),
68
+ hasFixedToolbar: getPreference( 'core', 'fixedToolbar' ),
69
+ isNestedEntity:
70
+ !! getEditorSettings().onNavigateToPreviousEntityRecord,
71
+ isZoomedOutView: __unstableGetEditorMode() === 'zoom-out',
72
+ };
73
+ }, [] );
74
+
75
+ const hasTopToolbar = isLargeViewport && hasFixedToolbar;
76
+
77
+ const [ isBlockToolsCollapsed, setIsBlockToolsCollapsed ] =
78
+ useState( true );
79
+
80
+ // The edit-post-header classname is only kept for backward compatibilty
81
+ // as some plugins might be relying on its presence.
82
+ return (
83
+ <div className="editor-header edit-post-header">
84
+ { children }
85
+ <motion.div
86
+ variants={ slideY }
87
+ transition={ { type: 'tween', delay: 0.8 } }
88
+ className="editor-header__toolbar"
89
+ >
90
+ <DocumentTools
91
+ disableBlockTools={ forceDisableBlockTools || isTextEditor }
92
+ />
93
+ { hasTopToolbar && (
94
+ <CollapsableBlockToolbar
95
+ isCollapsed={ isBlockToolsCollapsed }
96
+ onToggle={ setIsBlockToolsCollapsed }
97
+ />
98
+ ) }
99
+ <div
100
+ className={ clsx( 'editor-header__center', {
101
+ 'is-collapsed':
102
+ ! isBlockToolsCollapsed && hasTopToolbar,
103
+ } ) }
104
+ >
105
+ { ! title ? (
106
+ <PostTypeSupportCheck supportKeys="title">
107
+ <DocumentBar />
108
+ </PostTypeSupportCheck>
109
+ ) : (
110
+ title
111
+ ) }
112
+ </div>
113
+ </motion.div>
114
+ <motion.div
115
+ variants={ slideY }
116
+ transition={ { type: 'tween', delay: 0.8 } }
117
+ className="editor-header__settings"
118
+ >
119
+ { ! customSaveButton && ! isPublishSidebarOpened && (
120
+ // This button isn't completely hidden by the publish sidebar.
121
+ // We can't hide the whole toolbar when the publish sidebar is open because
122
+ // we want to prevent mounting/unmounting the PostPublishButtonOrToggle DOM node.
123
+ // We track that DOM node to return focus to the PostPublishButtonOrToggle
124
+ // when the publish sidebar has been closed.
125
+ <PostSavedState forceIsDirty={ forceIsDirty } />
126
+ ) }
127
+ <PreviewDropdown
128
+ forceIsAutosaveable={ forceIsDirty }
129
+ disabled={ isNestedEntity || isZoomedOutView }
130
+ />
131
+ <PostPreviewButton
132
+ className="editor-header__post-preview-button"
133
+ forceIsAutosaveable={ forceIsDirty }
134
+ />
135
+ <PostViewLink />
136
+ { ! customSaveButton && (
137
+ <PostPublishButtonOrToggle
138
+ forceIsDirty={ forceIsDirty }
139
+ setEntitiesSavedStatesCallback={
140
+ setEntitiesSavedStatesCallback
141
+ }
142
+ />
143
+ ) }
144
+ { customSaveButton }
145
+ { ( isWideViewport || ! showIconLabels ) && (
146
+ <PinnedItems.Slot scope="core" />
147
+ ) }
148
+ <MoreMenu />
149
+ </motion.div>
150
+ </div>
151
+ );
152
+ }
153
+
154
+ export default Header;
@@ -0,0 +1,231 @@
1
+ .editor-header {
2
+ height: $header-height;
3
+ background: $white;
4
+ display: flex;
5
+ flex-wrap: wrap;
6
+ align-items: center;
7
+ // The header should never be wider than the viewport, or buttons might be hidden. Especially relevant at high zoom levels. Related to https://core.trac.wordpress.org/ticket/47603#ticket.
8
+ max-width: 100vw;
9
+ justify-content: space-between;
10
+
11
+ // Make toolbar sticky on larger breakpoints
12
+ @include break-zoomed-in {
13
+ flex-wrap: nowrap;
14
+ }
15
+ }
16
+
17
+ .editor-header__toolbar {
18
+ display: flex;
19
+ // Allow this area to shrink to fit the toolbar buttons.
20
+ flex-shrink: 8;
21
+ // Take up the space of the toolbar so it can be justified to the left side of the toolbar.
22
+ flex-grow: 3;
23
+ // Hide the overflow so flex will limit its width. Block toolbar will allow scrolling on fixed toolbar.
24
+ overflow: hidden;
25
+ // Leave enough room for the focus ring to show.
26
+ padding: 2px 0;
27
+ align-items: center;
28
+ // Allow focus ring to be fully visible on furthest right button.
29
+ @include break-medium() {
30
+ padding-right: var(--wp-admin-border-width-focus);
31
+ }
32
+
33
+ .table-of-contents {
34
+ display: none;
35
+
36
+ @include break-small() {
37
+ display: block;
38
+ }
39
+ }
40
+ }
41
+
42
+ .editor-header__center {
43
+ flex-grow: 1;
44
+ display: flex;
45
+ justify-content: center;
46
+
47
+ &.is-collapsed {
48
+ display: none;
49
+ }
50
+ }
51
+
52
+ /**
53
+ * Buttons on the right side
54
+ */
55
+
56
+ .editor-header__settings {
57
+ display: inline-flex;
58
+ align-items: center;
59
+ flex-wrap: nowrap;
60
+ padding-right: $grid-unit-05;
61
+
62
+ @include break-small () {
63
+ padding-right: $grid-unit-10;
64
+ }
65
+
66
+ gap: $grid-unit-10;
67
+ }
68
+
69
+ /**
70
+ * Show icon labels.
71
+ */
72
+
73
+ .show-icon-labels.interface-pinned-items,
74
+ .show-icon-labels .editor-header {
75
+ .components-button.has-icon {
76
+ width: auto;
77
+
78
+ // Hide the button icons when labels are set to display...
79
+ svg {
80
+ display: none;
81
+ }
82
+ // ... and display labels.
83
+ &::after {
84
+ content: attr(aria-label);
85
+ }
86
+ &[aria-disabled="true"] {
87
+ background-color: transparent;
88
+ }
89
+ }
90
+ .is-tertiary {
91
+ &:active {
92
+ box-shadow: 0 0 0 1.5px var(--wp-admin-theme-color);
93
+ background-color: transparent;
94
+ }
95
+ }
96
+ // Exception for drodpdown toggle buttons.
97
+ .components-button.has-icon.button-toggle {
98
+ svg {
99
+ display: block;
100
+ }
101
+ &::after {
102
+ content: none;
103
+ }
104
+ }
105
+
106
+ // Don't hide MenuItemsChoice check icons
107
+ .components-menu-items-choice .components-menu-items__item-icon.components-menu-items__item-icon {
108
+ display: block;
109
+ }
110
+ .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,
111
+ .interface-pinned-items .components-button {
112
+ padding-left: $grid-unit;
113
+ padding-right: $grid-unit;
114
+
115
+ @include break-small {
116
+ padding-left: $grid-unit-15;
117
+ padding-right: $grid-unit-15;
118
+ }
119
+ }
120
+
121
+ .editor-post-save-draft.editor-post-save-draft,
122
+ .editor-post-saved-state.editor-post-saved-state {
123
+ &::after {
124
+ content: none;
125
+ }
126
+ }
127
+ }
128
+
129
+ .show-icon-labels {
130
+ .editor-header__toolbar .block-editor-block-mover {
131
+ // Modified group borders.
132
+ border-left: none;
133
+
134
+ &::before {
135
+ content: "";
136
+ width: $border-width;
137
+ height: $grid-unit-30;
138
+ background-color: $gray-300;
139
+ margin-top: $grid-unit-05;
140
+ margin-left: $grid-unit;
141
+ }
142
+
143
+ // Modified block movers horizontal separator.
144
+ .block-editor-block-mover__move-button-container {
145
+ &::before {
146
+ width: calc(100% - #{$grid-unit-30});
147
+ background: $gray-300;
148
+ left: calc(50% + 1px);
149
+ }
150
+ }
151
+ }
152
+ }
153
+
154
+ .show-icon-labels.interface-pinned-items {
155
+ padding: 6px $grid-unit-15 $grid-unit-15;
156
+ margin-top: 0;
157
+ margin-bottom: 0;
158
+ margin-left: -$grid-unit-15;
159
+ margin-right: -$grid-unit-15;
160
+ border-bottom: 1px solid $gray-400;
161
+ display: block;
162
+
163
+ > .components-button.has-icon {
164
+ margin: 0;
165
+ padding: 6px 6px 6px $grid-unit;
166
+ width: 14.625rem;
167
+ justify-content: flex-start;
168
+
169
+ &[aria-expanded="true"] svg {
170
+ display: block;
171
+ max-width: $grid-unit-30;
172
+ }
173
+ &[aria-expanded="false"] {
174
+ padding-left: $grid-unit-50;
175
+ }
176
+ svg {
177
+ margin-right: 8px;
178
+ }
179
+ }
180
+ }
181
+
182
+ .editor-header__post-preview-button {
183
+ @include break-small {
184
+ display: none;
185
+ }
186
+ }
187
+
188
+ .is-distraction-free {
189
+ .interface-interface-skeleton__header {
190
+ border-bottom: none;
191
+ }
192
+
193
+ .editor-header {
194
+ background-color: $white;
195
+ border-bottom: 1px solid #e0e0e0;
196
+ position: absolute;
197
+ width: 100%;
198
+
199
+
200
+ // hide some parts
201
+ & > .edit-post-header__settings > .edit-post-header__post-preview-button {
202
+ visibility: hidden;
203
+ }
204
+
205
+ & > .editor-header__toolbar .editor-document-tools__document-overview-toggle,
206
+ & > .editor-header__settings > .editor-preview-dropdown,
207
+ & > .editor-header__settings > .interface-pinned-items {
208
+ display: none;
209
+ }
210
+
211
+ }
212
+
213
+ // We need ! important because we override inline styles
214
+ // set by the motion component.
215
+ .interface-interface-skeleton__header:focus-within {
216
+ opacity: 1 !important;
217
+ div {
218
+ transform: translateX(0) translateZ(0) !important;
219
+ }
220
+
221
+ }
222
+
223
+ .components-editor-notices__dismissible {
224
+ position: absolute;
225
+ z-index: 35;
226
+ }
227
+ }
228
+
229
+ .components-popover.more-menu-dropdown__content {
230
+ z-index: z-index(".components-popover.more-menu__content");
231
+ }
@@ -2,16 +2,14 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useDispatch, useSelect } from '@wordpress/data';
5
- import { Button, VisuallyHidden } from '@wordpress/components';
6
- import { __experimentalLibrary as Library } from '@wordpress/block-editor';
7
- import { close } from '@wordpress/icons';
8
5
  import {
9
- useViewportMatch,
10
- __experimentalUseDialog as useDialog,
11
- } from '@wordpress/compose';
12
- import { __ } from '@wordpress/i18n';
13
- import { useRef } from '@wordpress/element';
6
+ __experimentalLibrary as Library,
7
+ store as blockEditorStore,
8
+ } from '@wordpress/block-editor';
9
+ import { useViewportMatch } from '@wordpress/compose';
10
+ import { useCallback, useRef } from '@wordpress/element';
14
11
  import { store as preferencesStore } from '@wordpress/preferences';
12
+ import { ESCAPE } from '@wordpress/keycodes';
15
13
 
16
14
  /**
17
15
  * Internal dependencies
@@ -23,52 +21,77 @@ export default function InserterSidebar( {
23
21
  closeGeneralSidebar,
24
22
  isRightSidebarOpen,
25
23
  } ) {
26
- const { insertionPoint, showMostUsedBlocks } = useSelect( ( select ) => {
27
- const { getInsertionPoint } = unlock( select( editorStore ) );
24
+ const {
25
+ blockSectionRootClientId,
26
+ inserterSidebarToggleRef,
27
+ insertionPoint,
28
+ showMostUsedBlocks,
29
+ } = useSelect( ( select ) => {
30
+ const { getInserterSidebarToggleRef, getInsertionPoint } = unlock(
31
+ select( editorStore )
32
+ );
33
+ const { getBlockRootClientId, __unstableGetEditorMode, getSettings } =
34
+ select( blockEditorStore );
28
35
  const { get } = select( preferencesStore );
36
+ const getBlockSectionRootClientId = () => {
37
+ if ( __unstableGetEditorMode() === 'zoom-out' ) {
38
+ const { sectionRootClientId } = unlock( getSettings() );
39
+ if ( sectionRootClientId ) {
40
+ return sectionRootClientId;
41
+ }
42
+ }
43
+ return getBlockRootClientId();
44
+ };
29
45
  return {
46
+ inserterSidebarToggleRef: getInserterSidebarToggleRef(),
30
47
  insertionPoint: getInsertionPoint(),
31
48
  showMostUsedBlocks: get( 'core', 'mostUsedBlocks' ),
49
+ blockSectionRootClientId: getBlockSectionRootClientId(),
32
50
  };
33
51
  }, [] );
34
52
  const { setIsInserterOpened } = useDispatch( editorStore );
35
53
 
36
54
  const isMobileViewport = useViewportMatch( 'medium', '<' );
37
- const TagName = ! isMobileViewport ? VisuallyHidden : 'div';
38
- const [ inserterDialogRef, inserterDialogProps ] = useDialog( {
39
- onClose: () => setIsInserterOpened( false ),
40
- focusOnMount: true,
41
- } );
42
-
43
55
  const libraryRef = useRef();
44
56
 
57
+ // When closing the inserter, focus should return to the toggle button.
58
+ const closeInserterSidebar = useCallback( () => {
59
+ setIsInserterOpened( false );
60
+ inserterSidebarToggleRef.current?.focus();
61
+ }, [ inserterSidebarToggleRef, setIsInserterOpened ] );
62
+
63
+ const closeOnEscape = useCallback(
64
+ ( event ) => {
65
+ if ( event.keyCode === ESCAPE && ! event.defaultPrevented ) {
66
+ event.preventDefault();
67
+ closeInserterSidebar();
68
+ }
69
+ },
70
+ [ closeInserterSidebar ]
71
+ );
72
+
45
73
  return (
46
- <div
47
- ref={ inserterDialogRef }
48
- { ...inserterDialogProps }
49
- className="editor-inserter-sidebar"
50
- >
51
- <TagName className="editor-inserter-sidebar__header">
52
- <Button
53
- icon={ close }
54
- label={ __( 'Close block inserter' ) }
55
- onClick={ () => setIsInserterOpened( false ) }
56
- />
57
- </TagName>
74
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
75
+ <div onKeyDown={ closeOnEscape } className="editor-inserter-sidebar">
58
76
  <div className="editor-inserter-sidebar__content">
59
77
  <Library
60
78
  showMostUsedBlocks={ showMostUsedBlocks }
61
79
  showInserterHelpPanel
62
80
  shouldFocusBlock={ isMobileViewport }
63
- rootClientId={ insertionPoint.rootClientId }
81
+ rootClientId={
82
+ blockSectionRootClientId ?? insertionPoint.rootClientId
83
+ }
64
84
  __experimentalInsertionIndex={
65
85
  insertionPoint.insertionIndex
66
86
  }
87
+ __experimentalInitialTab={ insertionPoint.tab }
88
+ __experimentalInitialCategory={ insertionPoint.category }
67
89
  __experimentalFilterValue={ insertionPoint.filterValue }
68
90
  __experimentalOnPatternCategorySelection={
69
91
  isRightSidebarOpen ? closeGeneralSidebar : undefined
70
92
  }
71
93
  ref={ libraryRef }
94
+ onClose={ closeInserterSidebar }
72
95
  />
73
96
  </div>
74
97
  </div>
@@ -6,16 +6,23 @@
6
6
  flex-direction: column;
7
7
  }
8
8
 
9
- .editor-inserter-sidebar__header {
10
- padding-top: $grid-unit-10;
9
+ .block-editor-inserter-sidebar__header {
10
+ border-bottom: $border-width solid $gray-300;
11
11
  padding-right: $grid-unit-10;
12
12
  display: flex;
13
- justify-content: flex-end;
13
+ justify-content: space-between;
14
+
15
+ .block-editor-inserter-sidebar__close-button {
16
+ /* stylelint-disable-next-line property-disallowed-list -- This should be refactored to avoid order if possible */
17
+ order: 1;
18
+ align-self: center;
19
+ }
14
20
  }
15
21
 
16
22
  .editor-inserter-sidebar__content {
17
23
  // Leave space for the close button
18
24
  height: calc(100% - #{$button-size} - #{$grid-unit-10});
25
+
19
26
  @include break-medium() {
20
27
  height: 100%;
21
28
  }
@@ -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
@@ -52,7 +52,7 @@ const ShortcutList = ( { shortcuts } ) => (
52
52
 
53
53
  const ShortcutSection = ( { title, shortcuts, className } ) => (
54
54
  <section
55
- className={ classnames(
55
+ className={ clsx(
56
56
  'editor-keyboard-shortcut-help-modal__section',
57
57
  className
58
58
  ) }
@@ -14,6 +14,7 @@
14
14
  }
15
15
  .editor-list-view-sidebar__close-button {
16
16
  background: $white;
17
+ /* stylelint-disable-next-line property-disallowed-list -- This should be removed when https://github.com/WordPress/gutenberg/issues/59013 is fixed. */
17
18
  order: 1;
18
19
  align-self: center;
19
20
  margin-right: $grid-unit-15;
@@ -22,7 +22,11 @@ jest.mock( '@wordpress/data/src/components/use-dispatch', () => ( {
22
22
  function setupDataMock( order = 0 ) {
23
23
  useSelect.mockImplementation( ( mapSelect ) =>
24
24
  mapSelect( () => ( {
25
- getPostType: () => null,
25
+ getPostType: () => ( {
26
+ supports: {
27
+ 'page-attributes': true,
28
+ },
29
+ } ),
26
30
  getEditedPostAttribute: ( attr ) => {
27
31
  switch ( attr ) {
28
32
  case 'menu_order':