@wordpress/edit-site 5.10.0 → 5.11.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 (252) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/add-new-template/{add-custom-generic-template-modal.js → add-custom-generic-template-modal-content.js} +7 -22
  3. package/build/components/add-new-template/add-custom-generic-template-modal-content.js.map +1 -0
  4. package/build/components/add-new-template/{add-custom-template-modal.js → add-custom-template-modal-content.js} +11 -21
  5. package/build/components/add-new-template/add-custom-template-modal-content.js.map +1 -0
  6. package/build/components/add-new-template/new-template.js +98 -65
  7. package/build/components/add-new-template/new-template.js.map +1 -1
  8. package/build/components/block-editor/index.js +1 -3
  9. package/build/components/block-editor/index.js.map +1 -1
  10. package/build/components/create-template-part-modal/index.js +6 -7
  11. package/build/components/create-template-part-modal/index.js.map +1 -1
  12. package/build/components/editor/index.js +15 -40
  13. package/build/components/editor/index.js.map +1 -1
  14. package/build/components/editor-canvas-container/index.js +10 -3
  15. package/build/components/editor-canvas-container/index.js.map +1 -1
  16. package/build/components/global-styles/screen-block.js +80 -3
  17. package/build/components/global-styles/screen-block.js.map +1 -1
  18. package/build/components/global-styles/screen-revisions/index.js +3 -10
  19. package/build/components/global-styles/screen-revisions/index.js.map +1 -1
  20. package/build/components/global-styles/screen-revisions/revisions-buttons.js +16 -18
  21. package/build/components/global-styles/screen-revisions/revisions-buttons.js.map +1 -1
  22. package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js +15 -24
  23. package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js.map +1 -1
  24. package/build/components/global-styles/screen-root.js +4 -4
  25. package/build/components/global-styles/screen-root.js.map +1 -1
  26. package/build/components/global-styles/style-variations-container.js +6 -10
  27. package/build/components/global-styles/style-variations-container.js.map +1 -1
  28. package/build/components/global-styles/ui.js +9 -9
  29. package/build/components/global-styles/ui.js.map +1 -1
  30. package/build/components/header-edit-mode/document-actions/index.js +28 -103
  31. package/build/components/header-edit-mode/document-actions/index.js.map +1 -1
  32. package/build/components/header-edit-mode/index.js +14 -1
  33. package/build/components/header-edit-mode/index.js.map +1 -1
  34. package/build/components/layout/hooks.js +54 -0
  35. package/build/components/layout/hooks.js.map +1 -0
  36. package/build/components/layout/index.js +45 -98
  37. package/build/components/layout/index.js.map +1 -1
  38. package/build/components/list/actions/index.js +5 -2
  39. package/build/components/list/actions/index.js.map +1 -1
  40. package/build/components/resizable-frame/index.js +242 -0
  41. package/build/components/resizable-frame/index.js.map +1 -0
  42. package/build/components/revisions/index.js +2 -1
  43. package/build/components/revisions/index.js.map +1 -1
  44. package/build/components/secondary-sidebar/list-view-sidebar.js +4 -3
  45. package/build/components/secondary-sidebar/list-view-sidebar.js.map +1 -1
  46. package/build/components/sidebar/index.js +4 -4
  47. package/build/components/sidebar/index.js.map +1 -1
  48. package/build/components/sidebar-edit-mode/template-revisions/index.js +1 -1
  49. package/build/components/sidebar-edit-mode/template-revisions/index.js.map +1 -1
  50. package/build/components/sidebar-navigation-screen-global-styles/index.js +75 -11
  51. package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  52. package/build/components/sidebar-navigation-screen-main/index.js +24 -33
  53. package/build/components/sidebar-navigation-screen-main/index.js.map +1 -1
  54. package/build/components/sidebar-navigation-screen-navigation-menu/index.js +162 -0
  55. package/build/components/sidebar-navigation-screen-navigation-menu/index.js.map +1 -0
  56. package/build/components/sidebar-navigation-screen-navigation-menus/constants.js +17 -0
  57. package/build/components/sidebar-navigation-screen-navigation-menus/constants.js.map +1 -0
  58. package/build/components/sidebar-navigation-screen-navigation-menus/index.js +53 -103
  59. package/build/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -1
  60. package/build/components/sidebar-navigation-screen-navigation-menus/leaf-more-menu.js +87 -0
  61. package/build/components/sidebar-navigation-screen-navigation-menus/leaf-more-menu.js.map +1 -0
  62. package/build/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js +14 -71
  63. package/build/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js.map +1 -1
  64. package/build/components/sidebar-navigation-screen-navigation-menus/navigator-button.js +53 -0
  65. package/build/components/sidebar-navigation-screen-navigation-menus/navigator-button.js.map +1 -0
  66. package/build/components/sidebar-navigation-screen-templates/index.js +36 -11
  67. package/build/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  68. package/build/components/site-hub/index.js +1 -3
  69. package/build/components/site-hub/index.js.map +1 -1
  70. package/build/components/style-book/index.js +93 -19
  71. package/build/components/style-book/index.js.map +1 -1
  72. package/build/components/use-edited-entity-record/index.js +8 -4
  73. package/build/components/use-edited-entity-record/index.js.map +1 -1
  74. package/build/hooks/commands/use-edit-mode-commands.js +105 -0
  75. package/build/hooks/commands/use-edit-mode-commands.js.map +1 -0
  76. package/build/store/actions.js +5 -3
  77. package/build/store/actions.js.map +1 -1
  78. package/build-module/components/add-new-template/{add-custom-generic-template-modal.js → add-custom-generic-template-modal-content.js} +8 -20
  79. package/build-module/components/add-new-template/add-custom-generic-template-modal-content.js.map +1 -0
  80. package/build-module/components/add-new-template/{add-custom-template-modal.js → add-custom-template-modal-content.js} +13 -22
  81. package/build-module/components/add-new-template/add-custom-template-modal-content.js.map +1 -0
  82. package/build-module/components/add-new-template/new-template.js +98 -67
  83. package/build-module/components/add-new-template/new-template.js.map +1 -1
  84. package/build-module/components/block-editor/index.js +1 -3
  85. package/build-module/components/block-editor/index.js.map +1 -1
  86. package/build-module/components/create-template-part-modal/index.js +7 -8
  87. package/build-module/components/create-template-part-modal/index.js.map +1 -1
  88. package/build-module/components/editor/index.js +16 -43
  89. package/build-module/components/editor/index.js.map +1 -1
  90. package/build-module/components/editor-canvas-container/index.js +7 -3
  91. package/build-module/components/editor-canvas-container/index.js.map +1 -1
  92. package/build-module/components/global-styles/screen-block.js +82 -4
  93. package/build-module/components/global-styles/screen-block.js.map +1 -1
  94. package/build-module/components/global-styles/screen-revisions/index.js +3 -10
  95. package/build-module/components/global-styles/screen-revisions/index.js.map +1 -1
  96. package/build-module/components/global-styles/screen-revisions/revisions-buttons.js +16 -19
  97. package/build-module/components/global-styles/screen-revisions/revisions-buttons.js.map +1 -1
  98. package/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js +15 -24
  99. package/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js.map +1 -1
  100. package/build-module/components/global-styles/screen-root.js +4 -4
  101. package/build-module/components/global-styles/screen-root.js.map +1 -1
  102. package/build-module/components/global-styles/style-variations-container.js +7 -11
  103. package/build-module/components/global-styles/style-variations-container.js.map +1 -1
  104. package/build-module/components/global-styles/ui.js +10 -10
  105. package/build-module/components/global-styles/ui.js.map +1 -1
  106. package/build-module/components/header-edit-mode/document-actions/index.js +31 -107
  107. package/build-module/components/header-edit-mode/document-actions/index.js.map +1 -1
  108. package/build-module/components/header-edit-mode/index.js +14 -2
  109. package/build-module/components/header-edit-mode/index.js.map +1 -1
  110. package/build-module/components/layout/hooks.js +41 -0
  111. package/build-module/components/layout/hooks.js.map +1 -0
  112. package/build-module/components/layout/index.js +46 -101
  113. package/build-module/components/layout/index.js.map +1 -1
  114. package/build-module/components/list/actions/index.js +6 -3
  115. package/build-module/components/list/actions/index.js.map +1 -1
  116. package/build-module/components/resizable-frame/index.js +228 -0
  117. package/build-module/components/resizable-frame/index.js.map +1 -0
  118. package/build-module/components/revisions/index.js +2 -1
  119. package/build-module/components/revisions/index.js.map +1 -1
  120. package/build-module/components/secondary-sidebar/list-view-sidebar.js +3 -3
  121. package/build-module/components/secondary-sidebar/list-view-sidebar.js.map +1 -1
  122. package/build-module/components/sidebar/index.js +3 -3
  123. package/build-module/components/sidebar/index.js.map +1 -1
  124. package/build-module/components/sidebar-edit-mode/template-revisions/index.js +1 -1
  125. package/build-module/components/sidebar-edit-mode/template-revisions/index.js.map +1 -1
  126. package/build-module/components/sidebar-navigation-screen-global-styles/index.js +70 -14
  127. package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  128. package/build-module/components/sidebar-navigation-screen-main/index.js +21 -32
  129. package/build-module/components/sidebar-navigation-screen-main/index.js.map +1 -1
  130. package/build-module/components/sidebar-navigation-screen-navigation-menu/index.js +141 -0
  131. package/build-module/components/sidebar-navigation-screen-navigation-menu/index.js.map +1 -0
  132. package/build-module/components/sidebar-navigation-screen-navigation-menus/constants.js +10 -0
  133. package/build-module/components/sidebar-navigation-screen-navigation-menus/constants.js.map +1 -0
  134. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js +52 -103
  135. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -1
  136. package/build-module/components/sidebar-navigation-screen-navigation-menus/leaf-more-menu.js +71 -0
  137. package/build-module/components/sidebar-navigation-screen-navigation-menus/leaf-more-menu.js.map +1 -0
  138. package/build-module/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js +12 -71
  139. package/build-module/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js.map +1 -1
  140. package/build-module/components/sidebar-navigation-screen-navigation-menus/navigator-button.js +40 -0
  141. package/build-module/components/sidebar-navigation-screen-navigation-menus/navigator-button.js.map +1 -0
  142. package/build-module/components/sidebar-navigation-screen-templates/index.js +35 -11
  143. package/build-module/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  144. package/build-module/components/site-hub/index.js +1 -3
  145. package/build-module/components/site-hub/index.js.map +1 -1
  146. package/build-module/components/style-book/index.js +93 -20
  147. package/build-module/components/style-book/index.js.map +1 -1
  148. package/build-module/components/use-edited-entity-record/index.js +8 -4
  149. package/build-module/components/use-edited-entity-record/index.js.map +1 -1
  150. package/build-module/hooks/commands/use-edit-mode-commands.js +86 -0
  151. package/build-module/hooks/commands/use-edit-mode-commands.js.map +1 -0
  152. package/build-module/store/actions.js +5 -3
  153. package/build-module/store/actions.js.map +1 -1
  154. package/build-style/style-rtl.css +233 -210
  155. package/build-style/style.css +234 -210
  156. package/package.json +37 -37
  157. package/src/components/add-new-template/add-custom-generic-template-modal-content.js +82 -0
  158. package/src/components/add-new-template/{add-custom-template-modal.js → add-custom-template-modal-content.js} +13 -26
  159. package/src/components/add-new-template/new-template.js +139 -153
  160. package/src/components/add-new-template/style.scss +79 -66
  161. package/src/components/block-editor/index.js +2 -3
  162. package/src/components/create-template-part-modal/index.js +19 -25
  163. package/src/components/editor/index.js +16 -45
  164. package/src/components/editor/style.scss +21 -6
  165. package/src/components/editor-canvas-container/index.js +28 -19
  166. package/src/components/global-styles/screen-block.js +74 -3
  167. package/src/components/global-styles/screen-revisions/index.js +3 -11
  168. package/src/components/global-styles/screen-revisions/revisions-buttons.js +33 -25
  169. package/src/components/global-styles/screen-revisions/style.scss +3 -2
  170. package/src/components/global-styles/screen-revisions/test/use-global-styles-revisions.js +16 -3
  171. package/src/components/global-styles/screen-revisions/use-global-styles-revisions.js +15 -19
  172. package/src/components/global-styles/screen-root.js +5 -3
  173. package/src/components/global-styles/style-variations-container.js +13 -18
  174. package/src/components/global-styles/style.scss +3 -0
  175. package/src/components/global-styles/ui.js +11 -9
  176. package/src/components/header-edit-mode/document-actions/index.js +26 -129
  177. package/src/components/header-edit-mode/document-actions/style.scss +28 -59
  178. package/src/components/header-edit-mode/index.js +18 -0
  179. package/src/components/header-edit-mode/style.scss +1 -0
  180. package/src/components/layout/hooks.js +46 -0
  181. package/src/components/layout/index.js +56 -125
  182. package/src/components/layout/style.scss +8 -2
  183. package/src/components/list/actions/index.js +12 -5
  184. package/src/components/list/style.scss +1 -0
  185. package/src/components/resizable-frame/index.js +253 -0
  186. package/src/components/resizable-frame/style.scss +69 -0
  187. package/src/components/revisions/index.js +1 -0
  188. package/src/components/secondary-sidebar/list-view-sidebar.js +2 -1
  189. package/src/components/sidebar/index.js +4 -4
  190. package/src/components/sidebar-edit-mode/template-revisions/index.js +1 -2
  191. package/src/components/sidebar-navigation-item/style.scss +9 -0
  192. package/src/components/sidebar-navigation-screen/style.scss +1 -2
  193. package/src/components/sidebar-navigation-screen-global-styles/index.js +106 -21
  194. package/src/components/sidebar-navigation-screen-main/index.js +35 -52
  195. package/src/components/sidebar-navigation-screen-navigation-menu/index.js +157 -0
  196. package/src/components/sidebar-navigation-screen-navigation-menus/constants.js +9 -0
  197. package/src/components/sidebar-navigation-screen-navigation-menus/index.js +63 -117
  198. package/src/components/sidebar-navigation-screen-navigation-menus/leaf-more-menu.js +83 -0
  199. package/src/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js +6 -72
  200. package/src/components/sidebar-navigation-screen-navigation-menus/navigator-button.js +47 -0
  201. package/src/components/sidebar-navigation-screen-navigation-menus/style.scss +6 -20
  202. package/src/components/sidebar-navigation-screen-templates/index.js +53 -14
  203. package/src/components/site-hub/index.js +8 -9
  204. package/src/components/start-template-options/style.scss +20 -21
  205. package/src/components/style-book/index.js +132 -43
  206. package/src/components/style-book/style.scss +19 -0
  207. package/src/components/use-edited-entity-record/index.js +12 -3
  208. package/src/hooks/commands/use-edit-mode-commands.js +79 -0
  209. package/src/store/actions.js +4 -5
  210. package/src/store/test/utils.js +15 -5
  211. package/src/style.scss +1 -1
  212. package/build/components/add-new-template/add-custom-generic-template-modal.js.map +0 -1
  213. package/build/components/add-new-template/add-custom-template-modal.js.map +0 -1
  214. package/build/components/global-styles/border-panel.js +0 -135
  215. package/build/components/global-styles/border-panel.js.map +0 -1
  216. package/build/components/navigate-to-link/index.js +0 -51
  217. package/build/components/navigate-to-link/index.js.map +0 -1
  218. package/build/components/sidebar-navigation-screen-navigation-menus/loader.js +0 -19
  219. package/build/components/sidebar-navigation-screen-navigation-menus/loader.js.map +0 -1
  220. package/build/components/template-details/edit-template-title.js +0 -42
  221. package/build/components/template-details/edit-template-title.js.map +0 -1
  222. package/build/components/template-details/index.js +0 -103
  223. package/build/components/template-details/index.js.map +0 -1
  224. package/build/components/template-details/template-areas.js +0 -166
  225. package/build/components/template-details/template-areas.js.map +0 -1
  226. package/build/components/template-details/template-part-area-selector.js +0 -48
  227. package/build/components/template-details/template-part-area-selector.js.map +0 -1
  228. package/build-module/components/add-new-template/add-custom-generic-template-modal.js.map +0 -1
  229. package/build-module/components/add-new-template/add-custom-template-modal.js.map +0 -1
  230. package/build-module/components/global-styles/border-panel.js +0 -125
  231. package/build-module/components/global-styles/border-panel.js.map +0 -1
  232. package/build-module/components/navigate-to-link/index.js +0 -39
  233. package/build-module/components/navigate-to-link/index.js.map +0 -1
  234. package/build-module/components/sidebar-navigation-screen-navigation-menus/loader.js +0 -11
  235. package/build-module/components/sidebar-navigation-screen-navigation-menus/loader.js.map +0 -1
  236. package/build-module/components/template-details/edit-template-title.js +0 -33
  237. package/build-module/components/template-details/edit-template-title.js.map +0 -1
  238. package/build-module/components/template-details/index.js +0 -83
  239. package/build-module/components/template-details/index.js.map +0 -1
  240. package/build-module/components/template-details/template-areas.js +0 -145
  241. package/build-module/components/template-details/template-areas.js.map +0 -1
  242. package/build-module/components/template-details/template-part-area-selector.js +0 -36
  243. package/build-module/components/template-details/template-part-area-selector.js.map +0 -1
  244. package/src/components/add-new-template/add-custom-generic-template-modal.js +0 -101
  245. package/src/components/global-styles/border-panel.js +0 -114
  246. package/src/components/navigate-to-link/index.js +0 -46
  247. package/src/components/sidebar-navigation-screen-navigation-menus/loader.js +0 -9
  248. package/src/components/template-details/edit-template-title.js +0 -41
  249. package/src/components/template-details/index.js +0 -113
  250. package/src/components/template-details/style.scss +0 -72
  251. package/src/components/template-details/template-areas.js +0 -167
  252. package/src/components/template-details/template-part-area-selector.js +0 -39
