@wordpress/edit-site 5.22.0 → 5.24.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 (524) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/actions/index.js +115 -15
  3. package/build/components/actions/index.js.map +1 -1
  4. package/build/components/add-new-template/new-template.js +0 -7
  5. package/build/components/add-new-template/new-template.js.map +1 -1
  6. package/build/components/block-editor/site-editor-canvas.js +7 -2
  7. package/build/components/block-editor/site-editor-canvas.js.map +1 -1
  8. package/build/components/block-editor/use-site-editor-settings.js +54 -63
  9. package/build/components/block-editor/use-site-editor-settings.js.map +1 -1
  10. package/build/components/dataviews/add-filter.js +91 -0
  11. package/build/components/dataviews/add-filter.js.map +1 -0
  12. package/build/components/dataviews/constants.js +14 -0
  13. package/build/components/dataviews/constants.js.map +1 -0
  14. package/build/components/dataviews/dataviews.js +30 -9
  15. package/build/components/dataviews/dataviews.js.map +1 -1
  16. package/build/components/dataviews/filter-summary.js +62 -0
  17. package/build/components/dataviews/filter-summary.js.map +1 -0
  18. package/build/components/dataviews/filters.js +37 -48
  19. package/build/components/dataviews/filters.js.map +1 -1
  20. package/build/components/dataviews/index.js +9 -2
  21. package/build/components/dataviews/index.js.map +1 -1
  22. package/build/components/dataviews/item-actions.js +139 -17
  23. package/build/components/dataviews/item-actions.js.map +1 -1
  24. package/build/components/dataviews/pagination.js +7 -2
  25. package/build/components/dataviews/pagination.js.map +1 -1
  26. package/build/components/dataviews/reset-filters.js +33 -0
  27. package/build/components/dataviews/reset-filters.js.map +1 -0
  28. package/build/components/dataviews/search.js +1 -0
  29. package/build/components/dataviews/search.js.map +1 -1
  30. package/build/components/dataviews/view-actions.js +49 -32
  31. package/build/components/dataviews/view-actions.js.map +1 -1
  32. package/build/components/dataviews/view-grid.js +48 -25
  33. package/build/components/dataviews/view-grid.js.map +1 -1
  34. package/build/components/dataviews/view-list.js +130 -14
  35. package/build/components/dataviews/view-list.js.map +1 -1
  36. package/build/components/dataviews/view-side-by-side.js +20 -0
  37. package/build/components/dataviews/view-side-by-side.js.map +1 -0
  38. package/build/components/editor/index.js +52 -56
  39. package/build/components/editor/index.js.map +1 -1
  40. package/build/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +1 -1
  41. package/build/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js.map +1 -1
  42. package/build/components/global-styles/font-library-modal/utils/index.js +15 -2
  43. package/build/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  44. package/build/components/global-styles/header.js +4 -2
  45. package/build/components/global-styles/header.js.map +1 -1
  46. package/build/components/global-styles/screen-block-list.js +22 -16
  47. package/build/components/global-styles/screen-block-list.js.map +1 -1
  48. package/build/components/global-styles/screen-revisions/index.js +66 -24
  49. package/build/components/global-styles/screen-revisions/index.js.map +1 -1
  50. package/build/components/global-styles/screen-revisions/revisions-buttons.js +52 -24
  51. package/build/components/global-styles/screen-revisions/revisions-buttons.js.map +1 -1
  52. package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js +9 -3
  53. package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js.map +1 -1
  54. package/build/components/global-styles/screen-root.js +3 -3
  55. package/build/components/global-styles/screen-root.js.map +1 -1
  56. package/build/components/global-styles/ui.js +31 -39
  57. package/build/components/global-styles/ui.js.map +1 -1
  58. package/build/components/global-styles-renderer/index.js +1 -1
  59. package/build/components/global-styles-renderer/index.js.map +1 -1
  60. package/build/components/header-edit-mode/document-actions/index.js +21 -16
  61. package/build/components/header-edit-mode/document-actions/index.js.map +1 -1
  62. package/build/components/header-edit-mode/document-tools/index.js +160 -0
  63. package/build/components/header-edit-mode/document-tools/index.js.map +1 -0
  64. package/build/components/header-edit-mode/index.js +50 -117
  65. package/build/components/header-edit-mode/index.js.map +1 -1
  66. package/build/components/header-edit-mode/more-menu/index.js +1 -1
  67. package/build/components/header-edit-mode/more-menu/index.js.map +1 -1
  68. package/build/components/header-edit-mode/more-menu/site-export.js +2 -6
  69. package/build/components/header-edit-mode/more-menu/site-export.js.map +1 -1
  70. package/build/components/layout/index.js +4 -19
  71. package/build/components/layout/index.js.map +1 -1
  72. package/build/components/list/added-by.js +44 -54
  73. package/build/components/list/added-by.js.map +1 -1
  74. package/build/components/{page-content-focus-manager → page-content-focus-notifications}/back-to-page-notification.js +11 -15
  75. package/build/components/page-content-focus-notifications/back-to-page-notification.js.map +1 -0
  76. package/build/components/{page-content-focus-manager → page-content-focus-notifications}/edit-template-notification.js +9 -13
  77. package/build/components/page-content-focus-notifications/edit-template-notification.js.map +1 -0
  78. package/build/components/page-content-focus-notifications/index.js +22 -0
  79. package/build/components/page-content-focus-notifications/index.js.map +1 -0
  80. package/build/components/page-main/index.js +2 -1
  81. package/build/components/page-main/index.js.map +1 -1
  82. package/build/components/page-pages/index.js +137 -88
  83. package/build/components/page-pages/index.js.map +1 -1
  84. package/build/components/page-pages/side-editor.js +25 -0
  85. package/build/components/page-pages/side-editor.js.map +1 -0
  86. package/build/components/page-patterns/grid-item.js +2 -2
  87. package/build/components/page-patterns/grid-item.js.map +1 -1
  88. package/build/components/page-patterns/patterns-list.js +3 -3
  89. package/build/components/page-patterns/patterns-list.js.map +1 -1
  90. package/build/components/page-patterns/use-patterns.js +2 -2
  91. package/build/components/page-patterns/use-patterns.js.map +1 -1
  92. package/build/components/page-templates/dataviews-templates.js +316 -0
  93. package/build/components/page-templates/dataviews-templates.js.map +1 -0
  94. package/build/components/page-templates/template-actions.js +168 -0
  95. package/build/components/page-templates/template-actions.js.map +1 -0
  96. package/build/components/preferences-modal/index.js +1 -1
  97. package/build/components/preferences-modal/index.js.map +1 -1
  98. package/build/components/save-button/index.js +9 -6
  99. package/build/components/save-button/index.js.map +1 -1
  100. package/build/components/save-hub/index.js +14 -0
  101. package/build/components/save-hub/index.js.map +1 -1
  102. package/build/components/sidebar/index.js +1 -2
  103. package/build/components/sidebar/index.js.map +1 -1
  104. package/build/components/sidebar-dataviews/add-new-view.js +124 -0
  105. package/build/components/sidebar-dataviews/add-new-view.js.map +1 -0
  106. package/build/components/sidebar-dataviews/custom-dataviews-list.js +191 -0
  107. package/build/components/sidebar-dataviews/custom-dataviews-list.js.map +1 -0
  108. package/build/components/sidebar-dataviews/dataview-item.js +71 -0
  109. package/build/components/sidebar-dataviews/dataview-item.js.map +1 -0
  110. package/build/components/sidebar-dataviews/default-views.js +65 -0
  111. package/build/components/sidebar-dataviews/default-views.js.map +1 -0
  112. package/build/components/sidebar-dataviews/index.js +21 -38
  113. package/build/components/sidebar-dataviews/index.js.map +1 -1
  114. package/build/components/sidebar-edit-mode/default-sidebar.js +2 -6
  115. package/build/components/sidebar-edit-mode/default-sidebar.js.map +1 -1
  116. package/build/components/sidebar-edit-mode/index.js +6 -5
  117. package/build/components/sidebar-edit-mode/index.js.map +1 -1
  118. package/build/components/sidebar-edit-mode/page-panels/edit-template.js +18 -29
  119. package/build/components/sidebar-edit-mode/page-panels/edit-template.js.map +1 -1
  120. package/build/components/sidebar-edit-mode/page-panels/hooks.js +22 -8
  121. package/build/components/sidebar-edit-mode/page-panels/hooks.js.map +1 -1
  122. package/build/components/sidebar-edit-mode/page-panels/page-status.js +8 -5
  123. package/build/components/sidebar-edit-mode/page-panels/page-status.js.map +1 -1
  124. package/build/components/sidebar-edit-mode/page-panels/page-summary.js +5 -8
  125. package/build/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
  126. package/build/components/sidebar-edit-mode/page-panels/reset-default-template.js +6 -14
  127. package/build/components/sidebar-edit-mode/page-panels/reset-default-template.js.map +1 -1
  128. package/build/components/sidebar-edit-mode/page-panels/swap-template-button.js +4 -12
  129. package/build/components/sidebar-edit-mode/page-panels/swap-template-button.js.map +1 -1
  130. package/build/components/sidebar-edit-mode/plugin-sidebar/index.js +2 -6
  131. package/build/components/sidebar-edit-mode/plugin-sidebar/index.js.map +1 -1
  132. package/build/components/sidebar-edit-mode/settings-header/index.js +10 -6
  133. package/build/components/sidebar-edit-mode/settings-header/index.js.map +1 -1
  134. package/build/components/sidebar-edit-mode/template-panel/hooks.js +3 -3
  135. package/build/components/sidebar-edit-mode/template-panel/hooks.js.map +1 -1
  136. package/build/components/sidebar-navigation-screen-global-styles/index.js +1 -1
  137. package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  138. package/build/components/sidebar-navigation-screen-navigation-menu/navigation-menu-editor.js +1 -1
  139. package/build/components/sidebar-navigation-screen-navigation-menu/navigation-menu-editor.js.map +1 -1
  140. package/build/components/sidebar-navigation-screen-page/index.js +23 -4
  141. package/build/components/sidebar-navigation-screen-page/index.js.map +1 -1
  142. package/build/components/sidebar-navigation-screen-page/page-details.js +3 -11
  143. package/build/components/sidebar-navigation-screen-page/page-details.js.map +1 -1
  144. package/build/components/sidebar-navigation-screen-patterns/use-theme-patterns.js +1 -1
  145. package/build/components/sidebar-navigation-screen-patterns/use-theme-patterns.js.map +1 -1
  146. package/build/components/site-hub/index.js +18 -6
  147. package/build/components/site-hub/index.js.map +1 -1
  148. package/build/components/start-template-options/index.js +12 -16
  149. package/build/components/start-template-options/index.js.map +1 -1
  150. package/build/components/style-book/index.js +22 -12
  151. package/build/components/style-book/index.js.map +1 -1
  152. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js +150 -55
  153. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  154. package/build/components/template-part-converter/convert-to-regular.js +1 -1
  155. package/build/components/template-part-converter/convert-to-regular.js.map +1 -1
  156. package/build/components/welcome-guide/page.js +2 -2
  157. package/build/components/welcome-guide/page.js.map +1 -1
  158. package/build/components/welcome-guide/template.js +6 -3
  159. package/build/components/welcome-guide/template.js.map +1 -1
  160. package/build/hooks/commands/use-edit-mode-commands.js +24 -14
  161. package/build/hooks/commands/use-edit-mode-commands.js.map +1 -1
  162. package/build/hooks/push-changes-to-global-styles/index.js +3 -1
  163. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  164. package/build/hooks/template-part-edit.js +6 -2
  165. package/build/hooks/template-part-edit.js.map +1 -1
  166. package/build/index.js +0 -3
  167. package/build/index.js.map +1 -1
  168. package/build/store/actions.js +39 -83
  169. package/build/store/actions.js.map +1 -1
  170. package/build/store/private-actions.js +2 -27
  171. package/build/store/private-actions.js.map +1 -1
  172. package/build/store/private-selectors.js +0 -23
  173. package/build/store/private-selectors.js.map +1 -1
  174. package/build/store/reducer.js +1 -40
  175. package/build/store/reducer.js.map +1 -1
  176. package/build/store/selectors.js +33 -67
  177. package/build/store/selectors.js.map +1 -1
  178. package/build/utils/constants.js +3 -14
  179. package/build/utils/constants.js.map +1 -1
  180. package/build-module/components/actions/index.js +113 -14
  181. package/build-module/components/actions/index.js.map +1 -1
  182. package/build-module/components/add-new-template/new-template.js +0 -7
  183. package/build-module/components/add-new-template/new-template.js.map +1 -1
  184. package/build-module/components/block-editor/site-editor-canvas.js +7 -2
  185. package/build-module/components/block-editor/site-editor-canvas.js.map +1 -1
  186. package/build-module/components/block-editor/use-site-editor-settings.js +54 -62
  187. package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
  188. package/build-module/components/dataviews/add-filter.js +84 -0
  189. package/build-module/components/dataviews/add-filter.js.map +1 -0
  190. package/build-module/components/dataviews/constants.js +6 -0
  191. package/build-module/components/dataviews/constants.js.map +1 -0
  192. package/build-module/components/dataviews/dataviews.js +29 -9
  193. package/build-module/components/dataviews/dataviews.js.map +1 -1
  194. package/build-module/components/dataviews/filter-summary.js +55 -0
  195. package/build-module/components/dataviews/filter-summary.js.map +1 -0
  196. package/build-module/components/dataviews/filters.js +37 -48
  197. package/build-module/components/dataviews/filters.js.map +1 -1
  198. package/build-module/components/dataviews/index.js +1 -1
  199. package/build-module/components/dataviews/index.js.map +1 -1
  200. package/build-module/components/dataviews/item-actions.js +142 -20
  201. package/build-module/components/dataviews/item-actions.js.map +1 -1
  202. package/build-module/components/dataviews/pagination.js +7 -2
  203. package/build-module/components/dataviews/pagination.js.map +1 -1
  204. package/build-module/components/dataviews/reset-filters.js +26 -0
  205. package/build-module/components/dataviews/reset-filters.js.map +1 -0
  206. package/build-module/components/dataviews/search.js +1 -0
  207. package/build-module/components/dataviews/search.js.map +1 -1
  208. package/build-module/components/dataviews/view-actions.js +50 -33
  209. package/build-module/components/dataviews/view-actions.js.map +1 -1
  210. package/build-module/components/dataviews/view-grid.js +49 -26
  211. package/build-module/components/dataviews/view-grid.js.map +1 -1
  212. package/build-module/components/dataviews/view-list.js +132 -16
  213. package/build-module/components/dataviews/view-list.js.map +1 -1
  214. package/build-module/components/dataviews/view-side-by-side.js +12 -0
  215. package/build-module/components/dataviews/view-side-by-side.js.map +1 -0
  216. package/build-module/components/editor/index.js +55 -59
  217. package/build-module/components/editor/index.js.map +1 -1
  218. package/build-module/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +1 -1
  219. package/build-module/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js.map +1 -1
  220. package/build-module/components/global-styles/font-library-modal/utils/index.js +14 -2
  221. package/build-module/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  222. package/build-module/components/global-styles/header.js +4 -2
  223. package/build-module/components/global-styles/header.js.map +1 -1
  224. package/build-module/components/global-styles/screen-block-list.js +23 -17
  225. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  226. package/build-module/components/global-styles/screen-revisions/index.js +67 -25
  227. package/build-module/components/global-styles/screen-revisions/index.js.map +1 -1
  228. package/build-module/components/global-styles/screen-revisions/revisions-buttons.js +51 -24
  229. package/build-module/components/global-styles/screen-revisions/revisions-buttons.js.map +1 -1
  230. package/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js +9 -3
  231. package/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js.map +1 -1
  232. package/build-module/components/global-styles/screen-root.js +3 -3
  233. package/build-module/components/global-styles/screen-root.js.map +1 -1
  234. package/build-module/components/global-styles/ui.js +31 -39
  235. package/build-module/components/global-styles/ui.js.map +1 -1
  236. package/build-module/components/global-styles-renderer/index.js +1 -1
  237. package/build-module/components/global-styles-renderer/index.js.map +1 -1
  238. package/build-module/components/header-edit-mode/document-actions/index.js +21 -16
  239. package/build-module/components/header-edit-mode/document-actions/index.js.map +1 -1
  240. package/build-module/components/header-edit-mode/document-tools/index.js +152 -0
  241. package/build-module/components/header-edit-mode/document-tools/index.js.map +1 -0
  242. package/build-module/components/header-edit-mode/index.js +54 -121
  243. package/build-module/components/header-edit-mode/index.js.map +1 -1
  244. package/build-module/components/header-edit-mode/more-menu/index.js +1 -1
  245. package/build-module/components/header-edit-mode/more-menu/index.js.map +1 -1
  246. package/build-module/components/header-edit-mode/more-menu/site-export.js +2 -6
  247. package/build-module/components/header-edit-mode/more-menu/site-export.js.map +1 -1
  248. package/build-module/components/layout/index.js +5 -20
  249. package/build-module/components/layout/index.js.map +1 -1
  250. package/build-module/components/list/added-by.js +45 -56
  251. package/build-module/components/list/added-by.js.map +1 -1
  252. package/build-module/components/{page-content-focus-manager → page-content-focus-notifications}/back-to-page-notification.js +11 -15
  253. package/build-module/components/page-content-focus-notifications/back-to-page-notification.js.map +1 -0
  254. package/build-module/components/{page-content-focus-manager → page-content-focus-notifications}/edit-template-notification.js +9 -13
  255. package/build-module/components/page-content-focus-notifications/edit-template-notification.js.map +1 -0
  256. package/build-module/components/page-content-focus-notifications/index.js +14 -0
  257. package/build-module/components/page-content-focus-notifications/index.js.map +1 -0
  258. package/build-module/components/page-main/index.js +2 -1
  259. package/build-module/components/page-main/index.js.map +1 -1
  260. package/build-module/components/page-pages/index.js +141 -90
  261. package/build-module/components/page-pages/index.js.map +1 -1
  262. package/build-module/components/page-pages/side-editor.js +17 -0
  263. package/build-module/components/page-pages/side-editor.js.map +1 -0
  264. package/build-module/components/page-patterns/grid-item.js +2 -2
  265. package/build-module/components/page-patterns/grid-item.js.map +1 -1
  266. package/build-module/components/page-patterns/patterns-list.js +4 -4
  267. package/build-module/components/page-patterns/patterns-list.js.map +1 -1
  268. package/build-module/components/page-patterns/use-patterns.js +3 -3
  269. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  270. package/build-module/components/page-templates/dataviews-templates.js +308 -0
  271. package/build-module/components/page-templates/dataviews-templates.js.map +1 -0
  272. package/build-module/components/page-templates/template-actions.js +157 -0
  273. package/build-module/components/page-templates/template-actions.js.map +1 -0
  274. package/build-module/components/preferences-modal/index.js +1 -1
  275. package/build-module/components/preferences-modal/index.js.map +1 -1
  276. package/build-module/components/save-button/index.js +11 -8
  277. package/build-module/components/save-button/index.js.map +1 -1
  278. package/build-module/components/save-hub/index.js +14 -0
  279. package/build-module/components/save-hub/index.js.map +1 -1
  280. package/build-module/components/sidebar/index.js +1 -2
  281. package/build-module/components/sidebar/index.js.map +1 -1
  282. package/build-module/components/sidebar-dataviews/add-new-view.js +116 -0
  283. package/build-module/components/sidebar-dataviews/add-new-view.js.map +1 -0
  284. package/build-module/components/sidebar-dataviews/custom-dataviews-list.js +182 -0
  285. package/build-module/components/sidebar-dataviews/custom-dataviews-list.js.map +1 -0
  286. package/build-module/components/sidebar-dataviews/dataview-item.js +63 -0
  287. package/build-module/components/sidebar-dataviews/dataview-item.js.map +1 -0
  288. package/build-module/components/sidebar-dataviews/default-views.js +57 -0
  289. package/build-module/components/sidebar-dataviews/default-views.js.map +1 -0
  290. package/build-module/components/sidebar-dataviews/index.js +22 -39
  291. package/build-module/components/sidebar-dataviews/index.js.map +1 -1
  292. package/build-module/components/sidebar-edit-mode/default-sidebar.js +2 -6
  293. package/build-module/components/sidebar-edit-mode/default-sidebar.js.map +1 -1
  294. package/build-module/components/sidebar-edit-mode/index.js +6 -5
  295. package/build-module/components/sidebar-edit-mode/index.js.map +1 -1
  296. package/build-module/components/sidebar-edit-mode/page-panels/edit-template.js +20 -31
  297. package/build-module/components/sidebar-edit-mode/page-panels/edit-template.js.map +1 -1
  298. package/build-module/components/sidebar-edit-mode/page-panels/hooks.js +21 -7
  299. package/build-module/components/sidebar-edit-mode/page-panels/hooks.js.map +1 -1
  300. package/build-module/components/sidebar-edit-mode/page-panels/page-status.js +9 -6
  301. package/build-module/components/sidebar-edit-mode/page-panels/page-status.js.map +1 -1
  302. package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js +6 -8
  303. package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
  304. package/build-module/components/sidebar-edit-mode/page-panels/reset-default-template.js +8 -16
  305. package/build-module/components/sidebar-edit-mode/page-panels/reset-default-template.js.map +1 -1
  306. package/build-module/components/sidebar-edit-mode/page-panels/swap-template-button.js +5 -13
  307. package/build-module/components/sidebar-edit-mode/page-panels/swap-template-button.js.map +1 -1
  308. package/build-module/components/sidebar-edit-mode/plugin-sidebar/index.js +2 -6
  309. package/build-module/components/sidebar-edit-mode/plugin-sidebar/index.js.map +1 -1
  310. package/build-module/components/sidebar-edit-mode/settings-header/index.js +10 -6
  311. package/build-module/components/sidebar-edit-mode/settings-header/index.js.map +1 -1
  312. package/build-module/components/sidebar-edit-mode/template-panel/hooks.js +4 -4
  313. package/build-module/components/sidebar-edit-mode/template-panel/hooks.js.map +1 -1
  314. package/build-module/components/sidebar-navigation-screen-global-styles/index.js +1 -1
  315. package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  316. package/build-module/components/sidebar-navigation-screen-navigation-menu/navigation-menu-editor.js +1 -1
  317. package/build-module/components/sidebar-navigation-screen-navigation-menu/navigation-menu-editor.js.map +1 -1
  318. package/build-module/components/sidebar-navigation-screen-page/index.js +23 -4
  319. package/build-module/components/sidebar-navigation-screen-page/index.js.map +1 -1
  320. package/build-module/components/sidebar-navigation-screen-page/page-details.js +3 -11
  321. package/build-module/components/sidebar-navigation-screen-page/page-details.js.map +1 -1
  322. package/build-module/components/sidebar-navigation-screen-patterns/use-theme-patterns.js +2 -2
  323. package/build-module/components/sidebar-navigation-screen-patterns/use-theme-patterns.js.map +1 -1
  324. package/build-module/components/site-hub/index.js +19 -7
  325. package/build-module/components/site-hub/index.js.map +1 -1
  326. package/build-module/components/start-template-options/index.js +13 -16
  327. package/build-module/components/start-template-options/index.js.map +1 -1
  328. package/build-module/components/style-book/index.js +22 -12
  329. package/build-module/components/style-book/index.js.map +1 -1
  330. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js +150 -56
  331. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  332. package/build-module/components/template-part-converter/convert-to-regular.js +1 -1
  333. package/build-module/components/template-part-converter/convert-to-regular.js.map +1 -1
  334. package/build-module/components/welcome-guide/page.js +2 -2
  335. package/build-module/components/welcome-guide/page.js.map +1 -1
  336. package/build-module/components/welcome-guide/template.js +6 -3
  337. package/build-module/components/welcome-guide/template.js.map +1 -1
  338. package/build-module/hooks/commands/use-edit-mode-commands.js +24 -14
  339. package/build-module/hooks/commands/use-edit-mode-commands.js.map +1 -1
  340. package/build-module/hooks/push-changes-to-global-styles/index.js +4 -2
  341. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  342. package/build-module/hooks/template-part-edit.js +6 -2
  343. package/build-module/hooks/template-part-edit.js.map +1 -1
  344. package/build-module/index.js +0 -3
  345. package/build-module/index.js.map +1 -1
  346. package/build-module/store/actions.js +37 -80
  347. package/build-module/store/actions.js.map +1 -1
  348. package/build-module/store/private-actions.js +1 -25
  349. package/build-module/store/private-actions.js.map +1 -1
  350. package/build-module/store/private-selectors.js +0 -22
  351. package/build-module/store/private-selectors.js.map +1 -1
  352. package/build-module/store/reducer.js +1 -38
  353. package/build-module/store/reducer.js.map +1 -1
  354. package/build-module/store/selectors.js +27 -62
  355. package/build-module/store/selectors.js.map +1 -1
  356. package/build-module/utils/constants.js +1 -11
  357. package/build-module/utils/constants.js.map +1 -1
  358. package/build-style/style-rtl.css +221 -181
  359. package/build-style/style.css +221 -181
  360. package/package.json +41 -41
  361. package/src/components/actions/index.js +150 -14
  362. package/src/components/add-new-template/new-template.js +0 -5
  363. package/src/components/block-editor/site-editor-canvas.js +8 -2
  364. package/src/components/block-editor/style.scss +0 -87
  365. package/src/components/block-editor/use-site-editor-settings.js +68 -89
  366. package/src/components/dataviews/README.md +80 -83
  367. package/src/components/dataviews/add-filter.js +108 -0
  368. package/src/components/dataviews/constants.js +5 -0
  369. package/src/components/dataviews/dataviews.js +28 -10
  370. package/src/components/dataviews/filter-summary.js +79 -0
  371. package/src/components/dataviews/filters.js +48 -58
  372. package/src/components/dataviews/index.js +1 -1
  373. package/src/components/dataviews/item-actions.js +169 -30
  374. package/src/components/dataviews/pagination.js +9 -4
  375. package/src/components/dataviews/reset-filters.js +26 -0
  376. package/src/components/dataviews/search.js +1 -0
  377. package/src/components/dataviews/style.scss +89 -9
  378. package/src/components/dataviews/view-actions.js +77 -49
  379. package/src/components/dataviews/view-grid.js +63 -38
  380. package/src/components/dataviews/view-list.js +182 -18
  381. package/src/components/dataviews/view-side-by-side.js +9 -0
  382. package/src/components/editor/index.js +135 -123
  383. package/src/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +1 -1
  384. package/src/components/global-styles/font-library-modal/utils/index.js +20 -9
  385. package/src/components/global-styles/font-library-modal/utils/test/getIntersectingFontFaces.spec.js +46 -15
  386. package/src/components/global-styles/font-library-modal/utils/test/wpKebabCase.spec.js +28 -0
  387. package/src/components/global-styles/header.js +2 -1
  388. package/src/components/global-styles/screen-block-list.js +37 -26
  389. package/src/components/global-styles/screen-revisions/index.js +91 -35
  390. package/src/components/global-styles/screen-revisions/revisions-buttons.js +65 -45
  391. package/src/components/global-styles/screen-revisions/style.scss +52 -28
  392. package/src/components/global-styles/screen-revisions/use-global-styles-revisions.js +15 -6
  393. package/src/components/global-styles/screen-root.js +2 -1
  394. package/src/components/global-styles/style.scss +0 -11
  395. package/src/components/global-styles/ui.js +60 -75
  396. package/src/components/global-styles-renderer/index.js +1 -1
  397. package/src/components/header-edit-mode/document-actions/index.js +20 -18
  398. package/src/components/header-edit-mode/document-tools/index.js +201 -0
  399. package/src/components/header-edit-mode/index.js +87 -184
  400. package/src/components/header-edit-mode/more-menu/index.js +1 -1
  401. package/src/components/header-edit-mode/more-menu/site-export.js +2 -6
  402. package/src/components/header-edit-mode/style.scss +35 -2
  403. package/src/components/layout/index.js +4 -11
  404. package/src/components/layout/style.scss +6 -18
  405. package/src/components/list/added-by.js +24 -64
  406. package/src/components/list/style.scss +11 -13
  407. package/src/components/{page-content-focus-manager → page-content-focus-notifications}/back-to-page-notification.js +10 -22
  408. package/src/components/{page-content-focus-manager → page-content-focus-notifications}/edit-template-notification.js +9 -13
  409. package/src/components/page-content-focus-notifications/index.js +14 -0
  410. package/src/components/page-main/index.js +6 -1
  411. package/src/components/page-pages/index.js +167 -91
  412. package/src/components/page-pages/side-editor.js +14 -0
  413. package/src/components/page-patterns/grid-item.js +3 -3
  414. package/src/components/page-patterns/patterns-list.js +10 -4
  415. package/src/components/page-patterns/use-patterns.js +4 -3
  416. package/src/components/page-templates/dataviews-templates.js +345 -0
  417. package/src/components/page-templates/style.scss +13 -0
  418. package/src/components/page-templates/template-actions.js +209 -0
  419. package/src/components/preferences-modal/index.js +1 -1
  420. package/src/components/save-button/index.js +37 -24
  421. package/src/components/save-hub/index.js +15 -0
  422. package/src/components/save-hub/style.scss +7 -0
  423. package/src/components/sidebar/index.js +1 -2
  424. package/src/components/sidebar-dataviews/add-new-view.js +141 -0
  425. package/src/components/sidebar-dataviews/custom-dataviews-list.js +229 -0
  426. package/src/components/sidebar-dataviews/dataview-item.js +67 -0
  427. package/src/components/sidebar-dataviews/default-views.js +59 -0
  428. package/src/components/sidebar-dataviews/index.js +36 -45
  429. package/src/components/sidebar-dataviews/style.scss +29 -0
  430. package/src/components/sidebar-edit-mode/default-sidebar.js +6 -6
  431. package/src/components/sidebar-edit-mode/index.js +13 -9
  432. package/src/components/sidebar-edit-mode/page-panels/edit-template.js +31 -57
  433. package/src/components/sidebar-edit-mode/page-panels/hooks.js +20 -9
  434. package/src/components/sidebar-edit-mode/page-panels/page-status.js +6 -6
  435. package/src/components/sidebar-edit-mode/page-panels/page-summary.js +10 -8
  436. package/src/components/sidebar-edit-mode/page-panels/reset-default-template.js +13 -12
  437. package/src/components/sidebar-edit-mode/page-panels/style.scss +14 -19
  438. package/src/components/sidebar-edit-mode/page-panels/swap-template-button.js +10 -9
  439. package/src/components/sidebar-edit-mode/plugin-sidebar/index.js +6 -6
  440. package/src/components/sidebar-edit-mode/settings-header/index.js +8 -9
  441. package/src/components/sidebar-edit-mode/template-panel/hooks.js +11 -7
  442. package/src/components/sidebar-navigation-screen/style.scss +1 -0
  443. package/src/components/sidebar-navigation-screen-global-styles/index.js +1 -1
  444. package/src/components/sidebar-navigation-screen-navigation-menu/navigation-menu-editor.js +1 -1
  445. package/src/components/sidebar-navigation-screen-page/index.js +24 -3
  446. package/src/components/sidebar-navigation-screen-page/page-details.js +4 -17
  447. package/src/components/sidebar-navigation-screen-patterns/use-theme-patterns.js +2 -2
  448. package/src/components/sidebar-navigation-screen-template/style.scss +6 -1
  449. package/src/components/site-hub/index.js +9 -8
  450. package/src/components/start-template-options/index.js +14 -12
  451. package/src/components/style-book/index.js +48 -35
  452. package/src/components/sync-state-with-url/use-init-edited-entity-from-url.js +182 -63
  453. package/src/components/template-part-converter/convert-to-regular.js +1 -1
  454. package/src/components/welcome-guide/page.js +2 -2
  455. package/src/components/welcome-guide/template.js +4 -2
  456. package/src/hooks/commands/use-edit-mode-commands.js +22 -16
  457. package/src/hooks/push-changes-to-global-styles/index.js +13 -6
  458. package/src/hooks/template-part-edit.js +4 -2
  459. package/src/index.js +0 -8
  460. package/src/store/actions.js +42 -96
  461. package/src/store/private-actions.js +1 -24
  462. package/src/store/private-selectors.js +0 -22
  463. package/src/store/reducer.js +0 -39
  464. package/src/store/selectors.js +43 -95
  465. package/src/store/test/actions.js +14 -169
  466. package/src/store/test/reducer.js +0 -62
  467. package/src/store/test/selectors.js +0 -117
  468. package/src/style.scss +2 -0
  469. package/src/utils/constants.js +1 -11
  470. package/build/components/block-editor/block-editor-provider/default-block-editor-provider.js +0 -77
  471. package/build/components/block-editor/block-editor-provider/default-block-editor-provider.js.map +0 -1
  472. package/build/components/block-editor/block-editor-provider/index.js +0 -31
  473. package/build/components/block-editor/block-editor-provider/index.js.map +0 -1
  474. package/build/components/block-editor/block-editor-provider/navigation-block-editor-provider.js +0 -110
  475. package/build/components/block-editor/block-editor-provider/navigation-block-editor-provider.js.map +0 -1
  476. package/build/components/block-editor/block-editor-provider/use-page-content-blocks.js +0 -84
  477. package/build/components/block-editor/block-editor-provider/use-page-content-blocks.js.map +0 -1
  478. package/build/components/block-editor/index.js +0 -30
  479. package/build/components/block-editor/index.js.map +0 -1
  480. package/build/components/dataviews/in-filter.js +0 -49
  481. package/build/components/dataviews/in-filter.js.map +0 -1
  482. package/build/components/page-content-focus-manager/back-to-page-notification.js.map +0 -1
  483. package/build/components/page-content-focus-manager/disable-non-page-content-blocks.js +0 -50
  484. package/build/components/page-content-focus-manager/disable-non-page-content-blocks.js.map +0 -1
  485. package/build/components/page-content-focus-manager/edit-template-notification.js.map +0 -1
  486. package/build/components/page-content-focus-manager/index.js +0 -61
  487. package/build/components/page-content-focus-manager/index.js.map +0 -1
  488. package/build/components/page-pages/default-views.js +0 -62
  489. package/build/components/page-pages/default-views.js.map +0 -1
  490. package/build/components/sidebar-edit-mode/page-panels/publish-date.js +0 -87
  491. package/build/components/sidebar-edit-mode/page-panels/publish-date.js.map +0 -1
  492. package/build-module/components/block-editor/block-editor-provider/default-block-editor-provider.js +0 -69
  493. package/build-module/components/block-editor/block-editor-provider/default-block-editor-provider.js.map +0 -1
  494. package/build-module/components/block-editor/block-editor-provider/index.js +0 -23
  495. package/build-module/components/block-editor/block-editor-provider/index.js.map +0 -1
  496. package/build-module/components/block-editor/block-editor-provider/navigation-block-editor-provider.js +0 -102
  497. package/build-module/components/block-editor/block-editor-provider/navigation-block-editor-provider.js.map +0 -1
  498. package/build-module/components/block-editor/block-editor-provider/use-page-content-blocks.js +0 -78
  499. package/build-module/components/block-editor/block-editor-provider/use-page-content-blocks.js.map +0 -1
  500. package/build-module/components/block-editor/index.js +0 -22
  501. package/build-module/components/block-editor/index.js.map +0 -1
  502. package/build-module/components/dataviews/in-filter.js +0 -41
  503. package/build-module/components/dataviews/in-filter.js.map +0 -1
  504. package/build-module/components/page-content-focus-manager/back-to-page-notification.js.map +0 -1
  505. package/build-module/components/page-content-focus-manager/disable-non-page-content-blocks.js +0 -43
  506. package/build-module/components/page-content-focus-manager/disable-non-page-content-blocks.js.map +0 -1
  507. package/build-module/components/page-content-focus-manager/edit-template-notification.js.map +0 -1
  508. package/build-module/components/page-content-focus-manager/index.js +0 -52
  509. package/build-module/components/page-content-focus-manager/index.js.map +0 -1
  510. package/build-module/components/page-pages/default-views.js +0 -55
  511. package/build-module/components/page-pages/default-views.js.map +0 -1
  512. package/build-module/components/sidebar-edit-mode/page-panels/publish-date.js +0 -80
  513. package/build-module/components/sidebar-edit-mode/page-panels/publish-date.js.map +0 -1
  514. package/src/components/block-editor/block-editor-provider/default-block-editor-provider.js +0 -75
  515. package/src/components/block-editor/block-editor-provider/index.js +0 -29
  516. package/src/components/block-editor/block-editor-provider/navigation-block-editor-provider.js +0 -114
  517. package/src/components/block-editor/block-editor-provider/test/use-page-content-blocks.js +0 -116
  518. package/src/components/block-editor/block-editor-provider/use-page-content-blocks.js +0 -90
  519. package/src/components/block-editor/index.js +0 -28
  520. package/src/components/dataviews/in-filter.js +0 -45
  521. package/src/components/page-content-focus-manager/disable-non-page-content-blocks.js +0 -52
  522. package/src/components/page-content-focus-manager/index.js +0 -51
  523. package/src/components/page-pages/default-views.js +0 -60
  524. package/src/components/sidebar-edit-mode/page-panels/publish-date.js +0 -94
