@wordpress/edit-site 5.4.0 → 5.6.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 (339) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/add-new-template/add-custom-template-modal.js +12 -3
  3. package/build/components/add-new-template/add-custom-template-modal.js.map +1 -1
  4. package/build/components/add-new-template/new-template-part.js +8 -7
  5. package/build/components/add-new-template/new-template-part.js.map +1 -1
  6. package/build/components/add-new-template/new-template.js +19 -16
  7. package/build/components/add-new-template/new-template.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 +2 -1
  11. package/build/components/block-editor/editor-canvas.js.map +1 -1
  12. package/build/components/editor/index.js +5 -7
  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 +13 -11
  17. package/build/components/global-styles/context-menu.js.map +1 -1
  18. package/build/components/global-styles/dimensions-panel.js +41 -487
  19. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  20. package/build/components/global-styles/duotone-panel.js +78 -0
  21. package/build/components/global-styles/duotone-panel.js.map +1 -0
  22. package/build/components/global-styles/filter-utils.js +17 -0
  23. package/build/components/global-styles/filter-utils.js.map +1 -0
  24. package/build/components/global-styles/hooks.js +11 -26
  25. package/build/components/global-styles/hooks.js.map +1 -1
  26. package/build/components/global-styles/preview.js +9 -5
  27. package/build/components/global-styles/preview.js.map +1 -1
  28. package/build/components/global-styles/screen-block-list.js +6 -11
  29. package/build/components/global-styles/screen-block-list.js.map +1 -1
  30. package/build/components/global-styles/screen-border.js +14 -6
  31. package/build/components/global-styles/screen-border.js.map +1 -1
  32. package/build/components/global-styles/screen-filters.js +46 -0
  33. package/build/components/global-styles/screen-filters.js.map +1 -0
  34. package/build/components/global-styles/screen-layout.js +13 -5
  35. package/build/components/global-styles/screen-layout.js.map +1 -1
  36. package/build/components/global-styles/screen-root.js +2 -1
  37. package/build/components/global-styles/screen-root.js.map +1 -1
  38. package/build/components/global-styles/screen-style-variations.js +2 -1
  39. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  40. package/build/components/global-styles/screen-variations.js +1 -1
  41. package/build/components/global-styles/screen-variations.js.map +1 -1
  42. package/build/components/global-styles/shadow-panel.js +6 -4
  43. package/build/components/global-styles/shadow-panel.js.map +1 -1
  44. package/build/components/global-styles/typography-panel.js +2 -5
  45. package/build/components/global-styles/typography-panel.js.map +1 -1
  46. package/build/components/global-styles/ui.js +7 -1
  47. package/build/components/global-styles/ui.js.map +1 -1
  48. package/build/components/keyboard-shortcut-help-modal/config.js +12 -0
  49. package/build/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  50. package/build/components/keyboard-shortcuts/edit-mode.js +124 -0
  51. package/build/components/keyboard-shortcuts/edit-mode.js.map +1 -0
  52. package/build/components/keyboard-shortcuts/global.js +48 -0
  53. package/build/components/keyboard-shortcuts/global.js.map +1 -0
  54. package/build/components/keyboard-shortcuts/index.js +67 -0
  55. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  56. package/build/components/keyboard-shortcuts/register.js +153 -0
  57. package/build/components/keyboard-shortcuts/register.js.map +1 -0
  58. package/build/components/layout/index.js +12 -1
  59. package/build/components/layout/index.js.map +1 -1
  60. package/build/components/list/added-by.js +127 -136
  61. package/build/components/list/added-by.js.map +1 -1
  62. package/build/components/list/index.js +2 -1
  63. package/build/components/list/index.js.map +1 -1
  64. package/build/components/list/table.js +9 -7
  65. package/build/components/list/table.js.map +1 -1
  66. package/build/components/routes/link.js +4 -1
  67. package/build/components/routes/link.js.map +1 -1
  68. package/build/components/save-hub/index.js +82 -0
  69. package/build/components/save-hub/index.js.map +1 -0
  70. package/build/components/save-panel/index.js +11 -1
  71. package/build/components/save-panel/index.js.map +1 -1
  72. package/build/components/sidebar/index.js +27 -17
  73. package/build/components/sidebar/index.js.map +1 -1
  74. package/build/components/sidebar-button/index.js +30 -0
  75. package/build/components/sidebar-button/index.js.map +1 -0
  76. package/build/components/sidebar-edit-mode/global-styles-sidebar.js +8 -2
  77. package/build/components/sidebar-edit-mode/global-styles-sidebar.js.map +1 -1
  78. package/build/components/sidebar-navigation-screen/index.js +14 -11
  79. package/build/components/sidebar-navigation-screen/index.js.map +1 -1
  80. package/build/components/sidebar-navigation-screen-main/index.js +16 -16
  81. package/build/components/sidebar-navigation-screen-main/index.js.map +1 -1
  82. package/build/components/sidebar-navigation-screen-navigation-item/index.js +22 -26
  83. package/build/components/sidebar-navigation-screen-navigation-item/index.js.map +1 -1
  84. package/build/components/sidebar-navigation-screen-navigation-menus/index.js +97 -14
  85. package/build/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -1
  86. package/build/components/sidebar-navigation-screen-navigation-menus/loader.js +19 -0
  87. package/build/components/sidebar-navigation-screen-navigation-menus/loader.js.map +1 -0
  88. package/build/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js +77 -0
  89. package/build/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js.map +1 -0
  90. package/build/components/sidebar-navigation-screen-template/index.js +66 -27
  91. package/build/components/sidebar-navigation-screen-template/index.js.map +1 -1
  92. package/build/components/sidebar-navigation-screen-templates/index.js +30 -17
  93. package/build/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  94. package/build/components/sidebar-navigation-screen-templates-browse/index.js +14 -10
  95. package/build/components/sidebar-navigation-screen-templates-browse/index.js.map +1 -1
  96. package/build/components/site-hub/index.js +3 -1
  97. package/build/components/site-hub/index.js.map +1 -1
  98. package/build/components/style-book/index.js +151 -21
  99. package/build/components/style-book/index.js.map +1 -1
  100. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js +36 -34
  101. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  102. package/build/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +24 -8
  103. package/build/components/sync-state-with-url/use-sync-canvas-mode-with-url.js.map +1 -1
  104. package/build/components/sync-state-with-url/use-sync-path-with-url.js +67 -18
  105. package/build/components/sync-state-with-url/use-sync-path-with-url.js.map +1 -1
  106. package/build/components/template-details/index.js +5 -10
  107. package/build/components/template-details/index.js.map +1 -1
  108. package/build/components/template-part-converter/convert-to-regular.js +8 -12
  109. package/build/components/template-part-converter/convert-to-regular.js.map +1 -1
  110. package/build/components/template-part-converter/convert-to-template-part.js +2 -2
  111. package/build/components/template-part-converter/convert-to-template-part.js.map +1 -1
  112. package/build/components/template-part-converter/index.js +19 -14
  113. package/build/components/template-part-converter/index.js.map +1 -1
  114. package/build/components/use-edited-entity-record/index.js +6 -6
  115. package/build/components/use-edited-entity-record/index.js.map +1 -1
  116. package/build/index.js +13 -22
  117. package/build/index.js.map +1 -1
  118. package/build/store/actions.js +2 -2
  119. package/build/store/actions.js.map +1 -1
  120. package/build/utils/get-is-list-page.js +1 -1
  121. package/build/utils/get-is-list-page.js.map +1 -1
  122. package/build/utils/history.js +8 -2
  123. package/build/utils/history.js.map +1 -1
  124. package/build-module/components/add-new-template/add-custom-template-modal.js +13 -4
  125. package/build-module/components/add-new-template/add-custom-template-modal.js.map +1 -1
  126. package/build-module/components/add-new-template/new-template-part.js +8 -7
  127. package/build-module/components/add-new-template/new-template-part.js.map +1 -1
  128. package/build-module/components/add-new-template/new-template.js +21 -17
  129. package/build-module/components/add-new-template/new-template.js.map +1 -1
  130. package/build-module/components/app/index.js +3 -2
  131. package/build-module/components/app/index.js.map +1 -1
  132. package/build-module/components/block-editor/editor-canvas.js +2 -1
  133. package/build-module/components/block-editor/editor-canvas.js.map +1 -1
  134. package/build-module/components/editor/index.js +5 -6
  135. package/build-module/components/editor/index.js.map +1 -1
  136. package/build-module/components/global-styles/border-panel.js +21 -157
  137. package/build-module/components/global-styles/border-panel.js.map +1 -1
  138. package/build-module/components/global-styles/context-menu.js +14 -11
  139. package/build-module/components/global-styles/context-menu.js.map +1 -1
  140. package/build-module/components/global-styles/dimensions-panel.js +43 -480
  141. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  142. package/build-module/components/global-styles/duotone-panel.js +67 -0
  143. package/build-module/components/global-styles/duotone-panel.js.map +1 -0
  144. package/build-module/components/global-styles/filter-utils.js +9 -0
  145. package/build-module/components/global-styles/filter-utils.js.map +1 -0
  146. package/build-module/components/global-styles/hooks.js +11 -26
  147. package/build-module/components/global-styles/hooks.js.map +1 -1
  148. package/build-module/components/global-styles/preview.js +10 -6
  149. package/build-module/components/global-styles/preview.js.map +1 -1
  150. package/build-module/components/global-styles/screen-block-list.js +6 -8
  151. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  152. package/build-module/components/global-styles/screen-border.js +12 -3
  153. package/build-module/components/global-styles/screen-border.js.map +1 -1
  154. package/build-module/components/global-styles/screen-filters.js +33 -0
  155. package/build-module/components/global-styles/screen-filters.js.map +1 -0
  156. package/build-module/components/global-styles/screen-layout.js +11 -2
  157. package/build-module/components/global-styles/screen-layout.js.map +1 -1
  158. package/build-module/components/global-styles/screen-root.js +2 -1
  159. package/build-module/components/global-styles/screen-root.js.map +1 -1
  160. package/build-module/components/global-styles/screen-style-variations.js +2 -1
  161. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  162. package/build-module/components/global-styles/screen-variations.js +1 -1
  163. package/build-module/components/global-styles/screen-variations.js.map +1 -1
  164. package/build-module/components/global-styles/shadow-panel.js +6 -4
  165. package/build-module/components/global-styles/shadow-panel.js.map +1 -1
  166. package/build-module/components/global-styles/typography-panel.js +2 -5
  167. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  168. package/build-module/components/global-styles/ui.js +6 -1
  169. package/build-module/components/global-styles/ui.js.map +1 -1
  170. package/build-module/components/keyboard-shortcut-help-modal/config.js +12 -0
  171. package/build-module/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  172. package/build-module/components/keyboard-shortcuts/edit-mode.js +108 -0
  173. package/build-module/components/keyboard-shortcuts/edit-mode.js.map +1 -0
  174. package/build-module/components/keyboard-shortcuts/global.js +37 -0
  175. package/build-module/components/keyboard-shortcuts/global.js.map +1 -0
  176. package/build-module/components/keyboard-shortcuts/index.js +65 -0
  177. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  178. package/build-module/components/keyboard-shortcuts/register.js +141 -0
  179. package/build-module/components/keyboard-shortcuts/register.js.map +1 -0
  180. package/build-module/components/layout/index.js +10 -1
  181. package/build-module/components/layout/index.js.map +1 -1
  182. package/build-module/components/list/added-by.js +126 -138
  183. package/build-module/components/list/added-by.js.map +1 -1
  184. package/build-module/components/list/index.js +2 -1
  185. package/build-module/components/list/index.js.map +1 -1
  186. package/build-module/components/list/table.js +9 -7
  187. package/build-module/components/list/table.js.map +1 -1
  188. package/build-module/components/routes/link.js +5 -2
  189. package/build-module/components/routes/link.js.map +1 -1
  190. package/build-module/components/save-hub/index.js +68 -0
  191. package/build-module/components/save-hub/index.js.map +1 -0
  192. package/build-module/components/save-panel/index.js +8 -1
  193. package/build-module/components/save-panel/index.js.map +1 -1
  194. package/build-module/components/sidebar/index.js +24 -19
  195. package/build-module/components/sidebar/index.js.map +1 -1
  196. package/build-module/components/sidebar-button/index.js +18 -0
  197. package/build-module/components/sidebar-button/index.js.map +1 -0
  198. package/build-module/components/sidebar-edit-mode/global-styles-sidebar.js +8 -2
  199. package/build-module/components/sidebar-edit-mode/global-styles-sidebar.js.map +1 -1
  200. package/build-module/components/sidebar-navigation-screen/index.js +12 -12
  201. package/build-module/components/sidebar-navigation-screen/index.js.map +1 -1
  202. package/build-module/components/sidebar-navigation-screen-main/index.js +16 -16
  203. package/build-module/components/sidebar-navigation-screen-main/index.js.map +1 -1
  204. package/build-module/components/sidebar-navigation-screen-navigation-item/index.js +24 -30
  205. package/build-module/components/sidebar-navigation-screen-navigation-item/index.js.map +1 -1
  206. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js +91 -14
  207. package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -1
  208. package/build-module/components/sidebar-navigation-screen-navigation-menus/loader.js +11 -0
  209. package/build-module/components/sidebar-navigation-screen-navigation-menus/loader.js.map +1 -0
  210. package/build-module/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js +66 -0
  211. package/build-module/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js.map +1 -0
  212. package/build-module/components/sidebar-navigation-screen-template/index.js +67 -30
  213. package/build-module/components/sidebar-navigation-screen-template/index.js.map +1 -1
  214. package/build-module/components/sidebar-navigation-screen-templates/index.js +28 -18
  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 +13 -10
  217. package/build-module/components/sidebar-navigation-screen-templates-browse/index.js.map +1 -1
  218. package/build-module/components/site-hub/index.js +3 -1
  219. package/build-module/components/site-hub/index.js.map +1 -1
  220. package/build-module/components/style-book/index.js +152 -25
  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 +36 -34
  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 +24 -8
  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-path-with-url.js +65 -18
  227. package/build-module/components/sync-state-with-url/use-sync-path-with-url.js.map +1 -1
  228. package/build-module/components/template-details/index.js +5 -9
  229. package/build-module/components/template-details/index.js.map +1 -1
  230. package/build-module/components/template-part-converter/convert-to-regular.js +9 -13
  231. package/build-module/components/template-part-converter/convert-to-regular.js.map +1 -1
  232. package/build-module/components/template-part-converter/convert-to-template-part.js +3 -3
  233. package/build-module/components/template-part-converter/convert-to-template-part.js.map +1 -1
  234. package/build-module/components/template-part-converter/index.js +20 -15
  235. package/build-module/components/template-part-converter/index.js.map +1 -1
  236. package/build-module/components/use-edited-entity-record/index.js +6 -6
  237. package/build-module/components/use-edited-entity-record/index.js.map +1 -1
  238. package/build-module/index.js +16 -23
  239. package/build-module/index.js.map +1 -1
  240. package/build-module/store/actions.js +2 -2
  241. package/build-module/store/actions.js.map +1 -1
  242. package/build-module/utils/get-is-list-page.js +1 -1
  243. package/build-module/utils/get-is-list-page.js.map +1 -1
  244. package/build-module/utils/history.js +9 -3
  245. package/build-module/utils/history.js.map +1 -1
  246. package/build-style/style-rtl.css +203 -143
  247. package/build-style/style.css +203 -143
  248. package/package.json +31 -31
  249. package/src/components/add-new-template/add-custom-template-modal.js +14 -10
  250. package/src/components/add-new-template/new-template-part.js +7 -9
  251. package/src/components/add-new-template/new-template.js +60 -38
  252. package/src/components/add-new-template/style.scss +12 -6
  253. package/src/components/app/index.js +9 -6
  254. package/src/components/block-editor/editor-canvas.js +2 -1
  255. package/src/components/block-editor/style.scss +1 -1
  256. package/src/components/editor/index.js +62 -65
  257. package/src/components/editor/style.scss +0 -6
  258. package/src/components/global-styles/border-panel.js +24 -199
  259. package/src/components/global-styles/context-menu.js +18 -12
  260. package/src/components/global-styles/dimensions-panel.js +43 -577
  261. package/src/components/global-styles/duotone-panel.js +82 -0
  262. package/src/components/global-styles/filter-utils.js +9 -0
  263. package/src/components/global-styles/hooks.js +12 -36
  264. package/src/components/global-styles/preview.js +155 -140
  265. package/src/components/global-styles/screen-block-list.js +6 -11
  266. package/src/components/global-styles/screen-border.js +10 -3
  267. package/src/components/global-styles/screen-filters.js +27 -0
  268. package/src/components/global-styles/screen-layout.js +9 -2
  269. package/src/components/global-styles/screen-root.js +1 -1
  270. package/src/components/global-styles/screen-style-variations.js +5 -1
  271. package/src/components/global-styles/screen-variations.js +0 -1
  272. package/src/components/global-styles/shadow-panel.js +4 -3
  273. package/src/components/global-styles/style.scss +10 -0
  274. package/src/components/global-styles/typography-panel.js +5 -7
  275. package/src/components/global-styles/ui.js +6 -1
  276. package/src/components/keyboard-shortcut-help-modal/config.js +10 -0
  277. package/src/components/keyboard-shortcuts/edit-mode.js +116 -0
  278. package/src/components/keyboard-shortcuts/global.js +35 -0
  279. package/src/components/keyboard-shortcuts/index.js +70 -0
  280. package/src/components/keyboard-shortcuts/register.js +157 -0
  281. package/src/components/layout/index.js +19 -0
  282. package/src/components/layout/style.scss +9 -4
  283. package/src/components/list/added-by.js +152 -155
  284. package/src/components/list/index.js +3 -1
  285. package/src/components/list/style.scss +5 -13
  286. package/src/components/list/table.js +11 -9
  287. package/src/components/routes/link.js +9 -2
  288. package/src/components/save-hub/index.js +78 -0
  289. package/src/components/save-hub/style.scss +15 -0
  290. package/src/components/save-panel/index.js +8 -1
  291. package/src/components/sidebar/index.js +33 -16
  292. package/src/components/sidebar/style.scss +4 -3
  293. package/src/components/sidebar-button/index.js +21 -0
  294. package/src/components/sidebar-button/style.scss +24 -0
  295. package/src/components/sidebar-edit-mode/global-styles-sidebar.js +3 -7
  296. package/src/components/sidebar-edit-mode/style.scss +16 -0
  297. package/src/components/sidebar-navigation-item/style.scss +1 -23
  298. package/src/components/sidebar-navigation-screen/index.js +37 -38
  299. package/src/components/sidebar-navigation-screen/style.scss +16 -9
  300. package/src/components/sidebar-navigation-screen-main/index.js +24 -11
  301. package/src/components/sidebar-navigation-screen-navigation-item/index.js +39 -26
  302. package/src/components/sidebar-navigation-screen-navigation-menus/index.js +99 -12
  303. package/src/components/sidebar-navigation-screen-navigation-menus/loader.js +9 -0
  304. package/src/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js +78 -0
  305. package/src/components/sidebar-navigation-screen-navigation-menus/style.scss +108 -1
  306. package/src/components/sidebar-navigation-screen-template/index.js +89 -30
  307. package/src/components/sidebar-navigation-screen-template/style.scss +25 -0
  308. package/src/components/sidebar-navigation-screen-templates/index.js +29 -14
  309. package/src/components/sidebar-navigation-screen-templates/style.scss +0 -5
  310. package/src/components/sidebar-navigation-screen-templates-browse/index.js +12 -6
  311. package/src/components/site-hub/index.js +5 -1
  312. package/src/components/site-hub/style.scss +5 -1
  313. package/src/components/style-book/index.js +234 -55
  314. package/src/components/style-book/style.scss +1 -45
  315. package/src/components/sync-state-with-url/use-init-edited-entity-from-url.js +28 -23
  316. package/src/components/sync-state-with-url/use-sync-canvas-mode-with-url.js +38 -8
  317. package/src/components/sync-state-with-url/use-sync-path-with-url.js +77 -17
  318. package/src/components/template-details/index.js +4 -8
  319. package/src/components/template-part-converter/convert-to-regular.js +10 -17
  320. package/src/components/template-part-converter/convert-to-template-part.js +9 -16
  321. package/src/components/template-part-converter/index.js +28 -12
  322. package/src/components/use-edited-entity-record/index.js +26 -18
  323. package/src/index.js +11 -22
  324. package/src/store/actions.js +2 -2
  325. package/src/store/test/actions.js +0 -2
  326. package/src/style.scss +3 -1
  327. package/src/utils/get-is-list-page.js +1 -1
  328. package/src/utils/history.js +13 -9
  329. package/build/components/navigation-inspector/index.js +0 -161
  330. package/build/components/navigation-inspector/index.js.map +0 -1
  331. package/build/components/navigation-inspector/navigation-menu.js +0 -62
  332. package/build/components/navigation-inspector/navigation-menu.js.map +0 -1
  333. package/build-module/components/navigation-inspector/index.js +0 -146
  334. package/build-module/components/navigation-inspector/index.js.map +0 -1
  335. package/build-module/components/navigation-inspector/navigation-menu.js +0 -52
  336. package/build-module/components/navigation-inspector/navigation-menu.js.map +0 -1
  337. package/src/components/navigation-inspector/index.js +0 -191
  338. package/src/components/navigation-inspector/navigation-menu.js +0 -66
  339. 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,11 +7,7 @@ import classnames from 'classnames';
