@wordpress/edit-site 3.0.24 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE.md +1 -1
  3. package/README.md +7 -1
  4. package/build/components/block-editor/resizable-editor.js +1 -0
  5. package/build/components/block-editor/resizable-editor.js.map +1 -1
  6. package/build/components/code-editor/code-editor-text-area.js +95 -0
  7. package/build/components/code-editor/code-editor-text-area.js.map +1 -0
  8. package/build/components/code-editor/index.js +79 -0
  9. package/build/components/code-editor/index.js.map +1 -0
  10. package/build/components/editor/index.js +39 -9
  11. package/build/components/editor/index.js.map +1 -1
  12. package/build/components/global-styles/border-panel.js +81 -22
  13. package/build/components/global-styles/border-panel.js.map +1 -1
  14. package/build/components/global-styles/context-menu.js +4 -6
  15. package/build/components/global-styles/context-menu.js.map +1 -1
  16. package/build/components/global-styles/global-styles-provider.js +1 -0
  17. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  18. package/build/components/global-styles/header.js +2 -7
  19. package/build/components/global-styles/header.js.map +1 -1
  20. package/build/components/global-styles/navigation-button.js +35 -12
  21. package/build/components/global-styles/navigation-button.js.map +1 -1
  22. package/build/components/global-styles/palette.js +3 -3
  23. package/build/components/global-styles/palette.js.map +1 -1
  24. package/build/components/global-styles/preview.js +46 -15
  25. package/build/components/global-styles/preview.js.map +1 -1
  26. package/build/components/global-styles/screen-background-color.js +9 -12
  27. package/build/components/global-styles/screen-background-color.js.map +1 -1
  28. package/build/components/global-styles/screen-block-list.js +2 -3
  29. package/build/components/global-styles/screen-block-list.js.map +1 -1
  30. package/build/components/global-styles/screen-block.js +0 -1
  31. package/build/components/global-styles/screen-block.js.map +1 -1
  32. package/build/components/global-styles/screen-color-palette.js +0 -2
  33. package/build/components/global-styles/screen-color-palette.js.map +1 -1
  34. package/build/components/global-styles/screen-colors.js +5 -6
  35. package/build/components/global-styles/screen-colors.js.map +1 -1
  36. package/build/components/global-styles/screen-layout.js +0 -2
  37. package/build/components/global-styles/screen-layout.js.map +1 -1
  38. package/build/components/global-styles/screen-link-color.js +6 -12
  39. package/build/components/global-styles/screen-link-color.js.map +1 -1
  40. package/build/components/global-styles/screen-root.js +22 -3
  41. package/build/components/global-styles/screen-root.js.map +1 -1
  42. package/build/components/global-styles/screen-style-variations.js +138 -0
  43. package/build/components/global-styles/screen-style-variations.js.map +1 -0
  44. package/build/components/global-styles/screen-text-color.js +6 -12
  45. package/build/components/global-styles/screen-text-color.js.map +1 -1
  46. package/build/components/global-styles/screen-typography-element.js +0 -2
  47. package/build/components/global-styles/screen-typography-element.js.map +1 -1
  48. package/build/components/global-styles/screen-typography.js +2 -3
  49. package/build/components/global-styles/screen-typography.js.map +1 -1
  50. package/build/components/global-styles/ui.js +31 -14
  51. package/build/components/global-styles/ui.js.map +1 -1
  52. package/build/components/header/index.js +12 -4
  53. package/build/components/header/index.js.map +1 -1
  54. package/build/components/header/mode-switcher/index.js +78 -0
  55. package/build/components/header/mode-switcher/index.js.map +1 -0
  56. package/build/components/header/more-menu/copy-content-menu-item.js +74 -0
  57. package/build/components/header/more-menu/copy-content-menu-item.js.map +1 -0
  58. package/build/components/header/more-menu/index.js +72 -39
  59. package/build/components/header/more-menu/index.js.map +1 -1
  60. package/build/{plugins → components/header/more-menu}/site-export.js +0 -0
  61. package/build/components/header/more-menu/site-export.js.map +1 -0
  62. package/build/{plugins → components/header/more-menu}/welcome-guide-menu-item.js +1 -1
  63. package/build/components/header/more-menu/welcome-guide-menu-item.js.map +1 -0
  64. package/build/components/header/tools-more-menu-group/index.js +1 -5
  65. package/build/components/header/tools-more-menu-group/index.js.map +1 -1
  66. package/build/components/keyboard-shortcut-help-modal/config.js +45 -0
  67. package/build/components/keyboard-shortcut-help-modal/config.js.map +1 -0
  68. package/build/components/keyboard-shortcut-help-modal/dynamic-shortcut.js +56 -0
  69. package/build/components/keyboard-shortcut-help-modal/dynamic-shortcut.js.map +1 -0
  70. package/build/components/keyboard-shortcut-help-modal/index.js +137 -0
  71. package/build/components/keyboard-shortcut-help-modal/index.js.map +1 -0
  72. package/build/components/keyboard-shortcut-help-modal/shortcut.js +65 -0
  73. package/build/components/keyboard-shortcut-help-modal/shortcut.js.map +1 -0
  74. package/build/components/keyboard-shortcuts/index.js +26 -1
  75. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  76. package/build/components/list/actions/index.js +5 -4
  77. package/build/components/list/actions/index.js.map +1 -1
  78. package/build/components/list/actions/rename-menu-item.js +3 -3
  79. package/build/components/list/actions/rename-menu-item.js.map +1 -1
  80. package/build/components/list/added-by.js +51 -50
  81. package/build/components/list/added-by.js.map +1 -1
  82. package/build/components/routes/redirect-to-homepage.js +87 -0
  83. package/build/components/routes/redirect-to-homepage.js.map +1 -0
  84. package/build/components/secondary-sidebar/inserter-sidebar.js +13 -3
  85. package/build/components/secondary-sidebar/inserter-sidebar.js.map +1 -1
  86. package/build/components/secondary-sidebar/list-view-sidebar.js +7 -5
  87. package/build/components/secondary-sidebar/list-view-sidebar.js.map +1 -1
  88. package/build/components/sidebar/default-sidebar.js +4 -2
  89. package/build/components/sidebar/default-sidebar.js.map +1 -1
  90. package/build/components/sidebar/global-styles-sidebar.js +1 -0
  91. package/build/components/sidebar/global-styles-sidebar.js.map +1 -1
  92. package/build/components/url-query-controller/index.js +1 -38
  93. package/build/components/url-query-controller/index.js.map +1 -1
  94. package/build/index.js +10 -5
  95. package/build/index.js.map +1 -1
  96. package/build/store/actions.js +29 -27
  97. package/build/store/actions.js.map +1 -1
  98. package/build/store/defaults.js +2 -1
  99. package/build/store/defaults.js.map +1 -1
  100. package/build/store/reducer.js +11 -0
  101. package/build/store/reducer.js.map +1 -1
  102. package/build/store/selectors.js +13 -0
  103. package/build/store/selectors.js.map +1 -1
  104. package/build-module/components/block-editor/resizable-editor.js +1 -0
  105. package/build-module/components/block-editor/resizable-editor.js.map +1 -1
  106. package/build-module/components/code-editor/code-editor-text-area.js +83 -0
  107. package/build-module/components/code-editor/code-editor-text-area.js.map +1 -0
  108. package/build-module/components/code-editor/index.js +62 -0
  109. package/build-module/components/code-editor/index.js.map +1 -0
  110. package/build-module/components/editor/index.js +38 -10
  111. package/build-module/components/editor/index.js.map +1 -1
  112. package/build-module/components/global-styles/border-panel.js +82 -23
  113. package/build-module/components/global-styles/border-panel.js.map +1 -1
  114. package/build-module/components/global-styles/context-menu.js +1 -1
  115. package/build-module/components/global-styles/context-menu.js.map +1 -1
  116. package/build-module/components/global-styles/global-styles-provider.js +1 -1
  117. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  118. package/build-module/components/global-styles/header.js +2 -5
  119. package/build-module/components/global-styles/header.js.map +1 -1
  120. package/build-module/components/global-styles/navigation-button.js +35 -10
  121. package/build-module/components/global-styles/navigation-button.js.map +1 -1
  122. package/build-module/components/global-styles/palette.js +2 -2
  123. package/build-module/components/global-styles/palette.js.map +1 -1
  124. package/build-module/components/global-styles/preview.js +45 -15
  125. package/build-module/components/global-styles/preview.js.map +1 -1
  126. package/build-module/components/global-styles/screen-background-color.js +9 -13
  127. package/build-module/components/global-styles/screen-background-color.js.map +1 -1
  128. package/build-module/components/global-styles/screen-block-list.js +1 -2
  129. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  130. package/build-module/components/global-styles/screen-block.js +0 -1
  131. package/build-module/components/global-styles/screen-block.js.map +1 -1
  132. package/build-module/components/global-styles/screen-color-palette.js +0 -2
  133. package/build-module/components/global-styles/screen-color-palette.js.map +1 -1
  134. package/build-module/components/global-styles/screen-colors.js +2 -3
  135. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  136. package/build-module/components/global-styles/screen-layout.js +0 -2
  137. package/build-module/components/global-styles/screen-layout.js.map +1 -1
  138. package/build-module/components/global-styles/screen-link-color.js +7 -13
  139. package/build-module/components/global-styles/screen-link-color.js.map +1 -1
  140. package/build-module/components/global-styles/screen-root.js +21 -4
  141. package/build-module/components/global-styles/screen-root.js.map +1 -1
  142. package/build-module/components/global-styles/screen-style-variations.js +119 -0
  143. package/build-module/components/global-styles/screen-style-variations.js.map +1 -0
  144. package/build-module/components/global-styles/screen-text-color.js +7 -13
  145. package/build-module/components/global-styles/screen-text-color.js.map +1 -1
  146. package/build-module/components/global-styles/screen-typography-element.js +0 -2
  147. package/build-module/components/global-styles/screen-typography-element.js.map +1 -1
  148. package/build-module/components/global-styles/screen-typography.js +1 -2
  149. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  150. package/build-module/components/global-styles/ui.js +29 -14
  151. package/build-module/components/global-styles/ui.js.map +1 -1
  152. package/build-module/components/header/index.js +13 -5
  153. package/build-module/components/header/index.js.map +1 -1
  154. package/build-module/components/header/mode-switcher/index.js +65 -0
  155. package/build-module/components/header/mode-switcher/index.js.map +1 -0
  156. package/build-module/components/header/more-menu/copy-content-menu-item.js +59 -0
  157. package/build-module/components/header/more-menu/copy-content-menu-item.js.map +1 -0
  158. package/build-module/components/header/more-menu/index.js +67 -40
  159. package/build-module/components/header/more-menu/index.js.map +1 -1
  160. package/build-module/{plugins → components/header/more-menu}/site-export.js +0 -0
  161. package/build-module/components/header/more-menu/site-export.js.map +1 -0
  162. package/build-module/{plugins → components/header/more-menu}/welcome-guide-menu-item.js +1 -1
  163. package/build-module/components/header/more-menu/welcome-guide-menu-item.js.map +1 -0
  164. package/build-module/components/header/tools-more-menu-group/index.js +2 -5
  165. package/build-module/components/header/tools-more-menu-group/index.js.map +1 -1
  166. package/build-module/components/keyboard-shortcut-help-modal/config.js +36 -0
  167. package/build-module/components/keyboard-shortcut-help-modal/config.js.map +1 -0
  168. package/build-module/components/keyboard-shortcut-help-modal/dynamic-shortcut.js +44 -0
  169. package/build-module/components/keyboard-shortcut-help-modal/dynamic-shortcut.js.map +1 -0
  170. package/build-module/components/keyboard-shortcut-help-modal/index.js +120 -0
  171. package/build-module/components/keyboard-shortcut-help-modal/index.js.map +1 -0
  172. package/build-module/components/keyboard-shortcut-help-modal/shortcut.js +58 -0
  173. package/build-module/components/keyboard-shortcut-help-modal/shortcut.js.map +1 -0
  174. package/build-module/components/keyboard-shortcuts/index.js +26 -1
  175. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  176. package/build-module/components/list/actions/index.js +5 -4
  177. package/build-module/components/list/actions/index.js.map +1 -1
  178. package/build-module/components/list/actions/rename-menu-item.js +3 -3
  179. package/build-module/components/list/actions/rename-menu-item.js.map +1 -1
  180. package/build-module/components/list/added-by.js +52 -51
  181. package/build-module/components/list/added-by.js.map +1 -1
  182. package/build-module/components/routes/redirect-to-homepage.js +75 -0
  183. package/build-module/components/routes/redirect-to-homepage.js.map +1 -0
  184. package/build-module/components/secondary-sidebar/inserter-sidebar.js +14 -4
  185. package/build-module/components/secondary-sidebar/inserter-sidebar.js.map +1 -1
  186. package/build-module/components/secondary-sidebar/list-view-sidebar.js +7 -5
  187. package/build-module/components/secondary-sidebar/list-view-sidebar.js.map +1 -1
  188. package/build-module/components/sidebar/default-sidebar.js +4 -2
  189. package/build-module/components/sidebar/default-sidebar.js.map +1 -1
  190. package/build-module/components/sidebar/global-styles-sidebar.js +1 -0
  191. package/build-module/components/sidebar/global-styles-sidebar.js.map +1 -1
  192. package/build-module/components/url-query-controller/index.js +3 -40
  193. package/build-module/components/url-query-controller/index.js.map +1 -1
  194. package/build-module/index.js +9 -4
  195. package/build-module/index.js.map +1 -1
  196. package/build-module/store/actions.js +25 -25
  197. package/build-module/store/actions.js.map +1 -1
  198. package/build-module/store/defaults.js +2 -1
  199. package/build-module/store/defaults.js.map +1 -1
  200. package/build-module/store/reducer.js +11 -0
  201. package/build-module/store/reducer.js.map +1 -1
  202. package/build-module/store/selectors.js +11 -0
  203. package/build-module/store/selectors.js.map +1 -1
  204. package/build-style/style-rtl.css +202 -72
  205. package/build-style/style.css +202 -72
  206. package/package.json +28 -30
  207. package/src/components/block-editor/resizable-editor.js +1 -0
  208. package/src/components/block-editor/style.scss +15 -23
  209. package/src/components/code-editor/code-editor-text-area.js +79 -0
  210. package/src/components/code-editor/index.js +65 -0
  211. package/src/components/code-editor/style.scss +100 -0
  212. package/src/components/editor/index.js +55 -10
  213. package/src/components/global-styles/border-panel.js +106 -42
  214. package/src/components/global-styles/context-menu.js +1 -1
  215. package/src/components/global-styles/global-styles-provider.js +1 -2
  216. package/src/components/global-styles/header.js +3 -5
  217. package/src/components/global-styles/navigation-button.js +31 -10
  218. package/src/components/global-styles/palette.js +6 -2
  219. package/src/components/global-styles/preview.js +46 -18
  220. package/src/components/global-styles/screen-background-color.js +7 -12
  221. package/src/components/global-styles/screen-block-list.js +1 -2
  222. package/src/components/global-styles/screen-block.js +1 -1
  223. package/src/components/global-styles/screen-color-palette.js +0 -2
  224. package/src/components/global-styles/screen-colors.js +2 -3
  225. package/src/components/global-styles/screen-layout.js +1 -5
  226. package/src/components/global-styles/screen-link-color.js +6 -16
  227. package/src/components/global-styles/screen-root.js +32 -3
  228. package/src/components/global-styles/screen-style-variations.js +130 -0
  229. package/src/components/global-styles/screen-text-color.js +6 -16
  230. package/src/components/global-styles/screen-typography-element.js +0 -4
  231. package/src/components/global-styles/screen-typography.js +2 -3
  232. package/src/components/global-styles/style.scss +24 -25
  233. package/src/components/global-styles/ui.js +55 -25
  234. package/src/components/header/document-actions/style.scss +1 -9
  235. package/src/components/header/index.js +10 -2
  236. package/src/components/header/mode-switcher/index.js +67 -0
  237. package/src/components/header/more-menu/copy-content-menu-item.js +53 -0
  238. package/src/components/header/more-menu/index.js +107 -44
  239. package/src/{plugins → components/header/more-menu}/site-export.js +0 -0
  240. package/src/{plugins → components/header/more-menu}/welcome-guide-menu-item.js +1 -1
  241. package/src/components/header/style.scss +2 -1
  242. package/src/components/header/tools-more-menu-group/index.js +2 -7
  243. package/src/components/keyboard-shortcut-help-modal/config.js +27 -0
  244. package/src/components/keyboard-shortcut-help-modal/dynamic-shortcut.js +41 -0
  245. package/src/components/keyboard-shortcut-help-modal/index.js +135 -0
  246. package/src/components/keyboard-shortcut-help-modal/shortcut.js +73 -0
  247. package/src/components/keyboard-shortcut-help-modal/style.scss +66 -0
  248. package/src/components/keyboard-shortcuts/index.js +27 -1
  249. package/src/components/list/actions/index.js +5 -4
  250. package/src/components/list/actions/rename-menu-item.js +3 -3
  251. package/src/components/list/added-by.js +57 -63
  252. package/src/components/routes/redirect-to-homepage.js +71 -0
  253. package/src/components/secondary-sidebar/inserter-sidebar.js +14 -3
  254. package/src/components/secondary-sidebar/list-view-sidebar.js +12 -5
  255. package/src/components/secondary-sidebar/style.scss +0 -4
  256. package/src/components/sidebar/default-sidebar.js +2 -0
  257. package/src/components/sidebar/global-styles-sidebar.js +1 -0
  258. package/src/components/sidebar/style.scss +21 -14
  259. package/src/components/url-query-controller/index.js +3 -35
  260. package/src/index.js +10 -3
  261. package/src/store/actions.js +24 -37
  262. package/src/store/defaults.js +1 -0
  263. package/src/store/reducer.js +6 -0
  264. package/src/store/selectors.js +11 -0
  265. package/src/store/test/actions.js +2 -92
  266. package/src/style.scss +2 -0
  267. package/build/plugins/index.js +0 -28
  268. package/build/plugins/index.js.map +0 -1
  269. package/build/plugins/site-export.js.map +0 -1
  270. package/build/plugins/welcome-guide-menu-item.js.map +0 -1
  271. package/build-module/plugins/index.js +0 -20
  272. package/build-module/plugins/index.js.map +0 -1
  273. package/build-module/plugins/site-export.js.map +0 -1
  274. package/build-module/plugins/welcome-guide-menu-item.js.map +0 -1
  275. package/src/plugins/index.js +0 -24
