@wordpress/edit-site 5.26.0 → 5.27.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 (330) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/actions/index.js +139 -36
  3. package/build/components/actions/index.js.map +1 -1
  4. package/build/components/editor-canvas-container/index.js +1 -1
  5. package/build/components/editor-canvas-container/index.js.map +1 -1
  6. package/build/components/global-styles/font-families.js +3 -2
  7. package/build/components/global-styles/font-families.js.map +1 -1
  8. package/build/components/global-styles/font-family-item.js +3 -4
  9. package/build/components/global-styles/font-family-item.js.map +1 -1
  10. package/build/components/global-styles/font-library-modal/context.js +80 -41
  11. package/build/components/global-styles/font-library-modal/context.js.map +1 -1
  12. package/build/components/global-styles/font-library-modal/font-collection.js +49 -22
  13. package/build/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  14. package/build/components/global-styles/font-library-modal/fonts-grid.js +4 -1
  15. package/build/components/global-styles/font-library-modal/fonts-grid.js.map +1 -1
  16. package/build/components/global-styles/font-library-modal/index.js +4 -4
  17. package/build/components/global-styles/font-library-modal/index.js.map +1 -1
  18. package/build/components/global-styles/font-library-modal/installed-fonts.js +16 -8
  19. package/build/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  20. package/build/components/global-styles/font-library-modal/library-font-card.js +1 -1
  21. package/build/components/global-styles/font-library-modal/library-font-card.js.map +1 -1
  22. package/build/components/global-styles/font-library-modal/library-font-variant.js +2 -2
  23. package/build/components/global-styles/font-library-modal/library-font-variant.js.map +1 -1
  24. package/build/components/global-styles/font-library-modal/local-fonts.js +13 -4
  25. package/build/components/global-styles/font-library-modal/local-fonts.js.map +1 -1
  26. package/build/components/global-styles/font-library-modal/resolvers.js +49 -20
  27. package/build/components/global-styles/font-library-modal/resolvers.js.map +1 -1
  28. package/build/components/global-styles/font-library-modal/utils/filter-fonts.js +17 -2
  29. package/build/components/global-styles/font-library-modal/utils/filter-fonts.js.map +1 -1
  30. package/build/components/global-styles/font-library-modal/utils/index.js +103 -17
  31. package/build/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  32. package/build/components/global-styles/font-library-modal/utils/preview-styles.js +4 -3
  33. package/build/components/global-styles/font-library-modal/utils/preview-styles.js.map +1 -1
  34. package/build/components/global-styles/screen-typography.js +4 -1
  35. package/build/components/global-styles/screen-typography.js.map +1 -1
  36. package/build/components/layout/hooks.js +6 -5
  37. package/build/components/layout/hooks.js.map +1 -1
  38. package/build/components/layout/index.js +19 -28
  39. package/build/components/layout/index.js.map +1 -1
  40. package/build/components/layout/router.js +135 -0
  41. package/build/components/layout/router.js.map +1 -0
  42. package/build/components/page-pages/index.js +92 -69
  43. package/build/components/page-pages/index.js.map +1 -1
  44. package/build/components/page-patterns/dataviews-pattern-actions.js +11 -6
  45. package/build/components/page-patterns/dataviews-pattern-actions.js.map +1 -1
  46. package/build/components/page-patterns/index.js +295 -15
  47. package/build/components/page-patterns/index.js.map +1 -1
  48. package/build/components/{page-templates/template-actions.js → page-templates-template-parts/actions.js} +51 -23
  49. package/build/components/page-templates-template-parts/actions.js.map +1 -0
  50. package/build/components/page-templates-template-parts/add-new-template-part.js.map +1 -0
  51. package/build/components/page-templates-template-parts/index.js +395 -0
  52. package/build/components/page-templates-template-parts/index.js.map +1 -0
  53. package/build/components/preferences-modal/index.js +9 -134
  54. package/build/components/preferences-modal/index.js.map +1 -1
  55. package/build/components/revisions/index.js +1 -1
  56. package/build/components/revisions/index.js.map +1 -1
  57. package/build/components/save-button/index.js +4 -2
  58. package/build/components/save-button/index.js.map +1 -1
  59. package/build/components/save-panel/index.js +6 -5
  60. package/build/components/save-panel/index.js.map +1 -1
  61. package/build/components/sidebar/index.js +3 -1
  62. package/build/components/sidebar/index.js.map +1 -1
  63. package/build/components/sidebar-dataviews/dataview-item.js +3 -1
  64. package/build/components/sidebar-dataviews/dataview-item.js.map +1 -1
  65. package/build/components/sidebar-dataviews/default-views.js +4 -2
  66. package/build/components/sidebar-dataviews/default-views.js.map +1 -1
  67. package/build/components/sidebar-dataviews/index.js +2 -2
  68. package/build/components/sidebar-dataviews/index.js.map +1 -1
  69. package/build/components/sidebar-navigation-screen/index.js +8 -7
  70. package/build/components/sidebar-navigation-screen/index.js.map +1 -1
  71. package/build/components/sidebar-navigation-screen-pages/index.js +2 -10
  72. package/build/components/sidebar-navigation-screen-pages/index.js.map +1 -1
  73. package/build/components/sidebar-navigation-screen-pages-dataviews/index.js +26 -3
  74. package/build/components/sidebar-navigation-screen-pages-dataviews/index.js.map +1 -1
  75. package/build/components/sidebar-navigation-screen-templates/index.js +63 -8
  76. package/build/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  77. package/build/components/sidebar-navigation-screen-templates-browse/content.js +76 -0
  78. package/build/components/sidebar-navigation-screen-templates-browse/content.js.map +1 -0
  79. package/build/components/sidebar-navigation-screen-templates-browse/index.js +9 -2
  80. package/build/components/sidebar-navigation-screen-templates-browse/index.js.map +1 -1
  81. package/build/components/site-hub/index.js +3 -1
  82. package/build/components/site-hub/index.js.map +1 -1
  83. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js +47 -12
  84. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  85. package/build/components/sync-state-with-url/use-sync-path-with-url.js +25 -2
  86. package/build/components/sync-state-with-url/use-sync-path-with-url.js.map +1 -1
  87. package/build/hooks/commands/use-edit-mode-commands.js +33 -5
  88. package/build/hooks/commands/use-edit-mode-commands.js.map +1 -1
  89. package/build/hooks/push-changes-to-global-styles/index.js +13 -6
  90. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  91. package/build/hooks/template-part-edit.js +7 -6
  92. package/build/hooks/template-part-edit.js.map +1 -1
  93. package/build/index.js +1 -1
  94. package/build/index.js.map +1 -1
  95. package/build/store/actions.js +11 -29
  96. package/build/store/actions.js.map +1 -1
  97. package/build/store/private-actions.js +85 -1
  98. package/build/store/private-actions.js.map +1 -1
  99. package/build/store/selectors.js +2 -2
  100. package/build/store/selectors.js.map +1 -1
  101. package/build/utils/get-is-list-page.js +1 -1
  102. package/build/utils/get-is-list-page.js.map +1 -1
  103. package/build/utils/use-actual-current-theme.js +32 -0
  104. package/build/utils/use-actual-current-theme.js.map +1 -0
  105. package/build-module/components/actions/index.js +139 -36
  106. package/build-module/components/actions/index.js.map +1 -1
  107. package/build-module/components/editor-canvas-container/index.js +1 -1
  108. package/build-module/components/editor-canvas-container/index.js.map +1 -1
  109. package/build-module/components/global-styles/font-families.js +3 -2
  110. package/build-module/components/global-styles/font-families.js.map +1 -1
  111. package/build-module/components/global-styles/font-family-item.js +4 -5
  112. package/build-module/components/global-styles/font-family-item.js.map +1 -1
  113. package/build-module/components/global-styles/font-library-modal/context.js +82 -42
  114. package/build-module/components/global-styles/font-library-modal/context.js.map +1 -1
  115. package/build-module/components/global-styles/font-library-modal/font-collection.js +49 -22
  116. package/build-module/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  117. package/build-module/components/global-styles/font-library-modal/fonts-grid.js +4 -1
  118. package/build-module/components/global-styles/font-library-modal/fonts-grid.js.map +1 -1
  119. package/build-module/components/global-styles/font-library-modal/index.js +4 -4
  120. package/build-module/components/global-styles/font-library-modal/index.js.map +1 -1
  121. package/build-module/components/global-styles/font-library-modal/installed-fonts.js +16 -8
  122. package/build-module/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  123. package/build-module/components/global-styles/font-library-modal/library-font-card.js +1 -1
  124. package/build-module/components/global-styles/font-library-modal/library-font-card.js.map +1 -1
  125. package/build-module/components/global-styles/font-library-modal/library-font-variant.js +2 -2
  126. package/build-module/components/global-styles/font-library-modal/library-font-variant.js.map +1 -1
  127. package/build-module/components/global-styles/font-library-modal/local-fonts.js +13 -4
  128. package/build-module/components/global-styles/font-library-modal/local-fonts.js.map +1 -1
  129. package/build-module/components/global-styles/font-library-modal/resolvers.js +45 -18
  130. package/build-module/components/global-styles/font-library-modal/resolvers.js.map +1 -1
  131. package/build-module/components/global-styles/font-library-modal/utils/filter-fonts.js +17 -2
  132. package/build-module/components/global-styles/font-library-modal/utils/filter-fonts.js.map +1 -1
  133. package/build-module/components/global-styles/font-library-modal/utils/index.js +99 -16
  134. package/build-module/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  135. package/build-module/components/global-styles/font-library-modal/utils/preview-styles.js +4 -3
  136. package/build-module/components/global-styles/font-library-modal/utils/preview-styles.js.map +1 -1
  137. package/build-module/components/global-styles/screen-typography.js +4 -1
  138. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  139. package/build-module/components/layout/hooks.js +6 -5
  140. package/build-module/components/layout/hooks.js.map +1 -1
  141. package/build-module/components/layout/index.js +19 -28
  142. package/build-module/components/layout/index.js.map +1 -1
  143. package/build-module/components/layout/router.js +127 -0
  144. package/build-module/components/layout/router.js.map +1 -0
  145. package/build-module/components/page-pages/index.js +91 -70
  146. package/build-module/components/page-pages/index.js.map +1 -1
  147. package/build-module/components/page-patterns/dataviews-pattern-actions.js +11 -6
  148. package/build-module/components/page-patterns/dataviews-pattern-actions.js.map +1 -1
  149. package/build-module/components/page-patterns/index.js +296 -16
  150. package/build-module/components/page-patterns/index.js.map +1 -1
  151. package/build-module/components/{page-templates/template-actions.js → page-templates-template-parts/actions.js} +52 -24
  152. package/build-module/components/page-templates-template-parts/actions.js.map +1 -0
  153. package/build-module/components/page-templates-template-parts/add-new-template-part.js.map +1 -0
  154. package/build-module/components/page-templates-template-parts/index.js +385 -0
  155. package/build-module/components/page-templates-template-parts/index.js.map +1 -0
  156. package/build-module/components/preferences-modal/index.js +12 -136
  157. package/build-module/components/preferences-modal/index.js.map +1 -1
  158. package/build-module/components/revisions/index.js +1 -1
  159. package/build-module/components/revisions/index.js.map +1 -1
  160. package/build-module/components/save-button/index.js +4 -2
  161. package/build-module/components/save-button/index.js.map +1 -1
  162. package/build-module/components/save-panel/index.js +7 -6
  163. package/build-module/components/save-panel/index.js.map +1 -1
  164. package/build-module/components/sidebar/index.js +3 -1
  165. package/build-module/components/sidebar/index.js.map +1 -1
  166. package/build-module/components/sidebar-dataviews/dataview-item.js +3 -1
  167. package/build-module/components/sidebar-dataviews/dataview-item.js.map +1 -1
  168. package/build-module/components/sidebar-dataviews/default-views.js +4 -2
  169. package/build-module/components/sidebar-dataviews/default-views.js.map +1 -1
  170. package/build-module/components/sidebar-dataviews/index.js +2 -2
  171. package/build-module/components/sidebar-dataviews/index.js.map +1 -1
  172. package/build-module/components/sidebar-navigation-screen/index.js +8 -7
  173. package/build-module/components/sidebar-navigation-screen/index.js.map +1 -1
  174. package/build-module/components/sidebar-navigation-screen-pages/index.js +2 -10
  175. package/build-module/components/sidebar-navigation-screen-pages/index.js.map +1 -1
  176. package/build-module/components/sidebar-navigation-screen-pages-dataviews/index.js +27 -4
  177. package/build-module/components/sidebar-navigation-screen-pages-dataviews/index.js.map +1 -1
  178. package/build-module/components/sidebar-navigation-screen-templates/index.js +64 -9
  179. package/build-module/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  180. package/build-module/components/sidebar-navigation-screen-templates-browse/content.js +68 -0
  181. package/build-module/components/sidebar-navigation-screen-templates-browse/content.js.map +1 -0
  182. package/build-module/components/sidebar-navigation-screen-templates-browse/index.js +9 -2
  183. package/build-module/components/sidebar-navigation-screen-templates-browse/index.js.map +1 -1
  184. package/build-module/components/site-hub/index.js +3 -1
  185. package/build-module/components/site-hub/index.js.map +1 -1
  186. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js +47 -11
  187. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  188. package/build-module/components/sync-state-with-url/use-sync-path-with-url.js +25 -2
  189. package/build-module/components/sync-state-with-url/use-sync-path-with-url.js.map +1 -1
  190. package/build-module/hooks/commands/use-edit-mode-commands.js +33 -5
  191. package/build-module/hooks/commands/use-edit-mode-commands.js.map +1 -1
  192. package/build-module/hooks/push-changes-to-global-styles/index.js +13 -6
  193. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  194. package/build-module/hooks/template-part-edit.js +7 -6
  195. package/build-module/hooks/template-part-edit.js.map +1 -1
  196. package/build-module/index.js +1 -1
  197. package/build-module/index.js.map +1 -1
  198. package/build-module/store/actions.js +13 -30
  199. package/build-module/store/actions.js.map +1 -1
  200. package/build-module/store/private-actions.js +83 -0
  201. package/build-module/store/private-actions.js.map +1 -1
  202. package/build-module/store/selectors.js +2 -2
  203. package/build-module/store/selectors.js.map +1 -1
  204. package/build-module/utils/get-is-list-page.js +1 -1
  205. package/build-module/utils/get-is-list-page.js.map +1 -1
  206. package/build-module/utils/use-actual-current-theme.js +24 -0
  207. package/build-module/utils/use-actual-current-theme.js.map +1 -0
  208. package/build-style/style-rtl.css +302 -188
  209. package/build-style/style.css +302 -188
  210. package/package.json +42 -42
  211. package/src/components/actions/index.js +236 -84
  212. package/src/components/editor-canvas-container/index.js +1 -1
  213. package/src/components/global-styles/font-families.js +14 -8
  214. package/src/components/global-styles/font-family-item.js +7 -4
  215. package/src/components/global-styles/font-library-modal/context.js +156 -50
  216. package/src/components/global-styles/font-library-modal/font-collection.js +56 -21
  217. package/src/components/global-styles/font-library-modal/fonts-grid.js +6 -2
  218. package/src/components/global-styles/font-library-modal/index.js +4 -4
  219. package/src/components/global-styles/font-library-modal/installed-fonts.js +18 -8
  220. package/src/components/global-styles/font-library-modal/library-font-card.js +2 -1
  221. package/src/components/global-styles/font-library-modal/library-font-variant.js +10 -9
  222. package/src/components/global-styles/font-library-modal/local-fonts.js +14 -4
  223. package/src/components/global-styles/font-library-modal/resolvers.js +50 -17
  224. package/src/components/global-styles/font-library-modal/style.scss +1 -0
  225. package/src/components/global-styles/font-library-modal/utils/filter-fonts.js +19 -2
  226. package/src/components/global-styles/font-library-modal/utils/index.js +136 -29
  227. package/src/components/global-styles/font-library-modal/utils/preview-styles.js +7 -3
  228. package/src/components/global-styles/font-library-modal/utils/test/filter-fonts.spec.js +40 -10
  229. package/src/components/global-styles/font-library-modal/utils/test/preview-styles.spec.js +5 -5
  230. package/src/components/global-styles/screen-typography.js +9 -3
  231. package/src/components/global-styles/style.scss +4 -0
  232. package/src/components/header-edit-mode/style.scss +15 -5
  233. package/src/components/layout/hooks.js +6 -5
  234. package/src/components/layout/index.js +80 -96
  235. package/src/components/layout/router.js +121 -0
  236. package/src/components/layout/style.scss +13 -16
  237. package/src/components/page/style.scss +1 -8
  238. package/src/components/page-pages/index.js +142 -148
  239. package/src/components/page-pages/style.scss +41 -2
  240. package/src/components/page-patterns/dataviews-pattern-actions.js +11 -6
  241. package/src/components/page-patterns/index.js +392 -14
  242. package/src/components/page-patterns/style.scss +36 -2
  243. package/src/components/{page-templates/template-actions.js → page-templates-template-parts/actions.js} +90 -37
  244. package/src/components/{page-templates → page-templates-template-parts}/index.js +198 -169
  245. package/src/components/page-templates-template-parts/style.scss +44 -0
  246. package/src/components/preferences-modal/index.js +8 -211
  247. package/src/components/revisions/index.js +1 -1
  248. package/src/components/save-button/index.js +7 -4
  249. package/src/components/save-panel/index.js +13 -12
  250. package/src/components/sidebar/index.js +4 -5
  251. package/src/components/sidebar-dataviews/dataview-item.js +2 -1
  252. package/src/components/sidebar-dataviews/default-views.js +4 -2
  253. package/src/components/sidebar-dataviews/index.js +8 -6
  254. package/src/components/sidebar-navigation-item/style.scss +1 -1
  255. package/src/components/sidebar-navigation-screen/index.js +19 -10
  256. package/src/components/sidebar-navigation-screen-pages/index.js +2 -10
  257. package/src/components/sidebar-navigation-screen-pages-dataviews/index.js +32 -6
  258. package/src/components/sidebar-navigation-screen-templates/index.js +85 -28
  259. package/src/components/sidebar-navigation-screen-templates/style.scss +9 -0
  260. package/src/components/sidebar-navigation-screen-templates-browse/content.js +73 -0
  261. package/src/components/sidebar-navigation-screen-templates-browse/index.js +10 -1
  262. package/src/components/site-hub/index.js +4 -1
  263. package/src/components/site-hub/style.scss +1 -12
  264. package/src/components/site-icon/style.scss +1 -1
  265. package/src/components/sync-state-with-url/use-init-edited-entity-from-url.js +40 -10
  266. package/src/components/sync-state-with-url/use-sync-path-with-url.js +32 -0
  267. package/src/hooks/commands/use-edit-mode-commands.js +50 -3
  268. package/src/hooks/push-changes-to-global-styles/index.js +29 -23
  269. package/src/hooks/template-part-edit.js +12 -12
  270. package/src/index.js +1 -1
  271. package/src/store/actions.js +17 -51
  272. package/src/store/private-actions.js +133 -0
  273. package/src/store/selectors.js +2 -4
  274. package/src/style.scss +2 -1
  275. package/src/utils/get-is-list-page.js +3 -2
  276. package/src/utils/use-actual-current-theme.js +27 -0
  277. package/build/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +0 -58
  278. package/build/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js.map +0 -1
  279. package/build/components/global-styles/font-library-modal/utils/get-notice-from-response.js +0 -71
  280. package/build/components/global-styles/font-library-modal/utils/get-notice-from-response.js.map +0 -1
  281. package/build/components/page-main/index.js +0 -44
  282. package/build/components/page-main/index.js.map +0 -1
  283. package/build/components/page-patterns/dataviews-patterns.js +0 -307
  284. package/build/components/page-patterns/dataviews-patterns.js.map +0 -1
  285. package/build/components/page-template-parts/add-new-template-part.js.map +0 -1
  286. package/build/components/page-template-parts/index.js +0 -81
  287. package/build/components/page-template-parts/index.js.map +0 -1
  288. package/build/components/page-templates/index.js +0 -352
  289. package/build/components/page-templates/index.js.map +0 -1
  290. package/build/components/page-templates/template-actions.js.map +0 -1
  291. package/build/components/post-preview/index.js +0 -29
  292. package/build/components/post-preview/index.js.map +0 -1
  293. package/build/components/preferences-modal/enable-feature.js +0 -36
  294. package/build/components/preferences-modal/enable-feature.js.map +0 -1
  295. package/build/components/preferences-modal/enable-panel-option.js +0 -33
  296. package/build/components/preferences-modal/enable-panel-option.js.map +0 -1
  297. package/build-module/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +0 -52
  298. package/build-module/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js.map +0 -1
  299. package/build-module/components/global-styles/font-library-modal/utils/get-notice-from-response.js +0 -63
  300. package/build-module/components/global-styles/font-library-modal/utils/get-notice-from-response.js.map +0 -1
  301. package/build-module/components/page-main/index.js +0 -36
  302. package/build-module/components/page-main/index.js.map +0 -1
  303. package/build-module/components/page-patterns/dataviews-patterns.js +0 -299
  304. package/build-module/components/page-patterns/dataviews-patterns.js.map +0 -1
  305. package/build-module/components/page-template-parts/add-new-template-part.js.map +0 -1
  306. package/build-module/components/page-template-parts/index.js +0 -73
  307. package/build-module/components/page-template-parts/index.js.map +0 -1
  308. package/build-module/components/page-templates/index.js +0 -344
  309. package/build-module/components/page-templates/index.js.map +0 -1
  310. package/build-module/components/page-templates/template-actions.js.map +0 -1
  311. package/build-module/components/post-preview/index.js +0 -21
  312. package/build-module/components/post-preview/index.js.map +0 -1
  313. package/build-module/components/preferences-modal/enable-feature.js +0 -29
  314. package/build-module/components/preferences-modal/enable-feature.js.map +0 -1
  315. package/build-module/components/preferences-modal/enable-panel-option.js +0 -26
  316. package/build-module/components/preferences-modal/enable-panel-option.js.map +0 -1
  317. package/src/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +0 -58
  318. package/src/components/global-styles/font-library-modal/utils/get-notice-from-response.js +0 -62
  319. package/src/components/global-styles/font-library-modal/utils/test/getIntersectingFontFaces.spec.js +0 -271
  320. package/src/components/global-styles/font-library-modal/utils/test/makeFormDataFromFontFamily.spec.js +0 -58
  321. package/src/components/page-main/index.js +0 -38
  322. package/src/components/page-patterns/dataviews-patterns.js +0 -380
  323. package/src/components/page-template-parts/index.js +0 -99
  324. package/src/components/page-templates/style.scss +0 -13
  325. package/src/components/post-preview/index.js +0 -16
  326. package/src/components/preferences-modal/enable-feature.js +0 -31
  327. package/src/components/preferences-modal/enable-panel-option.js +0 -23
  328. /package/build/components/{page-template-parts → page-templates-template-parts}/add-new-template-part.js +0 -0
  329. /package/build-module/components/{page-template-parts → page-templates-template-parts}/add-new-template-part.js +0 -0
  330. /package/src/components/{page-template-parts → page-templates-template-parts}/add-new-template-part.js +0 -0
