@wordpress/edit-site 5.5.0 → 5.7.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 (310) 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 +23 -17
  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/app/index.js +4 -2
  9. package/build/components/app/index.js.map +1 -1
  10. package/build/components/block-editor/editor-canvas.js +7 -9
  11. package/build/components/block-editor/editor-canvas.js.map +1 -1
  12. package/build/components/editor/index.js +2 -4
  13. package/build/components/editor/index.js.map +1 -1
  14. package/build/components/global-styles/border-panel.js +20 -159
  15. package/build/components/global-styles/border-panel.js.map +1 -1
  16. package/build/components/global-styles/context-menu.js +4 -6
  17. package/build/components/global-styles/context-menu.js.map +1 -1
  18. package/build/components/global-styles/hooks.js +0 -72
  19. package/build/components/global-styles/hooks.js.map +1 -1
  20. package/build/components/global-styles/preview.js +3 -4
  21. package/build/components/global-styles/preview.js.map +1 -1
  22. package/build/components/global-styles/screen-block-list.js +5 -7
  23. package/build/components/global-styles/screen-block-list.js.map +1 -1
  24. package/build/components/global-styles/screen-border.js +13 -5
  25. package/build/components/global-styles/screen-border.js.map +1 -1
  26. package/build/components/global-styles/screen-colors.js +22 -211
  27. package/build/components/global-styles/screen-colors.js.map +1 -1
  28. package/build/components/global-styles/screen-root.js +2 -1
  29. package/build/components/global-styles/screen-root.js.map +1 -1
  30. package/build/components/global-styles/screen-style-variations.js +2 -1
  31. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  32. package/build/components/global-styles/screen-typography-element.js +4 -0
  33. package/build/components/global-styles/screen-typography-element.js.map +1 -1
  34. package/build/components/global-styles/screen-typography.js +5 -0
  35. package/build/components/global-styles/screen-typography.js.map +1 -1
  36. package/build/components/global-styles/ui.js +5 -35
  37. package/build/components/global-styles/ui.js.map +1 -1
  38. package/build/components/global-styles-renderer/index.js +1 -2
  39. package/build/components/global-styles-renderer/index.js.map +1 -1
  40. package/build/components/layout/index.js +7 -0
  41. package/build/components/layout/index.js.map +1 -1
  42. package/build/components/list/added-by.js +128 -136
  43. package/build/components/list/added-by.js.map +1 -1
  44. package/build/components/list/index.js +2 -1
  45. package/build/components/list/index.js.map +1 -1
  46. package/build/components/list/table.js +6 -5
  47. package/build/components/list/table.js.map +1 -1
  48. package/build/components/routes/link.js +4 -1
  49. package/build/components/routes/link.js.map +1 -1
  50. package/build/components/save-button/index.js +2 -5
  51. package/build/components/save-button/index.js.map +1 -1
  52. package/build/components/save-hub/index.js +82 -0
  53. package/build/components/save-hub/index.js.map +1 -0
  54. package/build/components/secondary-sidebar/list-view-sidebar.js +6 -1
  55. package/build/components/secondary-sidebar/list-view-sidebar.js.map +1 -1
  56. package/build/components/sidebar/index.js +2 -4
  57. package/build/components/sidebar/index.js.map +1 -1
  58. package/build/components/sidebar-navigation-screen/index.js +5 -2
  59. package/build/components/sidebar-navigation-screen/index.js.map +1 -1
  60. package/build/components/sidebar-navigation-screen-main/index.js +13 -13
  61. package/build/components/sidebar-navigation-screen-main/index.js.map +1 -1
  62. package/build/components/sidebar-navigation-screen-navigation-item/index.js +9 -14
  63. package/build/components/sidebar-navigation-screen-navigation-item/index.js.map +1 -1
  64. package/build/components/sidebar-navigation-screen-navigation-menus/index.js +87 -10
  65. package/build/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -1
  66. package/build/components/sidebar-navigation-screen-navigation-menus/loader.js +19 -0
  67. package/build/components/sidebar-navigation-screen-navigation-menus/loader.js.map +1 -0
  68. package/build/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js +77 -0
  69. package/build/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js.map +1 -0
  70. package/build/components/sidebar-navigation-screen-template/index.js +59 -10
  71. package/build/components/sidebar-navigation-screen-template/index.js.map +1 -1
  72. package/build/components/sidebar-navigation-screen-templates/index.js +5 -2
  73. package/build/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  74. package/build/components/sidebar-navigation-screen-templates-browse/index.js +6 -3
  75. package/build/components/sidebar-navigation-screen-templates-browse/index.js.map +1 -1
  76. package/build/components/site-hub/index.js +3 -1
  77. package/build/components/site-hub/index.js.map +1 -1
  78. package/build/components/start-template-options/index.js +44 -9
  79. package/build/components/start-template-options/index.js.map +1 -1
  80. package/build/components/style-book/index.js +133 -19
  81. package/build/components/style-book/index.js.map +1 -1
  82. package/build/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +24 -8
  83. package/build/components/sync-state-with-url/use-sync-canvas-mode-with-url.js.map +1 -1
  84. package/build/components/sync-state-with-url/use-sync-path-with-url.js +9 -7
  85. package/build/components/sync-state-with-url/use-sync-path-with-url.js.map +1 -1
  86. package/build/components/template-details/index.js +0 -3
  87. package/build/components/template-details/index.js.map +1 -1
  88. package/build/components/template-part-converter/convert-to-regular.js +8 -12
  89. package/build/components/template-part-converter/convert-to-regular.js.map +1 -1
  90. package/build/components/template-part-converter/convert-to-template-part.js +2 -2
  91. package/build/components/template-part-converter/convert-to-template-part.js.map +1 -1
  92. package/build/components/template-part-converter/index.js +19 -14
  93. package/build/components/template-part-converter/index.js.map +1 -1
  94. package/build/components/use-edited-entity-record/index.js +6 -6
  95. package/build/components/use-edited-entity-record/index.js.map +1 -1
  96. package/build/hooks/push-changes-to-global-styles/index.js +1 -0
  97. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  98. package/build/index.js +3 -0
  99. package/build/index.js.map +1 -1
  100. package/build/utils/history.js +8 -2
  101. package/build/utils/history.js.map +1 -1
  102. package/build-module/components/add-new-template/new-template-part.js +3 -9
  103. package/build-module/components/add-new-template/new-template-part.js.map +1 -1
  104. package/build-module/components/add-new-template/new-template.js +25 -18
  105. package/build-module/components/add-new-template/new-template.js.map +1 -1
  106. package/build-module/components/add-new-template/utils.js +1 -1
  107. package/build-module/components/add-new-template/utils.js.map +1 -1
  108. package/build-module/components/app/index.js +3 -2
  109. package/build-module/components/app/index.js.map +1 -1
  110. package/build-module/components/block-editor/editor-canvas.js +8 -10
  111. package/build-module/components/block-editor/editor-canvas.js.map +1 -1
  112. package/build-module/components/editor/index.js +2 -3
  113. package/build-module/components/editor/index.js.map +1 -1
  114. package/build-module/components/global-styles/border-panel.js +21 -157
  115. package/build-module/components/global-styles/border-panel.js.map +1 -1
  116. package/build-module/components/global-styles/context-menu.js +4 -4
  117. package/build-module/components/global-styles/context-menu.js.map +1 -1
  118. package/build-module/components/global-styles/hooks.js +0 -66
  119. package/build-module/components/global-styles/hooks.js.map +1 -1
  120. package/build-module/components/global-styles/preview.js +3 -4
  121. package/build-module/components/global-styles/preview.js.map +1 -1
  122. package/build-module/components/global-styles/screen-block-list.js +5 -5
  123. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  124. package/build-module/components/global-styles/screen-border.js +11 -2
  125. package/build-module/components/global-styles/screen-border.js.map +1 -1
  126. package/build-module/components/global-styles/screen-colors.js +23 -208
  127. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  128. package/build-module/components/global-styles/screen-root.js +2 -1
  129. package/build-module/components/global-styles/screen-root.js.map +1 -1
  130. package/build-module/components/global-styles/screen-style-variations.js +2 -1
  131. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  132. package/build-module/components/global-styles/screen-typography-element.js +4 -0
  133. package/build-module/components/global-styles/screen-typography-element.js.map +1 -1
  134. package/build-module/components/global-styles/screen-typography.js +5 -0
  135. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  136. package/build-module/components/global-styles/ui.js +5 -30
  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/layout/index.js +7 -0
  141. package/build-module/components/layout/index.js.map +1 -1
  142. package/build-module/components/list/added-by.js +126 -137
  143. package/build-module/components/list/added-by.js.map +1 -1
  144. package/build-module/components/list/index.js +2 -1
  145. package/build-module/components/list/index.js.map +1 -1
  146. package/build-module/components/list/table.js +6 -5
  147. package/build-module/components/list/table.js.map +1 -1
  148. package/build-module/components/routes/link.js +5 -2
  149. package/build-module/components/routes/link.js.map +1 -1
  150. package/build-module/components/save-button/index.js +2 -5
  151. package/build-module/components/save-button/index.js.map +1 -1
  152. package/build-module/components/save-hub/index.js +68 -0
  153. package/build-module/components/save-hub/index.js.map +1 -0
  154. package/build-module/components/secondary-sidebar/list-view-sidebar.js +6 -2
  155. package/build-module/components/secondary-sidebar/list-view-sidebar.js.map +1 -1
  156. package/build-module/components/sidebar/index.js +2 -4
  157. package/build-module/components/sidebar/index.js.map +1 -1
  158. package/build-module/components/sidebar-navigation-screen/index.js +5 -2
  159. package/build-module/components/sidebar-navigation-screen/index.js.map +1 -1
  160. package/build-module/components/sidebar-navigation-screen-main/index.js +13 -13
  161. package/build-module/components/sidebar-navigation-screen-main/index.js.map +1 -1
  162. package/build-module/components/sidebar-navigation-screen-navigation-item/index.js +13 -18
  163. package/build-module/components/sidebar-navigation-screen-navigation-item/index.js.map +1 -1
  164. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js +81 -10
  165. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -1
  166. package/build-module/components/sidebar-navigation-screen-navigation-menus/loader.js +11 -0
  167. package/build-module/components/sidebar-navigation-screen-navigation-menus/loader.js.map +1 -0
  168. package/build-module/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js +66 -0
  169. package/build-module/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js.map +1 -0
  170. package/build-module/components/sidebar-navigation-screen-template/index.js +60 -13
  171. package/build-module/components/sidebar-navigation-screen-template/index.js.map +1 -1
  172. package/build-module/components/sidebar-navigation-screen-templates/index.js +5 -2
  173. package/build-module/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  174. package/build-module/components/sidebar-navigation-screen-templates-browse/index.js +6 -3
  175. package/build-module/components/sidebar-navigation-screen-templates-browse/index.js.map +1 -1
  176. package/build-module/components/site-hub/index.js +3 -1
  177. package/build-module/components/site-hub/index.js.map +1 -1
  178. package/build-module/components/start-template-options/index.js +45 -10
  179. package/build-module/components/start-template-options/index.js.map +1 -1
  180. package/build-module/components/style-book/index.js +133 -21
  181. package/build-module/components/style-book/index.js.map +1 -1
  182. package/build-module/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +24 -8
  183. package/build-module/components/sync-state-with-url/use-sync-canvas-mode-with-url.js.map +1 -1
  184. package/build-module/components/sync-state-with-url/use-sync-path-with-url.js +9 -7
  185. package/build-module/components/sync-state-with-url/use-sync-path-with-url.js.map +1 -1
  186. package/build-module/components/template-details/index.js +0 -3
  187. package/build-module/components/template-details/index.js.map +1 -1
  188. package/build-module/components/template-part-converter/convert-to-regular.js +9 -13
  189. package/build-module/components/template-part-converter/convert-to-regular.js.map +1 -1
  190. package/build-module/components/template-part-converter/convert-to-template-part.js +3 -3
  191. package/build-module/components/template-part-converter/convert-to-template-part.js.map +1 -1
  192. package/build-module/components/template-part-converter/index.js +20 -15
  193. package/build-module/components/template-part-converter/index.js.map +1 -1
  194. package/build-module/components/use-edited-entity-record/index.js +6 -6
  195. package/build-module/components/use-edited-entity-record/index.js.map +1 -1
  196. package/build-module/hooks/push-changes-to-global-styles/index.js +1 -0
  197. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  198. package/build-module/index.js +4 -1
  199. package/build-module/index.js.map +1 -1
  200. package/build-module/utils/history.js +9 -3
  201. package/build-module/utils/history.js.map +1 -1
  202. package/build-style/style-rtl.css +172 -128
  203. package/build-style/style.css +172 -128
  204. package/package.json +31 -31
  205. package/src/components/add-new-template/new-template-part.js +1 -6
  206. package/src/components/add-new-template/new-template.js +60 -38
  207. package/src/components/add-new-template/style.scss +12 -1
  208. package/src/components/add-new-template/utils.js +1 -1
  209. package/src/components/app/index.js +9 -6
  210. package/src/components/block-editor/editor-canvas.js +13 -22
  211. package/src/components/editor/index.js +61 -65
  212. package/src/components/global-styles/border-panel.js +24 -199
  213. package/src/components/global-styles/context-menu.js +4 -4
  214. package/src/components/global-styles/hooks.js +0 -101
  215. package/src/components/global-styles/preview.js +1 -1
  216. package/src/components/global-styles/screen-block-list.js +4 -4
  217. package/src/components/global-styles/screen-border.js +9 -2
  218. package/src/components/global-styles/screen-colors.js +25 -229
  219. package/src/components/global-styles/screen-root.js +1 -1
  220. package/src/components/global-styles/screen-style-variations.js +5 -1
  221. package/src/components/global-styles/screen-typography-element.js +4 -0
  222. package/src/components/global-styles/screen-typography.js +6 -0
  223. package/src/components/global-styles/stories/index.js +425 -0
  224. package/src/components/global-styles/style.scss +14 -18
  225. package/src/components/global-styles/ui.js +6 -31
  226. package/src/components/global-styles-renderer/index.js +1 -2
  227. package/src/components/layout/index.js +15 -0
  228. package/src/components/layout/style.scss +1 -3
  229. package/src/components/list/added-by.js +144 -140
  230. package/src/components/list/index.js +3 -1
  231. package/src/components/list/table.js +7 -4
  232. package/src/components/routes/link.js +9 -2
  233. package/src/components/save-button/index.js +2 -2
  234. package/src/components/save-hub/index.js +78 -0
  235. package/src/components/save-hub/style.scss +15 -0
  236. package/src/components/secondary-sidebar/list-view-sidebar.js +4 -3
  237. package/src/components/sidebar/index.js +2 -3
  238. package/src/components/sidebar/style.scss +4 -3
  239. package/src/components/sidebar-button/style.scss +2 -1
  240. package/src/components/sidebar-navigation-item/style.scss +1 -23
  241. package/src/components/sidebar-navigation-screen/index.js +6 -0
  242. package/src/components/sidebar-navigation-screen/style.scss +15 -0
  243. package/src/components/sidebar-navigation-screen-main/index.js +21 -8
  244. package/src/components/sidebar-navigation-screen-navigation-item/index.js +30 -21
  245. package/src/components/sidebar-navigation-screen-navigation-menus/index.js +92 -9
  246. package/src/components/sidebar-navigation-screen-navigation-menus/loader.js +9 -0
  247. package/src/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js +78 -0
  248. package/src/components/sidebar-navigation-screen-navigation-menus/style.scss +108 -1
  249. package/src/components/sidebar-navigation-screen-template/index.js +82 -11
  250. package/src/components/sidebar-navigation-screen-template/style.scss +25 -0
  251. package/src/components/sidebar-navigation-screen-templates/index.js +7 -0
  252. package/src/components/sidebar-navigation-screen-templates-browse/index.js +12 -1
  253. package/src/components/site-hub/index.js +5 -1
  254. package/src/components/site-hub/style.scss +5 -1
  255. package/src/components/start-template-options/index.js +40 -8
  256. package/src/components/style-book/index.js +203 -54
  257. package/src/components/style-book/style.scss +2 -46
  258. package/src/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +38 -8
  259. package/src/components/sync-state-with-url/use-sync-path-with-url.js +12 -7
  260. package/src/components/template-details/index.js +0 -3
  261. package/src/components/template-part-converter/convert-to-regular.js +10 -17
  262. package/src/components/template-part-converter/convert-to-template-part.js +9 -16
  263. package/src/components/template-part-converter/index.js +28 -12
  264. package/src/components/use-edited-entity-record/index.js +26 -18
  265. package/src/hooks/push-changes-to-global-styles/index.js +1 -0
  266. package/src/index.js +5 -1
  267. package/src/store/test/actions.js +0 -2
  268. package/src/style.scss +2 -1
  269. package/src/utils/history.js +13 -9
  270. package/build/components/global-styles/color-utils.js +0 -17
  271. package/build/components/global-styles/color-utils.js.map +0 -1
  272. package/build/components/global-styles/screen-background-color.js +0 -114
  273. package/build/components/global-styles/screen-background-color.js.map +0 -1
  274. package/build/components/global-styles/screen-button-color.js +0 -88
  275. package/build/components/global-styles/screen-button-color.js.map +0 -1
  276. package/build/components/global-styles/screen-heading-color.js +0 -165
  277. package/build/components/global-styles/screen-heading-color.js.map +0 -1
  278. package/build/components/global-styles/screen-link-color.js +0 -105
  279. package/build/components/global-styles/screen-link-color.js.map +0 -1
  280. package/build/components/global-styles/screen-text-color.js +0 -71
  281. package/build/components/global-styles/screen-text-color.js.map +0 -1
  282. package/build/components/navigation-inspector/index.js +0 -161
  283. package/build/components/navigation-inspector/index.js.map +0 -1
  284. package/build/components/navigation-inspector/navigation-menu.js +0 -79
  285. package/build/components/navigation-inspector/navigation-menu.js.map +0 -1
  286. package/build-module/components/global-styles/color-utils.js +0 -9
  287. package/build-module/components/global-styles/color-utils.js.map +0 -1
  288. package/build-module/components/global-styles/screen-background-color.js +0 -97
  289. package/build-module/components/global-styles/screen-background-color.js.map +0 -1
  290. package/build-module/components/global-styles/screen-button-color.js +0 -73
  291. package/build-module/components/global-styles/screen-button-color.js.map +0 -1
  292. package/build-module/components/global-styles/screen-heading-color.js +0 -149
  293. package/build-module/components/global-styles/screen-heading-color.js.map +0 -1
  294. package/build-module/components/global-styles/screen-link-color.js +0 -89
  295. package/build-module/components/global-styles/screen-link-color.js.map +0 -1
  296. package/build-module/components/global-styles/screen-text-color.js +0 -56
  297. package/build-module/components/global-styles/screen-text-color.js.map +0 -1
  298. package/build-module/components/navigation-inspector/index.js +0 -146
  299. package/build-module/components/navigation-inspector/index.js.map +0 -1
  300. package/build-module/components/navigation-inspector/navigation-menu.js +0 -69
  301. package/build-module/components/navigation-inspector/navigation-menu.js.map +0 -1
  302. package/src/components/global-styles/color-utils.js +0 -14
  303. package/src/components/global-styles/screen-background-color.js +0 -132
  304. package/src/components/global-styles/screen-button-color.js +0 -104
  305. package/src/components/global-styles/screen-heading-color.js +0 -206
  306. package/src/components/global-styles/screen-link-color.js +0 -124
  307. package/src/components/global-styles/screen-text-color.js +0 -62
  308. package/src/components/navigation-inspector/index.js +0 -191
  309. package/src/components/navigation-inspector/navigation-menu.js +0 -84
  310. package/src/components/navigation-inspector/style.scss +0 -46
