@wordpress/edit-site 5.6.0 → 5.8.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 (279) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/add-new-template/new-template-part.js +3 -11
  3. package/build/components/add-new-template/new-template-part.js.map +1 -1
  4. package/build/components/add-new-template/new-template.js +7 -7
  5. package/build/components/add-new-template/new-template.js.map +1 -1
  6. package/build/components/add-new-template/utils.js +1 -1
  7. package/build/components/add-new-template/utils.js.map +1 -1
  8. package/build/components/block-editor/editor-canvas.js +7 -10
  9. package/build/components/block-editor/editor-canvas.js.map +1 -1
  10. package/build/components/editor/index.js +6 -4
  11. package/build/components/editor/index.js.map +1 -1
  12. package/build/components/global-styles/border-panel.js +35 -1
  13. package/build/components/global-styles/border-panel.js.map +1 -1
  14. package/build/components/global-styles/context-menu.js +8 -11
  15. package/build/components/global-styles/context-menu.js.map +1 -1
  16. package/build/components/global-styles/dimensions-panel.js +11 -1
  17. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  18. package/build/components/global-styles/effects-panel.js +53 -0
  19. package/build/components/global-styles/effects-panel.js.map +1 -0
  20. package/build/components/global-styles/filters-panel.js +45 -0
  21. package/build/components/global-styles/filters-panel.js.map +1 -0
  22. package/build/components/global-styles/global-styles-provider.js +7 -4
  23. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  24. package/build/components/global-styles/hooks.js +1 -58
  25. package/build/components/global-styles/hooks.js.map +1 -1
  26. package/build/components/global-styles/preview.js +4 -5
  27. package/build/components/global-styles/preview.js.map +1 -1
  28. package/build/components/global-styles/screen-block-list.js +17 -12
  29. package/build/components/global-styles/screen-block-list.js.map +1 -1
  30. package/build/components/global-styles/screen-colors.js +22 -211
  31. package/build/components/global-styles/screen-colors.js.map +1 -1
  32. package/build/components/global-styles/screen-css.js +1 -1
  33. package/build/components/global-styles/screen-css.js.map +1 -1
  34. package/build/components/global-styles/screen-effects.js +15 -7
  35. package/build/components/global-styles/screen-effects.js.map +1 -1
  36. package/build/components/global-styles/screen-filters.js +2 -2
  37. package/build/components/global-styles/screen-filters.js.map +1 -1
  38. package/build/components/global-styles/screen-style-variations.js +8 -118
  39. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  40. package/build/components/global-styles/screen-typography-element.js +4 -0
  41. package/build/components/global-styles/screen-typography-element.js.map +1 -1
  42. package/build/components/global-styles/screen-typography.js +5 -0
  43. package/build/components/global-styles/screen-typography.js.map +1 -1
  44. package/build/components/global-styles/style-variations-container.js +149 -0
  45. package/build/components/global-styles/style-variations-container.js.map +1 -0
  46. package/build/components/global-styles/ui.js +51 -37
  47. package/build/components/global-styles/ui.js.map +1 -1
  48. package/build/components/global-styles-renderer/index.js +1 -2
  49. package/build/components/global-styles-renderer/index.js.map +1 -1
  50. package/build/components/header-edit-mode/more-menu/index.js +1 -1
  51. package/build/components/header-edit-mode/more-menu/index.js.map +1 -1
  52. package/build/components/keyboard-shortcuts/index.js +0 -137
  53. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  54. package/build/components/layout/index.js +8 -1
  55. package/build/components/layout/index.js.map +1 -1
  56. package/build/components/preferences-modal/index.js +4 -0
  57. package/build/components/preferences-modal/index.js.map +1 -1
  58. package/build/components/secondary-sidebar/list-view-sidebar.js +6 -1
  59. package/build/components/secondary-sidebar/list-view-sidebar.js.map +1 -1
  60. package/build/components/sidebar/index.js +4 -0
  61. package/build/components/sidebar/index.js.map +1 -1
  62. package/build/components/sidebar-navigation-screen/index.js +8 -6
  63. package/build/components/sidebar-navigation-screen/index.js.map +1 -1
  64. package/build/components/sidebar-navigation-screen-global-styles/index.js +58 -0
  65. package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -0
  66. package/build/components/sidebar-navigation-screen-main/index.js +5 -0
  67. package/build/components/sidebar-navigation-screen-main/index.js.map +1 -1
  68. package/build/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js +114 -9
  69. package/build/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js.map +1 -1
  70. package/build/components/site-hub/index.js +4 -3
  71. package/build/components/site-hub/index.js.map +1 -1
  72. package/build/components/start-template-options/index.js +44 -9
  73. package/build/components/start-template-options/index.js.map +1 -1
  74. package/build/components/style-book/index.js +6 -7
  75. package/build/components/style-book/index.js.map +1 -1
  76. package/build/components/welcome-guide/styles.js +1 -1
  77. package/build/components/welcome-guide/styles.js.map +1 -1
  78. package/build/hooks/commands/index.js +19 -0
  79. package/build/hooks/commands/index.js.map +1 -0
  80. package/build/hooks/commands/use-navigation-commands.js +117 -0
  81. package/build/hooks/commands/use-navigation-commands.js.map +1 -0
  82. package/build/hooks/commands/use-wp-admin-commands.js +94 -0
  83. package/build/hooks/commands/use-wp-admin-commands.js.map +1 -0
  84. package/build/hooks/push-changes-to-global-styles/index.js +1 -0
  85. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  86. package/build/hooks/template-part-edit.js +2 -1
  87. package/build/hooks/template-part-edit.js.map +1 -1
  88. package/build/index.js +2 -1
  89. package/build/index.js.map +1 -1
  90. package/build/store/selectors.js +2 -1
  91. package/build/store/selectors.js.map +1 -1
  92. package/build-module/components/add-new-template/new-template-part.js +3 -9
  93. package/build-module/components/add-new-template/new-template-part.js.map +1 -1
  94. package/build-module/components/add-new-template/new-template.js +7 -7
  95. package/build-module/components/add-new-template/new-template.js.map +1 -1
  96. package/build-module/components/add-new-template/utils.js +1 -1
  97. package/build-module/components/add-new-template/utils.js.map +1 -1
  98. package/build-module/components/block-editor/editor-canvas.js +8 -11
  99. package/build-module/components/block-editor/editor-canvas.js.map +1 -1
  100. package/build-module/components/editor/index.js +6 -4
  101. package/build-module/components/editor/index.js.map +1 -1
  102. package/build-module/components/global-styles/border-panel.js +34 -1
  103. package/build-module/components/global-styles/border-panel.js.map +1 -1
  104. package/build-module/components/global-styles/context-menu.js +8 -8
  105. package/build-module/components/global-styles/context-menu.js.map +1 -1
  106. package/build-module/components/global-styles/dimensions-panel.js +11 -1
  107. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  108. package/build-module/components/global-styles/effects-panel.js +43 -0
  109. package/build-module/components/global-styles/effects-panel.js.map +1 -0
  110. package/build-module/components/global-styles/filters-panel.js +35 -0
  111. package/build-module/components/global-styles/filters-panel.js.map +1 -0
  112. package/build-module/components/global-styles/global-styles-provider.js +8 -5
  113. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  114. package/build-module/components/global-styles/hooks.js +1 -52
  115. package/build-module/components/global-styles/hooks.js.map +1 -1
  116. package/build-module/components/global-styles/preview.js +4 -5
  117. package/build-module/components/global-styles/preview.js.map +1 -1
  118. package/build-module/components/global-styles/screen-block-list.js +16 -11
  119. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  120. package/build-module/components/global-styles/screen-colors.js +23 -208
  121. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  122. package/build-module/components/global-styles/screen-css.js +1 -1
  123. package/build-module/components/global-styles/screen-css.js.map +1 -1
  124. package/build-module/components/global-styles/screen-effects.js +13 -4
  125. package/build-module/components/global-styles/screen-effects.js.map +1 -1
  126. package/build-module/components/global-styles/screen-filters.js +2 -2
  127. package/build-module/components/global-styles/screen-filters.js.map +1 -1
  128. package/build-module/components/global-styles/screen-style-variations.js +11 -114
  129. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  130. package/build-module/components/global-styles/screen-typography-element.js +4 -0
  131. package/build-module/components/global-styles/screen-typography-element.js.map +1 -1
  132. package/build-module/components/global-styles/screen-typography.js +5 -0
  133. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  134. package/build-module/components/global-styles/style-variations-container.js +130 -0
  135. package/build-module/components/global-styles/style-variations-container.js.map +1 -0
  136. package/build-module/components/global-styles/ui.js +49 -33
  137. package/build-module/components/global-styles/ui.js.map +1 -1
  138. package/build-module/components/global-styles-renderer/index.js +1 -2
  139. package/build-module/components/global-styles-renderer/index.js.map +1 -1
  140. package/build-module/components/header-edit-mode/more-menu/index.js +1 -1
  141. package/build-module/components/header-edit-mode/more-menu/index.js.map +1 -1
  142. package/build-module/components/keyboard-shortcuts/index.js +1 -135
  143. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  144. package/build-module/components/layout/index.js +6 -1
  145. package/build-module/components/layout/index.js.map +1 -1
  146. package/build-module/components/preferences-modal/index.js +4 -0
  147. package/build-module/components/preferences-modal/index.js.map +1 -1
  148. package/build-module/components/secondary-sidebar/list-view-sidebar.js +6 -2
  149. package/build-module/components/secondary-sidebar/list-view-sidebar.js.map +1 -1
  150. package/build-module/components/sidebar/index.js +3 -0
  151. package/build-module/components/sidebar/index.js.map +1 -1
  152. package/build-module/components/sidebar-navigation-screen/index.js +9 -7
  153. package/build-module/components/sidebar-navigation-screen/index.js.map +1 -1
  154. package/build-module/components/sidebar-navigation-screen-global-styles/index.js +41 -0
  155. package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -0
  156. package/build-module/components/sidebar-navigation-screen-main/index.js +6 -1
  157. package/build-module/components/sidebar-navigation-screen-main/index.js.map +1 -1
  158. package/build-module/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js +113 -11
  159. package/build-module/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js.map +1 -1
  160. package/build-module/components/site-hub/index.js +3 -3
  161. package/build-module/components/site-hub/index.js.map +1 -1
  162. package/build-module/components/start-template-options/index.js +45 -10
  163. package/build-module/components/start-template-options/index.js.map +1 -1
  164. package/build-module/components/style-book/index.js +7 -8
  165. package/build-module/components/style-book/index.js.map +1 -1
  166. package/build-module/components/welcome-guide/styles.js +1 -1
  167. package/build-module/components/welcome-guide/styles.js.map +1 -1
  168. package/build-module/hooks/commands/index.js +10 -0
  169. package/build-module/hooks/commands/index.js.map +1 -0
  170. package/build-module/hooks/commands/use-navigation-commands.js +101 -0
  171. package/build-module/hooks/commands/use-navigation-commands.js.map +1 -0
  172. package/build-module/hooks/commands/use-wp-admin-commands.js +79 -0
  173. package/build-module/hooks/commands/use-wp-admin-commands.js.map +1 -0
  174. package/build-module/hooks/push-changes-to-global-styles/index.js +1 -0
  175. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  176. package/build-module/hooks/template-part-edit.js +2 -1
  177. package/build-module/hooks/template-part-edit.js.map +1 -1
  178. package/build-module/index.js +2 -1
  179. package/build-module/index.js.map +1 -1
  180. package/build-module/store/selectors.js +2 -1
  181. package/build-module/store/selectors.js.map +1 -1
  182. package/build-style/style-rtl.css +24 -63
  183. package/build-style/style.css +24 -63
  184. package/package.json +33 -31
  185. package/src/components/add-new-template/new-template-part.js +1 -6
  186. package/src/components/add-new-template/new-template.js +3 -6
  187. package/src/components/add-new-template/utils.js +1 -1
  188. package/src/components/block-editor/editor-canvas.js +13 -23
  189. package/src/components/editor/index.js +11 -3
  190. package/src/components/global-styles/border-panel.js +32 -1
  191. package/src/components/global-styles/context-menu.js +8 -8
  192. package/src/components/global-styles/dimensions-panel.js +11 -0
  193. package/src/components/global-styles/effects-panel.js +40 -0
  194. package/src/components/global-styles/filters-panel.js +33 -0
  195. package/src/components/global-styles/global-styles-provider.js +4 -4
  196. package/src/components/global-styles/hooks.js +1 -78
  197. package/src/components/global-styles/preview.js +2 -2
  198. package/src/components/global-styles/screen-block-list.js +11 -7
  199. package/src/components/global-styles/screen-colors.js +25 -229
  200. package/src/components/global-styles/screen-css.js +1 -1
  201. package/src/components/global-styles/screen-effects.js +12 -5
  202. package/src/components/global-styles/screen-filters.js +2 -2
  203. package/src/components/global-styles/screen-style-variations.js +10 -129
  204. package/src/components/global-styles/screen-typography-element.js +4 -0
  205. package/src/components/global-styles/screen-typography.js +6 -0
  206. package/src/components/global-styles/stories/index.js +425 -0
  207. package/src/components/global-styles/style-variations-container.js +136 -0
  208. package/src/components/global-styles/style.scss +4 -57
  209. package/src/components/global-styles/ui.js +50 -33
  210. package/src/components/global-styles-renderer/index.js +1 -2
  211. package/src/components/header-edit-mode/more-menu/index.js +1 -1
  212. package/src/components/keyboard-shortcuts/index.js +1 -155
  213. package/src/components/layout/index.js +4 -0
  214. package/src/components/preferences-modal/index.js +7 -0
  215. package/src/components/secondary-sidebar/list-view-sidebar.js +4 -3
  216. package/src/components/sidebar/index.js +4 -0
  217. package/src/components/sidebar-navigation-screen/index.js +10 -5
  218. package/src/components/sidebar-navigation-screen/style.scss +20 -5
  219. package/src/components/sidebar-navigation-screen-global-styles/index.js +41 -0
  220. package/src/components/sidebar-navigation-screen-main/index.js +9 -1
  221. package/src/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js +134 -9
  222. package/src/components/site-hub/index.js +3 -3
  223. package/src/components/start-template-options/index.js +40 -8
  224. package/src/components/start-template-options/style.scss +7 -14
  225. package/src/components/style-book/index.js +10 -16
  226. package/src/components/style-book/style.scss +1 -1
  227. package/src/components/welcome-guide/styles.js +1 -1
  228. package/src/hooks/commands/index.js +10 -0
  229. package/src/hooks/commands/use-navigation-commands.js +103 -0
  230. package/src/hooks/commands/use-wp-admin-commands.js +77 -0
  231. package/src/hooks/push-changes-to-global-styles/index.js +1 -0
  232. package/src/hooks/template-part-edit.js +1 -0
  233. package/src/index.js +1 -0
  234. package/src/store/selectors.js +2 -1
  235. package/build/components/global-styles/color-utils.js +0 -17
  236. package/build/components/global-styles/color-utils.js.map +0 -1
  237. package/build/components/global-styles/duotone-panel.js +0 -78
  238. package/build/components/global-styles/duotone-panel.js.map +0 -1
  239. package/build/components/global-styles/filter-utils.js +0 -17
  240. package/build/components/global-styles/filter-utils.js.map +0 -1
  241. package/build/components/global-styles/screen-background-color.js +0 -114
  242. package/build/components/global-styles/screen-background-color.js.map +0 -1
  243. package/build/components/global-styles/screen-button-color.js +0 -88
  244. package/build/components/global-styles/screen-button-color.js.map +0 -1
  245. package/build/components/global-styles/screen-heading-color.js +0 -165
  246. package/build/components/global-styles/screen-heading-color.js.map +0 -1
  247. package/build/components/global-styles/screen-link-color.js +0 -105
  248. package/build/components/global-styles/screen-link-color.js.map +0 -1
  249. package/build/components/global-styles/screen-text-color.js +0 -71
  250. package/build/components/global-styles/screen-text-color.js.map +0 -1
  251. package/build/components/global-styles/shadow-panel.js +0 -197
  252. package/build/components/global-styles/shadow-panel.js.map +0 -1
  253. package/build-module/components/global-styles/color-utils.js +0 -9
  254. package/build-module/components/global-styles/color-utils.js.map +0 -1
  255. package/build-module/components/global-styles/duotone-panel.js +0 -67
  256. package/build-module/components/global-styles/duotone-panel.js.map +0 -1
  257. package/build-module/components/global-styles/filter-utils.js +0 -9
  258. package/build-module/components/global-styles/filter-utils.js.map +0 -1
  259. package/build-module/components/global-styles/screen-background-color.js +0 -97
  260. package/build-module/components/global-styles/screen-background-color.js.map +0 -1
  261. package/build-module/components/global-styles/screen-button-color.js +0 -73
  262. package/build-module/components/global-styles/screen-button-color.js.map +0 -1
  263. package/build-module/components/global-styles/screen-heading-color.js +0 -149
  264. package/build-module/components/global-styles/screen-heading-color.js.map +0 -1
  265. package/build-module/components/global-styles/screen-link-color.js +0 -89
  266. package/build-module/components/global-styles/screen-link-color.js.map +0 -1
  267. package/build-module/components/global-styles/screen-text-color.js +0 -56
  268. package/build-module/components/global-styles/screen-text-color.js.map +0 -1
  269. package/build-module/components/global-styles/shadow-panel.js +0 -178
  270. package/build-module/components/global-styles/shadow-panel.js.map +0 -1
  271. package/src/components/global-styles/color-utils.js +0 -14
  272. package/src/components/global-styles/duotone-panel.js +0 -82
  273. package/src/components/global-styles/filter-utils.js +0 -9
  274. package/src/components/global-styles/screen-background-color.js +0 -132
  275. package/src/components/global-styles/screen-button-color.js +0 -104
  276. package/src/components/global-styles/screen-heading-color.js +0 -206
  277. package/src/components/global-styles/screen-link-color.js +0 -124
  278. package/src/components/global-styles/screen-text-color.js +0 -62
  279. package/src/components/global-styles/shadow-panel.js +0 -178