@@ -1,79 +1,48 @@
1
1
  .edit-site-document-actions {
2
2
  display: flex;
3
- flex-direction: column;
4
- justify-content: center;
5
- padding: 0 $grid-unit;
6
- height: 100%;
3
+ align-items: center;
4
+ gap: $grid-unit;
5
+ height: $button-size;
6
+ padding: $grid-unit;
7
+ justify-content: space-between;
7
8
  // Flex items will, by default, refuse to shrink below a minimum
8
9
  // intrinsic width. In order to shrink this flexbox item, and
9
10
  // subsequently truncate child text, we set an explicit min-width.
10
11
  // See https://dev.w3.org/csswg/css-flexbox/#min-size-auto
11
12
  min-width: 0;
13
+ background: $gray-100;
14
+ border-radius: 4px;
15
+ width: min(100%, 450px);
12
16
 
13
- .edit-site-document-actions__title-wrapper {
14
- display: flex;
15
- flex-direction: row;
16
- justify-content: center;
17
- align-items: center;
18
-
19
- // See comment above about min-width
20
- min-width: 0;
21
-
22
- .components-dropdown {
23
- display: inline-flex;
24
- margin-left: $grid-unit-05;
25
-
26
- .components-button {
27
- min-width: 0;
28
- padding: 0;
29
- }
30
- }
31
- }
32
-
33
- .edit-site-document-actions__title-wrapper > h1 {
34
- margin: 0;
35
-
36
- // See comment above about min-width
37
- min-width: 0;
38
- }
39
-
40
- .edit-site-document-actions__title {
41
- white-space: nowrap;
42
- overflow: hidden;
43
- text-overflow: ellipsis;
17
+ &:hover {
44
18
  color: currentColor;
19
+ background: $gray-200;
45
20
  }
21
+ }
46
22
 
47
- .edit-site-document-actions__secondary-item {
48
- display: flex;
49
- align-items: center;
23
+ .edit-site-document-actions__title {
24
+ flex-grow: 1;
25
+ color: var(--wp-block-synced-color);
26
+ overflow: hidden;
27
+
28
+ h1 {
29
+ color: var(--wp-block-synced-color);
50
30
  white-space: nowrap;
51
31
  overflow: hidden;
52
32
  text-overflow: ellipsis;
53
- max-width: 0;
54
- opacity: 0;
55
- padding: 0;
56
- transition: all ease 0.2s;
57
- background: rgba(var(--wp-block-synced-color--rgb), 0.04);
58
- border-radius: 2px;
59
- @include reduce-motion(transition);
60
-
61
- .block-editor-block-icon.has-colors {
62
- color: var(--wp-block-synced-color);
63
- }
64
33
  }
34
+ }
65
35
 
66
- &.has-secondary-label {
67
- .edit-site-document-actions__secondary-item {
68
- opacity: 1;
69
- padding: 0 4px;
70
- max-width: 180px;
71
- margin-left: 6px;
72
- }
36
+ .edit-site-document-actions__shortcut {
37
+ flex-shrink: 0;
38
+ color: $gray-700;
39
+ width: #{$grid-unit * 4.5};
40
+ &:hover {
41
+ color: $gray-700;
73
42
  }
74
43
  }
75
44
 
76
- .edit-site-document-actions__info-dropdown > .components-popover__content {
77
- padding: 0;
78
- min-width: 240px;
45
+ .edit-site-document-actions__left {
46
+ min-width: $button-size;
47
+ flex-shrink: 0;
79
48
  }
@@ -14,6 +14,7 @@ import {
14
14
  __experimentalPreviewOptions as PreviewOptions,
15
15
  NavigableToolbar,
16
16
  store as blockEditorStore,
17
+ privateApis as blockEditorPrivateApis,
17
18
  } from '@wordpress/block-editor';
18
19
  import { useSelect, useDispatch } from '@wordpress/data';
19
20
  import { PinnedItems } from '@wordpress/interface';
@@ -44,6 +45,8 @@ import {
44
45
  } from '../editor-canvas-container';
45
46
  import { unlock } from '../../private-apis';
46
47
 
48
+ const { useShouldContextualToolbarShow } = unlock( blockEditorPrivateApis );
49
+
47
50
  const preventDefault = ( event ) => {
48
51
  event.preventDefault();
49
52
  };
@@ -125,6 +128,18 @@ export default function HeaderEditMode() {
125
128
  [ setIsListViewOpened, isListViewOpen ]
126
129
  );
127
130
 
131
+ const {
132
+ shouldShowContextualToolbar,
133
+ canFocusHiddenToolbar,
134
+ fixedToolbarCanBeFocused,
135
+ } = useShouldContextualToolbarShow();
136
+ // If there's a block toolbar to be focused, disable the focus shortcut for the document toolbar.
137
+ // There's a fixed block toolbar when the fixed toolbar option is enabled or when the browser width is less than the large viewport.
138
+ const blockToolbarCanBeFocused =
139
+ shouldShowContextualToolbar ||
140
+ canFocusHiddenToolbar ||
141
+ fixedToolbarCanBeFocused;
142
+
128
143
  const hasDefaultEditorCanvasView = ! useHasEditorCanvasContainer();
129
144
 
130
145
  const isFocusMode = templateType === 'wp_template_part';
@@ -150,6 +165,9 @@ export default function HeaderEditMode() {
150
165
  <NavigableToolbar
151
166
  className="edit-site-header-edit-mode__start"
152
167
  aria-label={ __( 'Document tools' ) }
168
+ shouldUseKeyboardFocusShortcut={
169
+ ! blockToolbarCanBeFocused
170
+ }
153
171
  >
154
172
  <div className="edit-site-header-edit-mode__toolbar">
155
173
  <ToolbarItem
@@ -27,6 +27,7 @@ $header-toolbar-min-width: 335px;
27
27
  align-items: center;
28
28
  height: 100%;
29
29
  flex-grow: 1;
30
+ margin: 0 $grid-unit-10;
30
31
  justify-content: center;
31
32
  // Flex items will, by default, refuse to shrink below a minimum
32
33
  // intrinsic width. In order to shrink this flexbox item, and
@@ -0,0 +1,46 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useEffect, useState } from '@wordpress/element';
5
+ import { useSelect } from '@wordpress/data';
6
+ import { store as coreStore } from '@wordpress/core-data';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import useEditedEntityRecord from '../use-edited-entity-record';
12
+
13
+ export function useIsSiteEditorLoading() {
14
+ const { isLoaded: hasLoadedPost } = useEditedEntityRecord();
15
+ const [ loaded, setLoaded ] = useState( false );
16
+ const inLoadingPause = useSelect(
17
+ ( select ) => {
18
+ const hasResolvingSelectors =
19
+ select( coreStore ).hasResolvingSelectors();
20
+ return ! loaded && ! hasResolvingSelectors;
21
+ },
22
+ [ loaded ]
23
+ );
24
+
25
+ useEffect( () => {
26
+ if ( inLoadingPause ) {
27
+ /*
28
+ * We're using an arbitrary 1s timeout here to catch brief moments
29
+ * without any resolving selectors that would result in displaying
30
+ * brief flickers of loading state and loaded state.
31
+ *
32
+ * It's worth experimenting with different values, since this also
33
+ * adds 1s of artificial delay after loading has finished.
34
+ */
35
+ const timeout = setTimeout( () => {
36
+ setLoaded( true );
37
+ }, 1000 );
38
+
39
+ return () => {
40
+ clearTimeout( timeout );
41
+ };
42
+ }
43
+ }, [ inLoadingPause ] );
44
+
45
+ return ! loaded || ! hasLoadedPost;
46
+ }
@@ -11,7 +11,6 @@ import {
11
11
  __unstableMotion as motion,
12
12
  __unstableAnimatePresence as AnimatePresence,
13
13
  __unstableUseNavigateRegions as useNavigateRegions,
14
- ResizableBox,
15
14
  } from '@wordpress/components';
16
15
  import {
17
16
  useReducedMotion,
@@ -22,10 +21,13 @@ import { __ } from '@wordpress/i18n';
22
21
  import { useState, useRef } from '@wordpress/element';
23
22
  import { NavigableRegion } from '@wordpress/interface';
24
23
  import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';
25
- import { CommandMenu } from '@wordpress/commands';
24
+ import {
25
+ CommandMenu,
26
+ privateApis as commandsPrivateApis,
27
+ } from '@wordpress/commands';
26
28
  import { store as preferencesStore } from '@wordpress/preferences';
27
29
  import { privateApis as routerPrivateApis } from '@wordpress/router';
28
- import { privateApis as coreCmmandsPrivateApis } from '@wordpress/core-commands';
30
+ import { privateApis as coreCommandsPrivateApis } from '@wordpress/core-commands';
29
31
 
30
32
  /**
31
33
  * Internal dependencies
@@ -39,35 +41,27 @@ import getIsListPage from '../../utils/get-is-list-page';
39
41
  import Header from '../header-edit-mode';
40
42
  import useInitEditedEntityFromURL from '../sync-state-with-url/use-init-edited-entity-from-url';
41
43
  import SiteHub from '../site-hub';
42
- import ResizeHandle from '../block-editor/resize-handle';
44
+ import ResizableFrame from '../resizable-frame';
43
45
  import useSyncCanvasModeWithURL from '../sync-state-with-url/use-sync-canvas-mode-with-url';
44
46
  import { unlock } from '../../private-apis';
45
47
  import SavePanel from '../save-panel';
46
48
  import KeyboardShortcutsRegister from '../keyboard-shortcuts/register';
47
49
  import KeyboardShortcutsGlobal from '../keyboard-shortcuts/global';
50
+ import { useEditModeCommands } from '../../hooks/commands/use-edit-mode-commands';
51
+ import { useIsSiteEditorLoading } from './hooks';
48
52
 
49
- const { useCommands } = unlock( coreCmmandsPrivateApis );
50
-
53
+ const { useCommands } = unlock( coreCommandsPrivateApis );
54
+ const { useCommandContext } = unlock( commandsPrivateApis );
51
55
  const { useLocation } = unlock( routerPrivateApis );
52
56
 
53
57
  const ANIMATION_DURATION = 0.5;
54
- const emptyResizeHandleStyles = {
55
- position: undefined,
56
- userSelect: undefined,
57
- cursor: undefined,
58
- width: undefined,
59
- height: undefined,
60
- top: undefined,
61
- right: undefined,
62
- bottom: undefined,
63
- left: undefined,
64
- };
65
58
 
66
59
  export default function Layout() {
67
60
  // This ensures the edited entity id and type are initialized properly.
68
61
  useInitEditedEntityFromURL();
69
62
  useSyncCanvasModeWithURL();
70
63
  useCommands();
64
+ useEditModeCommands();
71
65
 
72
66
  const hubRef = useRef();
73
67
  const { params } = useLocation();
@@ -91,36 +85,33 @@ export default function Layout() {
91
85
  select( preferencesStore ).get( 'fixedToolbar' ),
92
86
  };
93
87
  }, [] );
88
+ const isEditing = canvasMode === 'edit';
94
89
  const navigateRegionsProps = useNavigateRegions( {
95
90
  previous: previousShortcut,
96
91
  next: nextShortcut,
97
92
  } );
98
93
  const disableMotion = useReducedMotion();
99
94
  const isMobileViewport = useViewportMatch( 'medium', '<' );
100
- const canvasPadding = isMobileViewport ? 0 : 24;
101
95
  const showSidebar =
102
96
  ( isMobileViewport && ! isListPage ) ||
103
97
  ( ! isMobileViewport && ( canvasMode === 'view' || ! isEditorPage ) );
104
98
  const showCanvas =
105
- ( isMobileViewport && isEditorPage && canvasMode === 'edit' ) ||
99
+ ( isMobileViewport && isEditorPage && isEditing ) ||
106
100
  ! isMobileViewport ||
107
101
  ! isEditorPage;
108
- const showFrame =
109
- ( ! isEditorPage && ! isMobileViewport ) ||
110
- ( ! isMobileViewport && isEditorPage && canvasMode === 'view' );
111
102
  const isFullCanvas =
112
- ( isMobileViewport && isListPage ) ||
113
- ( isEditorPage && canvasMode === 'edit' );
103
+ ( isMobileViewport && isListPage ) || ( isEditorPage && isEditing );
114
104
  const [ canvasResizer, canvasSize ] = useResizeObserver();
115
- const [ fullResizer, fullSize ] = useResizeObserver();
116
- const [ forcedWidth, setForcedWidth ] = useState( null );
117
- const [ isResizing, setIsResizing ] = useState( false );
118
- const isResizingEnabled = ! isMobileViewport && canvasMode === 'view';
119
- const defaultSidebarWidth = isMobileViewport ? '100vw' : 360;
120
- let canvasWidth = isResizing ? '100%' : fullSize.width;
121
- if ( showFrame && ! isResizing ) {
122
- canvasWidth = canvasSize.width - canvasPadding;
123
- }
105
+ const [ fullResizer ] = useResizeObserver();
106
+ const [ isResizing ] = useState( false );
107
+ const isEditorLoading = useIsSiteEditorLoading();
108
+
109
+ // Sets the right context for the command center
110
+ const commandContext =
111
+ canvasMode === 'edit' && isEditorPage
112
+ ? 'site-editor-edit'
113
+ : 'site-editor';
114
+ useCommandContext( commandContext );
124
115
 
125
116
  // Synchronizing the URL with the store value of canvasMode happens in an effect
126
117
  // This condition ensures the component is only rendered after the synchronization happens
@@ -131,7 +122,7 @@ export default function Layout() {
131
122
 
132
123
  return (
133
124
  <>
134
- { window?.__experimentalEnableCommandCenter && <CommandMenu /> }
125
+ <CommandMenu />
135
126
  <KeyboardShortcutsRegister />
136
127
  <KeyboardShortcutsGlobal />
137
128
  { fullResizer }
@@ -143,7 +134,7 @@ export default function Layout() {
143
134
  navigateRegionsProps.className,
144
135
  {
145
136
  'is-full-canvas': isFullCanvas,
146
- 'is-edit-mode': canvasMode === 'edit',
137
+ 'is-edit-mode': isEditing,
147
138
  'has-fixed-toolbar': hasFixedToolbar,
148
139
  }
149
140
  ) }
@@ -151,7 +142,7 @@ export default function Layout() {
151
142
  <SiteHub ref={ hubRef } className="edit-site-layout__hub" />
152
143
 
153
144
  <AnimatePresence initial={ false }>
154
- { isEditorPage && canvasMode === 'edit' && (
145
+ { isEditorPage && isEditing && (
155
146
  <NavigableRegion
156
147
  className="edit-site-layout__header"
157
148
  ariaLabel={ __( 'Editor top bar' ) }
@@ -173,7 +164,7 @@ export default function Layout() {
173
164
  ease: 'easeOut',
174
165
  } }
175
166
  >
176
- <Header />
167
+ { isEditing && <Header /> }
177
168
  </NavigableRegion>
178
169
  ) }
179
170
  </AnimatePresence>
@@ -181,8 +172,7 @@ export default function Layout() {
181
172
  <div className="edit-site-layout__content">
182
173
  <AnimatePresence initial={ false }>
183
174
  { showSidebar && (
184
- <ResizableBox
185
- as={ motion.div }
175
+ <motion.div
186
176
  initial={ {
187
177
  opacity: 0,
188
178
  } }
@@ -194,69 +184,17 @@ export default function Layout() {
194
184
  } }
195
185
  transition={ {
196
186
  type: 'tween',
197
- duration:
198
- disableMotion || isResizing
199
- ? 0
200
- : ANIMATION_DURATION,
187
+ duration: ANIMATION_DURATION,
201
188
  ease: 'easeOut',
202
189
  } }
203
- size={ {
204
- height: '100%',
205
- width:
206
- isResizingEnabled && forcedWidth
207
- ? forcedWidth
208
- : defaultSidebarWidth,
209
- } }
210
190
  className="edit-site-layout__sidebar"
211
- enable={ {
212
- right: isResizingEnabled,
213
- } }
214
- onResizeStop={ ( event, direction, elt ) => {
215
- setForcedWidth( elt.clientWidth );
216
- setIsResizing( false );
217
- } }
218
- onResizeStart={ () => {
219
- setIsResizing( true );
220
- } }
221
- onResize={ ( event, direction, elt ) => {
222
- // This is a performance optimization
223
- // We set the width imperatively to avoid re-rendering
224
- // the whole component while resizing.
225
- hubRef.current.style.width =
226
- elt.clientWidth - 48 + 'px';
227
- } }
228
- handleComponent={ {
229
- right: (
230
- <ResizeHandle
231
- direction="right"
232
- variation="separator"
233
- resizeWidthBy={ ( delta ) => {
234
- setForcedWidth(
235
- ( forcedWidth ??
236
- defaultSidebarWidth ) +
237
- delta
238
- );
239
- } }
240
- />
241
- ),
242
- } }
243
- handleClasses={ undefined }
244
- handleStyles={ {
245
- right: emptyResizeHandleStyles,
246
- } }
247
- minWidth={ isResizingEnabled ? 320 : undefined }
248
- maxWidth={
249
- isResizingEnabled && fullSize
250
- ? fullSize.width - 360
251
- : undefined
252
- }
253
191
  >
254
192
  <NavigableRegion
255
193
  ariaLabel={ __( 'Navigation' ) }
256
194
  >
257
195
  <Sidebar />
258
196
  </NavigableRegion>
259
- </ResizableBox>
197
+ </motion.div>
260
198
  ) }
261
199
  </AnimatePresence>
262
200
 
@@ -270,10 +208,6 @@ export default function Layout() {
270
208
  'is-resizing': isResizing,
271
209
  }
272
210
  ) }
273
- style={ {
274
- paddingTop: showFrame ? canvasPadding : 0,
275
- paddingBottom: showFrame ? canvasPadding : 0,
276
- } }
277
211
  >
278
212
  { canvasResizer }
279
213
  { !! canvasSize.width && (
@@ -281,7 +215,7 @@ export default function Layout() {
281
215
  whileHover={
282
216
  isEditorPage && canvasMode === 'view'
283
217
  ? {
284
- scale: 1.005,
218
+ scale: 1.006,
285
219
  transition: {
286
220
  duration:
287
221
  disableMotion ||
@@ -293,8 +227,14 @@ export default function Layout() {
293
227
  }
294
228
  : {}
295
229
  }
296
- initial={ false }
297
- layout="position"
230
+ // Setting a transform property (in this case scale) on an element makes it act as a containing block for its descendants.
231
+ // This means that the snackbar notices inside this component are repositioned to be relative to this element.
232
+ // To avoid the snackbars jumping about we need to ensure that a transform property is always set.
233
+ // Setting a scale of 1 is interpred by framer as no change, so once the animation completes
234
+ // the transform property of this element is set to none, thus removing its role as a container block.
235
+ // Instead we set the initial scale of this element to 1.0001 so that there is always a transform property set.
236
+ // If we set the initial scale to less than 1.001 then JavaScript rounds it to 1 and the problem reoccurs.
237
+ initial={ { scale: 1.001 } }
298
238
  className="edit-site-layout__canvas"
299
239
  transition={ {
300
240
  type: 'tween',
@@ -305,31 +245,22 @@ export default function Layout() {
305
245
  ease: 'easeOut',
306
246
  } }
307
247
  >
308
- <motion.div
309
- style={ {
310
- position: 'absolute',
311
- top: 0,
312
- left: 0,
313
- bottom: 0,
314
- } }
315
- initial={ false }
316
- animate={ {
317
- width: canvasWidth,
318
- } }
319
- transition={ {
320
- type: 'tween',
321
- duration:
322
- disableMotion || isResizing
323
- ? 0
324
- : ANIMATION_DURATION,
325
- ease: 'easeOut',
326
- } }
327
- >
328
- <ErrorBoundary>
329
- { isEditorPage && <Editor /> }
330
- { isListPage && <ListPage /> }
331
- </ErrorBoundary>
332
- </motion.div>
248
+ <ErrorBoundary>
249
+ { isEditorPage && (
250
+ <ResizableFrame
251
+ isReady={ ! isEditorLoading }
252
+ isFullWidth={ isEditing }
253
+ oversizedClassName="edit-site-layout__resizable-frame-oversized"
254
+ >
255
+ <Editor
256
+ isLoading={
257
+ isEditorLoading
258
+ }
259
+ />
260
+ </ResizableFrame>
261
+ ) }
262
+ { isListPage && <ListPage /> }
263
+ </ErrorBoundary>
333
264
  </motion.div>
334
265
  ) }
335
266
  </div>
@@ -105,7 +105,13 @@
105
105
  left: 0;
106
106
  bottom: 0;
107
107
  width: 100%;
108
- overflow: hidden;
108
+ display: flex;
109
+ justify-content: center;
110
+ align-items: center;
111
+
112
+ &:has(.edit-site-layout__resizable-frame-oversized) {
113
+ justify-content: flex-end;
114
+ }
109
115
 
110
116
  & > div {
111
117
  color: $gray-900;
@@ -243,5 +249,5 @@
243
249
  z-index: 3;
244
250
  }
245
251
  }
246
-
247
252
  }
253
+
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { useDispatch } from '@wordpress/data';
5
5
  import { store as coreStore } from '@wordpress/core-data';
6
- import { __ } from '@wordpress/i18n';
6
+ import { __, sprintf } from '@wordpress/i18n';
7
7
  import { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';
8
8
  import { moreVertical } from '@wordpress/icons';
9
9
  import { store as noticesStore } from '@wordpress/notices';
@@ -21,7 +21,6 @@ export default function Actions( { template } ) {
21
21
  const { saveEditedEntityRecord } = useDispatch( coreStore );
22
22
  const { createSuccessNotice, createErrorNotice } =
23
23
  useDispatch( noticesStore );
24
-
25
24
  const isRemovable = isTemplateRemovable( template );
26
25
  const isRevertable = isTemplateRevertable( template );
27
26
 
@@ -38,9 +37,17 @@ export default function Actions( { template } ) {
38
37
  template.id
39
38
  );
40
39
 
41
- createSuccessNotice( __( 'Entity reverted.' ), {
42
- type: 'snackbar',
43
- } );
40
+ createSuccessNotice(
41
+ sprintf(
42
+ /* translators: The template/part's name. */
43
+ __( '"%s" reverted.' ),
44
+ template.title.rendered
45
+ ),
46
+ {
47
+ type: 'snackbar',
48
+ id: 'edit-site-template-reverted',
49
+ }
50
+ );
44
51
  } catch ( error ) {
45
52
  const errorMessage =
46
53
  error.message && error.code !== 'unknown_error'
@@ -33,6 +33,7 @@
33
33
 
34
34
  .edit-site {
35
35
  .edit-site-list {
36
+ flex-grow: 1;
36
37
  background: $white;
37
38
  border-radius: $radius-block-ui * 4;
38
39
  box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.8), 0 8px 10px -6px rgba(0, 0, 0, 0.8);