@wordpress/edit-site 5.3.1 → 5.3.3

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 (311) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/build/components/add-new-template/new-template-part.js +8 -5
  3. package/build/components/add-new-template/new-template-part.js.map +1 -1
  4. package/build/components/add-new-template/new-template.js +8 -5
  5. package/build/components/add-new-template/new-template.js.map +1 -1
  6. package/build/components/block-editor/editor-canvas.js +3 -3
  7. package/build/components/block-editor/editor-canvas.js.map +1 -1
  8. package/build/components/block-editor/index.js +3 -3
  9. package/build/components/block-editor/index.js.map +1 -1
  10. package/build/components/editor/index.js +26 -38
  11. package/build/components/editor/index.js.map +1 -1
  12. package/build/components/global-styles/block-preview-panel.js +10 -12
  13. package/build/components/global-styles/block-preview-panel.js.map +1 -1
  14. package/build/components/global-styles/border-panel.js +2 -2
  15. package/build/components/global-styles/border-panel.js.map +1 -1
  16. package/build/components/global-styles/color-palette-panel.js +2 -2
  17. package/build/components/global-styles/color-palette-panel.js.map +1 -1
  18. package/build/components/global-styles/context-menu.js +9 -2
  19. package/build/components/global-styles/context-menu.js.map +1 -1
  20. package/build/components/global-styles/custom-css.js +2 -2
  21. package/build/components/global-styles/custom-css.js.map +1 -1
  22. package/build/components/global-styles/dimensions-panel.js +2 -2
  23. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  24. package/build/components/global-styles/global-styles-provider.js +2 -2
  25. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  26. package/build/components/global-styles/gradients-palette-panel.js +2 -2
  27. package/build/components/global-styles/gradients-palette-panel.js.map +1 -1
  28. package/build/components/global-styles/header.js +1 -1
  29. package/build/components/global-styles/header.js.map +1 -1
  30. package/build/components/global-styles/hooks.js +2 -2
  31. package/build/components/global-styles/hooks.js.map +1 -1
  32. package/build/components/global-styles/navigation-button.js +1 -1
  33. package/build/components/global-styles/navigation-button.js.map +1 -1
  34. package/build/components/global-styles/palette.js +2 -2
  35. package/build/components/global-styles/palette.js.map +1 -1
  36. package/build/components/global-styles/preview.js +2 -2
  37. package/build/components/global-styles/preview.js.map +1 -1
  38. package/build/components/global-styles/screen-background-color.js +2 -2
  39. package/build/components/global-styles/screen-background-color.js.map +1 -1
  40. package/build/components/global-styles/screen-border.js +0 -6
  41. package/build/components/global-styles/screen-border.js.map +1 -1
  42. package/build/components/global-styles/screen-button-color.js +2 -2
  43. package/build/components/global-styles/screen-button-color.js.map +1 -1
  44. package/build/components/global-styles/screen-colors.js +2 -2
  45. package/build/components/global-styles/screen-colors.js.map +1 -1
  46. package/build/components/global-styles/screen-css.js +5 -5
  47. package/build/components/global-styles/screen-css.js.map +1 -1
  48. package/build/components/global-styles/screen-effects.js +53 -0
  49. package/build/components/global-styles/screen-effects.js.map +1 -0
  50. package/build/components/global-styles/screen-heading-color.js +2 -2
  51. package/build/components/global-styles/screen-heading-color.js.map +1 -1
  52. package/build/components/global-styles/screen-link-color.js +2 -2
  53. package/build/components/global-styles/screen-link-color.js.map +1 -1
  54. package/build/components/global-styles/screen-root.js +2 -2
  55. package/build/components/global-styles/screen-root.js.map +1 -1
  56. package/build/components/global-styles/screen-style-variations.js +2 -2
  57. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  58. package/build/components/global-styles/screen-text-color.js +2 -2
  59. package/build/components/global-styles/screen-text-color.js.map +1 -1
  60. package/build/components/global-styles/screen-typography.js +2 -2
  61. package/build/components/global-styles/screen-typography.js.map +1 -1
  62. package/build/components/global-styles/shadow-panel.js +3 -3
  63. package/build/components/global-styles/shadow-panel.js.map +1 -1
  64. package/build/components/global-styles/typography-panel.js +2 -2
  65. package/build/components/global-styles/typography-panel.js.map +1 -1
  66. package/build/components/global-styles/typography-preview.js +2 -2
  67. package/build/components/global-styles/typography-preview.js.map +1 -1
  68. package/build/components/global-styles/ui.js +10 -10
  69. package/build/components/global-styles/ui.js.map +1 -1
  70. package/build/components/global-styles-renderer/index.js +2 -2
  71. package/build/components/global-styles-renderer/index.js.map +1 -1
  72. package/build/components/header-edit-mode/index.js +6 -3
  73. package/build/components/header-edit-mode/index.js.map +1 -1
  74. package/build/components/keyboard-shortcut-help-modal/config.js +1 -1
  75. package/build/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  76. package/build/components/layout/index.js +13 -24
  77. package/build/components/layout/index.js.map +1 -1
  78. package/build/components/list/actions/rename-menu-item.js +1 -1
  79. package/build/components/list/actions/rename-menu-item.js.map +1 -1
  80. package/build/components/list/table.js +1 -0
  81. package/build/components/list/table.js.map +1 -1
  82. package/build/components/navigation-inspector/navigation-menu.js +2 -2
  83. package/build/components/navigation-inspector/navigation-menu.js.map +1 -1
  84. package/build/components/save-panel/index.js +78 -0
  85. package/build/components/save-panel/index.js.map +1 -0
  86. package/build/components/sidebar/index.js +42 -5
  87. package/build/components/sidebar/index.js.map +1 -1
  88. package/build/components/sidebar-navigation-screen/index.js +28 -7
  89. package/build/components/sidebar-navigation-screen/index.js.map +1 -1
  90. package/build/components/sidebar-navigation-screen-navigation-item/index.js +72 -0
  91. package/build/components/sidebar-navigation-screen-navigation-item/index.js.map +1 -0
  92. package/build/components/sidebar-navigation-screen-navigation-menus/index.js +2 -2
  93. package/build/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -1
  94. package/build/components/sidebar-navigation-screen-template/index.js +70 -0
  95. package/build/components/sidebar-navigation-screen-template/index.js.map +1 -0
  96. package/build/components/sidebar-navigation-screen-templates/index.js +32 -82
  97. package/build/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  98. package/build/components/sidebar-navigation-screen-templates-browse/index.js +43 -0
  99. package/build/components/sidebar-navigation-screen-templates-browse/index.js.map +1 -0
  100. package/build/components/site-hub/index.js +14 -49
  101. package/build/components/site-hub/index.js.map +1 -1
  102. package/build/components/style-book/index.js +10 -3
  103. package/build/components/style-book/index.js.map +1 -1
  104. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js +55 -20
  105. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  106. package/build/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +3 -3
  107. package/build/components/sync-state-with-url/use-sync-canvas-mode-with-url.js.map +1 -1
  108. package/build/components/sync-state-with-url/{use-sync-sidebar-path-with-url.js → use-sync-path-with-url.js} +12 -12
  109. package/build/components/sync-state-with-url/use-sync-path-with-url.js.map +1 -0
  110. package/build/components/use-edited-entity-record/index.js +6 -2
  111. package/build/components/use-edited-entity-record/index.js.map +1 -1
  112. package/build/hooks/push-changes-to-global-styles/index.js +2 -2
  113. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  114. package/build/{experiments.js → private-apis.js} +3 -3
  115. package/build/private-apis.js.map +1 -0
  116. package/build/store/index.js +3 -3
  117. package/build/store/index.js.map +1 -1
  118. package/build/utils/get-is-list-page.js +5 -6
  119. package/build/utils/get-is-list-page.js.map +1 -1
  120. package/build-module/components/add-new-template/new-template-part.js +7 -4
  121. package/build-module/components/add-new-template/new-template-part.js.map +1 -1
  122. package/build-module/components/add-new-template/new-template.js +7 -4
  123. package/build-module/components/add-new-template/new-template.js.map +1 -1
  124. package/build-module/components/block-editor/editor-canvas.js +1 -1
  125. package/build-module/components/block-editor/editor-canvas.js.map +1 -1
  126. package/build-module/components/block-editor/index.js +3 -3
  127. package/build-module/components/block-editor/index.js.map +1 -1
  128. package/build-module/components/editor/index.js +28 -41
  129. package/build-module/components/editor/index.js.map +1 -1
  130. package/build-module/components/global-styles/block-preview-panel.js +10 -11
  131. package/build-module/components/global-styles/block-preview-panel.js.map +1 -1
  132. package/build-module/components/global-styles/border-panel.js +3 -3
  133. package/build-module/components/global-styles/border-panel.js.map +1 -1
  134. package/build-module/components/global-styles/color-palette-panel.js +3 -3
  135. package/build-module/components/global-styles/color-palette-panel.js.map +1 -1
  136. package/build-module/components/global-styles/context-menu.js +9 -3
  137. package/build-module/components/global-styles/context-menu.js.map +1 -1
  138. package/build-module/components/global-styles/custom-css.js +3 -3
  139. package/build-module/components/global-styles/custom-css.js.map +1 -1
  140. package/build-module/components/global-styles/dimensions-panel.js +3 -3
  141. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  142. package/build-module/components/global-styles/global-styles-provider.js +3 -3
  143. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  144. package/build-module/components/global-styles/gradients-palette-panel.js +3 -3
  145. package/build-module/components/global-styles/gradients-palette-panel.js.map +1 -1
  146. package/build-module/components/global-styles/header.js +2 -2
  147. package/build-module/components/global-styles/header.js.map +1 -1
  148. package/build-module/components/global-styles/hooks.js +3 -3
  149. package/build-module/components/global-styles/hooks.js.map +1 -1
  150. package/build-module/components/global-styles/navigation-button.js +2 -2
  151. package/build-module/components/global-styles/navigation-button.js.map +1 -1
  152. package/build-module/components/global-styles/palette.js +3 -3
  153. package/build-module/components/global-styles/palette.js.map +1 -1
  154. package/build-module/components/global-styles/preview.js +3 -3
  155. package/build-module/components/global-styles/preview.js.map +1 -1
  156. package/build-module/components/global-styles/screen-background-color.js +3 -3
  157. package/build-module/components/global-styles/screen-background-color.js.map +1 -1
  158. package/build-module/components/global-styles/screen-border.js +0 -5
  159. package/build-module/components/global-styles/screen-border.js.map +1 -1
  160. package/build-module/components/global-styles/screen-button-color.js +3 -3
  161. package/build-module/components/global-styles/screen-button-color.js.map +1 -1
  162. package/build-module/components/global-styles/screen-colors.js +3 -3
  163. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  164. package/build-module/components/global-styles/screen-css.js +5 -5
  165. package/build-module/components/global-styles/screen-css.js.map +1 -1
  166. package/build-module/components/global-styles/screen-effects.js +35 -0
  167. package/build-module/components/global-styles/screen-effects.js.map +1 -0
  168. package/build-module/components/global-styles/screen-heading-color.js +3 -3
  169. package/build-module/components/global-styles/screen-heading-color.js.map +1 -1
  170. package/build-module/components/global-styles/screen-link-color.js +3 -3
  171. package/build-module/components/global-styles/screen-link-color.js.map +1 -1
  172. package/build-module/components/global-styles/screen-root.js +3 -3
  173. package/build-module/components/global-styles/screen-root.js.map +1 -1
  174. package/build-module/components/global-styles/screen-style-variations.js +3 -3
  175. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  176. package/build-module/components/global-styles/screen-text-color.js +3 -3
  177. package/build-module/components/global-styles/screen-text-color.js.map +1 -1
  178. package/build-module/components/global-styles/screen-typography.js +3 -3
  179. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  180. package/build-module/components/global-styles/shadow-panel.js +4 -4
  181. package/build-module/components/global-styles/shadow-panel.js.map +1 -1
  182. package/build-module/components/global-styles/typography-panel.js +3 -3
  183. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  184. package/build-module/components/global-styles/typography-preview.js +3 -3
  185. package/build-module/components/global-styles/typography-preview.js.map +1 -1
  186. package/build-module/components/global-styles/ui.js +10 -11
  187. package/build-module/components/global-styles/ui.js.map +1 -1
  188. package/build-module/components/global-styles-renderer/index.js +3 -3
  189. package/build-module/components/global-styles-renderer/index.js.map +1 -1
  190. package/build-module/components/header-edit-mode/index.js +6 -3
  191. package/build-module/components/header-edit-mode/index.js.map +1 -1
  192. package/build-module/components/keyboard-shortcut-help-modal/config.js +1 -1
  193. package/build-module/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  194. package/build-module/components/layout/index.js +12 -24
  195. package/build-module/components/layout/index.js.map +1 -1
  196. package/build-module/components/list/actions/rename-menu-item.js +1 -1
  197. package/build-module/components/list/actions/rename-menu-item.js.map +1 -1
  198. package/build-module/components/list/table.js +1 -0
  199. package/build-module/components/list/table.js.map +1 -1
  200. package/build-module/components/navigation-inspector/navigation-menu.js +3 -3
  201. package/build-module/components/navigation-inspector/navigation-menu.js.map +1 -1
  202. package/build-module/components/save-panel/index.js +64 -0
  203. package/build-module/components/save-panel/index.js.map +1 -0
  204. package/build-module/components/sidebar/index.js +36 -5
  205. package/build-module/components/sidebar/index.js.map +1 -1
  206. package/build-module/components/sidebar-navigation-screen/index.js +27 -9
  207. package/build-module/components/sidebar-navigation-screen/index.js.map +1 -1
  208. package/build-module/components/sidebar-navigation-screen-navigation-item/index.js +55 -0
  209. package/build-module/components/sidebar-navigation-screen-navigation-item/index.js.map +1 -0
  210. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js +2 -2
  211. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -1
  212. package/build-module/components/sidebar-navigation-screen-template/index.js +53 -0
  213. package/build-module/components/sidebar-navigation-screen-template/index.js.map +1 -0
  214. package/build-module/components/sidebar-navigation-screen-templates/index.js +34 -81
  215. package/build-module/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  216. package/build-module/components/sidebar-navigation-screen-templates-browse/index.js +31 -0
  217. package/build-module/components/sidebar-navigation-screen-templates-browse/index.js.map +1 -0
  218. package/build-module/components/site-hub/index.js +14 -46
  219. package/build-module/components/site-hub/index.js.map +1 -1
  220. package/build-module/components/style-book/index.js +11 -4
  221. package/build-module/components/style-book/index.js.map +1 -1
  222. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js +55 -21
  223. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  224. package/build-module/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +1 -1
  225. package/build-module/components/sync-state-with-url/use-sync-canvas-mode-with-url.js.map +1 -1
  226. package/build-module/components/sync-state-with-url/{use-sync-sidebar-path-with-url.js → use-sync-path-with-url.js} +11 -11
  227. package/build-module/components/sync-state-with-url/use-sync-path-with-url.js.map +1 -0
  228. package/build-module/components/use-edited-entity-record/index.js +6 -2
  229. package/build-module/components/use-edited-entity-record/index.js.map +1 -1
  230. package/build-module/hooks/push-changes-to-global-styles/index.js +3 -3
  231. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  232. package/build-module/{experiments.js → private-apis.js} +2 -2
  233. package/build-module/private-apis.js.map +1 -0
  234. package/build-module/store/index.js +1 -1
  235. package/build-module/store/index.js.map +1 -1
  236. package/build-module/utils/get-is-list-page.js +5 -6
  237. package/build-module/utils/get-is-list-page.js.map +1 -1
  238. package/build-style/style-rtl.css +100 -62
  239. package/build-style/style.css +100 -62
  240. package/package.json +20 -20
  241. package/src/components/add-new-template/new-template-part.js +7 -4
  242. package/src/components/add-new-template/new-template.js +8 -6
  243. package/src/components/block-editor/editor-canvas.js +1 -1
  244. package/src/components/block-editor/index.js +3 -3
  245. package/src/components/editor/index.js +32 -71
  246. package/src/components/editor/style.scss +2 -2
  247. package/src/components/global-styles/block-preview-panel.js +8 -12
  248. package/src/components/global-styles/border-panel.js +3 -3
  249. package/src/components/global-styles/color-palette-panel.js +3 -3
  250. package/src/components/global-styles/context-menu.js +14 -2
  251. package/src/components/global-styles/custom-css.js +3 -3
  252. package/src/components/global-styles/dimensions-panel.js +3 -3
  253. package/src/components/global-styles/global-styles-provider.js +3 -3
  254. package/src/components/global-styles/gradients-palette-panel.js +3 -3
  255. package/src/components/global-styles/header.js +2 -2
  256. package/src/components/global-styles/hooks.js +3 -3
  257. package/src/components/global-styles/navigation-button.js +4 -2
  258. package/src/components/global-styles/palette.js +3 -3
  259. package/src/components/global-styles/preview.js +3 -3
  260. package/src/components/global-styles/screen-background-color.js +3 -3
  261. package/src/components/global-styles/screen-border.js +0 -5
  262. package/src/components/global-styles/screen-button-color.js +3 -3
  263. package/src/components/global-styles/screen-colors.js +3 -3
  264. package/src/components/global-styles/screen-css.js +14 -7
  265. package/src/components/global-styles/screen-effects.js +28 -0
  266. package/src/components/global-styles/screen-heading-color.js +3 -3
  267. package/src/components/global-styles/screen-link-color.js +3 -3
  268. package/src/components/global-styles/screen-root.js +3 -3
  269. package/src/components/global-styles/screen-style-variations.js +3 -3
  270. package/src/components/global-styles/screen-text-color.js +3 -3
  271. package/src/components/global-styles/screen-typography.js +3 -3
  272. package/src/components/global-styles/shadow-panel.js +4 -4
  273. package/src/components/global-styles/style.scss +2 -5
  274. package/src/components/global-styles/typography-panel.js +3 -3
  275. package/src/components/global-styles/typography-preview.js +3 -3
  276. package/src/components/global-styles/ui.js +8 -8
  277. package/src/components/global-styles-renderer/index.js +3 -3
  278. package/src/components/header-edit-mode/index.js +6 -3
  279. package/src/components/keyboard-shortcut-help-modal/config.js +1 -1
  280. package/src/components/layout/index.js +38 -48
  281. package/src/components/layout/style.scss +36 -26
  282. package/src/components/list/actions/rename-menu-item.js +1 -1
  283. package/src/components/list/table.js +4 -0
  284. package/src/components/navigation-inspector/navigation-menu.js +3 -3
  285. package/src/components/save-panel/index.js +68 -0
  286. package/src/components/save-panel/style.scss +5 -0
  287. package/src/components/sidebar/index.js +36 -8
  288. package/src/components/sidebar/style.scss +15 -0
  289. package/src/components/sidebar-navigation-screen/index.js +27 -11
  290. package/src/components/sidebar-navigation-screen/style.scss +4 -6
  291. package/src/components/sidebar-navigation-screen-navigation-item/index.js +52 -0
  292. package/src/components/sidebar-navigation-screen-navigation-menus/index.js +1 -1
  293. package/src/components/sidebar-navigation-screen-template/index.js +52 -0
  294. package/src/components/sidebar-navigation-screen-templates/index.js +49 -83
  295. package/src/components/sidebar-navigation-screen-templates-browse/index.js +31 -0
  296. package/src/components/site-hub/index.js +67 -122
  297. package/src/components/site-hub/style.scss +1 -10
  298. package/src/components/style-book/index.js +11 -7
  299. package/src/components/sync-state-with-url/use-init-edited-entity-from-url.js +48 -14
  300. package/src/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +1 -1
  301. package/src/components/sync-state-with-url/{use-sync-sidebar-path-with-url.js → use-sync-path-with-url.js} +10 -10
  302. package/src/components/use-edited-entity-record/index.js +6 -2
  303. package/src/hooks/push-changes-to-global-styles/index.js +3 -3
  304. package/src/{experiments.js → private-apis.js} +1 -1
  305. package/src/store/index.js +1 -1
  306. package/src/style.scss +1 -0
  307. package/src/utils/get-is-list-page.js +5 -5
  308. package/build/components/sync-state-with-url/use-sync-sidebar-path-with-url.js.map +0 -1
  309. package/build/experiments.js.map +0 -1
  310. package/build-module/components/sync-state-with-url/use-sync-sidebar-path-with-url.js.map +0 -1
  311. package/build-module/experiments.js.map +0 -1