6
7
  /**
7
8
  * WordPress dependencies
8
9
  */
9
- import {
10
- __experimentalHStack as HStack,
11
- Icon,
12
- Tooltip,
13
- } from '@wordpress/components';
10
+ import { Icon, __experimentalHStack as HStack } from '@wordpress/components';
14
11
  import { store as coreStore } from '@wordpress/core-data';
15
12
  import { useSelect } from '@wordpress/data';
16
13
  import { useState } from '@wordpress/element';
@@ -20,171 +17,171 @@ import {
20
17
  plugins as pluginIcon,
21
18
  globe as globeIcon,
22
19
  } from '@wordpress/icons';
23
- import { __ } from '@wordpress/i18n';
20
+ import { _x } from '@wordpress/i18n';
21
+
22
+ /** @typedef {'wp_template'|'wp_template_part'} TemplateType */
24
23
 
24
+ /** @type {TemplateType} */
25
25
  const TEMPLATE_POST_TYPE_NAMES = [ 'wp_template', 'wp_template_part' ];
26
26
 
27
- function CustomizedTooltip( { isCustomized, children } ) {
28
- if ( ! isCustomized ) {
29
- return children;
30
- }
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
+ );
31
58
 
32
- return (
33
- <Tooltip text={ __( 'This template has been customized' ) }>
34
- { children }
35
- </Tooltip>
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 ]
36
130
  );