@@ -0,0 +1,345 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import removeAccents from 'remove-accents';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import {
10
+ Icon,
11
+ __experimentalHeading as Heading,
12
+ __experimentalText as Text,
13
+ __experimentalHStack as HStack,
14
+ __experimentalVStack as VStack,
15
+ VisuallyHidden,
16
+ } from '@wordpress/components';
17
+ import { __, _x } from '@wordpress/i18n';
18
+ import { useState, useMemo, useCallback } from '@wordpress/element';
19
+ import { useEntityRecords } from '@wordpress/core-data';
20
+ import { decodeEntities } from '@wordpress/html-entities';
21
+ import { parse } from '@wordpress/blocks';
22
+ import {
23
+ BlockPreview,
24
+ privateApis as blockEditorPrivateApis,
25
+ } from '@wordpress/block-editor';
26
+
27
+ /**
28
+ * Internal dependencies
29
+ */
30
+ import Page from '../page';
31
+ import Link from '../routes/link';
32
+ import { useAddedBy, AvatarImage } from '../list/added-by';
33
+ import { TEMPLATE_POST_TYPE } from '../../utils/constants';
34
+ import { DataViews } from '../dataviews';
35
+ import { ENUMERATION_TYPE, OPERATOR_IN } from '../dataviews/constants';
36
+ import {
37
+ useResetTemplateAction,
38
+ deleteTemplateAction,
39
+ renameTemplateAction,
40
+ } from './template-actions';
41
+ import usePatternSettings from '../page-patterns/use-pattern-settings';
42
+ import { unlock } from '../../lock-unlock';
43
+
44
+ const { ExperimentalBlockEditorProvider, useGlobalStyle } = unlock(
45
+ blockEditorPrivateApis
46
+ );
47
+
48
+ const EMPTY_ARRAY = [];
49
+
50
+ const defaultConfigPerViewType = {
51
+ list: {},
52
+ grid: {
53
+ mediaField: 'preview',
54
+ primaryField: 'title',
55
+ },
56
+ };
57
+
58
+ const DEFAULT_VIEW = {
59
+ type: 'list',
60
+ search: '',
61
+ page: 1,
62
+ perPage: 20,
63
+ // All fields are visible by default, so it's
64
+ // better to keep track of the hidden ones.
65
+ hiddenFields: [ 'preview' ],
66
+ layout: {},
67
+ filters: [],
68
+ };
69
+
70
+ function normalizeSearchInput( input = '' ) {
71
+ return removeAccents( input.trim().toLowerCase() );
72
+ }
73
+
74
+ // TODO: these are going to be reused in the template part list.
75
+ // That's the reason for leaving the template parts code for now.
76
+ function TemplateTitle( { item } ) {
77
+ const { isCustomized } = useAddedBy( item.type, item.id );
78
+ return (
79
+ <VStack spacing={ 1 }>
80
+ <Heading as="h3" level={ 5 }>
81
+ <Link
82
+ params={ {
83
+ postId: item.id,
84
+ postType: item.type,
85
+ canvas: 'edit',
86
+ } }
87
+ >
88
+ { decodeEntities( item.title?.rendered || item.slug ) ||
89
+ __( '(no title)' ) }
90
+ </Link>
91
+ </Heading>
92
+ { isCustomized && (
93
+ <span className="edit-site-list-added-by__customized-info">
94
+ { item.type === TEMPLATE_POST_TYPE
95
+ ? _x( 'Customized', 'template' )
96
+ : _x( 'Customized', 'template part' ) }
97
+ </span>
98
+ ) }
99
+ </VStack>
100
+ );
101
+ }
102
+
103
+ function AuthorField( { item } ) {
104
+ const { text, icon, imageUrl } = useAddedBy( item.type, item.id );
105
+ return (
106
+ <HStack alignment="left" spacing={ 1 }>
107
+ { imageUrl ? (
108
+ <AvatarImage imageUrl={ imageUrl } />
109
+ ) : (
110
+ <div className="edit-site-list-added-by__icon">
111
+ <Icon icon={ icon } />
112
+ </div>
113
+ ) }
114
+ <span>{ text }</span>
115
+ </HStack>
116
+ );
117
+ }
118
+
119
+ function TemplatePreview( { content, viewType } ) {
120
+ const settings = usePatternSettings();
121
+ const [ backgroundColor = 'white' ] = useGlobalStyle( 'color.background' );
122
+ const blocks = useMemo( () => {
123
+ return parse( content );
124
+ }, [ content ] );
125
+ if ( ! blocks?.length ) {
126
+ return null;
127
+ }
128
+ // Wrap everything in a block editor provider to ensure 'styles' that are needed
129
+ // for the previews are synced between the site editor store and the block editor store.
130
+ // Additionally we need to have the `__experimentalBlockPatterns` setting in order to
131
+ // render patterns inside the previews.
132
+ // TODO: Same approach is used in the patterns list and it becomes obvious that some of
133
+ // the block editor settings are needed in context where we don't have the block editor.
134
+ // Explore how we can solve this in a better way.
135
+ return (
136
+ <ExperimentalBlockEditorProvider settings={ settings }>
137
+ <div
138
+ className={ `page-templates-preview-field is-viewtype-${ viewType }` }
139
+ style={ { backgroundColor } }
140
+ >
141
+ <BlockPreview blocks={ blocks } />
142
+ </div>
143
+ </ExperimentalBlockEditorProvider>
144
+ );
145
+ }
146
+
147
+ export default function DataviewsTemplates() {
148
+ const [ view, setView ] = useState( DEFAULT_VIEW );
149
+ const { records: allTemplates, isResolving: isLoadingData } =
150
+ useEntityRecords( 'postType', TEMPLATE_POST_TYPE, {
151
+ per_page: -1,
152
+ } );
153
+
154
+ const authors = useMemo( () => {
155
+ if ( ! allTemplates ) {
156
+ return EMPTY_ARRAY;
157
+ }
158
+ const authorsSet = new Set();
159
+ allTemplates.forEach( ( template ) => {
160
+ authorsSet.add( template.author_text );
161
+ } );
162
+ return Array.from( authorsSet ).map( ( author ) => ( {
163
+ value: author,
164
+ label: author,
165
+ } ) );
166
+ }, [ allTemplates ] );
167
+
168
+ const fields = useMemo(
169
+ () => [
170
+ {
171
+ header: __( 'Preview' ),
172
+ id: 'preview',
173
+ render: ( { item, view: { type: viewType } } ) => {
174
+ return (
175
+ <TemplatePreview
176
+ content={ item.content.raw }
177
+ viewType={ viewType }
178
+ />
179
+ );
180
+ },
181
+ minWidth: 120,
182
+ maxWidth: 120,
183
+ enableSorting: false,
184
+ },
185
+ {
186
+ header: __( 'Template' ),
187
+ id: 'title',
188
+ getValue: ( { item } ) => item.title?.rendered || item.slug,
189
+ render: ( { item } ) => <TemplateTitle item={ item } />,
190
+ maxWidth: 400,
191
+ enableHiding: false,
192
+ },
193
+ {
194
+ header: __( 'Description' ),
195
+ id: 'description',
196
+ getValue: ( { item } ) => item.description,
197
+ render: ( { item } ) => {
198
+ return item.description ? (
199
+ decodeEntities( item.description )
200
+ ) : (
201
+ <>
202
+ <Text variant="muted" aria-hidden="true">
203
+ &#8212;
204
+ </Text>
205
+ <VisuallyHidden>
206
+ { __( 'No description.' ) }
207
+ </VisuallyHidden>
208
+ </>
209
+ );
210
+ },
211
+ maxWidth: 200,
212
+ enableSorting: false,
213
+ },
214
+ {
215
+ header: __( 'Author' ),
216
+ id: 'author',
217
+ getValue: ( { item } ) => item.author_text,
218
+ render: ( { item } ) => {
219
+ return <AuthorField item={ item } />;
220
+ },
221
+ enableHiding: false,
222
+ type: ENUMERATION_TYPE,
223
+ elements: authors,
224
+ },
225
+ ],
226
+ [ authors ]
227
+ );
228
+
229
+ const { shownTemplates, paginationInfo } = useMemo( () => {
230
+ if ( ! allTemplates ) {
231
+ return {
232
+ shownTemplates: EMPTY_ARRAY,
233
+ paginationInfo: { totalItems: 0, totalPages: 0 },
234
+ };
235
+ }
236
+ let filteredTemplates = [ ...allTemplates ];
237
+ // Handle global search.
238
+ if ( view.search ) {
239
+ const normalizedSearch = normalizeSearchInput( view.search );
240
+ filteredTemplates = filteredTemplates.filter( ( item ) => {
241
+ const title = item.title?.rendered || item.slug;
242
+ return (
243
+ normalizeSearchInput( title ).includes(
244
+ normalizedSearch
245
+ ) ||
246
+ normalizeSearchInput( item.description ).includes(
247
+ normalizedSearch
248
+ )
249
+ );
250
+ } );
251
+ }
252
+
253
+ // Handle filters.
254
+ if ( view.filters.length > 0 ) {
255
+ view.filters.forEach( ( filter ) => {
256
+ if (
257
+ filter.field === 'author' &&
258
+ filter.operator === OPERATOR_IN &&
259
+ !! filter.value
260
+ ) {
261
+ filteredTemplates = filteredTemplates.filter( ( item ) => {
262
+ return item.author_text === filter.value;
263
+ } );
264
+ }
265
+ } );
266
+ }
267
+
268
+ // Handle sorting.
269
+ if ( view.sort ) {
270
+ const stringSortingFields = [ 'title', 'author' ];
271
+ const fieldId = view.sort.field;
272
+ if ( stringSortingFields.includes( fieldId ) ) {
273
+ const fieldToSort = fields.find( ( field ) => {
274
+ return field.id === fieldId;
275
+ } );
276
+ filteredTemplates.sort( ( a, b ) => {
277
+ const valueA = fieldToSort.getValue( { item: a } ) ?? '';
278
+ const valueB = fieldToSort.getValue( { item: b } ) ?? '';
279
+ return view.sort.direction === 'asc'
280
+ ? valueA.localeCompare( valueB )
281
+ : valueB.localeCompare( valueA );
282
+ } );
283
+ }
284
+ }
285
+
286
+ // Handle pagination.
287
+ const start = ( view.page - 1 ) * view.perPage;
288
+ const totalItems = filteredTemplates?.length || 0;
289
+ filteredTemplates = filteredTemplates?.slice(
290
+ start,
291
+ start + view.perPage
292
+ );
293
+ return {
294
+ shownTemplates: filteredTemplates,
295
+ paginationInfo: {
296
+ totalItems,
297
+ totalPages: Math.ceil( totalItems / view.perPage ),
298
+ },
299
+ };
300
+ }, [ allTemplates, view, fields ] );
301
+
302
+ const resetTemplateAction = useResetTemplateAction();
303
+ const actions = useMemo(
304
+ () => [
305
+ resetTemplateAction,
306
+ deleteTemplateAction,
307
+ renameTemplateAction,
308
+ ],
309
+ [ resetTemplateAction ]
310
+ );
311
+ const onChangeView = useCallback(
312
+ ( viewUpdater ) => {
313
+ let updatedView =
314
+ typeof viewUpdater === 'function'
315
+ ? viewUpdater( view )
316
+ : viewUpdater;
317
+ if ( updatedView.type !== view.type ) {
318
+ updatedView = {
319
+ ...updatedView,
320
+ layout: {
321
+ ...defaultConfigPerViewType[ updatedView.type ],
322
+ },
323
+ };
324
+ }
325
+
326
+ setView( updatedView );
327
+ },
328
+ [ view, setView ]
329
+ );
330
+ return (
331
+ <Page title={ __( 'Templates' ) }>
332
+ <DataViews
333
+ paginationInfo={ paginationInfo }
334
+ fields={ fields }
335
+ actions={ actions }
336
+ data={ shownTemplates }
337
+ getItemId={ ( item ) => item.id }
338
+ isLoading={ isLoadingData }
339
+ view={ view }
340
+ onChangeView={ onChangeView }
341
+ supportedLayouts={ [ 'list', 'grid' ] }
342
+ />
343
+ </Page>
344
+ );
345
+ }
@@ -0,0 +1,13 @@
1
+ .page-templates-preview-field {
2
+ &.is-viewtype-list {
3
+ .block-editor-block-preview__container {
4
+ height: 120px;
5
+ }
6
+ }
7
+
8
+ &.is-viewtype-grid {
9
+ .block-editor-block-preview__container {
10
+ height: auto;
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,209 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { backup, trash } from '@wordpress/icons';
5
+ import { __, sprintf } from '@wordpress/i18n';
6
+ import { useDispatch } from '@wordpress/data';
7
+ import { useMemo, useState } from '@wordpress/element';
8
+ import { store as coreStore } from '@wordpress/core-data';
9
+ import { store as noticesStore } from '@wordpress/notices';
10
+ import { decodeEntities } from '@wordpress/html-entities';
11
+ import {
12
+ Button,
13
+ TextControl,
14
+ __experimentalText as Text,
15
+ __experimentalHStack as HStack,
16
+ __experimentalVStack as VStack,
17
+ } from '@wordpress/components';
18
+
19
+ /**
20
+ * Internal dependencies
21
+ */
22
+ import { store as editSiteStore } from '../../store';
23
+ import isTemplateRevertable from '../../utils/is-template-revertable';
24
+ import isTemplateRemovable from '../../utils/is-template-removable';
25
+ import { TEMPLATE_POST_TYPE } from '../../utils/constants';
26
+
27
+ export function useResetTemplateAction() {
28
+ const { revertTemplate } = useDispatch( editSiteStore );
29
+ const { saveEditedEntityRecord } = useDispatch( coreStore );
30
+ const { createSuccessNotice, createErrorNotice } =
31
+ useDispatch( noticesStore );
32
+ return useMemo(
33
+ () => ( {
34
+ id: 'reset-template',
35
+ label: __( 'Reset template' ),
36
+ isPrimary: true,
37
+ icon: backup,
38
+ isEligible: isTemplateRevertable,
39
+ async callback( template ) {
40
+ try {
41
+ await revertTemplate( template, { allowUndo: false } );
42
+ await saveEditedEntityRecord(
43
+ 'postType',
44
+ template.type,
45
+ template.id
46
+ );
47
+
48
+ createSuccessNotice(
49
+ sprintf(
50
+ /* translators: The template/part's name. */
51
+ __( '"%s" reverted.' ),
52
+ decodeEntities( template.title.rendered )
53
+ ),
54
+ {
55
+ type: 'snackbar',
56
+ id: 'edit-site-template-reverted',
57
+ }
58
+ );
59
+ } catch ( error ) {
60
+ const fallbackErrorMessage =
61
+ template.type === TEMPLATE_POST_TYPE
62
+ ? __(
63
+ 'An error occurred while reverting the template.'
64
+ )
65
+ : __(
66
+ 'An error occurred while reverting the template part.'
67
+ );
68
+ const errorMessage =
69
+ error.message && error.code !== 'unknown_error'
70
+ ? error.message
71
+ : fallbackErrorMessage;
72
+
73
+ createErrorNotice( errorMessage, { type: 'snackbar' } );
74
+ }
75
+ },
76
+ } ),
77
+ [
78
+ createErrorNotice,
79
+ createSuccessNotice,
80
+ revertTemplate,
81
+ saveEditedEntityRecord,
82
+ ]
83
+ );
84
+ }
85
+
86
+ export const deleteTemplateAction = {
87
+ id: 'delete-template',
88
+ label: __( 'Delete template' ),
89
+ isPrimary: true,
90
+ icon: trash,
91
+ isEligible: isTemplateRemovable,
92
+ hideModalHeader: true,
93
+ RenderModal: ( { item: template, closeModal } ) => {
94
+ const { removeTemplate } = useDispatch( editSiteStore );
95
+ return (
96
+ <VStack spacing="5">
97
+ <Text>
98
+ { sprintf(
99
+ // translators: %s: The template or template part's title.
100
+ __( 'Are you sure you want to delete "%s"?' ),
101
+ decodeEntities( template.title.rendered )
102
+ ) }
103
+ </Text>
104
+ <HStack justify="right">
105
+ <Button variant="tertiary" onClick={ closeModal }>
106
+ { __( 'Cancel' ) }
107
+ </Button>
108
+ <Button
109
+ variant="primary"
110
+ onClick={ () =>
111
+ removeTemplate( template, {
112
+ allowUndo: false,
113
+ } )
114
+ }
115
+ >
116
+ { __( 'Delete' ) }
117
+ </Button>
118
+ </HStack>
119
+ </VStack>
120
+ );
121
+ },
122
+ };
123
+
124
+ export const renameTemplateAction = {
125
+ id: 'rename-template',
126
+ label: __( 'Rename' ),
127
+ isEligible: ( template ) =>
128
+ isTemplateRemovable( template ) && template.is_custom,
129
+ RenderModal: ( { item: template, closeModal } ) => {
130
+ const title = decodeEntities( template.title.rendered );
131
+ const [ editedTitle, setEditedTitle ] = useState( title );
132
+ const {
133
+ editEntityRecord,
134
+ __experimentalSaveSpecifiedEntityEdits: saveSpecifiedEntityEdits,
135
+ } = useDispatch( coreStore );
136
+ const { createSuccessNotice, createErrorNotice } =
137
+ useDispatch( noticesStore );
138
+ async function onTemplateRename( event ) {
139
+ event.preventDefault();
140
+ try {
141
+ await editEntityRecord(
142
+ 'postType',
143
+ template.type,
144
+ template.id,
145
+ {
146
+ title: editedTitle,
147
+ }
148
+ );
149
+ // Update state before saving rerenders the list.
150
+ setEditedTitle( '' );
151
+ closeModal();
152
+ // Persist edited entity.
153
+ await saveSpecifiedEntityEdits(
154
+ 'postType',
155
+ template.type,
156
+ template.id,
157
+ [ 'title' ], // Only save title to avoid persisting other edits.
158
+ {
159
+ throwOnError: true,
160
+ }
161
+ );
162
+ // TODO: this action will be reused in template parts list, so
163
+ // let's keep this for a bit, even it's always a `template` now.
164
+ createSuccessNotice(
165
+ template.type === TEMPLATE_POST_TYPE
166
+ ? __( 'Template renamed.' )
167
+ : __( 'Template part renamed.' ),
168
+ {
169
+ type: 'snackbar',
170
+ }
171
+ );
172
+ } catch ( error ) {
173
+ const fallbackErrorMessage =
174
+ template.type === TEMPLATE_POST_TYPE
175
+ ? __( 'An error occurred while renaming the template.' )
176
+ : __(
177
+ 'An error occurred while renaming the template part.'
178
+ );
179
+ const errorMessage =
180
+ error.message && error.code !== 'unknown_error'
181
+ ? error.message
182
+ : fallbackErrorMessage;
183
+
184
+ createErrorNotice( errorMessage, { type: 'snackbar' } );
185
+ }
186
+ }
187
+ return (
188
+ <form onSubmit={ onTemplateRename }>
189
+ <VStack spacing="5">
190
+ <TextControl
191
+ __nextHasNoMarginBottom
192
+ label={ __( 'Name' ) }
193
+ value={ editedTitle }
194
+ onChange={ setEditedTitle }
195
+ required
196
+ />
197
+ <HStack justify="right">
198
+ <Button variant="tertiary" onClick={ closeModal }>
199
+ { __( 'Cancel' ) }
200
+ </Button>
201
+ <Button variant="primary" type="submit">
202
+ { __( 'Save' ) }
203
+ </Button>
204
+ </HStack>
205
+ </VStack>
206
+ </form>
207
+ );
208
+ },
209
+ };
@@ -34,7 +34,7 @@ export default function EditSitePreferencesModal() {
34
34
  const { set: setPreference } = useDispatch( preferencesStore );
35
35
  const toggleDistractionFree = () => {
36
36
  registry.batch( () => {
37
- setPreference( 'core/edit-site', 'fixedToolbar', false );
37
+ setPreference( 'core/edit-site', 'fixedToolbar', true );
38
38
  setIsInserterOpened( false );
39
39
  setIsListViewOpened( false );
40
40
  closeGeneralSidebar();
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { useSelect, useDispatch } from '@wordpress/data';
5
5
  import { Button } from '@wordpress/components';
6
- import { __ } from '@wordpress/i18n';
6
+ import { __, sprintf } from '@wordpress/i18n';
7
7
  import { store as coreStore } from '@wordpress/core-data';
8
8
  import { displayShortcut } from '@wordpress/keycodes';
9
9
 
@@ -11,7 +11,10 @@ import { displayShortcut } from '@wordpress/keycodes';
11
11
  * Internal dependencies
12
12
  */
13
13
  import { store as editSiteStore } from '../../store';
14
- import { isPreviewingTheme } from '../../utils/is-previewing-theme';
14
+ import {
15
+ currentlyPreviewingTheme,
16
+ isPreviewingTheme,
17
+ } from '../../utils/is-previewing-theme';
15
18
 
16
19
  export default function SaveButton( {
17
20
  className = 'edit-site-save-button__button',
@@ -21,24 +24,34 @@ export default function SaveButton( {
21
24
  icon,
22
25
  __next40pxDefaultSize = false,
23
26
  } ) {
24
- const { isDirty, isSaving, isSaveViewOpen } = useSelect( ( select ) => {
25
- const {
26
- __experimentalGetDirtyEntityRecords,
27
- isSavingEntityRecord,
28
- isResolving,
29
- } = select( coreStore );
30
- const dirtyEntityRecords = __experimentalGetDirtyEntityRecords();
31
- const { isSaveViewOpened } = select( editSiteStore );
32
- const isActivatingTheme = isResolving( 'activateTheme' );
33
- return {
34
- isDirty: dirtyEntityRecords.length > 0,
35
- isSaving:
36
- dirtyEntityRecords.some( ( record ) =>
37
- isSavingEntityRecord( record.kind, record.name, record.key )
38
- ) || isActivatingTheme,
39
- isSaveViewOpen: isSaveViewOpened(),
40
- };
41
- }, [] );
27
+ const { isDirty, isSaving, isSaveViewOpen, previewingThemeName } =
28
+ useSelect( ( select ) => {
29
+ const {
30
+ __experimentalGetDirtyEntityRecords,
31
+ isSavingEntityRecord,
32
+ isResolving,
33
+ } = select( coreStore );
34
+ const dirtyEntityRecords = __experimentalGetDirtyEntityRecords();
35
+ const { isSaveViewOpened } = select( editSiteStore );
36
+ const isActivatingTheme = isResolving( 'activateTheme' );
37
+ const previewingTheme = select( coreStore ).getTheme(
38
+ currentlyPreviewingTheme()
39
+ );
40
+
41
+ return {
42
+ isDirty: dirtyEntityRecords.length > 0,
43
+ isSaving:
44
+ dirtyEntityRecords.some( ( record ) =>
45
+ isSavingEntityRecord(
46
+ record.kind,
47
+ record.name,
48
+ record.key
49
+ )
50
+ ) || isActivatingTheme,
51
+ isSaveViewOpen: isSaveViewOpened(),
52
+ previewingThemeName: previewingTheme?.name?.rendered,
53
+ };
54
+ }, [] );
42
55
  const { setIsSaveViewOpened } = useDispatch( editSiteStore );
43
56
 
44
57
  const activateSaveEnabled = isPreviewingTheme() || isDirty;
@@ -47,13 +60,13 @@ export default function SaveButton( {
47
60
  const getLabel = () => {
48
61
  if ( isPreviewingTheme() ) {
49
62
  if ( isSaving ) {
50
- return __( 'Activating' );
63
+ return sprintf( 'Activating %s', previewingThemeName );
51
64
  } else if ( disabled ) {
52
65
  return __( 'Saved' );
53
66
  } else if ( isDirty ) {
54
- return __( 'Activate & Save' );
67
+ return sprintf( 'Activate %s & Save', previewingThemeName );
55
68
  }
56
- return __( 'Activate' );
69
+ return sprintf( 'Activate %s', previewingThemeName );
57
70
  }
58
71
 
59
72
  if ( isSaving ) {
@@ -85,7 +98,7 @@ export default function SaveButton( {
85
98
  * Displaying the keyboard shortcut conditionally makes the tooltip
86
99
  * itself show conditionally. This would trigger a full-rerendering
87
100
  * of the button that we want to avoid. By setting `showTooltip`,
88
- & the tooltip is always rendered even when there's no keyboard shortcut.
101
+ * the tooltip is always rendered even when there's no keyboard shortcut.
89
102
  */
90
103
  showTooltip={ showTooltip }
91
104
  icon={ icon }
@@ -106,6 +106,15 @@ export default function SaveHub() {
106
106
  label = __( 'Saving' );
107
107
  }
108
108
 
109
+ const { homeUrl } = useSelect( ( select ) => {
110
+ const {
111
+ getUnstableBase, // Site index.
112
+ } = select( coreStore );
113
+ return {
114
+ homeUrl: getUnstableBase()?.home,
115
+ };
116
+ }, [] );
117
+
109
118
  const saveCurrentEntity = async () => {
110
119
  if ( ! dirtyCurrentEntity ) return;
111
120
 
@@ -135,6 +144,12 @@ export default function SaveHub() {
135
144
 
136
145
  createSuccessNotice( __( 'Site updated.' ), {
137
146
  type: 'snackbar',
147
+ actions: [
148
+ {
149
+ label: __( 'View site' ),
150
+ url: homeUrl,
151
+ },
152
+ ],
138
153
  id: saveNoticeId,
139
154
  } );
140
155
  } catch ( error ) {