@@ -0,0 +1,68 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { Button, Modal } from '@wordpress/components';
5
+ import { EntitiesSavedStates } from '@wordpress/editor';
6
+ import { useDispatch, useSelect } from '@wordpress/data';
7
+ import { __ } from '@wordpress/i18n';
8
+ import { NavigableRegion } from '@wordpress/interface';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import { store as editSiteStore } from '../../store';
14
+ import { unlock } from '../../private-apis';
15
+
16
+ export default function SavePanel() {
17
+ const { isSaveViewOpen, canvasMode } = useSelect( ( select ) => {
18
+ const { isSaveViewOpened, getCanvasMode } = unlock(
19
+ select( editSiteStore )
20
+ );
21
+
22
+ // The currently selected entity to display.
23
+ // Typically template or template part in the site editor.
24
+ return {
25
+ isSaveViewOpen: isSaveViewOpened(),
26
+ canvasMode: getCanvasMode(),
27
+ };
28
+ }, [] );
29
+ const { setIsSaveViewOpened } = useDispatch( editSiteStore );
30
+ const onClose = () => setIsSaveViewOpened( false );
31
+
32
+ if ( canvasMode === 'view' ) {
33
+ return isSaveViewOpen ? (
34
+ <Modal
35
+ className="edit-site-save-panel__modal"
36
+ onRequestClose={ onClose }
37
+ __experimentalHideHeader
38
+ contentLabel={ __(
39
+ 'Save site, content, and template changes'
40
+ ) }
41
+ >
42
+ <EntitiesSavedStates close={ onClose } />
43
+ </Modal>
44
+ ) : null;
45
+ }
46
+
47
+ return (
48
+ <NavigableRegion
49
+ className="edit-site-layout__actions"
50
+ ariaLabel={ __( 'Save sidebar' ) }
51
+ >
52
+ { isSaveViewOpen ? (
53
+ <EntitiesSavedStates close={ onClose } />
54
+ ) : (
55
+ <div className="edit-site-editor__toggle-save-panel">
56
+ <Button
57
+ variant="secondary"
58
+ className="edit-site-editor__toggle-save-panel-button"
59
+ onClick={ () => setIsSaveViewOpened( true ) }
60
+ aria-expanded={ false }
61
+ >
62
+ { __( 'Open save panel' ) }
63
+ </Button>
64
+ </div>
65
+ ) }
66
+ </NavigableRegion>
67
+ );
68
+ }
@@ -0,0 +1,5 @@
1
+ .edit-site-save-panel__modal {
2
+ @include break-small() {
3
+ width: 600px;
4
+ }
5
+ }
@@ -2,37 +2,65 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { memo } from '@wordpress/element';
5
+ import { useSelect } from '@wordpress/data';
5
6
  import { __experimentalNavigatorProvider as NavigatorProvider } from '@wordpress/components';
