@wordpress/edit-site 3.0.22 → 3.1.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 (274) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/LICENSE.md +1 -1
  3. package/build/components/block-editor/resizable-editor.js +1 -0
  4. package/build/components/block-editor/resizable-editor.js.map +1 -1
  5. package/build/components/code-editor/code-editor-text-area.js +95 -0
  6. package/build/components/code-editor/code-editor-text-area.js.map +1 -0
  7. package/build/components/code-editor/index.js +79 -0
  8. package/build/components/code-editor/index.js.map +1 -0
  9. package/build/components/editor/index.js +21 -6
  10. package/build/components/editor/index.js.map +1 -1
  11. package/build/components/global-styles/border-panel.js +81 -22
  12. package/build/components/global-styles/border-panel.js.map +1 -1
  13. package/build/components/global-styles/context-menu.js +4 -6
  14. package/build/components/global-styles/context-menu.js.map +1 -1
  15. package/build/components/global-styles/global-styles-provider.js +1 -0
  16. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  17. package/build/components/global-styles/header.js +2 -7
  18. package/build/components/global-styles/header.js.map +1 -1
  19. package/build/components/global-styles/navigation-button.js +27 -12
  20. package/build/components/global-styles/navigation-button.js.map +1 -1
  21. package/build/components/global-styles/palette.js +2 -2
  22. package/build/components/global-styles/palette.js.map +1 -1
  23. package/build/components/global-styles/preview.js +46 -15
  24. package/build/components/global-styles/preview.js.map +1 -1
  25. package/build/components/global-styles/screen-background-color.js +9 -12
  26. package/build/components/global-styles/screen-background-color.js.map +1 -1
  27. package/build/components/global-styles/screen-block-list.js +2 -3
  28. package/build/components/global-styles/screen-block-list.js.map +1 -1
  29. package/build/components/global-styles/screen-block.js +0 -1
  30. package/build/components/global-styles/screen-block.js.map +1 -1
  31. package/build/components/global-styles/screen-color-palette.js +0 -2
  32. package/build/components/global-styles/screen-color-palette.js.map +1 -1
  33. package/build/components/global-styles/screen-colors.js +5 -6
  34. package/build/components/global-styles/screen-colors.js.map +1 -1
  35. package/build/components/global-styles/screen-layout.js +0 -2
  36. package/build/components/global-styles/screen-layout.js.map +1 -1
  37. package/build/components/global-styles/screen-link-color.js +6 -12
  38. package/build/components/global-styles/screen-link-color.js.map +1 -1
  39. package/build/components/global-styles/screen-root.js +22 -3
  40. package/build/components/global-styles/screen-root.js.map +1 -1
  41. package/build/components/global-styles/screen-style-variations.js +138 -0
  42. package/build/components/global-styles/screen-style-variations.js.map +1 -0
  43. package/build/components/global-styles/screen-text-color.js +6 -12
  44. package/build/components/global-styles/screen-text-color.js.map +1 -1
  45. package/build/components/global-styles/screen-typography-element.js +0 -2
  46. package/build/components/global-styles/screen-typography-element.js.map +1 -1
  47. package/build/components/global-styles/screen-typography.js +2 -3
  48. package/build/components/global-styles/screen-typography.js.map +1 -1
  49. package/build/components/global-styles/ui.js +31 -14
  50. package/build/components/global-styles/ui.js.map +1 -1
  51. package/build/components/header/index.js +12 -4
  52. package/build/components/header/index.js.map +1 -1
  53. package/build/components/header/mode-switcher/index.js +78 -0
  54. package/build/components/header/mode-switcher/index.js.map +1 -0
  55. package/build/components/header/more-menu/copy-content-menu-item.js +74 -0
  56. package/build/components/header/more-menu/copy-content-menu-item.js.map +1 -0
  57. package/build/components/header/more-menu/index.js +72 -39
  58. package/build/components/header/more-menu/index.js.map +1 -1
  59. package/build/{plugins → components/header/more-menu}/site-export.js +0 -0
  60. package/build/components/header/more-menu/site-export.js.map +1 -0
  61. package/build/{plugins → components/header/more-menu}/welcome-guide-menu-item.js +1 -1
  62. package/build/components/header/more-menu/welcome-guide-menu-item.js.map +1 -0
  63. package/build/components/header/tools-more-menu-group/index.js +1 -5
  64. package/build/components/header/tools-more-menu-group/index.js.map +1 -1
  65. package/build/components/keyboard-shortcut-help-modal/config.js +45 -0
  66. package/build/components/keyboard-shortcut-help-modal/config.js.map +1 -0
  67. package/build/components/keyboard-shortcut-help-modal/dynamic-shortcut.js +56 -0
  68. package/build/components/keyboard-shortcut-help-modal/dynamic-shortcut.js.map +1 -0
  69. package/build/components/keyboard-shortcut-help-modal/index.js +137 -0
  70. package/build/components/keyboard-shortcut-help-modal/index.js.map +1 -0
  71. package/build/components/keyboard-shortcut-help-modal/shortcut.js +65 -0
  72. package/build/components/keyboard-shortcut-help-modal/shortcut.js.map +1 -0
  73. package/build/components/keyboard-shortcuts/index.js +26 -1
  74. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  75. package/build/components/list/actions/index.js +5 -4
  76. package/build/components/list/actions/index.js.map +1 -1
  77. package/build/components/list/actions/rename-menu-item.js +3 -3
  78. package/build/components/list/actions/rename-menu-item.js.map +1 -1
  79. package/build/components/list/added-by.js +51 -50
  80. package/build/components/list/added-by.js.map +1 -1
  81. package/build/components/routes/redirect-to-homepage.js +87 -0
  82. package/build/components/routes/redirect-to-homepage.js.map +1 -0
  83. package/build/components/secondary-sidebar/inserter-sidebar.js +13 -3
  84. package/build/components/secondary-sidebar/inserter-sidebar.js.map +1 -1
  85. package/build/components/secondary-sidebar/list-view-sidebar.js +7 -5
  86. package/build/components/secondary-sidebar/list-view-sidebar.js.map +1 -1
  87. package/build/components/sidebar/default-sidebar.js +4 -2
  88. package/build/components/sidebar/default-sidebar.js.map +1 -1
  89. package/build/components/sidebar/global-styles-sidebar.js +1 -0
  90. package/build/components/sidebar/global-styles-sidebar.js.map +1 -1
  91. package/build/components/url-query-controller/index.js +1 -38
  92. package/build/components/url-query-controller/index.js.map +1 -1
  93. package/build/index.js +9 -4
  94. package/build/index.js.map +1 -1
  95. package/build/store/actions.js +26 -25
  96. package/build/store/actions.js.map +1 -1
  97. package/build/store/defaults.js +2 -1
  98. package/build/store/defaults.js.map +1 -1
  99. package/build/store/reducer.js +11 -0
  100. package/build/store/reducer.js.map +1 -1
  101. package/build/store/selectors.js +13 -0
  102. package/build/store/selectors.js.map +1 -1
  103. package/build-module/components/block-editor/resizable-editor.js +1 -0
  104. package/build-module/components/block-editor/resizable-editor.js.map +1 -1
  105. package/build-module/components/code-editor/code-editor-text-area.js +83 -0
  106. package/build-module/components/code-editor/code-editor-text-area.js.map +1 -0
  107. package/build-module/components/code-editor/index.js +62 -0
  108. package/build-module/components/code-editor/index.js.map +1 -0
  109. package/build-module/components/editor/index.js +20 -6
  110. package/build-module/components/editor/index.js.map +1 -1
  111. package/build-module/components/global-styles/border-panel.js +82 -23
  112. package/build-module/components/global-styles/border-panel.js.map +1 -1
  113. package/build-module/components/global-styles/context-menu.js +1 -1
  114. package/build-module/components/global-styles/context-menu.js.map +1 -1
  115. package/build-module/components/global-styles/global-styles-provider.js +1 -1
  116. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  117. package/build-module/components/global-styles/header.js +2 -5
  118. package/build-module/components/global-styles/header.js.map +1 -1
  119. package/build-module/components/global-styles/navigation-button.js +27 -10
  120. package/build-module/components/global-styles/navigation-button.js.map +1 -1
  121. package/build-module/components/global-styles/palette.js +1 -1
  122. package/build-module/components/global-styles/palette.js.map +1 -1
  123. package/build-module/components/global-styles/preview.js +45 -15
  124. package/build-module/components/global-styles/preview.js.map +1 -1
  125. package/build-module/components/global-styles/screen-background-color.js +9 -13
  126. package/build-module/components/global-styles/screen-background-color.js.map +1 -1
  127. package/build-module/components/global-styles/screen-block-list.js +1 -2
  128. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  129. package/build-module/components/global-styles/screen-block.js +0 -1
  130. package/build-module/components/global-styles/screen-block.js.map +1 -1
  131. package/build-module/components/global-styles/screen-color-palette.js +0 -2
  132. package/build-module/components/global-styles/screen-color-palette.js.map +1 -1
  133. package/build-module/components/global-styles/screen-colors.js +2 -3
  134. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  135. package/build-module/components/global-styles/screen-layout.js +0 -2
  136. package/build-module/components/global-styles/screen-layout.js.map +1 -1
  137. package/build-module/components/global-styles/screen-link-color.js +7 -13
  138. package/build-module/components/global-styles/screen-link-color.js.map +1 -1
  139. package/build-module/components/global-styles/screen-root.js +21 -4
  140. package/build-module/components/global-styles/screen-root.js.map +1 -1
  141. package/build-module/components/global-styles/screen-style-variations.js +119 -0
  142. package/build-module/components/global-styles/screen-style-variations.js.map +1 -0
  143. package/build-module/components/global-styles/screen-text-color.js +7 -13
  144. package/build-module/components/global-styles/screen-text-color.js.map +1 -1
  145. package/build-module/components/global-styles/screen-typography-element.js +0 -2
  146. package/build-module/components/global-styles/screen-typography-element.js.map +1 -1
  147. package/build-module/components/global-styles/screen-typography.js +1 -2
  148. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  149. package/build-module/components/global-styles/ui.js +29 -14
  150. package/build-module/components/global-styles/ui.js.map +1 -1
  151. package/build-module/components/header/index.js +13 -5
  152. package/build-module/components/header/index.js.map +1 -1
  153. package/build-module/components/header/mode-switcher/index.js +65 -0
  154. package/build-module/components/header/mode-switcher/index.js.map +1 -0
  155. package/build-module/components/header/more-menu/copy-content-menu-item.js +59 -0
  156. package/build-module/components/header/more-menu/copy-content-menu-item.js.map +1 -0
  157. package/build-module/components/header/more-menu/index.js +67 -40
  158. package/build-module/components/header/more-menu/index.js.map +1 -1
  159. package/build-module/{plugins → components/header/more-menu}/site-export.js +0 -0
  160. package/build-module/components/header/more-menu/site-export.js.map +1 -0
  161. package/build-module/{plugins → components/header/more-menu}/welcome-guide-menu-item.js +1 -1
  162. package/build-module/components/header/more-menu/welcome-guide-menu-item.js.map +1 -0
  163. package/build-module/components/header/tools-more-menu-group/index.js +2 -5
  164. package/build-module/components/header/tools-more-menu-group/index.js.map +1 -1
  165. package/build-module/components/keyboard-shortcut-help-modal/config.js +36 -0
  166. package/build-module/components/keyboard-shortcut-help-modal/config.js.map +1 -0
  167. package/build-module/components/keyboard-shortcut-help-modal/dynamic-shortcut.js +44 -0
  168. package/build-module/components/keyboard-shortcut-help-modal/dynamic-shortcut.js.map +1 -0
  169. package/build-module/components/keyboard-shortcut-help-modal/index.js +120 -0
  170. package/build-module/components/keyboard-shortcut-help-modal/index.js.map +1 -0
  171. package/build-module/components/keyboard-shortcut-help-modal/shortcut.js +58 -0
  172. package/build-module/components/keyboard-shortcut-help-modal/shortcut.js.map +1 -0
  173. package/build-module/components/keyboard-shortcuts/index.js +26 -1
  174. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  175. package/build-module/components/list/actions/index.js +5 -4
  176. package/build-module/components/list/actions/index.js.map +1 -1
  177. package/build-module/components/list/actions/rename-menu-item.js +3 -3
  178. package/build-module/components/list/actions/rename-menu-item.js.map +1 -1
  179. package/build-module/components/list/added-by.js +52 -51
  180. package/build-module/components/list/added-by.js.map +1 -1
  181. package/build-module/components/routes/redirect-to-homepage.js +75 -0
  182. package/build-module/components/routes/redirect-to-homepage.js.map +1 -0
  183. package/build-module/components/secondary-sidebar/inserter-sidebar.js +14 -4
  184. package/build-module/components/secondary-sidebar/inserter-sidebar.js.map +1 -1
  185. package/build-module/components/secondary-sidebar/list-view-sidebar.js +7 -5
  186. package/build-module/components/secondary-sidebar/list-view-sidebar.js.map +1 -1
  187. package/build-module/components/sidebar/default-sidebar.js +4 -2
  188. package/build-module/components/sidebar/default-sidebar.js.map +1 -1
  189. package/build-module/components/sidebar/global-styles-sidebar.js +1 -0
  190. package/build-module/components/sidebar/global-styles-sidebar.js.map +1 -1
  191. package/build-module/components/url-query-controller/index.js +3 -40
  192. package/build-module/components/url-query-controller/index.js.map +1 -1
  193. package/build-module/index.js +8 -3
  194. package/build-module/index.js.map +1 -1
  195. package/build-module/store/actions.js +22 -23
  196. package/build-module/store/actions.js.map +1 -1
  197. package/build-module/store/defaults.js +2 -1
  198. package/build-module/store/defaults.js.map +1 -1
  199. package/build-module/store/reducer.js +11 -0
  200. package/build-module/store/reducer.js.map +1 -1
  201. package/build-module/store/selectors.js +11 -0
  202. package/build-module/store/selectors.js.map +1 -1
  203. package/build-style/style-rtl.css +202 -72
  204. package/build-style/style.css +202 -72
  205. package/package.json +29 -28
  206. package/src/components/block-editor/resizable-editor.js +1 -0
  207. package/src/components/block-editor/style.scss +15 -23
  208. package/src/components/code-editor/code-editor-text-area.js +79 -0
  209. package/src/components/code-editor/index.js +65 -0
  210. package/src/components/code-editor/style.scss +100 -0
  211. package/src/components/editor/index.js +30 -7
  212. package/src/components/global-styles/border-panel.js +106 -42
  213. package/src/components/global-styles/context-menu.js +1 -1
  214. package/src/components/global-styles/global-styles-provider.js +1 -2
  215. package/src/components/global-styles/header.js +3 -5
  216. package/src/components/global-styles/navigation-button.js +14 -10
  217. package/src/components/global-styles/palette.js +1 -1
  218. package/src/components/global-styles/preview.js +46 -18
  219. package/src/components/global-styles/screen-background-color.js +7 -12
  220. package/src/components/global-styles/screen-block-list.js +1 -2
  221. package/src/components/global-styles/screen-block.js +1 -1
  222. package/src/components/global-styles/screen-color-palette.js +0 -2
  223. package/src/components/global-styles/screen-colors.js +2 -3
  224. package/src/components/global-styles/screen-layout.js +1 -5
  225. package/src/components/global-styles/screen-link-color.js +6 -16
  226. package/src/components/global-styles/screen-root.js +32 -3
  227. package/src/components/global-styles/screen-style-variations.js +130 -0
  228. package/src/components/global-styles/screen-text-color.js +6 -16
  229. package/src/components/global-styles/screen-typography-element.js +0 -4
  230. package/src/components/global-styles/screen-typography.js +2 -3
  231. package/src/components/global-styles/style.scss +24 -25
  232. package/src/components/global-styles/ui.js +55 -25
  233. package/src/components/header/document-actions/style.scss +1 -9
  234. package/src/components/header/index.js +10 -2
  235. package/src/components/header/mode-switcher/index.js +67 -0
  236. package/src/components/header/more-menu/copy-content-menu-item.js +53 -0
  237. package/src/components/header/more-menu/index.js +107 -44
  238. package/src/{plugins → components/header/more-menu}/site-export.js +0 -0
  239. package/src/{plugins → components/header/more-menu}/welcome-guide-menu-item.js +1 -1
  240. package/src/components/header/style.scss +2 -1
  241. package/src/components/header/tools-more-menu-group/index.js +2 -7
  242. package/src/components/keyboard-shortcut-help-modal/config.js +27 -0
  243. package/src/components/keyboard-shortcut-help-modal/dynamic-shortcut.js +41 -0
  244. package/src/components/keyboard-shortcut-help-modal/index.js +135 -0
  245. package/src/components/keyboard-shortcut-help-modal/shortcut.js +73 -0
  246. package/src/components/keyboard-shortcut-help-modal/style.scss +66 -0
  247. package/src/components/keyboard-shortcuts/index.js +27 -1
  248. package/src/components/list/actions/index.js +5 -4
  249. package/src/components/list/actions/rename-menu-item.js +3 -3
  250. package/src/components/list/added-by.js +57 -63
  251. package/src/components/routes/redirect-to-homepage.js +71 -0
  252. package/src/components/secondary-sidebar/inserter-sidebar.js +14 -3
  253. package/src/components/secondary-sidebar/list-view-sidebar.js +12 -5
  254. package/src/components/secondary-sidebar/style.scss +0 -4
  255. package/src/components/sidebar/default-sidebar.js +2 -0
  256. package/src/components/sidebar/global-styles-sidebar.js +1 -0
  257. package/src/components/sidebar/style.scss +21 -14
  258. package/src/components/url-query-controller/index.js +3 -35
  259. package/src/index.js +9 -2
  260. package/src/store/actions.js +22 -35
  261. package/src/store/defaults.js +1 -0
  262. package/src/store/reducer.js +6 -0
  263. package/src/store/selectors.js +11 -0
  264. package/src/store/test/actions.js +2 -92
  265. package/src/style.scss +2 -0
  266. package/build/plugins/index.js +0 -28
  267. package/build/plugins/index.js.map +0 -1
  268. package/build/plugins/site-export.js.map +0 -1
  269. package/build/plugins/welcome-guide-menu-item.js.map +0 -1
  270. package/build-module/plugins/index.js +0 -20
  271. package/build-module/plugins/index.js.map +0 -1
  272. package/build-module/plugins/site-export.js.map +0 -1
  273. package/build-module/plugins/welcome-guide-menu-item.js.map +0 -1
  274. package/src/plugins/index.js +0 -24