@@ -6,10 +6,14 @@ import {
6
6
  store as blockEditorStore,
7
7
  BlockList,
8
8
  BlockTools,
9
+ __experimentalLinkControl as LinkControl,
9
10
  } from '@wordpress/block-editor';
10
11
  import { useDispatch, useSelect } from '@wordpress/data';
11
12
  import { createBlock } from '@wordpress/blocks';
12
- import { useCallback } from '@wordpress/element';
13
+ import { Popover } from '@wordpress/components';
14
+ import { __unstableStripHTML as stripHTML } from '@wordpress/dom';
15
+ import { useCallback, useEffect, useState } from '@wordpress/element';
16
+ import { store as coreStore } from '@wordpress/core-data';
13
17
 
14
18
  /**
15
19
  * Internal dependencies
@@ -17,17 +21,80 @@ import { useCallback } from '@wordpress/element';
17
21
  import { unlock } from '../../private-apis';
18
22
  import { NavigationMenuLoader } from './loader';
19
23
 
24
+ function CustomLinkAdditionalBlockUI( { block, onClose } ) {
25
+ const { updateBlockAttributes } = useDispatch( blockEditorStore );
26
+ const { label, url, opensInNewTab } = block.attributes;
27
+ const link = {
28
+ url,
29
+ opensInNewTab,
30
+ title: label && stripHTML( label ),
31
+ };
32
+ return (
33
+ <Popover placement="bottom" shift onClose={ onClose }>
34
+ <LinkControl
35
+ hasTextControl
36
+ hasRichPreviews
37
+ value={ link }
38
+ onChange={ ( updatedValue ) => {
39
+ updateBlockAttributes( block.clientId, {
40
+ label: updatedValue.title,
41
+ url: updatedValue.url,
42
+ opensInNewTab: updatedValue.opensInNewTab,
43
+ } );
44
+ onClose();
45
+ } }
46
+ onCancel={ onClose }
47
+ />
48
+ </Popover>
49
+ );
50
+ }
51
+ // Needs to be kept in sync with the query used at packages/block-library/src/page-list/edit.js.
52
+ const MAX_PAGE_COUNT = 100;
53
+ const PAGES_QUERY = [
54
+ 'postType',
55
+ 'page',
56
+ {
57
+ per_page: MAX_PAGE_COUNT,
58
+ _fields: [ 'id', 'link', 'menu_order', 'parent', 'title', 'type' ],
59
+ // TODO: When https://core.trac.wordpress.org/ticket/39037 REST API support for multiple orderby
60
+ // values is resolved, update 'orderby' to [ 'menu_order', 'post_title' ] to provide a consistent
61
+ // sort.
62
+ orderby: 'menu_order',
63
+ order: 'asc',
64
+ },
65
+ ];
66
+
20
67
  export default function NavigationMenuContent( { rootClientId, onSelect } ) {
21
- const { clientIdsTree, isLoading } = useSelect(
68
+ const [ isLoading, setIsLoading ] = useState( true );
69
+ const { clientIdsTree, shouldKeepLoading, isSinglePageList } = useSelect(
22
70
  ( select ) => {
23
- const { __unstableGetClientIdsTree, areInnerBlocksControlled } =
24
- select( blockEditorStore );
25
- return {
26
- clientIdsTree: __unstableGetClientIdsTree( rootClientId ),
71
+ const {
72
+ __unstableGetClientIdsTree,
73
+ areInnerBlocksControlled,
74
+ getBlockName,
75
+ } = select( blockEditorStore );
76
+ const { isResolving } = select( coreStore );
27
77
 
78
+ const _clientIdsTree = __unstableGetClientIdsTree( rootClientId );
79
+ const hasOnlyPageListBlock =
80
+ _clientIdsTree.length === 1 &&
81
+ getBlockName( _clientIdsTree[ 0 ].clientId ) ===
82
+ 'core/page-list';
83
+ const isLoadingPages = isResolving(
84
+ 'getEntityRecords',
85
+ PAGES_QUERY
86
+ );
87
+ return {
88
+ clientIdsTree: _clientIdsTree,
28
89
  // This is a small hack to wait for the navigation block
29
90
  // to actually load its inner blocks.
30
- isLoading: ! areInnerBlocksControlled( rootClientId ),
91
+ shouldKeepLoading:
92
+ ! areInnerBlocksControlled( rootClientId ) ||
93
+ isLoadingPages,
94
+ isSinglePageList:
95
+ hasOnlyPageListBlock &&
96
+ ! isLoadingPages &&
97
+ _clientIdsTree[ 0 ].innerBlocks.length > 0,
31
98
  };
32
99
  },
33
100
  [ rootClientId ]
@@ -35,6 +102,48 @@ export default function NavigationMenuContent( { rootClientId, onSelect } ) {
35
102
  const { replaceBlock, __unstableMarkNextChangeAsNotPersistent } =
36
103
  useDispatch( blockEditorStore );
37
104
 
105
+ const [ customLinkEditPopoverOpenId, setIsCustomLinkEditPopoverOpenId ] =
106
+ useState( false );
107
+
108
+ const renderAdditionalBlockUICallback = useCallback(
109
+ ( block ) => {
110
+ if (
111
+ customLinkEditPopoverOpenId &&
112
+ block.clientId === customLinkEditPopoverOpenId
113
+ ) {
114
+ return (
115
+ <CustomLinkAdditionalBlockUI
116
+ block={ block }
117
+ onClose={ () => {
118
+ setIsCustomLinkEditPopoverOpenId( false );
119
+ } }
120
+ />
121
+ );
122
+ }
123
+ return null;
124
+ },
125
+ [ customLinkEditPopoverOpenId, setIsCustomLinkEditPopoverOpenId ]
126
+ );
127
+
128
+ // Delay loading stop by 50ms to avoid flickering.
129
+ useEffect( () => {
130
+ let timeoutId;
131
+ if ( shouldKeepLoading && ! isLoading ) {
132
+ setIsLoading( true );
133
+ }
134
+ if ( ! shouldKeepLoading && isLoading ) {
135
+ timeoutId = setTimeout( () => {
136
+ setIsLoading( false );
137
+ timeoutId = undefined;
138
+ }, 50 );
139
+ }
140
+ return () => {
141
+ if ( timeoutId ) {
142
+ clearTimeout( timeoutId );
143
+ }
144
+ };
145
+ }, [ shouldKeepLoading, clientIdsTree, isLoading ] );
146
+
38
147
  const { OffCanvasEditor, LeafMoreMenu } = unlock( blockEditorPrivateApis );
39
148
 
40
149
  const offCanvasOnselect = useCallback(
@@ -48,11 +157,22 @@ export default function NavigationMenuContent( { rootClientId, onSelect } ) {
48
157
  block.clientId,
49
158
  createBlock( 'core/navigation-link', block.attributes )
50
159
  );
160
+ } else if (
161
+ block.name === 'core/navigation-link' &&
162
+ block.attributes.kind === 'custom' &&
163
+ block.attributes.url
164
+ ) {
165
+ setIsCustomLinkEditPopoverOpenId( block.clientId );
51
166
  } else {
52
167
  onSelect( block );
53
168
  }
54
169
  },
55
- [ onSelect, __unstableMarkNextChangeAsNotPersistent, replaceBlock ]
170
+ [
171
+ onSelect,
172
+ __unstableMarkNextChangeAsNotPersistent,
173
+ replaceBlock,
174
+ setIsCustomLinkEditPopoverOpenId,
175
+ ]
56
176
  );
57
177
 
58
178
  // The hidden block is needed because it makes block edit side effects trigger.
@@ -62,10 +182,15 @@ export default function NavigationMenuContent( { rootClientId, onSelect } ) {
62
182
  { isLoading && <NavigationMenuLoader /> }
63
183
  { ! isLoading && (
64
184
  <OffCanvasEditor
65
- blocks={ clientIdsTree }
185
+ blocks={
186
+ isSinglePageList
187
+ ? clientIdsTree[ 0 ].innerBlocks
188
+ : clientIdsTree
189
+ }
66
190
  onSelect={ offCanvasOnselect }
67
191
  LeafMoreMenu={ LeafMoreMenu }
68
192
  showAppender={ false }
193
+ renderAdditionalBlockUI={ renderAdditionalBlockUICallback }
69
194
  />
70
195
  ) }
71
196
  <div style={ { visibility: 'hidden' } }>
@@ -17,6 +17,7 @@ import { __ } from '@wordpress/i18n';
17
17
  import { store as blockEditorStore } from '@wordpress/block-editor';
18
18
  import { store as coreStore } from '@wordpress/core-data';
19
19
  import { forwardRef } from '@wordpress/element';
20
+ import { decodeEntities } from '@wordpress/html-entities';
20
21
 
21
22
  /**
22
23
  * Internal dependencies
@@ -29,7 +30,6 @@ const HUB_ANIMATION_DURATION = 0.3;
29
30
 
30
31
  const SiteHub = forwardRef( ( props, ref ) => {
31
32
  const { canvasMode, dashboardLink } = useSelect( ( select ) => {
32
- select( editSiteStore ).getEditedPostType();
33
33
  const { getCanvasMode, getSettings } = unlock(
34
34
  select( editSiteStore )
35
35
  );
@@ -46,7 +46,7 @@ const SiteHub = forwardRef( ( props, ref ) => {
46
46
  const siteIconButtonProps = isBackToDashboardButton
47
47
  ? {
48
48
  href: dashboardLink || 'index.php',
49
- 'aria-label': __( 'Go back to the dashboard' ),
49
+ label: __( 'Go back to the Dashboard' ),
50
50
  }
51
51
  : {
52
52
  label: __( 'Open Navigation Sidebar' ),
@@ -97,7 +97,7 @@ const SiteHub = forwardRef( ( props, ref ) => {
97
97
 
98
98
  { showLabels && (
99
99
  <div className="edit-site-site-hub__site-title">
100
- { siteTitle }
100
+ { decodeEntities( siteTitle ) }
101
101
  </div>
102
102
  ) }
103
103
  </HStack>
@@ -4,7 +4,10 @@
4
4
  import { Modal } from '@wordpress/components';
5
5
  import { __ } from '@wordpress/i18n';
6
6
  import { useState, useEffect, useMemo } from '@wordpress/element';
7
- import { __experimentalBlockPatternsList as BlockPatternsList } from '@wordpress/block-editor';
7
+ import {
8
+ __experimentalBlockPatternsList as BlockPatternsList,
9
+ store as blockEditorStore,
10
+ } from '@wordpress/block-editor';
8
11
  import { useSelect } from '@wordpress/data';
9
12
  import { useAsyncList } from '@wordpress/compose';
10
13
  import { store as preferencesStore } from '@wordpress/preferences';
@@ -35,15 +38,40 @@ function useFallbackTemplateContent( slug, isCustom = false ) {
35
38
 
36
39
  const START_BLANK_TITLE = __( 'Start blank' );
37
40
 
38
- function PatternSelection( { fallbackContent, onChoosePattern, postType } ) {
39
- const [ , , onChange ] = useEntityBlockEditor( 'postType', postType );
40
- const blockPatterns = useMemo(
41
- () => [
41
+ function useStartPatterns( fallbackContent ) {
42
+ const { slug, patterns } = useSelect( ( select ) => {
43
+ const { getEditedPostType, getEditedPostId } = select( editSiteStore );
44
+ const { getEntityRecord } = select( coreStore );
45
+ const postId = getEditedPostId();
46
+ const postType = getEditedPostType();
47
+ const record = getEntityRecord( 'postType', postType, postId );
48
+ const { getSettings } = select( blockEditorStore );
49
+ return {
50
+ slug: record.slug,
51
+ patterns: getSettings().__experimentalBlockPatterns,
52
+ };
53
+ }, [] );
54
+
55
+ return useMemo( () => {
56
+ // filter patterns that are supposed to be used in the current template being edited.
57
+ return [
42
58
  {
43
59
  name: 'fallback',
44
60
  blocks: parse( fallbackContent ),
45
61
  title: __( 'Fallback content' ),
46
62
  },
63
+ ...patterns
64
+ .filter( ( pattern ) => {
65
+ return (
66
+ Array.isArray( pattern.templateTypes ) &&
67
+ pattern.templateTypes.some( ( templateType ) =>
68
+ slug.startsWith( templateType )
69
+ )
70
+ );
71
+ } )
72
+ .map( ( pattern ) => {
73
+ return { ...pattern, blocks: parse( pattern.content ) };
74
+ } ),
47
75
  {
48
76
  name: 'start-blank',
49
77
  blocks: parse(
@@ -51,9 +79,13 @@ function PatternSelection( { fallbackContent, onChoosePattern, postType } ) {
51
79
  ),
52
80
  title: START_BLANK_TITLE,
53
81
  },
54
- ],
55
- [ fallbackContent ]
56
- );
82
+ ];
83
+ }, [ fallbackContent, slug, patterns ] );
84
+ }
85
+
86
+ function PatternSelection( { fallbackContent, onChoosePattern, postType } ) {
87
+ const [ , , onChange ] = useEntityBlockEditor( 'postType', postType );
88
+ const blockPatterns = useStartPatterns( fallbackContent );
57
89
  const shownBlockPatterns = useAsyncList( blockPatterns );
58
90
 
59
91
  return (
@@ -19,6 +19,7 @@
19
19
  margin-top: $grid-unit-05;
20
20
  gap: $grid-unit-30;
21
21
  grid-template-columns: repeat(auto-fit, minmax(min(100%/2, max(240px, 100%/10)), 1fr));
22
+
22
23
  .block-editor-block-patterns-list__list-item {
23
24
  break-inside: avoid-column;
24
25
  margin-bottom: 0;
@@ -27,7 +28,6 @@
27
28
 
28
29
  .block-editor-block-preview__container {
29
30
  height: 100%;
30
- box-shadow: 0 0 0 1px $gray-300;
31
31
  }
32
32
 
33
33
  .block-editor-block-preview__content {
@@ -38,20 +38,13 @@
38
38
  .block-editor-block-patterns-list__item-title {
39
39
  display: none;
40
40
  }
41
+ }
41
42
 
42
- &:hover {
43
- .block-editor-block-preview__container {
44
- box-shadow: 0 0 0 2px var(--wp-admin-theme-color);
45
- }
46
- }
47
-
48
- &:focus {
49
- .block-editor-block-preview__container {
50
- box-shadow: inset 0 0 0 1px $white, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
51
-
52
- // Windows High Contrast mode will show this outline, but not the box-shadow.
53
- outline: 2px solid transparent;
54
- }
43
+ .block-editor-block-patterns-list__item {
44
+ // Avoid to override the BlockPatternList component
45
+ // default hover and focus styles.
46
+ &:not(:focus):not(:hover) .block-editor-block-preview__container {
47
+ box-shadow: 0 0 0 1px $gray-300;
55
48
  }
56
49
  }
57
50
 
@@ -247,25 +247,19 @@ function StyleBook( { isSelected, onSelect, onClose } ) {
247
247
  { ( tab ) => (
248
248
  <Iframe
249
249
  className="edit-site-style-book__iframe"
250
- head={
251
- <>
252
- <EditorStyles styles={ settings.styles } />
253
- <style>
254
- {
255
- // Forming a "block formatting context" to prevent margin collapsing.
256
- // @see https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context
257
- `.is-root-container { display: flow-root; }
258
- body { position: relative; padding: 32px !important; }` +
259
- STYLE_BOOK_IFRAME_STYLES
260
- }
261
- </style>
262
- </>
263
- }
264
250
  name="style-book-canvas"
265
251
  tabIndex={ 0 }
266
252
  >
267
- { /* Filters need to be rendered before children to avoid Safari rendering issues. */ }
268
- { settings.svgFilters }
253
+ <EditorStyles styles={ settings.styles } />
254
+ <style>
255
+ {
256
+ // Forming a "block formatting context" to prevent margin collapsing.
257
+ // @see https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context
258
+ `.is-root-container { display: flow-root; }
259
+ body { position: relative; padding: 32px !important; }` +
260
+ STYLE_BOOK_IFRAME_STYLES
261
+ }
262
+ </style>
269
263
  <Examples
