@wordpress/edit-site 5.15.0 → 5.16.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 (229) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/add-new-pattern/index.js +2 -1
  3. package/build/components/add-new-pattern/index.js.map +1 -1
  4. package/build/components/block-editor/use-site-editor-settings.js +29 -2
  5. package/build/components/block-editor/use-site-editor-settings.js.map +1 -1
  6. package/build/components/editor/index.js +4 -4
  7. package/build/components/editor/index.js.map +1 -1
  8. package/build/components/global-styles/global-styles-provider.js +12 -7
  9. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  10. package/build/components/global-styles/screen-block.js +16 -0
  11. package/build/components/global-styles/screen-block.js.map +1 -1
  12. package/build/components/global-styles/screen-revisions/index.js +12 -5
  13. package/build/components/global-styles/screen-revisions/index.js.map +1 -1
  14. package/build/components/global-styles/screen-revisions/revisions-buttons.js +10 -22
  15. package/build/components/global-styles/screen-revisions/revisions-buttons.js.map +1 -1
  16. package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js +32 -25
  17. package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js.map +1 -1
  18. package/build/components/global-styles/style-variations-container.js +5 -3
  19. package/build/components/global-styles/style-variations-container.js.map +1 -1
  20. package/build/components/header-edit-mode/document-actions/index.js +4 -2
  21. package/build/components/header-edit-mode/document-actions/index.js.map +1 -1
  22. package/build/components/keyboard-shortcuts/edit-mode.js +7 -5
  23. package/build/components/keyboard-shortcuts/edit-mode.js.map +1 -1
  24. package/build/components/layout/index.js +9 -2
  25. package/build/components/layout/index.js.map +1 -1
  26. package/build/components/page/index.js +3 -3
  27. package/build/components/page/index.js.map +1 -1
  28. package/build/components/page-content-focus-manager/disable-non-page-content-blocks.js +1 -1
  29. package/build/components/page-content-focus-manager/disable-non-page-content-blocks.js.map +1 -1
  30. package/build/components/page-patterns/patterns-list.js +18 -4
  31. package/build/components/page-patterns/patterns-list.js.map +1 -1
  32. package/build/components/page-patterns/use-patterns.js +20 -3
  33. package/build/components/page-patterns/use-patterns.js.map +1 -1
  34. package/build/components/page-template-parts/index.js +1 -2
  35. package/build/components/page-template-parts/index.js.map +1 -1
  36. package/build/components/page-templates/index.js +1 -16
  37. package/build/components/page-templates/index.js.map +1 -1
  38. package/build/components/resizable-frame/index.js +11 -19
  39. package/build/components/resizable-frame/index.js.map +1 -1
  40. package/build/components/save-button/index.js +4 -2
  41. package/build/components/save-button/index.js.map +1 -1
  42. package/build/components/save-hub/index.js +10 -4
  43. package/build/components/save-hub/index.js.map +1 -1
  44. package/build/components/sidebar-edit-mode/template-panel/index.js +15 -8
  45. package/build/components/sidebar-edit-mode/template-panel/index.js.map +1 -1
  46. package/build/components/sidebar-navigation-screen/index.js +24 -14
  47. package/build/components/sidebar-navigation-screen/index.js.map +1 -1
  48. package/build/components/sidebar-navigation-screen-global-styles/index.js +34 -40
  49. package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  50. package/build/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js +1 -1
  51. package/build/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js.map +1 -1
  52. package/build/components/sidebar-navigation-screen-navigation-menus/index.js +4 -4
  53. package/build/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -1
  54. package/build/components/sidebar-navigation-screen-navigation-menus/leaf-more-menu.js +8 -0
  55. package/build/components/sidebar-navigation-screen-navigation-menus/leaf-more-menu.js.map +1 -1
  56. package/build/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js +1 -1
  57. package/build/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js.map +1 -1
  58. package/build/components/sidebar-navigation-screen-pages/index.js +2 -0
  59. package/build/components/sidebar-navigation-screen-pages/index.js.map +1 -1
  60. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js +1 -1
  61. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js.map +1 -1
  62. package/build/components/sidebar-navigation-screen-pattern/use-navigation-menu-content.js +8 -1
  63. package/build/components/sidebar-navigation-screen-pattern/use-navigation-menu-content.js.map +1 -1
  64. package/build/components/sidebar-navigation-screen-pattern/use-pattern-details.js +50 -26
  65. package/build/components/sidebar-navigation-screen-pattern/use-pattern-details.js.map +1 -1
  66. package/build/components/sidebar-navigation-screen-patterns/category-item.js +0 -5
  67. package/build/components/sidebar-navigation-screen-patterns/category-item.js.map +1 -1
  68. package/build/components/sidebar-navigation-screen-patterns/index.js +0 -9
  69. package/build/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  70. package/build/components/sidebar-navigation-screen-templates/index.js +1 -10
  71. package/build/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  72. package/build/components/sidebar-navigation-screen-templates-browse/index.js +9 -0
  73. package/build/components/sidebar-navigation-screen-templates-browse/index.js.map +1 -1
  74. package/build/components/site-hub/index.js +5 -2
  75. package/build/components/site-hub/index.js.map +1 -1
  76. package/build/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +1 -1
  77. package/build/components/sync-state-with-url/use-sync-canvas-mode-with-url.js.map +1 -1
  78. package/build/hooks/commands/use-common-commands.js +57 -27
  79. package/build/hooks/commands/use-common-commands.js.map +1 -1
  80. package/build/hooks/commands/use-edit-mode-commands.js +65 -7
  81. package/build/hooks/commands/use-edit-mode-commands.js.map +1 -1
  82. package/build/hooks/push-changes-to-global-styles/index.js +84 -49
  83. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  84. package/build/store/private-actions.js +2 -1
  85. package/build/store/private-actions.js.map +1 -1
  86. package/build/utils/use-debounced-input.js +5 -7
  87. package/build/utils/use-debounced-input.js.map +1 -1
  88. package/build-module/components/add-new-pattern/index.js +2 -1
  89. package/build-module/components/add-new-pattern/index.js.map +1 -1
  90. package/build-module/components/block-editor/use-site-editor-settings.js +29 -2
  91. package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
  92. package/build-module/components/editor/index.js +4 -4
  93. package/build-module/components/editor/index.js.map +1 -1
  94. package/build-module/components/global-styles/global-styles-provider.js +12 -7
  95. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  96. package/build-module/components/global-styles/screen-block.js +16 -0
  97. package/build-module/components/global-styles/screen-block.js.map +1 -1
  98. package/build-module/components/global-styles/screen-revisions/index.js +13 -6
  99. package/build-module/components/global-styles/screen-revisions/index.js.map +1 -1
  100. package/build-module/components/global-styles/screen-revisions/revisions-buttons.js +10 -22
  101. package/build-module/components/global-styles/screen-revisions/revisions-buttons.js.map +1 -1
  102. package/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js +28 -21
  103. package/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js.map +1 -1
  104. package/build-module/components/global-styles/style-variations-container.js +5 -3
  105. package/build-module/components/global-styles/style-variations-container.js.map +1 -1
  106. package/build-module/components/header-edit-mode/document-actions/index.js +6 -4
  107. package/build-module/components/header-edit-mode/document-actions/index.js.map +1 -1
  108. package/build-module/components/keyboard-shortcuts/edit-mode.js +7 -5
  109. package/build-module/components/keyboard-shortcuts/edit-mode.js.map +1 -1
  110. package/build-module/components/layout/index.js +9 -2
  111. package/build-module/components/layout/index.js.map +1 -1
  112. package/build-module/components/page/index.js +3 -3
  113. package/build-module/components/page/index.js.map +1 -1
  114. package/build-module/components/page-content-focus-manager/disable-non-page-content-blocks.js +1 -1
  115. package/build-module/components/page-content-focus-manager/disable-non-page-content-blocks.js.map +1 -1
  116. package/build-module/components/page-patterns/patterns-list.js +19 -5
  117. package/build-module/components/page-patterns/patterns-list.js.map +1 -1
  118. package/build-module/components/page-patterns/use-patterns.js +19 -3
  119. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  120. package/build-module/components/page-template-parts/index.js +1 -2
  121. package/build-module/components/page-template-parts/index.js.map +1 -1
  122. package/build-module/components/page-templates/index.js +2 -15
  123. package/build-module/components/page-templates/index.js.map +1 -1
  124. package/build-module/components/resizable-frame/index.js +12 -20
  125. package/build-module/components/resizable-frame/index.js.map +1 -1
  126. package/build-module/components/save-button/index.js +4 -2
  127. package/build-module/components/save-button/index.js.map +1 -1
  128. package/build-module/components/save-hub/index.js +10 -4
  129. package/build-module/components/save-hub/index.js.map +1 -1
  130. package/build-module/components/sidebar-edit-mode/template-panel/index.js +15 -9
  131. package/build-module/components/sidebar-edit-mode/template-panel/index.js.map +1 -1
  132. package/build-module/components/sidebar-navigation-screen/index.js +21 -14
  133. package/build-module/components/sidebar-navigation-screen/index.js.map +1 -1
  134. package/build-module/components/sidebar-navigation-screen-global-styles/index.js +34 -40
  135. package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  136. package/build-module/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js +1 -1
  137. package/build-module/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js.map +1 -1
  138. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js +4 -4
  139. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -1
  140. package/build-module/components/sidebar-navigation-screen-navigation-menus/leaf-more-menu.js +7 -0
  141. package/build-module/components/sidebar-navigation-screen-navigation-menus/leaf-more-menu.js.map +1 -1
  142. package/build-module/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js +2 -2
  143. package/build-module/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js.map +1 -1
  144. package/build-module/components/sidebar-navigation-screen-pages/index.js +2 -0
  145. package/build-module/components/sidebar-navigation-screen-pages/index.js.map +1 -1
  146. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js +1 -1
  147. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js.map +1 -1
  148. package/build-module/components/sidebar-navigation-screen-pattern/use-navigation-menu-content.js +7 -1
  149. package/build-module/components/sidebar-navigation-screen-pattern/use-navigation-menu-content.js.map +1 -1
  150. package/build-module/components/sidebar-navigation-screen-pattern/use-pattern-details.js +49 -26
  151. package/build-module/components/sidebar-navigation-screen-pattern/use-pattern-details.js.map +1 -1
  152. package/build-module/components/sidebar-navigation-screen-patterns/category-item.js +0 -5
  153. package/build-module/components/sidebar-navigation-screen-patterns/category-item.js.map +1 -1
  154. package/build-module/components/sidebar-navigation-screen-patterns/index.js +0 -7
  155. package/build-module/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  156. package/build-module/components/sidebar-navigation-screen-templates/index.js +1 -8
  157. package/build-module/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  158. package/build-module/components/sidebar-navigation-screen-templates-browse/index.js +7 -0
  159. package/build-module/components/sidebar-navigation-screen-templates-browse/index.js.map +1 -1
  160. package/build-module/components/site-hub/index.js +4 -2
  161. package/build-module/components/site-hub/index.js.map +1 -1
  162. package/build-module/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +1 -1
  163. package/build-module/components/sync-state-with-url/use-sync-canvas-mode-with-url.js.map +1 -1
  164. package/build-module/hooks/commands/use-common-commands.js +57 -27
  165. package/build-module/hooks/commands/use-common-commands.js.map +1 -1
  166. package/build-module/hooks/commands/use-edit-mode-commands.js +65 -9
  167. package/build-module/hooks/commands/use-edit-mode-commands.js.map +1 -1
  168. package/build-module/hooks/push-changes-to-global-styles/index.js +84 -49
  169. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  170. package/build-module/store/private-actions.js +2 -1
  171. package/build-module/store/private-actions.js.map +1 -1
  172. package/build-module/utils/use-debounced-input.js +5 -7
  173. package/build-module/utils/use-debounced-input.js.map +1 -1
  174. package/build-style/style-rtl.css +67 -47
  175. package/build-style/style.css +67 -47
  176. package/package.json +39 -39
  177. package/src/components/add-new-pattern/index.js +2 -0
  178. package/src/components/block-editor/use-site-editor-settings.js +22 -2
  179. package/src/components/editor/index.js +3 -3
  180. package/src/components/global-styles/global-styles-provider.js +7 -2
  181. package/src/components/global-styles/screen-block.js +15 -0
  182. package/src/components/global-styles/screen-revisions/index.js +64 -58
  183. package/src/components/global-styles/screen-revisions/revisions-buttons.js +17 -31
  184. package/src/components/global-styles/screen-revisions/test/use-global-styles-revisions.js +14 -1
  185. package/src/components/global-styles/screen-revisions/use-global-styles-revisions.js +64 -48
  186. package/src/components/global-styles/style-variations-container.js +2 -0
  187. package/src/components/header-edit-mode/document-actions/index.js +8 -4
  188. package/src/components/header-edit-mode/document-actions/style.scss +41 -28
  189. package/src/components/keyboard-shortcuts/edit-mode.js +4 -5
  190. package/src/components/layout/index.js +33 -20
  191. package/src/components/layout/style.scss +2 -2
  192. package/src/components/page/index.js +8 -8
  193. package/src/components/page/style.scss +8 -5
  194. package/src/components/page-content-focus-manager/disable-non-page-content-blocks.js +1 -1
  195. package/src/components/page-patterns/patterns-list.js +25 -12
  196. package/src/components/page-patterns/style.scss +9 -8
  197. package/src/components/page-patterns/use-patterns.js +19 -3
  198. package/src/components/page-template-parts/index.js +0 -1
  199. package/src/components/page-templates/index.js +6 -19
  200. package/src/components/resizable-frame/index.js +10 -25
  201. package/src/components/save-button/index.js +2 -0
  202. package/src/components/save-hub/index.js +6 -1
  203. package/src/components/save-hub/style.scss +1 -1
  204. package/src/components/sidebar-edit-mode/template-panel/index.js +15 -11
  205. package/src/components/sidebar-navigation-screen/index.js +24 -16
  206. package/src/components/sidebar-navigation-screen/style.scss +4 -0
  207. package/src/components/sidebar-navigation-screen-details-panel/style.scss +1 -0
  208. package/src/components/sidebar-navigation-screen-global-styles/index.js +48 -44
  209. package/src/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js +1 -2
  210. package/src/components/sidebar-navigation-screen-navigation-menus/index.js +4 -4
  211. package/src/components/sidebar-navigation-screen-navigation-menus/leaf-more-menu.js +27 -15
  212. package/src/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js +1 -4
  213. package/src/components/sidebar-navigation-screen-pages/index.js +9 -4
  214. package/src/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js +1 -1
  215. package/src/components/sidebar-navigation-screen-pattern/use-navigation-menu-content.js +11 -1
  216. package/src/components/sidebar-navigation-screen-pattern/use-pattern-details.js +69 -41
  217. package/src/components/sidebar-navigation-screen-patterns/category-item.js +5 -13
  218. package/src/components/sidebar-navigation-screen-patterns/index.js +0 -8
  219. package/src/components/sidebar-navigation-screen-templates/index.js +1 -9
  220. package/src/components/sidebar-navigation-screen-templates-browse/index.js +10 -0
  221. package/src/components/site-hub/index.js +3 -1
  222. package/src/components/site-hub/style.scss +1 -2
  223. package/src/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +1 -4
  224. package/src/components/table/style.scss +1 -0
  225. package/src/hooks/commands/use-common-commands.js +63 -23
  226. package/src/hooks/commands/use-edit-mode-commands.js +94 -23
  227. package/src/hooks/push-changes-to-global-styles/index.js +83 -46
  228. package/src/store/private-actions.js +5 -1
  229. package/src/utils/use-debounced-input.js +8 -7