@@ -1,3 +1,4 @@
1
+ // @ts-check
1
2
  /**
2
3
  * External dependencies
3
4
  */
@@ -6,7 +7,7 @@ import classnames from 'classnames';
6
7
  /**
7
8
  * WordPress dependencies
8
9
  */
9
- import { __experimentalHStack as HStack, Icon } from '@wordpress/components';
10
+ import { Icon, __experimentalHStack as HStack } from '@wordpress/components';
10
11
  import { store as coreStore } from '@wordpress/core-data';
11
12
  import { useSelect } from '@wordpress/data';
12
13
  import { useState } from '@wordpress/element';
@@ -18,25 +19,154 @@ import {
18
19
  } from '@wordpress/icons';
19
20
  import { _x } from '@wordpress/i18n';
20
21
 
22
+ /** @typedef {'wp_template'|'wp_template_part'} TemplateType */
23
+
24
+ /** @type {TemplateType} */
21
25
  const TEMPLATE_POST_TYPE_NAMES = [ 'wp_template', 'wp_template_part' ];
22
26
 
23
- function BaseAddedBy( { text, icon, imageUrl, isCustomized, templateType } ) {
27
+ /**
28
+ * @typedef {'theme'|'plugin'|'site'|'user'} AddedByType
29
+ *
30
+ * @typedef AddedByData
31
+ * @type {Object}
32
+ * @property {AddedByType} type The type of the data.
33
+ * @property {JSX.Element} icon The icon to display.
34
+ * @property {string} [imageUrl] The optional image URL to display.
35
+ * @property {string} [text] The text to display.
36
+ * @property {boolean} isCustomized Whether the template has been customized.
37
+ *
38
+ * @param {TemplateType} postType The template post type.
39
+ * @param {number} postId The template post id.
40
+ * @return {AddedByData} The added by object or null.
41
+ */
42
+ export function useAddedBy( postType, postId ) {
43
+ return useSelect(
44
+ ( select ) => {
45
+ const {
46
+ getTheme,
47
+ getPlugin,
48
+ getEntityRecord,
49
+ getMedia,
50
+ getUser,
51
+ getEditedEntityRecord,
52
+ } = select( coreStore );
53
+ const template = getEditedEntityRecord(
54
+ 'postType',
55
+ postType,
56
+ postId
57
+ );
58
+
59
+ if ( TEMPLATE_POST_TYPE_NAMES.includes( template.type ) ) {
60
+ // Added by theme.
61
+ // Template originally provided by a theme, but customized by a user.
62
+ // Templates originally didn't have the 'origin' field so identify
63
+ // older customized templates by checking for no origin and a 'theme'
64
+ // or 'custom' source.
65
+ if (
66
+ template.has_theme_file &&
67
+ ( template.origin === 'theme' ||
68
+ ( ! template.origin &&
69
+ [ 'theme', 'custom' ].includes(
70
+ template.source
71
+ ) ) )
72
+ ) {
73
+ return {
74
+ type: 'theme',
75
+ icon: themeIcon,
76
+ text:
77
+ getTheme( template.theme )?.name?.rendered ||
78
+ template.theme,
79
+ isCustomized: template.source === 'custom',
80
+ };
81
+ }
82
+
83
+ // Added by plugin.
84
+ if ( template.has_theme_file && template.origin === 'plugin' ) {
85
+ return {
86
+ type: 'plugin',
87
+ icon: pluginIcon,
88
+ text:
89
+ getPlugin( template.theme )?.name || template.theme,
90
+ isCustomized: template.source === 'custom',
91
+ };
92
+ }
93
+
94
+ // Added by site.
95
+ // Template was created from scratch, but has no author. Author support
96
+ // was only added to templates in WordPress 5.9. Fallback to showing the
97
+ // site logo and title.
98
+ if (
99
+ ! template.has_theme_file &&
100
+ template.source === 'custom' &&
101
+ ! template.author
102
+ ) {
103
+ const siteData = getEntityRecord(
104
+ 'root',
105
+ '__unstableBase'
106
+ );
107
+ return {
108
+ type: 'site',
109
+ icon: globeIcon,
110
+ imageUrl: siteData?.site_logo
111
+ ? getMedia( siteData.site_logo )?.source_url
112
+ : undefined,
113
+ text: siteData?.name,
114
+ isCustomized: false,
115
+ };
116
+ }
117
+ }
118
+
119
+ // Added by user.
120
+ const user = getUser( template.author );
121
+ return {
122
+ type: 'user',
123
+ icon: authorIcon,
124
+ imageUrl: user?.avatar_urls?.[ 48 ],
125
+ text: user?.nickname,
126
+ isCustomized: false,
127
+ };
128
+ },
129
+ [ postType, postId ]
130
+ );
131
+ }
132
+
133
+ /**
134
+ * @param {Object} props
135
+ * @param {string} props.imageUrl
136
+ */
137
+ function AvatarImage( { imageUrl } ) {
24
138
  const [ isImageLoaded, setIsImageLoaded ] = useState( false );
25
139
 
140
+ return (
141
+ <div
142
+ className={ classnames( 'edit-site-list-added-by__avatar', {
143
+ 'is-loaded': isImageLoaded,
144
+ } ) }
145
+ >
146
+ <img
147
+ onLoad={ () => setIsImageLoaded( true ) }
148
+ alt=""
149
+ src={ imageUrl }
150
+ />
151
+ </div>
152
+ );
153
+ }
154
+
155
+ /**
156
+ * @param {Object} props
157
+ * @param {TemplateType} props.postType The template post type.
158
+ * @param {number} props.postId The template post id.
159
+ */
160
+ export default function AddedBy( { postType, postId } ) {
161
+ const { text, icon, imageUrl, isCustomized } = useAddedBy(
162
+ postType,
163
+ postId
164
+ );
165
+
26
166
  return (
27
167
  <HStack alignment="left">
28
168
  { imageUrl ? (
29
- <div
30
- className={ classnames( 'edit-site-list-added-by__avatar', {
31
- 'is-loaded': isImageLoaded,
32
- } ) }
33
- >
34
- <img
35
- onLoad={ () => setIsImageLoaded( true ) }
36
- alt=""
37
- src={ imageUrl }
38
- />
39
- </div>
169
+ <AvatarImage imageUrl={ imageUrl } />
40
170
  ) : (
41
171
  <div className="edit-site-list-added-by__icon">
42
172
  <Icon icon={ icon } />
@@ -46,7 +176,7 @@ function BaseAddedBy( { text, icon, imageUrl, isCustomized, templateType } ) {
46
176
  { text }
47
177
  { isCustomized && (
48
178
  <span className="edit-site-list-added-by__customized-info">
49
- { templateType === 'wp_template'
179
+ { postType === 'wp_template'
50
180
  ? _x( 'Customized', 'template' )
51
181
  : _x( 'Customized', 'template part' ) }
52
182
  </span>
@@ -55,129 +185,3 @@ function BaseAddedBy( { text, icon, imageUrl, isCustomized, templateType } ) {
55
185
  </HStack>
56
186
  );
57
187
  }
58
-
59
- function AddedByTheme( { slug, isCustomized, templateType } ) {
60
- const theme = useSelect(
61
- ( select ) => select( coreStore ).getTheme( slug ),
62
- [ slug ]
63
- );
64
-
65
- return (
66
- <BaseAddedBy
67
- icon={ themeIcon }
68
- text={ theme?.name?.rendered || slug }
69
- isCustomized={ isCustomized }
70
- templateType={ templateType }
71
- />
72
- );
73
- }
74
-
75
- function AddedByPlugin( { slug, isCustomized, templateType } ) {
76
- const plugin = useSelect(
77
- ( select ) => select( coreStore ).getPlugin( slug ),
78
- [ slug ]
79
- );
80
-
81
- return (
82
- <BaseAddedBy
83
- icon={ pluginIcon }
84
- text={ plugin?.name || slug }
85
- isCustomized={ isCustomized }
86
- templateType={ templateType }
87
- />
88
- );
89
- }
90
-
91
- function AddedByAuthor( { id, templateType } ) {
92
- const user = useSelect(
93
- ( select ) => select( coreStore ).getUser( id ),
94
- [ id ]
95
- );
96
-
97
- return (
98
- <BaseAddedBy
99
- icon={ authorIcon }
100
- imageUrl={ user?.avatar_urls?.[ 48 ] }
101
- text={ user?.nickname }
102
- templateType={ templateType }
103
- />
104
- );
105
- }
106
-
107
- function AddedBySite( { templateType } ) {
108
- const { name, logoURL } = useSelect( ( select ) => {
109
- const { getEntityRecord, getMedia } = select( coreStore );
110
- const siteData = getEntityRecord( 'root', '__unstableBase' );
111
-
112
- return {
113
- name: siteData?.name,
114
- logoURL: siteData?.site_logo
115
- ? getMedia( siteData.site_logo )?.source_url
116
- : undefined,
117
- };
118
- }, [] );
119
-
120
- return (
121
- <BaseAddedBy
122
- icon={ globeIcon }
123
- imageUrl={ logoURL }
124
- text={ name }
125
- templateType={ templateType }
126
- />
127
- );
128
- }
129
-
130
- export default function AddedBy( { templateType, template } ) {
131
- if ( ! template ) {
132
- return;
133
- }
134
-
135
- if ( TEMPLATE_POST_TYPE_NAMES.includes( templateType ) ) {
136
- // Template originally provided by a theme, but customized by a user.
137
- // Templates originally didn't have the 'origin' field so identify
138
- // older customized templates by checking for no origin and a 'theme'
139
- // or 'custom' source.
140
- if (
141
- template.has_theme_file &&
142
- ( template.origin === 'theme' ||
143
- ( ! template.origin &&
144
- [ 'theme', 'custom' ].includes( template.source ) ) )
145
- ) {
146
- return (
147
- <AddedByTheme
148
- slug={ template.theme }
149
- isCustomized={ template.source === 'custom' }
150
- templateType={ templateType }
151
- />
152
- );
153
- }
154
-
155
- // Template originally provided by a plugin, but customized by a user.
156
- if ( template.has_theme_file && template.origin === 'plugin' ) {
157
- return (
158
- <AddedByPlugin
159
- slug={ template.theme }
160
- isCustomized={ template.source === 'custom' }
161
- templateType={ templateType }
162
- />
163
- );
164
- }
165
-
166
- // Template was created from scratch, but has no author. Author support
167
- // was only added to templates in WordPress 5.9. Fallback to showing the
168
- // site logo and title.
169
- if (
170
- ! template.has_theme_file &&
171
- template.source === 'custom' &&
172
- ! template.author
173
- ) {
174
- return <AddedBySite templateType={ templateType } />;
175
- }
176
- }
177
-
178
- // Simply show the author for templates created from scratch that have an
179
- // author or for any other post type.
180
- return (
181
- <AddedByAuthor id={ template.author } templateType={ templateType } />
182
- );
183
- }
@@ -19,8 +19,10 @@ import useTitle from '../routes/use-title';
19
19
 
20
20
  export default function List() {
21
21
  const {
22
- params: { postType: templateType },
22
+ params: { path },
23
23
  } = useLocation();
24
+ const templateType =
25
+ path === '/wp_template/all' ? 'wp_template' : 'wp_template_part';
24
26
 
25
27
  useRegisterShortcuts();
26
28
 
@@ -89,6 +89,7 @@ export default function Table( { templateType } ) {
89
89
  params={ {
90
90
  postId: template.id,
91
91
  postType: template.type,
92
+ canvas: 'edit',
92
93
  } }
93
94
  >
94
95
  { decodeEntities(
@@ -101,10 +102,12 @@ export default function Table( { templateType } ) {
101
102
  </td>
102
103
 
103
104
  <td className="edit-site-list-table-column" role="cell">
104
- <AddedBy
105
- templateType={ templateType }
106
- template={ template }
107
- />
105
+ { template ? (
106
+ <AddedBy
107
+ postType={ template.type }
108
+ postId={ template.id }
109
+ />
110
+ ) : null }
108
111
  </td>
109
112
  <td className="edit-site-list-table-column" role="cell">
110
113
  <Actions template={ template } />
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { addQueryArgs } from '@wordpress/url';
4
+ import { addQueryArgs, getQueryArgs, removeQueryArgs } from '@wordpress/url';
5
5
 
6
6
  /**
7
7
  * Internal dependencies
@@ -21,8 +21,15 @@ export function useLink( params = {}, state, shouldReplace = false ) {
21
21
  }
22
22
  }
23
23
 
24
+ const currentArgs = getQueryArgs( window.location.href );
25
+ const currentUrlWithoutArgs = removeQueryArgs(
26
+ window.location.href,
27
+ ...Object.keys( currentArgs )
28
+ );
29
+ const newUrl = addQueryArgs( currentUrlWithoutArgs, params );
30
+
24
31
  return {
25
- href: addQueryArgs( window.location.href, params ),
32
+ href: newUrl,
26
33
  onClick,
27
34
  };
28
35
  }
@@ -12,7 +12,7 @@ import { displayShortcut } from '@wordpress/keycodes';
12
12
  */
13
13
  import { store as editSiteStore } from '../../store';
14
14
 
15
- export default function SaveButton( { showTooltip = true } ) {
15
+ export default function SaveButton() {
16
16
  const { isDirty, isSaving, isSaveViewOpen } = useSelect( ( select ) => {
17
17
  const { __experimentalGetDirtyEntityRecords, isSavingEntityRecord } =
18
18
  select( coreStore );
@@ -52,7 +52,7 @@ export default function SaveButton( { showTooltip = true } ) {
52
52
  * of the button that we want to avoid. By setting `showTooltip`,
53
53
  & the tooltip is always rendered even when there's no keyboard shortcut.
54
54
  */
55
- showTooltip={ showTooltip }
55
+ showTooltip
56
56
  >
57
57
  { label }
58
58
  </Button>
@@ -0,0 +1,78 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useSelect, useDispatch } from '@wordpress/data';
5
+ import { Button, __experimentalHStack as HStack } from '@wordpress/components';
6
+ import { sprintf, __, _n } from '@wordpress/i18n';
7
+ import { store as coreStore } from '@wordpress/core-data';
8
+ import { displayShortcut } from '@wordpress/keycodes';
9
+ import { check } from '@wordpress/icons';
10
+
11
+ /**
12
+ * Internal dependencies
13
+ */
14
+ import { store as editSiteStore } from '../../store';
15
+
16
+ export default function SaveButton() {
17
+ const { countUnsavedChanges, isDirty, isSaving, isSaveViewOpen } =
18
+ useSelect( ( select ) => {
19
+ const {
20
+ __experimentalGetDirtyEntityRecords,
21
+ isSavingEntityRecord,
22
+ } = select( coreStore );
23
+ const dirtyEntityRecords = __experimentalGetDirtyEntityRecords();
24
+ const { isSaveViewOpened } = select( editSiteStore );
25
+ return {
26
+ isDirty: dirtyEntityRecords.length > 0,
27
+ isSaving: dirtyEntityRecords.some( ( record ) =>
28
+ isSavingEntityRecord( record.kind, record.name, record.key )
29
+ ),
30
+ isSaveViewOpen: isSaveViewOpened(),
31
+ countUnsavedChanges: dirtyEntityRecords.length,
32
+ };
33
+ }, [] );
34
+ const { setIsSaveViewOpened } = useDispatch( editSiteStore );
35
+
36
+ const disabled = ! isDirty || isSaving;
37
+
38
+ const label = disabled ? __( 'Saved' ) : __( 'Save' );
39
+
40
+ return (
41
+ <HStack className="edit-site-save-hub" alignment="right" spacing={ 4 }>
42
+ { isDirty && (
43
+ <span>
44
+ { sprintf(
45
+ // translators: %d: number of unsaved changes (number).
46
+ _n(
47
+ '%d unsaved change',
48
+ '%d unsaved changes',
49
+ countUnsavedChanges
50
+ ),
51
+ countUnsavedChanges
52
+ ) }
53
+ </span>
54
+ ) }
55
+ <Button
56
+ className="edit-site-save-hub__button"
57
+ variant={ disabled ? undefined : 'primary' }
58
+ aria-disabled={ disabled }
59
+ aria-expanded={ isSaveViewOpen }
60
+ isBusy={ isSaving }
61
+ onClick={
62
+ disabled ? undefined : () => setIsSaveViewOpened( true )
63
+ }
64
+ label={ label }
65
+ /*
66
+ * We want the tooltip to show the keyboard shortcut only when the
67
+ * button does something, i.e. when it's not disabled.
68
+ */
69
+ shortcut={
70
+ disabled ? undefined : displayShortcut.primary( 's' )
71
+ }
72
+ icon={ disabled ? check : undefined }
73
+ >
74
+ { label }
75
+ </Button>
76
+ </HStack>
77
+ );
78
+ }
@@ -0,0 +1,15 @@
1
+ .edit-site-save-hub {
2
+ color: $gray-600;
3
+ }
4
+
5
+ .edit-site-save-hub__button {
6
+ color: inherit;
7
+
8
+ &[aria-disabled="true"] {
9
+ opacity: 1;
10
+ }
11
+
12
+ &[aria-disabled="true"]:hover {
13
+ color: inherit;
14
+ }
15
+ }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { __experimentalListView as ListView } from '@wordpress/block-editor';
4
+ import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
5
5
  import { Button } from '@wordpress/components';
6
6
  import {
7
7
  useFocusOnMount,
@@ -18,6 +18,7 @@ import { ESCAPE } from '@wordpress/keycodes';
18
18
  * Internal dependencies
19
19
  */
20
20
  import { store as editSiteStore } from '../../store';
21
+ import { unlock } from '../../private-apis';
21
22
 
22
23
  export default function ListViewSidebar() {
23
24
  const { setIsListViewOpened } = useDispatch( editSiteStore );
@@ -33,7 +34,7 @@ export default function ListViewSidebar() {
33
34
 
34
35
  const instanceId = useInstanceId( ListViewSidebar );
35
36
  const labelId = `edit-site-editor__list-view-panel-label-${ instanceId }`;
36
-
37
+ const { PrivateListView } = unlock( blockEditorPrivateApis );
37
38
  return (
38
39
  // eslint-disable-next-line jsx-a11y/no-static-element-interactions
39
40
  <div
@@ -59,7 +60,7 @@ export default function ListViewSidebar() {
59
60
  focusOnMountRef,
60
61
  ] ) }
61
62
  >
62
- <ListView />
63
+ <PrivateListView />
63
64
  </div>
64
65
  </div>
65
66
  );
@@ -18,7 +18,7 @@ import useSyncPathWithURL, {
18
18
  } from '../sync-state-with-url/use-sync-path-with-url';
19
19
  import SidebarNavigationScreenNavigationMenus from '../sidebar-navigation-screen-navigation-menus';
20
20
  import SidebarNavigationScreenTemplatesBrowse from '../sidebar-navigation-screen-templates-browse';
21
- import SaveButton from '../save-button';
21
+ import SaveHub from '../save-hub';
22
22
  import SidebarNavigationScreenNavigationItem from '../sidebar-navigation-screen-navigation-item';
23
23
  import { useLocation } from '../routes';
24
24
 
@@ -61,9 +61,8 @@ function Sidebar() {
61
61
  >
62
62
  <SidebarScreens />
63
63
  </NavigatorProvider>
64
-
65
64
  <div className="edit-site-sidebar__footer">
66
- <SaveButton showTooltip={ false } />
65
+ <SaveHub />
67
66
  </div>
68
67
  </>
69
68
  );
@@ -1,7 +1,10 @@
1
1
  .edit-site-sidebar__content {
2
2
  flex-grow: 1;
3
3
  overflow-y: auto;
4
- @include custom-scrollbars-on-hover;
4
+
5
+ .components-navigator-screen {
6
+ @include custom-scrollbars-on-hover;
7
+ }
5
8
  }
6
9
 
7
10
  .edit-site-sidebar__footer {
@@ -9,8 +12,6 @@
9
12
  flex-shrink: 0;
10
13
  margin: 0 $canvas-padding;
11
14
  padding: $canvas-padding 0;
12
- display: flex;
13
- justify-content: flex-end;
14
15
  }
15
16
 
16
17
  .edit-site-sidebar__content.edit-site-sidebar__content {
@@ -17,7 +17,8 @@
17
17
  &:hover,
18
18
  &:focus-visible,
19
19
  &:focus,
20
- &:not([aria-disabled="true"]):active {
20
+ &:not([aria-disabled="true"]):active,
21
+ &[aria-expanded="true"] {
21
22
  color: $white;
22
23
  }
23
24
  }
@@ -1,13 +1,12 @@
1
1
  .edit-site-sidebar-navigation-item.components-item {
2
2
  color: $gray-600;
3
- border-width: $border-width-tab;
3
+ margin: 0 $grid-unit-05;
4
4
 
5
5
  &:hover,
6
6
  &:focus,
7
7
  &[aria-current] {
8
8
  color: $white;
9
9
  background: $gray-800;
10
- border-width: $border-width-tab;
11
10
  }
12
11
 
13
12
  &[aria-current] {
@@ -15,28 +14,7 @@
15
14
  }
16
15
  }
17
16
 
18
- .edit-site-sidebar-navigation-screen__content .edit-site-navigation-inspector .components-button {
19
- color: $gray-600;
20
- &:hover,
21
- &:focus,
22
- &[aria-current] {
23
- color: $white;
24
- }
25
- }
26
-
27
- .edit-site-sidebar-navigation-screen__content .edit-site-navigation-inspector .offcanvas-editor-list-view-leaf {
28
- &:hover,
29
- &:focus,
30
- &[aria-current] {
31
- background: $gray-800;
32
- }
33
- .block-editor-list-view-block__menu {
34
- margin-left: -$grid-unit-10;
35
- }
36
- }
37
-
38
17
  .edit-site-sidebar-navigation-screen__content .block-editor-list-view-block-select-button {
39
18
  cursor: grab;
40
- width: calc(100% - #{ $border-width-focus });
41
19
  padding: $grid-unit-10;
42
20
  }
@@ -22,6 +22,7 @@ export default function SidebarNavigationScreen( {
22
22
  title,
23
23
  actions,
24
24
  content,
25
+ description,
25
26
  } ) {
26
27
  const { dashboardLink } = useSelect( ( select ) => {
27
28
  const { getSettings } = unlock( select( editSiteStore ) );
@@ -58,6 +59,11 @@ export default function SidebarNavigationScreen( {
58
59
  </HStack>
59
60
 
60
61
  <nav className="edit-site-sidebar-navigation-screen__content">
62
+ { description && (
63
+ <p className="edit-site-sidebar-navigation-screen__description">
64
+ { description }
65
+ </p>
66
+ ) }
61
67
  { content }
62
68
  </nav>
63
69
  </VStack>
@@ -10,6 +10,21 @@
10
10
  color: $gray-600;
11
11
  }
12
12
 
13
+ .edit-site-sidebar-navigation-screen__page-link {
14
+ color: $gray-600;
15
+
16
+ &:hover,
17
+ &:focus {
18
+ color: $white;
19
+ }
20
+
21
+ .components-external-link__icon {
22
+ margin-left: $grid-unit-05;
23
+ }
24
+ margin-left: $grid-unit-20;
25
+ display: inline-block;
26
+ }
27
+
13
28
  .edit-site-sidebar-navigation-screen__title-icon {
14
29
  position: sticky;
15
30
  top: 0;