@@ -0,0 +1,73 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { castArray } from 'lodash';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { Fragment } from '@wordpress/element';
10
+ import { displayShortcutList, shortcutAriaLabel } from '@wordpress/keycodes';
11
+
12
+ function KeyCombination( { keyCombination, forceAriaLabel } ) {
13
+ const shortcut = keyCombination.modifier
14
+ ? displayShortcutList[ keyCombination.modifier ](
15
+ keyCombination.character
16
+ )
17
+ : keyCombination.character;
18
+ const ariaLabel = keyCombination.modifier
19
+ ? shortcutAriaLabel[ keyCombination.modifier ](
20
+ keyCombination.character
21
+ )
22
+ : keyCombination.character;
23
+
24
+ return (
25
+ <kbd
26
+ className="edit-site-keyboard-shortcut-help-modal__shortcut-key-combination"
27
+ aria-label={ forceAriaLabel || ariaLabel }
28
+ >
29
+ { castArray( shortcut ).map( ( character, index ) => {
30
+ if ( character === '+' ) {
31
+ return <Fragment key={ index }>{ character }</Fragment>;
32
+ }
33
+
34
+ return (
35
+ <kbd
36
+ key={ index }
37
+ className="edit-site-keyboard-shortcut-help-modal__shortcut-key"
38
+ >
39
+ { character }
40
+ </kbd>
41
+ );
42
+ } ) }
43
+ </kbd>
44
+ );
45
+ }
46
+
47
+ export default function Shortcut( {
48
+ description,
49
+ keyCombination,
50
+ aliases = [],
51
+ ariaLabel,
52
+ } ) {
53
+ return (
54
+ <>
55
+ <div className="edit-site-keyboard-shortcut-help-modal__shortcut-description">
56
+ { description }
57
+ </div>
58
+ <div className="edit-site-keyboard-shortcut-help-modal__shortcut-term">
59
+ <KeyCombination
60
+ keyCombination={ keyCombination }
61
+ forceAriaLabel={ ariaLabel }
62
+ />
63
+ { aliases.map( ( alias, index ) => (
64
+ <KeyCombination
65
+ keyCombination={ alias }
66
+ forceAriaLabel={ ariaLabel }
67
+ key={ index }
68
+ />
69
+ ) ) }
70
+ </div>
71
+ </>
72
+ );
73
+ }
@@ -0,0 +1,66 @@
1
+ .edit-site-keyboard-shortcut-help-modal {
2
+ &__section {
3
+ margin: 0 0 2rem 0;
4
+ }
5
+
6
+ &__main-shortcuts .edit-site-keyboard-shortcut-help-modal__shortcut-list {
7
+ // Push the shortcut to be flush with top modal header.
8
+ margin-top: -$grid-unit-30 -$border-width;
9
+ }
10
+
11
+ &__section-title {
12
+ font-size: 0.9rem;
13
+ font-weight: 600;
14
+ }
15
+
16
+ &__shortcut {
17
+ display: flex;
18
+ align-items: baseline;
19
+ padding: 0.6rem 0;
20
+ border-top: 1px solid $gray-300;
21
+ margin-bottom: 0;
22
+
23
+ &:last-child {
24
+ border-bottom: 1px solid $gray-300;
25
+ }
26
+
27
+ &:empty {
28
+ display: none;
29
+ }
30
+ }
31
+
32
+ &__shortcut-term {
33
+ font-weight: 600;
34
+ margin: 0 0 0 1rem;
35
+ text-align: right;
36
+ }
37
+
38
+ &__shortcut-description {
39
+ flex: 1;
40
+ margin: 0;
41
+
42
+ // IE 11 flex item fix - ensure the item does not collapse.
43
+ flex-basis: auto;
44
+ }
45
+
46
+ &__shortcut-key-combination {
47
+ display: block;
48
+ background: none;
49
+ margin: 0;
50
+ padding: 0;
51
+
52
+ & + .edit-site-keyboard-shortcut-help-modal__shortcut-key-combination {
53
+ margin-top: 10px;
54
+ }
55
+ }
56
+
57
+ &__shortcut-key {
58
+ padding: 0.25rem 0.5rem;
59
+ border-radius: 8%;
60
+ margin: 0 0.2rem 0 0.2rem;
61
+
62
+ &:last-child {
63
+ margin: 0 0 0 0.2rem;
64
+ }
65
+ }
66
+ }
@@ -23,6 +23,7 @@ function KeyboardShortcuts( { openEntitiesSavedStates } ) {
23
23
  __experimentalGetDirtyEntityRecords,
24
24
  isSavingEntityRecord,
25
25
  } = useSelect( coreStore );