@@ -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;
@@ -2,63 +2,31 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useEffect } from '@wordpress/element';
5
- import { useDispatch, useSelect } from '@wordpress/data';
5
+ import { useDispatch } from '@wordpress/data';
6
6
 
7
7
  /**
8
8
  * Internal dependencies
9
9
  */
10
- import { useLocation, useHistory } from '../routes';
10
+ import { useLocation } from '../routes';
11
11
  import { store as editSiteStore } from '../../store';
12
12
 
13
13
  export default function URLQueryController() {
14
- const { setTemplate, setTemplatePart, showHomepage, setPage } = useDispatch(
14
+ const { setTemplate, setTemplatePart, setPage } = useDispatch(
15
15
  editSiteStore
16
16
  );
17
- const history = useHistory();
18
17
  const {
19
18
  params: { postId, postType },
20
19
  } = useLocation();
21
- const { getPage, getEditedPostId, getEditedPostType } = useSelect(
22
- editSiteStore
23
- );
24
20
 
25
21
  // Set correct entity on page navigation.
26
22
  useEffect( () => {
27
- let isMounted = true;
28
-
29
23
  if ( 'page' === postType || 'post' === postType ) {
30
24
  setPage( { context: { postType, postId } } ); // Resolves correct template based on ID.
31
25
  } else if ( 'wp_template' === postType ) {
32
26
  setTemplate( postId );
33
27
  } else if ( 'wp_template_part' === postType ) {
34
28
  setTemplatePart( postId );
35
- } else {
36
- showHomepage().then( () => {
37
- if ( ! isMounted ) {
38
- return;
39
- }
40
-
41
- const page = getPage();
42
- const editedPostId = getEditedPostId();
43
- const editedPostType = getEditedPostType();
44
-
45
- if ( page?.context?.postId && page?.context?.postType ) {
46
- history.replace( {
47
- postId: page.context.postId,
48
- postType: page.context.postType,
49
- } );
50
- } else if ( editedPostId && editedPostType ) {
51
- history.replace( {
52
- postId: editedPostId,
53
- postType: editedPostType,
54
- } );
55
- }
56
- } );
57
29
  }
58
-
59
- return () => {
60
- isMounted = false;
61
- };
62
30
  }, [ postId, postType ] );
63
31
 
64
32
  return null;
package/src/index.js CHANGED
@@ -19,11 +19,11 @@ import { getQueryArgs } from '@wordpress/url';
19
19
  /**
20
20
  * Internal dependencies
21
21
  */
22
- import './plugins';
23
22
  import './hooks';
24
23
  import { store as editSiteStore } from './store';
25
24
  import EditSiteApp from './components/app';
26
25
  import getIsListPage from './utils/get-is-list-page';
26
+ import redirectToHomepage from './components/routes/redirect-to-homepage';
27
27
 
28
28
  /**
29
29
  * Reinitializes the editor after the user chooses to reboot the editor after
@@ -33,7 +33,13 @@ import getIsListPage from './utils/get-is-list-page';
33
33
  * @param {Element} target DOM node in which editor is rendered.
34
34
  * @param {?Object} settings Editor settings object.
35
35
  */
36
- export function reinitializeEditor( target, settings ) {
36
+ export async function reinitializeEditor( target, settings ) {
37
+ // The site editor relies on `postType` and `postId` params in the URL to
38
+ // define what's being edited. When visiting via the dashboard link, these
39
+ // won't be present. Do a client side redirect to the 'homepage' if that's
40
+ // the case.
41
+ await redirectToHomepage( settings.siteUrl );
42
+
37
43
  // This will be a no-op if the target doesn't have any React nodes.
38
44
  unmountComponentAtNode( target );
39
45
  const reboot = reinitializeEditor.bind( null, target, settings );
@@ -42,6 +48,7 @@ export function reinitializeEditor( target, settings ) {
42
48
  // so that we won't trigger unnecessary re-renders with useEffect.
43
49
  {
44
50
  dispatch( editSiteStore ).updateSettings( settings );
51
+
45
52
  // Keep the defaultTemplateTypes in the core/editor settings too,
46
53
  // so that they can be selected with core/editor selectors in any editor.
47
54
  // This is needed because edit-site doesn't initialize with EditorProvider,