270
264
  className={ classnames(
271
265
  'edit-site-style-book__examples',
@@ -1,5 +1,5 @@
1
1
  .edit-site-style-book {
2
- background: $white; // Fallback color, overriden by JavaScript.
2
+ background: $white; // Fallback color, overridden by JavaScript.
3
3
  border-radius: $radius-block-ui;
4
4
  bottom: 0;
5
5
  left: 0;
@@ -119,7 +119,7 @@ export default function WelcomeGuideStyles() {
119
119
  ) }
120
120
  <ExternalLink
121
121
  href={ __(
122
- 'https://wordpress.org/support/article/styles-overview/'
122
+ 'https://wordpress.org/documentation/article/styles-overview/'
123
123
  ) }
124
124
  >
125
125
  { __(
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import { useNavigationCommands } from './use-navigation-commands';
5
+ import { useWPAdminCommands } from './use-wp-admin-commands';
6
+
7
+ export function useCommands() {
8
+ useWPAdminCommands();
9
+ useNavigationCommands();
10
+ }
@@ -0,0 +1,103 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { privateApis } from '@wordpress/commands';
5
+ import { __ } from '@wordpress/i18n';
6
+ import { useMemo } from '@wordpress/element';
7
+ import { useSelect } from '@wordpress/data';
8
+ import { store as coreStore } from '@wordpress/core-data';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import { store as editSiteStore } from '../../store';
14
+ import { unlock } from '../../private-apis';
15
+ import { useHistory } from '../../components/routes';
16
+
17
+ const { useCommandLoader } = unlock( privateApis );
18
+
19
+ const getNavigationCommandLoaderPerPostType = ( postType ) =>
20
+ function useNavigationCommandLoader( { search } ) {
21
+ const supportsSearch = ! [ 'wp_template', 'wp_template_part' ].includes(
22
+ postType
23
+ );
24
+ const deps = supportsSearch ? [ search ] : [];
25
+ const history = useHistory();
26
+ const { canvasMode, records, isLoading } = useSelect( ( select ) => {
27
+ const { getEntityRecords } = select( coreStore );
28
+ const query = supportsSearch
29
+ ? {
30
+ search: !! search ? search : undefined,
31
+ per_page: 10,
32
+ orderby: search ? 'relevance' : 'date',
33
+ }
34
+ : {
35
+ per_page: -1,
36
+ };
37
+ return {
38
+ records: getEntityRecords( 'postType', postType, query ),
39
+ isLoading: ! select( coreStore ).hasFinishedResolution(
40
+ 'getEntityRecords',
41
+ [ 'postType', postType, query ]
42
+ ),
43
+ canvasMode: unlock( select( editSiteStore ) ).getCanvasMode(),
44
+ };
45
+ }, deps );
46
+
47
+ const commands = useMemo( () => {
48
+ return ( records ?? [] ).slice( 0, 10 ).map( ( record ) => {
49
+ return {
50
+ name: record.title?.rendered + ' ' + record.id,
51
+ label: record.title?.rendered
52
+ ? record.title?.rendered
53
+ : __( '(no title)' ),
54
+ callback: ( { close } ) => {
55
+ history.push( {
56
+ postType,
57
+ postId: record.id,
58
+ canvas:
59
+ canvasMode === 'edit' ? canvasMode : undefined,
60
+ } );
61
+ close();
62
+ },
63
+ };
64
+ } );
65
+ }, [ records, history, canvasMode ] );
66
+
67
+ return {
68
+ commands,
69
+ isLoading,
70
+ };
71
+ };
72
+
73
+ const usePageNavigationCommandLoader =
74
+ getNavigationCommandLoaderPerPostType( 'page' );
75
+ const usePostNavigationCommandLoader =
76
+ getNavigationCommandLoaderPerPostType( 'post' );
77
+ const useTemplateNavigationCommandLoader =
78
+ getNavigationCommandLoaderPerPostType( 'wp_template' );
79
+ const useTemplatePartNavigationCommandLoader =
80
+ getNavigationCommandLoaderPerPostType( 'wp_template_part' );
81
+
82
+ export function useNavigationCommands() {
83
+ useCommandLoader( {
84
+ name: 'core/edit-site/navigate-pages',
85
+ group: __( 'Pages' ),
86
+ hook: usePageNavigationCommandLoader,
87
+ } );
88
+ useCommandLoader( {
89
+ name: 'core/edit-site/navigate-posts',
90
+ group: __( 'Posts' ),
91
+ hook: usePostNavigationCommandLoader,
92
+ } );
93
+ useCommandLoader( {
94
+ name: 'core/edit-site/navigate-templates',
95
+ group: __( 'Templates' ),
96
+ hook: useTemplateNavigationCommandLoader,
97
+ } );
98
+ useCommandLoader( {
99
+ name: 'core/edit-site/navigate-template-parts',
100
+ group: __( 'Template Parts' ),
101
+ hook: useTemplatePartNavigationCommandLoader,
102
+ } );
103
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { privateApis } from '@wordpress/commands';
5
+ import { __, sprintf } from '@wordpress/i18n';
6
+ import { useSelect } from '@wordpress/data';
7
+ import { addQueryArgs } from '@wordpress/url';
8
+ import { useMemo } from '@wordpress/element';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import { store as editSiteStore } from '../../store';
14
+ import { unlock } from '../../private-apis';
15
+
16
+ const { useCommandLoader } = unlock( privateApis );
17
+
18
+ const getWPAdminAddCommandLoader = ( postType ) =>
19
+ function useAddCommandLoader( { search } ) {
20
+ let label;
21
+ if ( postType === 'post' ) {
22
+ label = __( 'Add a new post' );
23
+ } else if ( postType === 'page' ) {
24
+ label = __( 'Add a new page' );
25
+ } else {
26
+ throw 'unsupported post type ' + postType;
27
+ }
28
+ const hasRecordTitle =
29
+ !! search && ! label.toLowerCase().includes( search.toLowerCase() );
30
+ if ( postType === 'post' && hasRecordTitle ) {
31
+ /* translators: %s: Post title placeholder */
32
+ label = sprintf( __( 'Add a new post "%s"' ), search );
33
+ } else if ( postType === 'page' && hasRecordTitle ) {
34
+ /* translators: %s: Page title placeholder */
35
+ label = sprintf( __( 'Add a new page "%s"' ), search );
36
+ }
37
+
38
+ const newPostLink = useSelect( ( select ) => {
39
+ const { getSettings } = unlock( select( editSiteStore ) );
40
+ return getSettings().newPostLink ?? 'post-new.php';
41
+ }, [] );
42
+
43
+ const commands = useMemo(
44
+ () => [
45
+ {
46
+ name: 'core/wp-admin/add-' + postType,
47
+ label,
48
+ callback: () => {
49
+ document.location.href = addQueryArgs( newPostLink, {
50
+ post_type: postType,
51
+ post_title: hasRecordTitle ? search : undefined,
52
+ } );
53
+ },
54
+ },
55
+ ],
56
+ [ newPostLink, hasRecordTitle, search, label ]
57
+ );
58
+
59
+ return {
60
+ isLoading: false,
61
+ commands,
62
+ };
63
+ };
64
+
65
+ const useAddPostLoader = getWPAdminAddCommandLoader( 'post' );
66
+ const useAddPageLoader = getWPAdminAddCommandLoader( 'page' );
67
+
68
+ export function useWPAdminCommands() {
69
+ useCommandLoader( {
70
+ name: 'core/wp-admin/add-post-loader',
71
+ hook: useAddPostLoader,
72
+ } );
73
+ useCommandLoader( {
74
+ name: 'core/wp-admin/add-page-loader',
75
+ hook: useAddPageLoader,
76
+ } );
77
+ }
@@ -45,6 +45,7 @@ const STYLE_PATH_TO_CSS_VAR_INFIX = {
45
45
  'elements.button.color.background': 'color',
46
46
  'elements.button.typography.fontFamily': 'font-family',
47
47
  'elements.button.typography.fontSize': 'font-size',
48
+ 'elements.caption.color.text': 'color',
48
49
  'elements.heading.color': 'color',
49
50
  'elements.heading.color.background': 'color',
50
51
  'elements.heading.typography.fontFamily': 'font-family',
@@ -34,6 +34,7 @@ function EditTemplatePartMenuItem( { attributes } ) {
34
34
  {
35
35
  postId: templatePart?.id,
36
36
  postType: templatePart?.type,
37
+ canvas: 'edit',
37
38
  },
38
39
  {
39
40
  fromTemplateId: params.postId,
package/src/index.js CHANGED
@@ -67,6 +67,7 @@ export function initializeEditor( id, settings ) {
67
67
  welcomeGuide: true,
68
68
  welcomeGuideStyles: true,
69
69
  showListViewByDefault: false,
70
+ showBlockBreadcrumbs: true,
70
71
  } );
71
72
 
72
73
  dispatch( interfaceStore ).setDefaultComplementaryArea(
@@ -39,13 +39,14 @@ export const __unstableGetPreference = createRegistrySelector(
39
39
  /**
40
40
  * Returns whether the given feature is enabled or not.
41
41
  *
42
+ * @deprecated
42
43
  * @param {Object} state Global application state.
43
44
  * @param {string} featureName Feature slug.
44
45
  *
45
46
  * @return {boolean} Is active.
46
47
  */
47
48
  export function isFeatureActive( state, featureName ) {
48
- deprecated( `select( 'core/interface' ).isFeatureActive`, {
49
+ deprecated( `select( 'core/edit-site' ).isFeatureActive`, {
49
50
  since: '6.0',
50
51
  alternative: `select( 'core/preferences' ).get`,
51
52
  } );
@@ -1,17 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useHasColorPanel = useHasColorPanel;
7
-
8
- var _hooks = require("./hooks");
9
-
10
- /**
11
- * Internal dependencies
12
- */
13
- function useHasColorPanel(name) {
14
- const supports = (0, _hooks.useSupportedStyles)(name);
15
- return supports.includes('color') || supports.includes('backgroundColor') || supports.includes('background') || supports.includes('linkColor');
16
- }
17
- //# sourceMappingURL=color-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["@wordpress/edit-site/src/components/global-styles/color-utils.js"],"names":["useHasColorPanel","name","supports","includes"],"mappings":";;;;;;;AAGA;;AAHA;AACA;AACA;AAGO,SAASA,gBAAT,CAA2BC,IAA3B,EAAkC;AACxC,QAAMC,QAAQ,GAAG,+BAAoBD,IAApB,CAAjB;AACA,SACCC,QAAQ,CAACC,QAAT,CAAmB,OAAnB,KACAD,QAAQ,CAACC,QAAT,CAAmB,iBAAnB,CADA,IAEAD,QAAQ,CAACC,QAAT,CAAmB,YAAnB,CAFA,IAGAD,QAAQ,CAACC,QAAT,CAAmB,WAAnB,CAJD;AAMA","sourcesContent":["/**\n * Internal dependencies\n */\nimport { useSupportedStyles } from './hooks';\n\nexport function useHasColorPanel( name ) {\n\tconst supports = useSupportedStyles( name );\n\treturn (\n\t\tsupports.includes( 'color' ) ||\n\t\tsupports.includes( 'backgroundColor' ) ||\n\t\tsupports.includes( 'background' ) ||\n\t\tsupports.includes( 'linkColor' )\n\t);\n}\n"]}