37
131
  }
38
132
 
39
- function BaseAddedBy( { text, icon, imageUrl, isCustomized } ) {
133
+ /**
134
+ * @param {Object} props
135
+ * @param {string} props.imageUrl
136
+ */
137
+ function AvatarImage( { imageUrl } ) {
40
138
  const [ isImageLoaded, setIsImageLoaded ] = useState( false );
41
139
 
42
140
  return (
43
- <HStack alignment="left">
44
- <CustomizedTooltip isCustomized={ isCustomized }>
45
- { imageUrl ? (
46
- <div
47
- className={ classnames(
48
- 'edit-site-list-added-by__avatar',
49
- {
50
- 'is-loaded': isImageLoaded,
51
- }
52
- ) }
53
- >
54
- <img
55
- onLoad={ () => setIsImageLoaded( true ) }
56
- alt=""
57
- src={ imageUrl }
58
- />
59
- </div>
60
- ) : (
61
- <div
62
- className={ classnames(
63
- 'edit-site-list-added-by__icon',
64
- {
65
- 'is-customized': isCustomized,
66
- }
67
- ) }
68
- >
69
- <Icon icon={ icon } />
70
- </div>
71
- ) }
72
- </CustomizedTooltip>
73
- <span>{ text }</span>
74
- </HStack>
75
- );
76
- }
77
-
78
- function AddedByTheme( { slug, isCustomized } ) {
79
- const theme = useSelect(
80
- ( select ) => select( coreStore ).getTheme( slug ),
81
- [ slug ]
82
- );
83
-
84
- return (
85
- <BaseAddedBy
86
- icon={ themeIcon }
87
- text={ theme?.name?.rendered || slug }
88
- isCustomized={ isCustomized }
89
- />
90
- );
91
- }
92
-
93
- function AddedByPlugin( { slug, isCustomized } ) {
94
- const plugin = useSelect(
95
- ( select ) => select( coreStore ).getPlugin( slug ),
96
- [ slug ]
97
- );
98
-
99
- return (
100
- <BaseAddedBy
101
- icon={ pluginIcon }
102
- text={ plugin?.name || slug }
103
- isCustomized={ isCustomized }
104
- />
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>
105
152
  );
106
153
  }
107
154
 
108
- function AddedByAuthor( { id } ) {
109
- const user = useSelect(
110
- ( select ) => select( coreStore ).getUser( id ),
111
- [ id ]
112
- );
113
-
114
- return (
115
- <BaseAddedBy
116
- icon={ authorIcon }
117
- imageUrl={ user?.avatar_urls?.[ 48 ] }
118
- text={ user?.nickname }
119
- />
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
120
164
  );
121
- }
122
-
123
- function AddedBySite() {
124
- const { name, logoURL } = useSelect( ( select ) => {
125
- const { getEntityRecord, getMedia } = select( coreStore );
126
- const siteData = getEntityRecord( 'root', '__unstableBase' );
127
-
128
- return {
129
- name: siteData?.name,
130
- logoURL: siteData?.site_logo
131
- ? getMedia( siteData.site_logo )?.source_url
132
- : undefined,
133
- };
134
- }, [] );
135
165
 
136
166
  return (
137
- <BaseAddedBy icon={ globeIcon } imageUrl={ logoURL } text={ name } />
167
+ <HStack alignment="left">
168
+ { imageUrl ? (
169
+ <AvatarImage imageUrl={ imageUrl } />
170
+ ) : (
171
+ <div className="edit-site-list-added-by__icon">
172
+ <Icon icon={ icon } />
173
+ </div>
174
+ ) }
175
+ <span>
176
+ { text }
177
+ { isCustomized && (
178
+ <span className="edit-site-list-added-by__customized-info">
179
+ { postType === 'wp_template'
180
+ ? _x( 'Customized', 'template' )
181
+ : _x( 'Customized', 'template part' ) }
182
+ </span>
183
+ ) }
184
+ </span>
185
+ </HStack>
138
186
  );
139
187
  }
140
-
141
- export default function AddedBy( { templateType, template } ) {
142
- if ( ! template ) {
143
- return;
144
- }
145
-
146
- if ( TEMPLATE_POST_TYPE_NAMES.includes( templateType ) ) {
147
- // Template originally provided by a theme, but customized by a user.
148
- // Templates originally didn't have the 'origin' field so identify
149
- // older customized templates by checking for no origin and a 'theme'
150
- // or 'custom' source.
151
- if (
152
- template.has_theme_file &&
153
- ( template.origin === 'theme' ||
154
- ( ! template.origin &&
155
- [ 'theme', 'custom' ].includes( template.source ) ) )
156
- ) {
157
- return (
158
- <AddedByTheme
159
- slug={ template.theme }
160
- isCustomized={ template.source === 'custom' }
161
- />
162
- );
163
- }
164
-
165
- // Template originally provided by a plugin, but customized by a user.
166
- if ( template.has_theme_file && template.origin === 'plugin' ) {
167
- return (
168
- <AddedByPlugin
169
- slug={ template.theme }
170
- isCustomized={ template.source === 'custom' }
171
- />
172
- );
173
- }
174
-
175
- // Template was created from scratch, but has no author. Author support
176
- // was only added to templates in WordPress 5.9. Fallback to showing the
177
- // site logo and title.
178
- if (
179
- ! template.has_theme_file &&
180
- template.source === 'custom' &&
181
- ! template.author
182
- ) {
183
- return <AddedBySite />;
184
- }
185
- }
186
-
187
- // Simply show the author for templates created from scratch that have an
188
- // author or for any other post type.
189
- return <AddedByAuthor id={ template.author } />;
190
- }
@@ -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
 
@@ -141,7 +141,6 @@
141
141
  .edit-site-list-added-by__icon {
142
142
  display: flex;
143
143
  flex-shrink: 0;
144
- position: relative;
145
144
  align-items: center;
146
145
  justify-content: center;
147
146
  width: $grid-unit-40;
@@ -152,18 +151,6 @@
152
151
  svg {
153
152
  fill: $white;
154
153
  }
155
-
156
- &.is-customized::after {
157
- position: absolute;
158
- content: "";
159
- background: var(--wp-admin-theme-color);
160
- height: $grid-unit-10;
161
- width: $grid-unit-10;
162
- outline: 2px solid $white;
163
- border-radius: 100%;
164
- top: -1px;
165
- right: -1px;
166
- }
167
154
  }
168
155
 
169
156
  .edit-site-list-added-by__avatar {
@@ -189,3 +176,8 @@
189
176
  }
190
177
  }