26
+ const { getEditorMode } = useSelect( editSiteStore );
26
27
  const isListViewOpen = useSelect(
27
28
  ( select ) => select( editSiteStore ).isListViewOpened(),
28
29
  []
@@ -35,7 +36,9 @@ function KeyboardShortcuts( { openEntitiesSavedStates } ) {
35
36
  []
36
37
  );
37
38
  const { redo, undo } = useDispatch( coreStore );
38
- const { setIsListViewOpened } = useDispatch( editSiteStore );
39
+ const { setIsListViewOpened, switchEditorMode } = useDispatch(
40
+ editSiteStore
41
+ );
39
42
  const { enableComplementaryArea, disableComplementaryArea } = useDispatch(
40
43
  interfaceStore
41
44
  );
@@ -80,6 +83,10 @@ function KeyboardShortcuts( { openEntitiesSavedStates } ) {
80
83
  }
81
84
  } );
82
85
 
86
+ useShortcut( 'core/edit-site/toggle-mode', () => {
87
+ switchEditorMode( getEditorMode() === 'visual' ? 'text' : 'visual' );
88
+ } );
89
+
83
90
  return null;
84
91
  }
85
92
 
@@ -137,6 +144,16 @@ function KeyboardShortcutsRegister() {
137
144
  },
138
145
  } );