@@ -58,10 +58,7 @@ export default function useSyncCanvasModeWithURL() {
58
58
 
59
59
  useEffect( () => {
60
60
  currentCanvasInUrl.current = canvasInUrl;
61
- if (
62
- canvasInUrl === undefined &&
63
- currentCanvasMode.current !== 'view'
64
- ) {
61
+ if ( canvasInUrl !== 'edit' && currentCanvasMode.current !== 'view' ) {
65
62
  setCanvasMode( 'view' );
66
63
  } else if (
67
64
  canvasInUrl === 'edit' &&
@@ -1,5 +1,6 @@
1
1
  .edit-site-table-wrapper {
2
2
  width: 100%;
3
+ padding: $grid-unit-40;
3
4
  }
4
5
 
5
6
  .edit-site-table {
@@ -114,13 +114,68 @@ function useGlobalStylesOpenCssCommands() {
114
114
  };
115
115
  }
116
116
 
117
- export function useCommonCommands() {
117
+ function useGlobalStylesOpenRevisionsCommands() {
118
118
  const { openGeneralSidebar, setEditorCanvasContainerView, setCanvasMode } =
119
119
  unlock( useDispatch( editSiteStore ) );
120
+ const { getCanvasMode } = unlock( useSelect( editSiteStore ) );
120
121
  const { params } = useLocation();
121
122
  const isMobileViewport = useViewportMatch( 'medium', '<' );
122
- const isListPage = getIsListPage( params, isMobileViewport );
123
- const isEditorPage = ! isListPage;
123
+ const isEditorPage = ! getIsListPage( params, isMobileViewport );
124
+ const history = useHistory();
125
+ const hasRevisions = useSelect(
126
+ ( select ) =>
127
+ select( coreStore ).getCurrentThemeGlobalStylesRevisions()?.length,
128
+ []
129
+ );
130
+ const commands = useMemo( () => {
131
+ if ( ! hasRevisions ) {
132
+ return [];
133
+ }
134
+
135
+ return [
136
+ {
137
+ name: 'core/edit-site/open-global-styles-revisions',
138
+ label: __( 'Open styles revisions' ),
139
+ icon: backup,
140
+ callback: ( { close } ) => {
141
+ close();
142
+ if ( ! isEditorPage ) {
143
+ history.push( {
144
+ path: '/wp_global_styles',
145
+ canvas: 'edit',
146
+ } );
147
+ }
148
+ if ( isEditorPage && getCanvasMode() !== 'edit' ) {
149
+ setCanvasMode( 'edit' );
150
+ }
151
+ openGeneralSidebar( 'edit-site/global-styles' );
152
+ setEditorCanvasContainerView( 'global-styles-revisions' );
153
+ },
154
+ },
155
+ ];
156
+ }, [
157
+ hasRevisions,
158
+ history,
159
+ openGeneralSidebar,
160
+ setEditorCanvasContainerView,
161
+ isEditorPage,
162
+ getCanvasMode,
163
+ setCanvasMode,
164
+ ] );
165
+
166
+ return {
167
+ isLoading: false,
168
+ commands,
169
+ };
170
+ }
171
+
172
+ export function useCommonCommands() {
173
+ const { openGeneralSidebar, setCanvasMode } = unlock(
174
+ useDispatch( editSiteStore )
175
+ );
176
+ const { params } = useLocation();
177
+ const isMobileViewport = useViewportMatch( 'medium', '<' );
178
+ const isEditorPage = ! getIsListPage( params, isMobileViewport );
124
179
  const { getCanvasMode } = unlock( useSelect( editSiteStore ) );
125
180
  const { set } = useDispatch( preferencesStore );
126
181
  const { createInfoNotice } = useDispatch( noticesStore );
@@ -139,26 +194,6 @@ export function useCommonCommands() {
139
194
  };
140
195
  }, [] );
141
196
 
142
- useCommand( {
143
- name: 'core/edit-site/open-global-styles-revisions',
144
- label: __( 'Open styles revisions' ),
145
- icon: backup,
146
- callback: ( { close } ) => {
147
- close();
148
- if ( ! isEditorPage ) {
149
- history.push( {
150
- path: '/wp_global_styles',
151
- canvas: 'edit',
152
- } );
153
- }
154
- if ( isEditorPage && getCanvasMode() !== 'edit' ) {
155
- setCanvasMode( 'edit' );
156
- }
157
- openGeneralSidebar( 'edit-site/global-styles' );
158
- setEditorCanvasContainerView( 'global-styles-revisions' );
159
- },
160
- } );
161
-
162
197
  useCommand( {
163
198
  name: 'core/edit-site/open-styles',
164
199
  label: __( 'Open styles' ),
@@ -228,4 +263,9 @@ export function useCommonCommands() {
228
263
  name: 'core/edit-site/open-styles-css',
229
264
  hook: useGlobalStylesOpenCssCommands,
230
265
  } );
266
+
267
+ useCommandLoader( {
268
+ name: 'core/edit-site/open-styles-revisions',
269
+ hook: useGlobalStylesOpenRevisionsCommands,
270
+ } );
231
271
  }
@@ -2,10 +2,11 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useSelect, useDispatch } from '@wordpress/data';
5
- import { __, isRTL } from '@wordpress/i18n';
5
+ import { __, sprintf, isRTL } from '@wordpress/i18n';
6
6
  import {
7
7
  trash,
8
- backup,
8
+ rotateLeft,
9
+ rotateRight,
9
10
  layout,
10
11
  page,
11
12
  drawerLeft,
@@ -13,12 +14,14 @@ import {
13
14
  blockDefault,
14
15
  cog,
15
16
  code,
16
- keyboardClose,
17
+ keyboard,
17
18
  } from '@wordpress/icons';
18
19
  import { useCommandLoader } from '@wordpress/commands';
20
+ import { decodeEntities } from '@wordpress/html-entities';
19
21
  import { privateApis as routerPrivateApis } from '@wordpress/router';
20
22
  import { store as preferencesStore } from '@wordpress/preferences';
21
23
  import { store as interfaceStore } from '@wordpress/interface';
24
+ import { store as noticesStore } from '@wordpress/notices';
22
25
 
23
26
  /**
24
27
  * Internal dependencies
@@ -34,6 +37,7 @@ import { unlock } from '../../lock-unlock';
34
37
  const { useHistory } = unlock( routerPrivateApis );
35
38
 
36
39
  function usePageContentFocusCommands() {
40
+ const { record: template } = useEditedEntityRecord();
37
41
  const { isPage, canvasMode, hasPageContentFocus } = useSelect(
38
42
  ( select ) => ( {
39
43
  isPage: select( editSiteStore ).isPage(),
@@ -53,7 +57,11 @@ function usePageContentFocusCommands() {
53
57
  if ( hasPageContentFocus ) {
54
58
  commands.push( {
55
59
  name: 'core/switch-to-template-focus',
56
- label: __( 'Edit template' ),
60
+ /* translators: %1$s: template title */
61
+ label: sprintf(
62
+ 'Edit template: %s',
63
+ decodeEntities( template.title )
64
+ ),
57
65
  icon: layout,
58
66
  callback: ( { close } ) => {
59
67
  setHasPageContentFocus( false );
@@ -93,12 +101,20 @@ function useManipulateDocumentCommands() {
93
101
  if ( isTemplateRevertable( template ) && ! hasPageContentFocus ) {
94
102
  const label =
95
103
  template.type === 'wp_template'
96
- ? __( 'Reset template' )
97
- : __( 'Reset template part' );
104
+ ? /* translators: %1$s: template title */
105
+ sprintf(
106
+ 'Reset template: %s',
107
+ decodeEntities( template.title )
108
+ )
109
+ : /* translators: %1$s: template part title */
110
+ sprintf(
111
+ 'Reset template part: %s',
112
+ decodeEntities( template.title )
113
+ );
98
114
  commands.push( {
99
115
  name: 'core/reset-template',
100
116
  label,
101
- icon: backup,
117
+ icon: isRTL() ? rotateRight : rotateLeft,
102
118
  callback: ( { close } ) => {
103
119
  revertTemplate( template );
104
120
  close();
@@ -109,8 +125,16 @@ function useManipulateDocumentCommands() {
109
125
  if ( isTemplateRemovable( template ) && ! hasPageContentFocus ) {
110
126
  const label =
111
127
  template.type === 'wp_template'
112
- ? __( 'Delete template' )
113
- : __( 'Delete template part' );
128
+ ? /* translators: %1$s: template title */
129
+ sprintf(
130
+ 'Delete template: %s',
131
+ decodeEntities( template.title )
132
+ )
133
+ : /* translators: %1$s: template part title */
134
+ sprintf(
135
+ 'Delete template part: %s',
136
+ decodeEntities( template.title )
137
+ );
114
138
  const path =
115
139
  template.type === 'wp_template'
116
140
  ? '/wp_template'
@@ -137,20 +161,32 @@ function useManipulateDocumentCommands() {
137
161
  }
138
162
 
139
163
  function useEditUICommands() {
140
- const { openGeneralSidebar, closeGeneralSidebar, switchEditorMode } =
141
- useDispatch( editSiteStore );
142
- const { canvasMode, editorMode, activeSidebar } = useSelect(
143
- ( select ) => ( {
144
- canvasMode: unlock( select( editSiteStore ) ).getCanvasMode(),
145
- editorMode: select( editSiteStore ).getEditorMode(),
146
- activeSidebar: select( interfaceStore ).getActiveComplementaryArea(
147
- editSiteStore.name
148
- ),
149
- } ),
150
- []
151
- );
164
+ const {
165
+ openGeneralSidebar,
166
+ closeGeneralSidebar,
167
+ setIsInserterOpened,
168
+ setIsListViewOpened,
169
+ switchEditorMode,
170
+ } = useDispatch( editSiteStore );
171
+ const { canvasMode, editorMode, activeSidebar, showBlockBreadcrumbs } =
172
+ useSelect(
173
+ ( select ) => ( {
174
+ canvasMode: unlock( select( editSiteStore ) ).getCanvasMode(),
175
+ editorMode: select( editSiteStore ).getEditorMode(),
176
+ activeSidebar: select(
177
+ interfaceStore
178
+ ).getActiveComplementaryArea( editSiteStore.name ),
179
+ showBlockBreadcrumbs: select( preferencesStore ).get(
180
+ 'core/edit-site',
181
+ 'showBlockBreadcrumbs'
182
+ ),
183
+ } ),
184
+ []
185
+ );
152
186
  const { openModal } = useDispatch( interfaceStore );
153
- const { toggle } = useDispatch( preferencesStore );
187
+ const { get: getPreference } = useSelect( preferencesStore );
188
+ const { set: setPreference, toggle } = useDispatch( preferencesStore );
189
+ const { createInfoNotice } = useDispatch( noticesStore );
154
190
 
155
191
  if ( canvasMode !== 'edit' ) {
156
192
  return { isLoading: false, commands: [] };
@@ -196,6 +232,29 @@ function useEditUICommands() {
196
232
  },
197
233
  } );
198
234
 
235
+ commands.push( {
236
+ name: 'core/toggle-distraction-free',
237
+ label: __( 'Toggle distraction free' ),
238
+ icon: cog,
239
+ callback: ( { close } ) => {
240
+ setPreference( 'core/edit-site', 'fixedToolbar', false );
241
+ setIsInserterOpened( false );
242
+ setIsListViewOpened( false );
243
+ closeGeneralSidebar();
244
+ toggle( 'core/edit-site', 'distractionFree' );
245
+ createInfoNotice(
246
+ getPreference( 'core/edit-site', 'distractionFree' )
247
+ ? __( 'Distraction free mode turned on.' )
248
+ : __( 'Distraction free mode turned off.' ),
249
+ {
250
+ id: 'core/edit-site/distraction-free-mode/notice',
251
+ type: 'snackbar',
252
+ }
253
+ );
254
+ close();
255
+ },
256
+ } );
257
+
199
258
  commands.push( {
200
259
  name: 'core/toggle-top-toolbar',
201
260
  label: __( 'Toggle top toolbar' ),
@@ -228,12 +287,24 @@ function useEditUICommands() {
228
287
  commands.push( {
229
288
  name: 'core/open-shortcut-help',
230
289
  label: __( 'Open keyboard shortcuts' ),
231
- icon: keyboardClose,
290
+ icon: keyboard,
232
291
  callback: () => {
233
292
  openModal( KEYBOARD_SHORTCUT_HELP_MODAL_NAME );
234
293
  },
235
294
  } );
236
295
 
296
+ commands.push( {
297
+ name: 'core/toggle-breadcrumbs',
298
+ label: showBlockBreadcrumbs
299
+ ? __( 'Hide block breadcrumbs' )
300
+ : __( 'Show block breadcrumbs' ),
301
+ icon: cog,
302
+ callback: ( { close } ) => {
303
+ toggle( 'core/edit-site', 'showBlockBreadcrumbs' );
304
+ close();
305
+ },
306
+ } );
307
+
237
308
  return {
238
309
  isLoading: false,
239
310
  commands,
@@ -25,9 +25,12 @@ import { store as noticesStore } from '@wordpress/notices';
25
25
  import { useSupportedStyles } from '../../components/global-styles/hooks';
26
26
  import { unlock } from '../../lock-unlock';
27
27
 
28
- const { GlobalStylesContext, useBlockEditingMode } = unlock(
29
- blockEditorPrivateApis
30
- );
28
+ const {
29
+ GlobalStylesContext,
30
+ useBlockEditingMode,
31
+ __experimentalUseGlobalBehaviors: useGlobalBehaviors,
32
+ __experimentalUseHasBehaviorsPanel: useHasBehaviorsPanel,
33
+ } = unlock( blockEditorPrivateApis );
31
34
 
32
35
  // TODO: Temporary duplication of constant in @wordpress/block-editor. Can be
33
36
  // removed by moving PushChangesToGlobalStylesControl to
@@ -121,7 +124,7 @@ function useChangesToPush( name, attributes ) {
121
124
  : getValueFromObjectPath( attributes.style, path );
122
125
  return value ? [ { path, value } ] : [];
123
126
  } ),
124
- [ supports, name, attributes ]
127
+ [ supports, attributes ]
125
128
  );
126
129
  }
127
130
 
@@ -176,6 +179,9 @@ function PushChangesToGlobalStylesControl( {
176
179
  } ) {
177
180
  const changes = useChangesToPush( name, attributes );
178
181
 
182
+ const hasBehaviorsPanel = useHasBehaviorsPanel( attributes, name, {
183
+ blockSupportOnly: true,
184
+ } );
179
185
  const { user: userConfig, setUserConfig } =
180
186
  useContext( GlobalStylesContext );
181
187
 
@@ -183,55 +189,86 @@ function PushChangesToGlobalStylesControl( {
183
189
  useDispatch( blockEditorStore );
184
190
  const { createSuccessNotice } = useDispatch( noticesStore );
185
191
 
192
+ const { inheritedBehaviors, setBehavior } = useGlobalBehaviors( name );
193
+
194
+ const userHasEditedBehaviors =
195
+ attributes.hasOwnProperty( 'behaviors' ) && hasBehaviorsPanel;
196
+
186
197
  const pushChanges = useCallback( () => {
187
- if ( changes.length === 0 ) {
198
+ if ( changes.length === 0 && ! userHasEditedBehaviors ) {
188
199
  return;
189
200
  }
201
+ if ( changes.length > 0 ) {
202
+ const { style: blockStyles } = attributes;
190
203
 
191
- const { style: blockStyles } = attributes;
204
+ const newBlockStyles = cloneDeep( blockStyles );
205
+ const newUserConfig = cloneDeep( userConfig );
192
206
 
193
- const newBlockStyles = cloneDeep( blockStyles );
194
- const newUserConfig = cloneDeep( userConfig );
207
+ for ( const { path, value } of changes ) {
208
+ setNestedValue( newBlockStyles, path, undefined );
209
+ setNestedValue(
210
+ newUserConfig,
211
+ [ 'styles', 'blocks', name, ...path ],
212
+ value
213
+ );
214
+ }
195
215
 
196
- for ( const { path, value } of changes ) {
197
- setNestedValue( newBlockStyles, path, undefined );
198
- setNestedValue(
199
- newUserConfig,
200
- [ 'styles', 'blocks', name, ...path ],
201
- value
216
+ // @wordpress/core-data doesn't support editing multiple entity types in
217
+ // a single undo level. So for now, we disable @wordpress/core-data undo
218
+ // tracking and implement our own Undo button in the snackbar
219
+ // notification.
220
+ __unstableMarkNextChangeAsNotPersistent();
221
+ setAttributes( { style: newBlockStyles } );
222
+ setUserConfig( () => newUserConfig, { undoIgnore: true } );
223
+ createSuccessNotice(
224
+ sprintf(
225
+ // translators: %s: Title of the block e.g. 'Heading'.
226
+ __( '%s styles applied.' ),
227
+ getBlockType( name ).title
228
+ ),
229
+ {
230
+ type: 'snackbar',
231
+ actions: [
232
+ {
233
+ label: __( 'Undo' ),
234
+ onClick() {
235
+ __unstableMarkNextChangeAsNotPersistent();
236
+ setAttributes( { style: blockStyles } );
237
+ setUserConfig( () => userConfig, {
238
+ undoIgnore: true,
239
+ } );
240
+ },
241
+ },
242
+ ],
243
+ }
202
244
  );
203
245
  }
204
-
205
- // @wordpress/core-data doesn't support editing multiple entity types in
206
- // a single undo level. So for now, we disable @wordpress/core-data undo
207
- // tracking and implement our own Undo button in the snackbar
208
- // notification.
209
- __unstableMarkNextChangeAsNotPersistent();
210
- setAttributes( { style: newBlockStyles } );
211
- setUserConfig( () => newUserConfig, { undoIgnore: true } );
212
-
213
- createSuccessNotice(
214
- sprintf(
215
- // translators: %s: Title of the block e.g. 'Heading'.
216
- __( '%s styles applied.' ),
217
- getBlockType( name ).title
218
- ),
219
- {
220
- type: 'snackbar',
221
- actions: [
222
- {
223
- label: __( 'Undo' ),
224
- onClick() {
225
- __unstableMarkNextChangeAsNotPersistent();
226
- setAttributes( { style: blockStyles } );
227
- setUserConfig( () => userConfig, {
228
- undoIgnore: true,
229
- } );
246
+ if ( userHasEditedBehaviors ) {
247
+ __unstableMarkNextChangeAsNotPersistent();
248
+ setBehavior( attributes.behaviors );
249
+ createSuccessNotice(
250
+ sprintf(
251
+ // translators: %s: Title of the block e.g. 'Heading'.
252
+ __( '%s behaviors applied.' ),
253
+ getBlockType( name ).title
254
+ ),
255
+ {
256
+ type: 'snackbar',
257
+ actions: [
258
+ {
259
+ label: __( 'Undo' ),
260
+ onClick() {
261
+ __unstableMarkNextChangeAsNotPersistent();
262
+ setBehavior( inheritedBehaviors );
263
+ setUserConfig( () => userConfig, {
264
+ undoIgnore: true,
265
+ } );
266
+ },
230
267
  },
231
- },
232
- ],
233
- }
234
- );
268
+ ],
269
+ }
270
+ );
271
+ }
235
272
  }, [ changes, attributes, userConfig, name ] );
236
273
 
237
274
  return (
@@ -240,7 +277,7 @@ function PushChangesToGlobalStylesControl( {
240
277
  help={ sprintf(
241
278
  // translators: %s: Title of the block e.g. 'Heading'.
242
279
  __(
243
- 'Apply this block’s typography, spacing, dimensions, and color styles to all %s blocks.'
280
+ 'Apply this block’s typography, spacing, dimensions, color styles, and behaviors to all %s blocks.'
244
281
  ),
245
282
  getBlockType( name ).title
246
283
  ) }
@@ -250,7 +287,7 @@ function PushChangesToGlobalStylesControl( {
250
287
  </BaseControl.VisualLabel>
251
288
  <Button
252
289
  variant="primary"
253
- disabled={ changes.length === 0 }
290
+ disabled={ changes.length === 0 && ! userHasEditedBehaviors }
254
291
  onClick={ pushChanges }
255
292
  >
256
293
  { __( 'Apply globally' ) }
@@ -18,11 +18,15 @@ export const setCanvasMode =
18
18
  mode,
19
19
  } );
20
20
  // Check if the block list view should be open by default.
21
+ // If `distractionFree` mode is enabled, the block list view should not be open.
21
22
  if (
22
23
  mode === 'edit' &&
23
24
  registry
24
25
  .select( preferencesStore )
25
- .get( 'core/edit-site', 'showListViewByDefault' )
26
+ .get( 'core/edit-site', 'showListViewByDefault' ) &&
27
+ ! registry
28
+ .select( preferencesStore )
29
+ .get( 'core/edit-site', 'distractionFree' )
26
30
  ) {
27
31
  dispatch.setIsListViewOpened( true );
28
32
  }
@@ -6,12 +6,13 @@ import { useDebounce } from '@wordpress/compose';
6
6
 
7
7
  export default function useDebouncedInput( defaultValue = '' ) {
8
8
  const [ input, setInput ] = useState( defaultValue );
9
- const [ debounced, setter ] = useState( defaultValue );
10
- const setDebounced = useDebounce( setter, 250 );
9
+ const [ debouncedInput, setDebouncedState ] = useState( defaultValue );
10
+
11
+ const setDebouncedInput = useDebounce( setDebouncedState, 250 );
12
+
11
13
  useEffect( () => {
12
- if ( debounced !== input ) {
13
- setDebounced( input );
14
- }
15
- }, [ debounced, input ] );
16
- return [ input, setInput, debounced ];
14
+ setDebouncedInput( input );
15
+ }, [ input ] );
16
+
17
+ return [ input, setInput, debouncedInput ];
17
18
  }