7
+ import { store as coreStore } from '@wordpress/core-data';
6
8
 
7
9
  /**
8
10
  * Internal dependencies
9
11
  */
10
12
  import SidebarNavigationScreenMain from '../sidebar-navigation-screen-main';
11
13
  import SidebarNavigationScreenTemplates from '../sidebar-navigation-screen-templates';
12
- import useSyncSidebarPathWithURL from '../sync-state-with-url/use-sync-sidebar-path-with-url';
14
+ import SidebarNavigationScreenTemplate from '../sidebar-navigation-screen-template';
15
+ import useSyncPathWithURL from '../sync-state-with-url/use-sync-path-with-url';
13
16
  import SidebarNavigationScreenNavigationMenus from '../sidebar-navigation-screen-navigation-menus';
17
+ import SidebarNavigationScreenTemplatesBrowse from '../sidebar-navigation-screen-templates-browse';
18
+ import SaveButton from '../save-button';
19
+ import SidebarNavigationScreenNavigationItem from '../sidebar-navigation-screen-navigation-item';
14
20
 
15
21
  function SidebarScreens() {
16
- useSyncSidebarPathWithURL();
22
+ useSyncPathWithURL();
17
23
 
18
24
  return (
19
25
  <>
20
26
  <SidebarNavigationScreenMain />
21
27
  <SidebarNavigationScreenNavigationMenus />
28
+ <SidebarNavigationScreenNavigationItem />
22
29
  <SidebarNavigationScreenTemplates postType="wp_template" />
23
30
  <SidebarNavigationScreenTemplates postType="wp_template_part" />
31
+ <SidebarNavigationScreenTemplate postType="wp_template" />
32
+ <SidebarNavigationScreenTemplate postType="wp_template_part" />
33
+ <SidebarNavigationScreenTemplatesBrowse postType="wp_template" />
34
+ <SidebarNavigationScreenTemplatesBrowse postType="wp_template_part" />
24
35
  </>
25
36
  );
26
37
  }