139
146
 
147
+ registerShortcut( {
148
+ name: 'core/edit-site/keyboard-shortcuts',
149
+ category: 'main',
150
+ description: __( 'Display these keyboard shortcuts.' ),
151
+ keyCombination: {
152
+ modifier: 'access',
153
+ character: 'h',
154
+ },
155
+ } );
156
+
140
157
  registerShortcut( {
141
158
  name: 'core/edit-site/next-region',
142
159
  category: 'global',
@@ -168,6 +185,15 @@ function KeyboardShortcutsRegister() {
168
185
  },
169
186
  ],
170
187
  } );
188
+ registerShortcut( {
189
+ name: 'core/edit-site/toggle-mode',
190
+ category: 'global',
191
+ description: __( 'Switch between visual editor and code editor.' ),
192
+ keyCombination: {
193
+ modifier: 'secondary',
194
+ character: 'm',
195
+ },
196
+ } );
171
197
  }, [ registerShortcut ] );
172
198
 
173
199
  return null;
@@ -39,14 +39,14 @@ export default function Actions( { template } ) {
39
39
  template.id
40
40
  );
41
41
 
42
- createSuccessNotice( __( 'Template reverted.' ), {
42
+ createSuccessNotice( __( 'Entity reverted.' ), {
43
43
  type: 'snackbar',
44
44
  } );
45
45
  } catch ( error ) {
46
46
  const errorMessage =
47
47
  error.message && error.code !== 'unknown_error'
48
48
  ? error.message
49
- : __( 'An error occurred while reverting the template.' );
49
+ : __( 'An error occurred while reverting the entity.' );
50
50
 
51
51
  createErrorNotice( errorMessage, { type: 'snackbar' } );
52
52
  }
@@ -68,18 +68,19 @@ export default function Actions( { template } ) {
68
68
  />
69
69
  <MenuItem
70
70
  isDestructive
71
+ isTertiary
71
72
  onClick={ () => {
72
73
  removeTemplate( template );
73
74
  onClose();
74
75
  } }
75
76
  >
76
- { __( 'Delete template' ) }
77
+ { __( 'Delete' ) }
77
78
  </MenuItem>
78
79
  </>
79
80
  ) }