@@ -8,17 +8,14 @@ import removeAccents from 'remove-accents';
8
8
  */
9
9
  import {
10
10
  Icon,
11
- __experimentalView as View,
12
11
  __experimentalText as Text,
13
12
  __experimentalHStack as HStack,
14
- __experimentalVStack as VStack,
15
13
  VisuallyHidden,
16
14
  } from '@wordpress/components';
17
15
  import { __ } from '@wordpress/i18n';
18
- import { useState, useMemo, useCallback } from '@wordpress/element';
16
+ import { useState, useMemo, useCallback, useEffect } from '@wordpress/element';
19
17
  import { useEntityRecords } from '@wordpress/core-data';
20
18
  import { decodeEntities } from '@wordpress/html-entities';
21
- import { ENTER, SPACE } from '@wordpress/keycodes';
22
19
  import { parse } from '@wordpress/blocks';
23
20
  import {
24
21
  BlockPreview,
@@ -35,11 +32,12 @@ import { privateApis as routerPrivateApis } from '@wordpress/router';
35
32
  * Internal dependencies
36
33
  */
37
34
  import Page from '../page';
38
- import Link from '../routes/link';
35
+ import { default as Link, useLink } from '../routes/link';
39
36
  import AddNewTemplate from '../add-new-template';
40
37
  import { useAddedBy, AvatarImage } from '../list/added-by';
41
38
  import {
42
39
  TEMPLATE_POST_TYPE,
40
+ TEMPLATE_PART_POST_TYPE,
43
41
  ENUMERATION_TYPE,
44
42
  OPERATOR_IN,
45
43
  OPERATOR_NOT_IN,
@@ -51,21 +49,27 @@ import {
51
49
  useResetTemplateAction,
52
50
  deleteTemplateAction,
53
51
  renameTemplateAction,
54
- } from './template-actions';
52
+ } from './actions';
55
53
  import { postRevisionsAction } from '../actions';
56
54
  import usePatternSettings from '../page-patterns/use-pattern-settings';
57
55
  import { unlock } from '../../lock-unlock';
58
- import PostPreview from '../post-preview';
56
+ import AddNewTemplatePart from './add-new-template-part';
59
57
 
60
58
  const { ExperimentalBlockEditorProvider, useGlobalStyle } = unlock(
61
59
  blockEditorPrivateApis
62
60
  );
63
- const { useHistory } = unlock( routerPrivateApis );
61
+ const { useHistory, useLocation } = unlock( routerPrivateApis );
64
62
 
65
63
  const EMPTY_ARRAY = [];
66
64
 
65
+ const SUPPORTED_LAYOUTS = window?.__experimentalAdminViews
66
+ ? [ LAYOUT_TABLE, LAYOUT_GRID, LAYOUT_LIST ]
67
+ : [ LAYOUT_TABLE, LAYOUT_GRID ];
68
+
67
69
  const defaultConfigPerViewType = {
68
- [ LAYOUT_TABLE ]: {},
70
+ [ LAYOUT_TABLE ]: {
71
+ primaryField: 'title',
72
+ },
69
73
  [ LAYOUT_GRID ]: {
70
74
  mediaField: 'preview',
71
75
  primaryField: 'title',
@@ -81,10 +85,14 @@ const DEFAULT_VIEW = {
81
85
  search: '',
82
86
  page: 1,
83
87
  perPage: 20,
88
+ sort: {
89
+ field: 'title',
90
+ direction: 'asc',
91
+ },
84
92
  // All fields are visible by default, so it's
85
93
  // better to keep track of the hidden ones.
86
94
  hiddenFields: [ 'preview' ],
87
- layout: {},
95
+ layout: defaultConfigPerViewType[ LAYOUT_TABLE ],
88
96
  filters: [],
89
97
  };
90
98
 
@@ -92,30 +100,26 @@ function normalizeSearchInput( input = '' ) {
92
100
  return removeAccents( input.trim().toLowerCase() );
93
101
  }
94
102
 
95
- function TemplateTitle( { item, viewType } ) {
103
+ function Title( { item, viewType } ) {
96
104
  if ( viewType === LAYOUT_LIST ) {
97
- return (
98
- <>
99
- { decodeEntities( item.title?.rendered ) || __( '(no title)' ) }
100
- </>
101
- );
105
+ return decodeEntities( item.title?.rendered ) || __( '(no title)' );
106
+ }
107
+ const linkProps = {
108
+ params: {
109
+ postId: item.id,
110
+ postType: item.type,
111
+ canvas: 'edit',
112
+ },
113
+ };
114
+ if ( item.type === TEMPLATE_PART_POST_TYPE ) {
115
+ linkProps.state = {
116
+ backPath: '/wp_template_part/all',
117
+ };
102
118
  }
103
-
104
119
  return (
105
- <VStack spacing={ 1 }>
106
- <View as="span" className="dataviews-view-grid__title-field">
107
- <Link
108
- params={ {
109
- postId: item.id,
110
- postType: item.type,
111
- canvas: 'edit',
112
- } }
113
- >
114
- { decodeEntities( item.title?.rendered ) ||
115
- __( '(no title)' ) }
116
- </Link>
117
- </View>
118
- </VStack>
120
+ <Link { ...linkProps }>
121
+ { decodeEntities( item.title?.rendered ) || __( '(no title)' ) }
122
+ </Link>
119
123
  );
120
124
  }
121
125
 
@@ -136,15 +140,18 @@ function AuthorField( { item, viewType } ) {
136
140
  );
137
141
  }
138
142
 
139
- function TemplatePreview( { content, viewType } ) {
143
+ function Preview( { item, viewType } ) {
140
144
  const settings = usePatternSettings();
141
145
  const [ backgroundColor = 'white' ] = useGlobalStyle( 'color.background' );
142
146
  const blocks = useMemo( () => {
143
- return parse( content );
144
- }, [ content ] );
145
- if ( ! blocks?.length ) {
146
- return null;
147
- }
147
+ return parse( item.content.raw );
148
+ }, [ item.content.raw ] );
149
+ const { onClick } = useLink( {
150
+ postId: item.id,
151
+ postType: item.type,
152
+ canvas: 'edit',
153
+ } );
154
+ const isEmpty = ! blocks?.length;
148
155
  // Wrap everything in a block editor provider to ensure 'styles' that are needed
149
156
  // for the previews are synced between the site editor store and the block editor store.
150
157
  // Additionally we need to have the `__experimentalBlockPatterns` setting in order to
@@ -158,116 +165,178 @@ function TemplatePreview( { content, viewType } ) {
158
165
  className={ `page-templates-preview-field is-viewtype-${ viewType }` }
159
166
  style={ { backgroundColor } }
160
167
  >
161
- <BlockPreview blocks={ blocks } />
168
+ <button
169
+ className="page-templates-preview-field__button"
170
+ type="button"
171
+ onClick={ onClick }
172
+ aria-label={ item.title?.rendered || item.title }
173
+ >
174
+ { isEmpty &&
175
+ ( item.type === TEMPLATE_POST_TYPE
176
+ ? __( 'Empty template' )
177
+ : __( 'Empty template part' ) ) }
178
+ { ! isEmpty && <BlockPreview blocks={ blocks } /> }
179
+ </button>
162
180
  </div>
163
181
  </ExperimentalBlockEditorProvider>
164
182
  );
165
183
  }
166
184
 
167
- export default function DataviewsTemplates() {
168
- const [ templateId, setTemplateId ] = useState( null );
169
- const [ view, setView ] = useState( DEFAULT_VIEW );
170
- const { records: allTemplates, isResolving: isLoadingData } =
171
- useEntityRecords( 'postType', TEMPLATE_POST_TYPE, {
185
+ export default function PageTemplatesTemplateParts( { postType } ) {
186
+ const { params } = useLocation();
187
+ const { activeView = 'all', layout } = params;
188
+ const defaultView = useMemo( () => {
189
+ return {
190
+ ...DEFAULT_VIEW,
191
+ type: window?.__experimentalAdminViews
192
+ ? layout ?? DEFAULT_VIEW.type
193
+ : DEFAULT_VIEW.type,
194
+ filters:
195
+ activeView !== 'all'
196
+ ? [
197
+ {
198
+ field: 'author',
199
+ operator: 'in',
200
+ value: activeView,
201
+ },
202
+ ]
203
+ : [],
204
+ };
205
+ }, [ layout, activeView ] );
206
+ const [ view, setView ] = useState( defaultView );
207
+ useEffect( () => {
208
+ setView( ( currentView ) => ( {
209
+ ...currentView,
210
+ filters:
211
+ activeView !== 'all'
212
+ ? [
213
+ {
214
+ field: 'author',
215
+ operator: 'in',
216
+ value: activeView,
217
+ },
218
+ ]
219
+ : [],
220
+ } ) );
221
+ }, [ activeView ] );
222
+
223
+ const { records, isResolving: isLoadingData } = useEntityRecords(
224
+ 'postType',
225
+ postType,
226
+ {
172
227
  per_page: -1,
173
- } );
228
+ }
229
+ );
174
230
  const history = useHistory();
175
-
176
231
  const onSelectionChange = useCallback(
177
- ( items ) =>
178
- setTemplateId( items?.length === 1 ? items[ 0 ].id : null ),
179
- [ setTemplateId ]
232
+ ( items ) => {
233
+ if ( view?.type === LAYOUT_LIST ) {
234
+ history.push( {
235
+ ...params,
236
+ postId: items.length === 1 ? items[ 0 ].id : undefined,
237
+ } );
238
+ }
239
+ },
240
+ [ history, params, view?.type ]
180
241
  );
181
242
 
182
243
  const authors = useMemo( () => {
183
- if ( ! allTemplates ) {
244
+ if ( ! records ) {
184
245
  return EMPTY_ARRAY;
185
246
  }
186
247
  const authorsSet = new Set();
187
- allTemplates.forEach( ( template ) => {
248
+ records.forEach( ( template ) => {
188
249
  authorsSet.add( template.author_text );
189
250
  } );
190
251
  return Array.from( authorsSet ).map( ( author ) => ( {
191
252
  value: author,
192
253
  label: author,
193
254
  } ) );
194
- }, [ allTemplates ] );
255
+ }, [ records ] );
195
256
 
196
- const fields = useMemo(
197
- () => [
257
+ const fields = useMemo( () => {
258
+ const _fields = [
198
259
  {
199
260
  header: __( 'Preview' ),
200
261
  id: 'preview',
201
262
  render: ( { item } ) => {
202
- return (
203
- <TemplatePreview
204
- content={ item.content.raw }
205
- viewType={ view.type }
206
- />
207
- );
263
+ return <Preview item={ item } viewType={ view.type } />;
208
264
  },
209
265
  minWidth: 120,
210
266
  maxWidth: 120,
211
267
  enableSorting: false,
212
268
  },
213
269
  {
214
- header: __( 'Template' ),
270
+ header:
271
+ postType === TEMPLATE_POST_TYPE
272
+ ? __( 'Template' )
273
+ : __( 'Template Part' ),
215
274
  id: 'title',
216
275
  getValue: ( { item } ) => item.title?.rendered,
217
276
  render: ( { item } ) => (
218
- <TemplateTitle item={ item } viewType={ view.type } />
277
+ <Title item={ item } viewType={ view.type } />
219
278
  ),
220
279
  maxWidth: 400,
221
280
  enableHiding: false,
222
281
  },
223
- {
282
+ ];
283
+ if ( postType === TEMPLATE_POST_TYPE ) {
284
+ _fields.push( {
224
285
  header: __( 'Description' ),
225
286
  id: 'description',
226
287
  getValue: ( { item } ) => item.description,
227
288
  render: ( { item } ) => {
228
289
  return item.description ? (
229
- decodeEntities( item.description )
290
+ <span className="page-templates-description">
291
+ { decodeEntities( item.description ) }
292
+ </span>
230
293
  ) : (
231
- <>
232
- <Text variant="muted" aria-hidden="true">
233
- &#8212;
234
- </Text>
235
- <VisuallyHidden>
236
- { __( 'No description.' ) }
237
- </VisuallyHidden>
238
- </>
294
+ view.type === LAYOUT_TABLE && (
295
+ <>
296
+ <Text variant="muted" aria-hidden="true">
297
+ &#8212;
298
+ </Text>
299
+ <VisuallyHidden>
300
+ { __( 'No description.' ) }
301
+ </VisuallyHidden>
302
+ </>
303
+ )
239
304
  );
240
305
  },
241
- maxWidth: 200,
306
+ maxWidth: 400,
307
+ minWidth: 320,
242
308
  enableSorting: false,
309
+ } );
310
+ }
311
+ // TODO: The plan is to support fields reordering, which would require an API like `order` or something
312
+ // similar. With the aforementioned API we wouldn't need to construct the fields array like this.
313
+ _fields.push( {
314
+ header: __( 'Author' ),
315
+ id: 'author',
316
+ getValue: ( { item } ) => item.author_text,
317
+ render: ( { item } ) => {
318
+ return <AuthorField viewType={ view.type } item={ item } />;
243
319
  },
244
- {
245
- header: __( 'Author' ),
246
- id: 'author',
247
- getValue: ( { item } ) => item.author_text,
248
- render: ( { item } ) => {
249
- return <AuthorField viewType={ view.type } item={ item } />;
250
- },
251
- enableHiding: false,
252
- type: ENUMERATION_TYPE,
253
- elements: authors,
254
- },
255
- ],
256
- [ authors, view.type ]
257
- );
320
+ enableHiding: false,
321
+ type: ENUMERATION_TYPE,
322
+ elements: authors,
323
+ width: '1%',
324
+ } );
325
+ return _fields;
326
+ }, [ postType, authors, view.type ] );
258
327
 
259
328
  const { data, paginationInfo } = useMemo( () => {
260
- if ( ! allTemplates ) {
329
+ if ( ! records ) {
261
330
  return {
262
331
  data: EMPTY_ARRAY,
263
332
  paginationInfo: { totalItems: 0, totalPages: 0 },
264
333
  };
265
334
  }
266
- let filteredTemplates = [ ...allTemplates ];
335
+ let filteredData = [ ...records ];
267
336
  // Handle global search.
268
337
  if ( view.search ) {
269
338
  const normalizedSearch = normalizeSearchInput( view.search );
270
- filteredTemplates = filteredTemplates.filter( ( item ) => {
339
+ filteredData = filteredData.filter( ( item ) => {
271
340
  const title = item.title?.rendered || item.slug;
272
341
  return (
273
342
  normalizeSearchInput( title ).includes(
@@ -288,7 +357,7 @@ export default function DataviewsTemplates() {
288
357
  filter.operator === OPERATOR_IN &&
289
358
  !! filter.value
290
359
  ) {
291
- filteredTemplates = filteredTemplates.filter( ( item ) => {
360
+ filteredData = filteredData.filter( ( item ) => {
292
361
  return item.author_text === filter.value;
293
362
  } );
294
363
  } else if (
@@ -296,7 +365,7 @@ export default function DataviewsTemplates() {
296
365
  filter.operator === OPERATOR_NOT_IN &&
297
366
  !! filter.value
298
367
  ) {
299
- filteredTemplates = filteredTemplates.filter( ( item ) => {
368
+ filteredData = filteredData.filter( ( item ) => {
300
369
  return item.author_text !== filter.value;
301
370
  } );
302
371
  }
@@ -305,19 +374,19 @@ export default function DataviewsTemplates() {
305
374
 
306
375
  // Handle sorting.
307
376
  if ( view.sort ) {
308
- filteredTemplates = sortByTextFields( {
309
- data: filteredTemplates,
377
+ filteredData = sortByTextFields( {
378
+ data: filteredData,
310
379
  view,
311
380
  fields,
312
- textFields: [ 'title' ],
381
+ textFields: [ 'title', 'author' ],
313
382
  } );
314
383
  }
315
384
  // Handle pagination.
316
385
  return getPaginationResults( {
317
- data: filteredTemplates,
386
+ data: filteredData,
318
387
  view,
319
388
  } );
320
- }, [ allTemplates, view, fields ] );
389
+ }, [ records, view, fields ] );
321
390
 
322
391
  const resetTemplateAction = useResetTemplateAction();
323
392
  const actions = useMemo(
@@ -339,89 +408,49 @@ export default function DataviewsTemplates() {
339
408
  ...defaultConfigPerViewType[ newView.type ],
340
409
  },
341
410
  };
411
+
412
+ history.push( {
413
+ ...params,
414
+ layout: newView.type,
415
+ } );
342
416
  }
343
417
 
344
418
  setView( newView );
345
419
  },
346
- [ view.type, setView ]
420
+ [ view.type, setView, history, params ]
347
421
  );
348
422
 
349
423
  return (
350
- <>
351
- <Page
352
- className={
353
- view.type === LAYOUT_LIST
354
- ? 'edit-site-template-pages-list-view'
355
- : null
356
- }
357
- title={ __( 'Templates' ) }
358
- actions={
424
+ <Page
425
+ title={
426
+ postType === TEMPLATE_POST_TYPE
427
+ ? __( 'Templates' )
428
+ : __( 'Template Parts' )
429
+ }
430
+ actions={
431
+ postType === TEMPLATE_POST_TYPE ? (
359
432
  <AddNewTemplate
360
- templateType={ TEMPLATE_POST_TYPE }
433
+ templateType={ postType }
361
434
  showIcon={ false }
362
435
  toggleProps={ { variant: 'primary' } }
363
436
  />
364
- }
365
- >
366
- <DataViews
367
- paginationInfo={ paginationInfo }
368
- fields={ fields }
369
- actions={ actions }
370
- data={ data }
371
- isLoading={ isLoadingData }
372
- view={ view }
373
- onChangeView={ onChangeView }
374
- onSelectionChange={ onSelectionChange }
375
- deferredRendering={
376
- ! view.hiddenFields?.includes( 'preview' )
377
- }
378
- />
379
- </Page>
380
- { view.type === LAYOUT_LIST && (
381
- <Page>
382
- <div
383
- className="edit-site-template-pages-preview"
384
- tabIndex={ 0 }
385
- role="button"
386
- onKeyDown={ ( event ) => {
387
- const { keyCode } = event;
388
- if ( keyCode === ENTER || keyCode === SPACE ) {
389
- history.push( {
390
- postId: templateId,
391
- postType: TEMPLATE_POST_TYPE,
392
- canvas: 'edit',
393
- } );
394
- }
395
- } }
396
- onClick={ () =>
397
- history.push( {
398
- postId: templateId,
399
- postType: TEMPLATE_POST_TYPE,
400
- canvas: 'edit',
401
- } )
402
- }
403
- >
404
- { templateId !== null ? (
405
- <PostPreview
406
- postId={ templateId }
407
- postType={ TEMPLATE_POST_TYPE }
408
- />
409
- ) : (
410
- <div
411
- style={ {
412
- display: 'flex',
413
- flexDirection: 'column',
414
- justifyContent: 'center',
415
- textAlign: 'center',
416
- height: '100%',
417
- } }
418
- >
419
- <p>{ __( 'Select a template to preview' ) }</p>
420
- </div>
421
- ) }
422
- </div>
423
- </Page>
424
- ) }
425
- </>
437
+ ) : (
438
+ <AddNewTemplatePart />
439
+ )
440
+ }
441
+ >
442
+ <DataViews
443
+ paginationInfo={ paginationInfo }
444
+ fields={ fields }
445
+ actions={ actions }
446
+ data={ data }
447
+ isLoading={ isLoadingData }
448
+ view={ view }
449
+ onChangeView={ onChangeView }
450
+ onSelectionChange={ onSelectionChange }
451
+ deferredRendering={ ! view.hiddenFields?.includes( 'preview' ) }
452
+ supportedLayouts={ SUPPORTED_LAYOUTS }
453
+ />
454
+ </Page>
426
455
  );
427
456
  }
@@ -0,0 +1,44 @@
1
+ .page-templates-preview-field {
2
+ display: flex;
3
+ flex-direction: column;
4
+ height: 100%;
5
+ border-radius: 3px 3px 0 0;
6
+
7
+ .page-templates-preview-field__button {
8
+ box-shadow: none;
9
+ border: none;
10
+ padding: 0;
11
+ background-color: unset;
12
+ box-sizing: border-box;
13
+ cursor: pointer;
14
+ overflow: hidden;
15
+ height: 100%;
16
+ border-radius: 3px;
17
+
18
+ &:focus-visible {
19
+ box-shadow: 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
20
+ // Windows High Contrast mode will show this outline, but not the box-shadow.
21
+ outline: 2px solid transparent;
22
+ }
23
+ }
24
+
25
+ &.is-viewtype-list {
26
+ .block-editor-block-preview__container {
27
+ height: 120px;
28
+ }
29
+ }
30
+
31
+ &.is-viewtype-grid {
32
+ .block-editor-block-preview__container {
33
+ height: auto;
34
+ }
35
+
36
+ .page-templates-preview-field__button {
37
+ border-radius: 3px 3px 0 0;
38
+ }
39
+ }
40
+ }
41
+
42
+ .page-templates-description {
43
+ white-space: normal;
44
+ }