27
38
 
28
39
  function Sidebar() {
40
+ const { isDirty } = useSelect( ( select ) => {
41
+ const { __experimentalGetDirtyEntityRecords } = select( coreStore );
42
+ const dirtyEntityRecords = __experimentalGetDirtyEntityRecords();
43
+ // The currently selected entity to display.
44
+ // Typically template or template part in the site editor.
45
+ return {
46
+ isDirty: dirtyEntityRecords.length > 0,
47
+ };
48
+ }, [] );
49
+
29
50
  return (
30
- <NavigatorProvider
31
- className="edit-site-sidebar__content"
32
- initialPath="/"
33
- >
34
- <SidebarScreens />
35
- </NavigatorProvider>
51
+ <>
52
+ <NavigatorProvider
53
+ className="edit-site-sidebar__content"
54
+ initialPath="/"
55
+ >
56
+ <SidebarScreens />
57
+ </NavigatorProvider>
58
+ { isDirty && (
59
+ <div className="edit-site-sidebar__footer">
60
+ <SaveButton />
61
+ </div>
62
+ ) }
63
+ </>
36
64
  );
37
65
  }
38
66
 
@@ -1,3 +1,18 @@
1
+ .edit-site-sidebar__content {
2
+ flex-grow: 1;
3
+ overflow-y: auto;
4
+ @include custom-scrollbars-on-hover;
5
+ }
6
+
7
+ .edit-site-sidebar__footer {
8
+ border-top: 1px solid $gray-800;
9
+ flex-shrink: 0;
10
+ margin: 0 $canvas-padding;
11
+ padding: $canvas-padding 0;
12
+ display: flex;
13
+ justify-content: flex-end;
14
+ }
15
+
1
16
  .edit-site-sidebar__content.edit-site-sidebar__content {
2
17
  overflow-x: unset;
3
18
  }