191
178
  }
179
+
180
+ .edit-site-list-added-by__customized-info {
181
+ display: block;
182
+ color: $gray-700;
183
+ }
@@ -46,6 +46,9 @@ export default function Table( { templateType } ) {
46
46
  );
47
47
  }
48
48
 
49
+ const sortedTemplates = [ ...templates ];
50
+ sortedTemplates.sort( ( a, b ) => a.slug.localeCompare( b.slug ) );
51
+
49
52
  return (
50
53
  // These explicit aria roles are needed for Safari.
51
54
  // See https://developer.mozilla.org/en-US/docs/Web/CSS/display#tables
@@ -74,7 +77,7 @@ export default function Table( { templateType } ) {
74
77
  </thead>
75
78
 
76
79
  <tbody>
77
- { templates.map( ( template ) => (
80
+ { sortedTemplates.map( ( template ) => (
78
81
  <tr
79
82
  key={ template.id }
80
83
  className="edit-site-list-table-row"
@@ -84,12 +87,9 @@ export default function Table( { templateType } ) {
84
87
  <Heading level={ 4 }>
85
88
  <Link
86
89
  params={ {
87
- path:
88
- template.type === 'wp_template'
89
- ? '/templates/single'
90
- : '/template-parts/single',
91
90
  postId: template.id,
92
91
  postType: template.type,
92
+ canvas: 'edit',
93
93
  } }
94
94
  >
95
95
  { decodeEntities(
@@ -102,10 +102,12 @@ export default function Table( { templateType } ) {
102
102
  </td>
103
103
 
104
104
  <td className="edit-site-list-table-column" role="cell">
105
- <AddedBy
106
- templateType={ templateType }
107
- template={ template }
108
- />
105
+ { template ? (
106
+ <AddedBy
107
+ postType={ template.type }
108
+ postId={ template.id }
109
+ />
110
+ ) : null }
109
111
  </td>
110
112
  <td className="edit-site-list-table-column" role="cell">
111
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
  }
@@ -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,3 +1,8 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import classnames from 'classnames';
5
+
1
6
  /**
2
7
  * WordPress dependencies
3
8
  */
@@ -46,7 +51,9 @@ export default function SavePanel() {
46
51
 
47
52
  return (
48
53
  <NavigableRegion
49
- className="edit-site-layout__actions"
54
+ className={ classnames( 'edit-site-layout__actions', {
55
+ 'is-entity-save-view-open': isSaveViewOpen,
56
+ } ) }
50
57
  ariaLabel={ __( 'Save sidebar' ) }
51
58
  >
52
59
  { isSaveViewOpen ? (
@@ -1,8 +1,11 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { memo } from '@wordpress/element';
5
- import { __experimentalNavigatorProvider as NavigatorProvider } from '@wordpress/components';
4
+ import { memo, useRef } from '@wordpress/element';
5
+ import {
6
+ __experimentalNavigatorProvider as NavigatorProvider,
7
+ __experimentalNavigatorScreen as NavigatorScreen,
8
+ } from '@wordpress/components';
6
9
 
7
10
  /**
8
11
  * Internal dependencies
@@ -10,42 +13,56 @@ import { __experimentalNavigatorProvider as NavigatorProvider } from '@wordpress
10
13
  import SidebarNavigationScreenMain from '../sidebar-navigation-screen-main';
11
14
  import SidebarNavigationScreenTemplates from '../sidebar-navigation-screen-templates';
12
15
  import SidebarNavigationScreenTemplate from '../sidebar-navigation-screen-template';
13
- import useSyncPathWithURL from '../sync-state-with-url/use-sync-path-with-url';
16
+ import useSyncPathWithURL, {
17
+ getPathFromURL,
18
+ } from '../sync-state-with-url/use-sync-path-with-url';
14
19
  import SidebarNavigationScreenNavigationMenus from '../sidebar-navigation-screen-navigation-menus';
15
20
  import SidebarNavigationScreenTemplatesBrowse from '../sidebar-navigation-screen-templates-browse';
16
- import SaveButton from '../save-button';
21
+ import SaveHub from '../save-hub';
17
22
  import SidebarNavigationScreenNavigationItem from '../sidebar-navigation-screen-navigation-item';
23
+ import { useLocation } from '../routes';
18
24
 
19
25
  function SidebarScreens() {
20
26
  useSyncPathWithURL();
21
27
 
22
28
  return (
23
29
  <>
24
- <SidebarNavigationScreenMain />
25
- <SidebarNavigationScreenNavigationMenus />
26
- <SidebarNavigationScreenNavigationItem />
27
- <SidebarNavigationScreenTemplates postType="wp_template" />
28
- <SidebarNavigationScreenTemplates postType="wp_template_part" />
29
- <SidebarNavigationScreenTemplate postType="wp_template" />
30
- <SidebarNavigationScreenTemplate postType="wp_template_part" />
31
- <SidebarNavigationScreenTemplatesBrowse postType="wp_template" />
32
- <SidebarNavigationScreenTemplatesBrowse postType="wp_template_part" />
30
+ <NavigatorScreen path="/">
31
+ <SidebarNavigationScreenMain />
32
+ </NavigatorScreen>
33
+ <NavigatorScreen path="/navigation">
34
+ <SidebarNavigationScreenNavigationMenus />
35
+ </NavigatorScreen>
36
+ <NavigatorScreen path="/navigation/:postType/:postId">
37
+ <SidebarNavigationScreenNavigationItem />
38
+ </NavigatorScreen>
39
+ <NavigatorScreen path="/:postType(wp_template|wp_template_part)">
40
+ <SidebarNavigationScreenTemplates />
41
+ </NavigatorScreen>
42
+ <NavigatorScreen path="/:postType(wp_template|wp_template_part)/all">
43
+ <SidebarNavigationScreenTemplatesBrowse />
44
+ </NavigatorScreen>
45
+ <NavigatorScreen path="/:postType(wp_template|wp_template_part)/:postId">
46
+ <SidebarNavigationScreenTemplate />
47
+ </NavigatorScreen>
33
48
  </>
34
49
  );
35
50
  }
36
51
 
37
52
  function Sidebar() {
53
+ const { params: urlParams } = useLocation();
54
+ const initialPath = useRef( getPathFromURL( urlParams ) );
55
+
38
56
  return (
39
57
  <>
40
58
  <NavigatorProvider
41
59
  className="edit-site-sidebar__content"
42
- initialPath="/"
60
+ initialPath={ initialPath.current }
43
61
  >
44
62
  <SidebarScreens />
45
63
  </NavigatorProvider>
46
-
47
64
  <div className="edit-site-sidebar__footer">
48
- <SaveButton />
65
+ <SaveHub />
49
66
  </div>
50
67
  </>
51
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 {