80
81
  { isRevertable && (
81
82
  <MenuItem
82
- info={ __( 'Restore template to default state' ) }
83
+ info={ __( 'Restore to default state' ) }
83
84
  onClick={ () => {
84
85
  revertAndSaveTemplate();
85
86
  onClose();
@@ -61,14 +61,14 @@ export default function RenameMenuItem( { template, onClose } ) {
61
61
  throw lastError;
62
62
  }
63
63
 
64
- createSuccessNotice( __( 'Template has been renamed.' ), {
64
+ createSuccessNotice( __( 'Entity renamed.' ), {
65
65
  type: 'snackbar',
66
66
  } );
67
67
  } catch ( error ) {
68
68
  const errorMessage =
69
69
  error.message && error.code !== 'unknown_error'
70
70
  ? error.message
71
- : __( 'An error occurred while renaming the template.' );
71
+ : __( 'An error occurred while renaming the entity.' );
72
72
 
73
73
  createErrorNotice( errorMessage, { type: 'snackbar' } );
74
74
  }
@@ -86,7 +86,7 @@ export default function RenameMenuItem( { template, onClose } ) {
86
86
  </MenuItem>
87
87
  { isModalOpen && (
88
88
  <Modal
89
- title={ __( 'Rename template' ) }
89
+ title={ __( 'Rename' ) }
90
90
  closeLabel={ __( 'Close' ) }
91
91
  onRequestClose={ () => {
92
92
  setIsModalOpen( false );
@@ -18,6 +18,7 @@ import {
18
18
  commentAuthorAvatar as authorIcon,
19
19
  layout as themeIcon,
20
20
  plugins as pluginIcon,
21
+ globe as globeIcon,
21
22
  } from '@wordpress/icons';
22
23
  import { __ } from '@wordpress/i18n';
23
24
 
@@ -35,6 +36,45 @@ function CustomizedTooltip( { isCustomized, children } ) {
35
36
  );
36
37
  }
37
38
 
39
+ function BaseAddedBy( { text, icon, imageUrl, isCustomized } ) {
40
+ const [ isImageLoaded, setIsImageLoaded ] = useState( false );
41
+
42
+ return (
43
+ <HStack alignment="left">
44
+ <CustomizedTooltip isCustomized={ isCustomized }>
45
+ { imageUrl ? (
46
+ <div
47
+ className={ classnames(
48
+ 'edit-site-list-added-by__avatar',
49
+ {
50
+ 'is-loaded': isImageLoaded,
51
+ }
52
+ ) }
53
+ >
54
+ <img
55
+ onLoad={ () => setIsImageLoaded( true ) }
56
+ alt=""
57
+ src={ imageUrl }
58
+ />
59
+ </div>
60
+ ) : (
61
+ <div
62
+ className={ classnames(
63
+ 'edit-site-list-added-by__icon',
64
+ {
65
+ 'is-customized': isCustomized,
66
+ }
67
+ ) }
68
+ >
69
+ <Icon icon={ icon } />
70
+ </div>
71
+ ) }
72
+ </CustomizedTooltip>
73
+ <span>{ text }</span>
74
+ </HStack>
75
+ );
76
+ }
77
+
38
78
  function AddedByTheme( { slug, isCustomized } ) {
39
79
  const theme = useSelect(
40
80
  ( select ) => select( coreStore ).getTheme( slug ),
@@ -42,18 +82,11 @@ function AddedByTheme( { slug, isCustomized } ) {
42
82
  );
43
83
 
44
84
  return (
45
- <HStack alignment="left">
46
- <CustomizedTooltip isCustomized={ isCustomized }>
47
- <div
48
- className={ classnames( 'edit-site-list-added-by__icon', {
49
- 'is-customized': isCustomized,
50
- } ) }
51
- >
52
- <Icon icon={ themeIcon } />
53
- </div>
54
- </CustomizedTooltip>
55
- <span>{ theme?.name?.rendered || slug }</span>
56
- </HStack>
85
+ <BaseAddedBy
86
+ icon={ themeIcon }
87
+ text={ theme?.name?.rendered || slug }
88
+ isCustomized={ isCustomized }
89
+ />
57
90
  );
58
91
  }
59
92
 
@@ -64,14 +97,11 @@ function AddedByPlugin( { slug, isCustomized } ) {
64
97
  );
65
98
 
66
99
  return (
67
- <HStack alignment="left">
68
- <CustomizedTooltip isCustomized={ isCustomized }>
69
- <div className="edit-site-list-added-by__icon">
70
- <Icon icon={ pluginIcon } />
71
- </div>
72
- </CustomizedTooltip>
73
- <span>{ plugin?.name || slug }</span>
74
- </HStack>
100
+ <BaseAddedBy
101
+ icon={ pluginIcon }
102
+ text={ plugin?.name || slug }
103
+ isCustomized={ isCustomized }
104
+ />
75
105
  );
76
106
  }
77
107
 
@@ -79,35 +109,13 @@ function AddedByAuthor( { id } ) {
79
109
  const user = useSelect( ( select ) => select( coreStore ).getUser( id ), [
80
110
  id,
81
111
  ] );
82
- const [ isImageLoaded, setIsImageLoaded ] = useState( false );
83
-
84
- const avatarURL = user?.avatar_urls?.[ 48 ];
85
- const hasAvatar = !! avatarURL;
86
112
 
87
113
  return (
88
- <HStack alignment="left">
89
- <div
90
- className={ classnames(
91
- hasAvatar
92
- ? 'edit-site-list-added-by__avatar'
93
- : 'edit-site-list-added-by__icon',
94
- {
95
- 'is-loaded': isImageLoaded,
96
- }
97
- ) }
98
- >
99
- { hasAvatar ? (
100
- <img
101
- onLoad={ () => setIsImageLoaded( true ) }
102
- alt=""
103
- src={ avatarURL }
104
- />
105
- ) : (
106
- <Icon icon={ authorIcon } />
107
- ) }
108
- </div>
109
- <span>{ user?.nickname }</span>
110
- </HStack>
114
+ <BaseAddedBy
115
+ icon={ authorIcon }
116
+ imageUrl={ user?.avatar_urls?.[ 48 ] }
117
+ text={ user?.nickname }
118
+ />
111
119
  );
112
120
  }
113
121
 
@@ -117,29 +125,15 @@ function AddedBySite() {
117
125
  const siteData = getEntityRecord( 'root', '__unstableBase' );
118
126
 
119
127
  return {
120
- name: siteData.name,
128
+ name: siteData?.name,
121
129
  logoURL: siteData?.site_logo
122
130
  ? getMedia( siteData.site_logo )?.source_url
123
131
  : undefined,
124
132
  };
125
133
  }, [] );
126
- const [ isImageLoaded, setIsImageLoaded ] = useState( false );
127
134
 
128
135
  return (
129
- <HStack alignment="left">
130
- <div
131
- className={ classnames( 'edit-site-list-added-by__avatar', {
132
- 'is-loaded': isImageLoaded,
133
- } ) }
134
- >
135
- <img
136
- onLoad={ () => setIsImageLoaded( true ) }
137
- alt=""
138
- src={ logoURL }
139
- />
140
- </div>
141
- <span>{ name }</span>
142
- </HStack>
136
+ <BaseAddedBy icon={ globeIcon } imageUrl={ logoURL } text={ name } />
143
137
  );
144
138
  }
145
139
 
@@ -0,0 +1,71 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import apiFetch from '@wordpress/api-fetch';
5
+ import { addQueryArgs } from '@wordpress/url';
6
+
7
+ /**
8
+ * Internal dependencies
9
+ */
10
+ import history from '../../utils/history';
11
+ import getIsListPage from '../../utils/get-is-list-page';
12
+
13
+ function getNeedsHomepageRedirect( params ) {
14
+ const { postType } = params;
15
+ return (
16
+ ! getIsListPage( params ) &&
17
+ ! [ 'post', 'page', 'wp_template', 'wp_template_part' ].includes(
18
+ postType
19
+ )
20
+ );
21
+ }
22
+
23
+ async function getHomepageParams( siteUrl ) {
24
+ const siteSettings = await apiFetch( { path: '/wp/v2/settings' } );
25
+ if ( ! siteSettings ) {
26
+ return;
27
+ }
28
+
29
+ const {
30
+ show_on_front: showOnFront,
31
+ page_on_front: frontpageId,
32
+ } = siteSettings;
33
+
34
+ // If the user has set a page as the homepage, use those details.
35
+ if ( showOnFront === 'page' ) {
36
+ return {
37
+ postType: 'page',
38
+ postId: frontpageId,
39
+ };
40
+ }
41
+
42
+ // Else get the home template.
43
+ // This matches the logic in `__experimentalGetTemplateForLink`.
44
+ // (packages/core-data/src/resolvers.js)
45
+ const template = await window
46
+ .fetch( addQueryArgs( siteUrl, { '_wp-find-template': true } ) )
47
+ .then( ( res ) => res.json() )
48
+ .then( ( { data } ) => data );
49
+
50
+ if ( ! template?.id ) {
51
+ return;
52
+ }
53
+
54
+ return {
55
+ postType: 'wp_template',
56
+ postId: template.id,
57
+ };
58
+ }
59
+
60
+ export default async function redirectToHomepage( siteUrl ) {
61
+ const searchParams = new URLSearchParams( history.location.search );
62
+ const params = Object.fromEntries( searchParams.entries() );
63
+
64
+ if ( getNeedsHomepageRedirect( params ) ) {
65
+ const homepageParams = await getHomepageParams( siteUrl );
66
+
67
+ if ( homepageParams ) {
68
+ history.replace( homepageParams );
69
+ }
70
+ }
71
+ }
@@ -2,13 +2,15 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useSelect, useDispatch } from '@wordpress/data';
5
- import { Button } from '@wordpress/components';
5
+ import { Button, VisuallyHidden } from '@wordpress/components';
6
6
  import { __experimentalLibrary as Library } from '@wordpress/block-editor';
7
7
  import { close } from '@wordpress/icons';
8
8
  import {
9
9
  useViewportMatch,
10
10
  __experimentalUseDialog as useDialog,
11
11
  } from '@wordpress/compose';
12
+ import { __ } from '@wordpress/i18n';
13
+ import { useEffect, useRef } from '@wordpress/element';
12
14
 
13
15
  /**
14
16
  * Internal dependencies
@@ -23,22 +25,30 @@ export default function InserterSidebar() {
23
25
  );
24
26
 
25
27
  const isMobile = useViewportMatch( 'medium', '<' );
28
+ const TagName = ! isMobile ? VisuallyHidden : 'div';
26
29
  const [ inserterDialogRef, inserterDialogProps ] = useDialog( {
27
30
  onClose: () => setIsInserterOpened( false ),
31
+ focusOnMount: null,
28
32
  } );
29
33
 
34
+ const libraryRef = useRef();
35
+ useEffect( () => {
36
+ libraryRef.current.focusSearch();
37
+ }, [] );
38
+
30
39
  return (
31
40
  <div
32
41
  ref={ inserterDialogRef }
33
42
  { ...inserterDialogProps }
34
43
  className="edit-site-editor__inserter-panel"
35
44
  >
36
- <div className="edit-site-editor__inserter-panel-header">
45
+ <TagName className="edit-site-editor__inserter-panel-header">
37
46
  <Button
38
47
  icon={ close }
48
+ label={ __( 'Close block inserter' ) }
39
49
  onClick={ () => setIsInserterOpened( false ) }
40
50
  />
41
- </div>
51
+ </TagName>
42
52
  <div className="edit-site-editor__inserter-panel-content">
43
53
  <Library
44
54
  showInserterHelpPanel
@@ -48,6 +58,7 @@ export default function InserterSidebar() {
48
58
  insertionPoint.insertionIndex
49
59
  }
50
60
  __experimentalFilterValue={ insertionPoint.filterValue }
61
+ ref={ libraryRef }
51
62
  />
52
63
  </div>
53
64
  </div>
@@ -32,7 +32,8 @@ export default function ListViewSidebar() {
32
32
  }
33
33
 
34
34
  const focusOnMountRef = useFocusOnMount( 'firstElement' );
35
- const focusReturnRef = useFocusReturn();
35
+ const headerFocusReturnRef = useFocusReturn();
36
+ const contentFocusReturnRef = useFocusReturn();
36
37
  function closeOnEscape( event ) {
37
38
  if ( event.keyCode === ESCAPE && ! event.defaultPrevented ) {
38
39
  setIsListViewOpened( false );
@@ -49,17 +50,23 @@ export default function ListViewSidebar() {
49
50
  className="edit-site-editor__list-view-panel"
50
51
  onKeyDown={ closeOnEscape }
51
52
  >
52
- <div className="edit-site-editor__list-view-panel-header">
53
- <strong id={ labelId }>{ __( 'List view' ) }</strong>
53
+ <div
54
+ className="edit-site-editor__list-view-panel-header"
55
+ ref={ headerFocusReturnRef }
56
+ >
57
+ <strong id={ labelId }>{ __( 'List View' ) }</strong>
54
58
  <Button
55
59
  icon={ closeSmall }
56
- label={ __( 'Close list view sidebar' ) }
60
+ label={ __( 'Close List View Sidebar' ) }
57
61
  onClick={ () => setIsListViewOpened( false ) }
58
62
  />
59
63
  </div>
60
64
  <div
61
65
  className="edit-site-editor__list-view-panel-content"
62
- ref={ useMergeRefs( [ focusReturnRef, focusOnMountRef ] ) }
66
+ ref={ useMergeRefs( [
67
+ contentFocusReturnRef,
68
+ focusOnMountRef,
69
+ ] ) }
63
70
  >
64
71
  <ListView
65
72
  onSelect={ selectEditorBlock }
@@ -16,10 +16,6 @@
16
16
  padding-right: $grid-unit-10;
17
17
  display: flex;
18
18
  justify-content: flex-end;
19
-
20
- @include break-medium() {
21
- display: none;
22
- }
23
19
  }
24
20
 
25
21
  .edit-site-editor__inserter-panel-content,
@@ -15,6 +15,7 @@ export default function DefaultSidebar( {
15
15
  closeLabel,
16
16
  header,
17
17
  headerClassName,
18
+ panelClassName,
18
19
  } ) {
19
20
  return (
20
21
  <>
@@ -27,6 +28,7 @@ export default function DefaultSidebar( {
27
28
  closeLabel={ closeLabel }
28
29
  header={ header }
29
30
  headerClassName={ headerClassName }
31
+ panelClassName={ panelClassName }
30
32
  >
31
33
  { children }
32
34
  </ComplementaryArea>
@@ -24,6 +24,7 @@ export default function GlobalStylesSidebar() {
24
24
  title={ __( 'Styles' ) }
25
25
  icon={ styles }
26
26
  closeLabel={ __( 'Close global styles sidebar' ) }
27
+ panelClassName="edit-site-global-styles-sidebar__panel"
27
28
  header={
28
29
  <Flex>
29
30
  <FlexBlock>
@@ -17,6 +17,23 @@
17
17
  }
18
18
  }
19
19
 
20
+ .edit-site-global-styles-sidebar {
21
+ display: flex;
22
+ flex-direction: column;
23
+ height: 100%;
24
+
25
+ &__panel,
26
+ &__navigator-provider {
27
+ display: flex;
28
+ flex-direction: column;
29
+ flex: 1;
30
+ }
31
+
32
+ &__navigator-screen {
33
+ flex: 1;
34
+ }
35
+ }
36
+
20
37
  .edit-site-global-styles-sidebar .interface-complementary-area-header .components-button.has-icon {
21
38
  margin-left: 0;
22
39
  }
@@ -25,20 +42,6 @@
25
42
  margin-left: auto;
26
43
  }
27
44
 
28
- .edit-site-global-styles-sidebar__border-controls-row {
29
- display: flex;
30
- justify-content: space-between;
31
- margin-bottom: $grid-unit-15;
32
-
33
- > * {
34
- width: calc(50% - #{ $grid-unit-10 });
35
- }
36
-
37
- .components-border-style-control__buttons {
38
- margin-bottom: 0;
39
- }
40
- }
41
-
42
45
  .edit-site-global-styles-sidebar .components-navigation__menu-title-heading {
43
46
  font-size: $default-font-size * 1.2;
44
47
  font-weight: 500;
@@ -53,6 +56,10 @@
53
56
  border: 0;
54
57
  }
55
58
 
59
+ .edit-site-global-styles-sidebar .components-tools-panel-item.single-column {
60
+ grid-column: span 1;
61
+ }
62
+
56
63
  .edit-site-global-styles-sidebar__blocks-group {
57
64
  padding-top: $grid-unit-30;
58
65
  border-top: $border-width solid $gray-200;