@@ -4,19 +4,33 @@
4
4
  import {
5
5
  __experimentalHStack as HStack,
6
6
  __experimentalVStack as VStack,
7
- __experimentalNavigatorBackButton as NavigatorBackButton,
7
+ __experimentalNavigatorToParentButton as NavigatorToParentButton,
8
+ Button,
8
9
  __experimentalNavigatorScreen as NavigatorScreen,
9
10
  } from '@wordpress/components';
10
- import { isRTL, __, sprintf } from '@wordpress/i18n';
11
+ import { isRTL, __ } from '@wordpress/i18n';
11
12
  import { chevronRight, chevronLeft } from '@wordpress/icons';
13
+ import { useSelect } from '@wordpress/data';
14
+
15
+ /**
16
+ * Internal dependencies
17
+ */
18
+ import { store as editSiteStore } from '../../store';
19
+ import { unlock } from '../../private-apis';
12
20
 
13
21
  export default function SidebarNavigationScreen( {
14
22
  path,
15
- parentTitle,
16
23
  title,
17
24
  actions,
18
25
  content,
19
26
  } ) {
27
+ const { dashboardLink } = useSelect( ( select ) => {
28
+ const { getSettings } = unlock( select( editSiteStore ) );
29
+ return {
30
+ dashboardLink: getSettings().__experimentalDashboardLink,
31
+ };
32
+ }, [] );
33
+
20
34
  return (
21
35
  <NavigatorScreen
22
36
  className="edit-site-sidebar-navigation-screen"
@@ -28,18 +42,20 @@ export default function SidebarNavigationScreen( {
28
42
  justify="flex-start"
29
43
  className="edit-site-sidebar-navigation-screen__title-icon"
30
44
  >
31
- { parentTitle ? (
32
- <NavigatorBackButton
45
+ { path !== '/' ? (
46
+ <NavigatorToParentButton
33
47
  className="edit-site-sidebar-navigation-screen__back"
34
48
  icon={ isRTL() ? chevronRight : chevronLeft }
35
- aria-label={ sprintf(
36
- /* translators: %s: previous page. */
37
- __( 'Navigate to the previous view: %s' ),
38
- parentTitle
39
- ) }
49
+ aria-label={ __( 'Back' ) }
40
50
  />
41
51
  ) : (
42
- <div className="edit-site-sidebar-navigation-screen__icon-placeholder" />
52
+ <Button
53
+ className="edit-site-sidebar-navigation-screen__back"
54
+ icon={ isRTL() ? chevronRight : chevronLeft }
55
+ aria-label={ __( 'Navigate to the Dashboard' ) }
56
+ href={ dashboardLink || 'index.php' }
57
+ label={ __( 'Dashboard' ) }
58
+ />
43
59
  ) }
44
60
  <h2 className="edit-site-sidebar-navigation-screen__title">
45
61
  { title }
@@ -7,13 +7,14 @@
7
7
 
8
8
  .edit-site-sidebar-navigation-screen__content {
9
9
  margin: 0 $grid-unit-20 $grid-unit-20 $button-size;
10
+ color: $gray-600;
10
11
  }
11
12
 
12
13
  .edit-site-sidebar-navigation-screen__title-icon {
13
14
  position: sticky;
14
15
  top: 0;
15
16
  background: $gray-900;
16
- padding-top: $grid-unit-60 + $hub-height + $canvas-padding * 2;
17
+ padding-top: $grid-unit-60 + $header-height;
17
18
  box-shadow: 0 $grid-unit-10 $grid-unit-20 $gray-900;
18
19
  margin-bottom: $grid-unit-10;
19
20
  padding-bottom: $grid-unit-10;
@@ -31,11 +32,8 @@
31
32
  .edit-site-sidebar-navigation-screen__back {
32
33
  color: $gray-200;
33
34
 
34
- &:hover {
35
+ &:hover,
36
+ &:not([aria-disabled="true"]):active {
35
37
  color: $white;
36
38
  }
37
39
  }
38
-
39
- .edit-site-sidebar-navigation-screen__icon-placeholder {
40
- width: $button-size;
41
- }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { useDispatch, useSelect } from '@wordpress/data';
6
+ import { Button } from '@wordpress/components';
7
+ import { store as coreStore } from '@wordpress/core-data';
8
+ import { decodeEntities } from '@wordpress/html-entities';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import SidebarNavigationScreen from '../sidebar-navigation-screen';
14
+ import { unlock } from '../../private-apis';
15
+ import { store as editSiteStore } from '../../store';
16
+
17
+ export default function SidebarNavigationScreenNavigationItem() {
18
+ const { setCanvasMode } = unlock( useDispatch( editSiteStore ) );
19
+
20
+ const { post } = useSelect( ( select ) => {
21
+ const { getEditedPostContext } = select( editSiteStore );
22
+ const { getEntityRecord } = select( coreStore );
23
+ const { postType, postId } = getEditedPostContext() ?? {};
24
+
25
+ // The currently selected entity to display.
26
+ // Typically template or template part in the site editor.
27
+ return {
28
+ post:
29
+ postId && postType
30
+ ? getEntityRecord( 'postType', postType, postId )
31
+ : null,
32
+ };
33
+ }, [] );
34
+
35
+ return (
36
+ <SidebarNavigationScreen
37
+ path="/navigation/single"
38
+ title={ post ? decodeEntities( post?.title?.rendered ) : null }
39
+ actions={
40
+ <Button
41
+ variant="primary"
42
+ onClick={ () => setCanvasMode( 'edit' ) }
43
+ >
44
+ { __( 'Edit' ) }
45
+ </Button>
46
+ }
47
+ content={
48
+ post ? decodeEntities( post?.description?.rendered ) : null
49
+ }
50
+ />
51
+ );
52
+ }
@@ -25,6 +25,7 @@ export default function SidebarNavigationScreenNavigationMenus() {
25
25
  history.push( {
26
26
  postType: attributes.type,
27
27
  postId: attributes.id,
28
+ path: '/navigation/single',
28
29
  } );
29
30
  }
30
31
  },
@@ -33,7 +34,6 @@ export default function SidebarNavigationScreenNavigationMenus() {
33
34
  return (
34
35
  <SidebarNavigationScreen
35
36
  path="/navigation"
36
- parentTitle={ __( 'Design' ) }
37
37
  title={ __( 'Navigation' ) }
38
38
  content={
39
39
  <div className="edit-site-sidebar-navigation-screen-navigation-menus">
@@ -0,0 +1,52 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { useDispatch } from '@wordpress/data';
6
+ import { Button } from '@wordpress/components';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import SidebarNavigationScreen from '../sidebar-navigation-screen';
12
+ import useEditedEntityRecord from '../use-edited-entity-record';
13
+ import { unlock } from '../../private-apis';
14
+ import { store as editSiteStore } from '../../store';
15
+
16
+ const config = {
17
+ wp_template: {
18
+ path: '/templates/single',
19
+ },
20
+ wp_template_part: {
21
+ path: '/template-parts/single',
22
+ },
23
+ };
24
+
25
+ export default function SidebarNavigationScreenTemplate( {
26
+ postType = 'wp_template',
27
+ } ) {
28
+ const { setCanvasMode } = unlock( useDispatch( editSiteStore ) );
29
+ const { getDescription, getTitle, record } = useEditedEntityRecord();
30
+ let description = getDescription();
31
+ if ( ! description && record.is_custom ) {
32
+ description = __(
33
+ 'This is a custom template that can be applied manually to any Post or Page.'
34
+ );
35
+ }
36
+
37
+ return (
38
+ <SidebarNavigationScreen
39
+ path={ config[ postType ].path }
40
+ title={ getTitle() }
41
+ actions={
42
+ <Button
43
+ variant="primary"
44
+ onClick={ () => setCanvasMode( 'edit' ) }
45
+ >
46
+ { __( 'Edit' ) }
47
+ </Button>
48
+ }
49
+ content={ description ? <p>{ description }</p> : undefined }
50
+ />
51
+ );
52
+ }
@@ -1,9 +1,11 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { __experimentalItemGroup as ItemGroup } from '@wordpress/components';
4
+ import {
5
+ __experimentalItemGroup as ItemGroup,
6
+ __experimentalItem as Item,
7
+ } from '@wordpress/components';
5
8
  import { __ } from '@wordpress/i18n';
6
- import { useSelect } from '@wordpress/data';
7
9
  import { useEntityRecords } from '@wordpress/core-data';
8
10
  import { decodeEntities } from '@wordpress/html-entities';
9
11
  import { useViewportMatch } from '@wordpress/compose';
@@ -14,24 +16,8 @@ import { useViewportMatch } from '@wordpress/compose';
14
16
  import SidebarNavigationScreen from '../sidebar-navigation-screen';
15
17
  import { useLink } from '../routes/link';
16
18
  import SidebarNavigationItem from '../sidebar-navigation-item';
17
- import { useLocation } from '../routes';
18
- import { store as editSiteStore } from '../../store';
19
19
  import AddNewTemplate from '../add-new-template';
20
20
 
21
- function omit( object, keys ) {
22
- return Object.fromEntries(
23
- Object.entries( object ).filter( ( [ key ] ) => ! keys.includes( key ) )
24
- );
25
- }
26
-
27
- const Item = ( { item } ) => {
28
- const linkInfo = useLink( item.params );
29
- const props = item.params
30
- ? { ...omit( item, 'params' ), ...linkInfo }
31
- : item;
32
- return <SidebarNavigationItem { ...props } />;
33
- };
34
-
35
21
  const config = {
36
22
  wp_template: {
37
23
  path: '/templates',
@@ -53,23 +39,20 @@ const config = {
53
39
  },
54
40
  };
55
41
 
42
+ const TemplateItem = ( { postType, postId, ...props } ) => {
43
+ const linkInfo = useLink( {
44
+ postType,
45
+ postId,
46
+ path: config[ postType ].path + '/single',
47
+ } );
48
+ return <SidebarNavigationItem { ...linkInfo } { ...props } />;
49
+ };
50
+
56
51
  export default function SidebarNavigationScreenTemplates( {
57
52
  postType = 'wp_template',
58
53
  } ) {
59
- const { params } = useLocation();
60
54
  const isMobileViewport = useViewportMatch( 'medium', '<' );
61
55
 
62
- // Ideally the URL params would be enough.
63
- // Loading the editor should ideally redirect to the home page
64
- // instead of fetching the edited entity here.
65
- const { editedPostId, editedPostType } = useSelect( ( select ) => {
66
- const { getEditedPostType, getEditedPostId } = select( editSiteStore );
67
- return {
68
- editedPostId: getEditedPostId(),
69
- editedPostType: getEditedPostType(),
70
- };
71
- }, [] );
72
-
73
56
  const { records: templates, isResolving: isLoading } = useEntityRecords(
74
57
  'postType',
75
58
  postType,
@@ -78,44 +61,15 @@ export default function SidebarNavigationScreenTemplates( {
78
61
  }
79
62
  );
80
63
 
81
- let items = [];
82
- if ( isLoading ) {
83
- items = [
84
- {
85
- children: config[ postType ].labels.loading,
86
- },
87
- ];
88
- } else if ( ! templates && ! isLoading ) {
89
- items = [
90
- {
91
- children: config[ postType ].labels.notFound,
92
- },
93
- ];
94
- } else {
95
- items = templates?.map( ( template ) => ( {
96
- params: {
97
- postType,
98
- postId: template.id,
99
- },
100
- children: decodeEntities(
101
- template.title?.rendered || template.slug
102
- ),
103
- 'aria-current':
104
- ( params.postType === postType &&
105
- params.postId === template.id ) ||
106
- // This is a special case for the home page.
107
- ( editedPostId === template.id &&
108
- editedPostType === postType &&
109
- !! params.postId )
110
- ? 'page'
111
- : undefined,
112
- } ) );
113
- }
64
+ const browseAllLink = useLink( {
65
+ postType,
66
+ postId: undefined,
67
+ path: config[ postType ].path + '/all',
68
+ } );
114
69
 
115
70
  return (
116
71
  <SidebarNavigationScreen
117
72
  path={ config[ postType ].path }
118
- parentTitle={ __( 'Design' ) }
119
73
  title={ config[ postType ].labels.title }
120
74
  actions={
121
75
  ! isMobileViewport && (
@@ -130,25 +84,37 @@ export default function SidebarNavigationScreenTemplates( {
130
84
  }
131
85
  content={
132
86
  <>
133
- <ItemGroup>
134
- { items.map( ( item, index ) => (
135
- <Item item={ item } key={ index } />
136
- ) ) }
137
-
138
- <SidebarNavigationItem
139
- className="edit-site-sidebar-navigation-screen-templates__see-all"
140
- { ...useLink( {
141
- postType,
142
- postId: undefined,
143
- } ) }
144
- aria-current={
145
- params.postType === postType && ! params.postId
146
- ? 'page'
147
- : undefined
148
- }
149
- children={ config[ postType ].labels.manage }
150
- />
151
- </ItemGroup>
87
+ { isLoading && config[ postType ].labels.loading }
88
+ { ! isLoading && (
89
+ <ItemGroup>
90
+ { ! templates?.length && (
91
+ <Item>
92
+ { config[ postType ].labels.notFound }
93
+ </Item>
94
+ ) }
95
+ { ( templates ?? [] ).map( ( template ) => (
96
+ <TemplateItem
97
+ postType={ postType }
98
+ postId={ template.id }
99
+ key={ template.id }
100
+ >
101
+ { decodeEntities(
102
+ template.title?.rendered ||
103
+ template.slug
104
+ ) }
105
+ </TemplateItem>
106
+ ) ) }
107
+ { ! isMobileViewport && (
108
+ <SidebarNavigationItem
109
+ className="edit-site-sidebar-navigation-screen-templates__see-all"
110
+ { ...browseAllLink }
111
+ children={
112
+ config[ postType ].labels.manage
113
+ }
114
+ />
115
+ ) }
116
+ </ItemGroup>
117
+ ) }
152
118
  </>
153
119
  }
154
120
  />
@@ -0,0 +1,31 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import SidebarNavigationScreen from '../sidebar-navigation-screen';
10
+
11
+ const config = {
12
+ wp_template: {
13
+ path: '/templates/all',
14
+ title: __( 'All templates' ),
15
+ },
16
+ wp_template_part: {
17
+ path: '/template-parts/all',
18
+ title: __( 'All template parts' ),
19
+ },
20
+ };
21
+
22
+ export default function SidebarNavigationScreenTemplatesBrowse( {
23
+ postType = 'wp_template',
24
+ } ) {
25
+ return (
26
+ <SidebarNavigationScreen
27
+ path={ config[ postType ].path }
28
+ title={ config[ postType ].title }
29
+ />
30
+ );
31
+ }