@wordpress/edit-site 5.18.0 → 5.19.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 (427) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/add-new-pattern/index.js +62 -1
  3. package/build/components/add-new-pattern/index.js.map +1 -1
  4. package/build/components/add-new-template/index.js +3 -2
  5. package/build/components/add-new-template/index.js.map +1 -1
  6. package/build/components/add-new-template/new-template.js +6 -1
  7. package/build/components/add-new-template/new-template.js.map +1 -1
  8. package/build/components/add-new-template/utils.js +6 -1
  9. package/build/components/add-new-template/utils.js.map +1 -1
  10. package/build/components/app/index.js +2 -7
  11. package/build/components/app/index.js.map +1 -1
  12. package/build/components/block-editor/back-button.js +3 -2
  13. package/build/components/block-editor/back-button.js.map +1 -1
  14. package/build/components/block-editor/editor-canvas.js +20 -16
  15. package/build/components/block-editor/editor-canvas.js.map +1 -1
  16. package/build/components/block-editor/site-editor-canvas.js +1 -3
  17. package/build/components/block-editor/site-editor-canvas.js.map +1 -1
  18. package/build/components/block-editor/use-site-editor-settings.js +8 -4
  19. package/build/components/block-editor/use-site-editor-settings.js.map +1 -1
  20. package/build/components/canvas-loader/index.js +18 -1
  21. package/build/components/canvas-loader/index.js.map +1 -1
  22. package/build/components/editor/index.js +3 -8
  23. package/build/components/editor/index.js.map +1 -1
  24. package/build/components/global-styles/dimensions-panel.js +5 -4
  25. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  26. package/build/components/global-styles/font-families.js +68 -0
  27. package/build/components/global-styles/font-families.js.map +1 -0
  28. package/build/components/global-styles/font-family-item.js +47 -0
  29. package/build/components/global-styles/font-family-item.js.map +1 -0
  30. package/build/components/global-styles/font-library-modal/confirm-delete-dialog.js +31 -0
  31. package/build/components/global-styles/font-library-modal/confirm-delete-dialog.js.map +1 -0
  32. package/build/components/global-styles/font-library-modal/context.js +285 -0
  33. package/build/components/global-styles/font-library-modal/context.js.map +1 -0
  34. package/build/components/global-styles/font-library-modal/font-card.js +58 -0
  35. package/build/components/global-styles/font-library-modal/font-card.js.map +1 -0
  36. package/build/components/global-styles/font-library-modal/font-demo.js +69 -0
  37. package/build/components/global-styles/font-library-modal/font-demo.js.map +1 -0
  38. package/build/components/global-styles/font-library-modal/font-variant.js +51 -0
  39. package/build/components/global-styles/font-library-modal/font-variant.js.map +1 -0
  40. package/build/components/global-styles/font-library-modal/fonts-grid.js +54 -0
  41. package/build/components/global-styles/font-library-modal/fonts-grid.js.map +1 -0
  42. package/build/components/global-styles/font-library-modal/index.js +47 -0
  43. package/build/components/global-styles/font-library-modal/index.js.map +1 -0
  44. package/build/components/global-styles/font-library-modal/installed-fonts.js +128 -0
  45. package/build/components/global-styles/font-library-modal/installed-fonts.js.map +1 -0
  46. package/build/components/global-styles/font-library-modal/library-font-card.js +44 -0
  47. package/build/components/global-styles/font-library-modal/library-font-card.js.map +1 -0
  48. package/build/components/global-styles/font-library-modal/library-font-details.js +43 -0
  49. package/build/components/global-styles/font-library-modal/library-font-details.js.map +1 -0
  50. package/build/components/global-styles/font-library-modal/library-font-variant.js +59 -0
  51. package/build/components/global-styles/font-library-modal/library-font-variant.js.map +1 -0
  52. package/build/components/global-styles/font-library-modal/local-fonts.js +143 -0
  53. package/build/components/global-styles/font-library-modal/local-fonts.js.map +1 -0
  54. package/build/components/global-styles/font-library-modal/resolvers.js +37 -0
  55. package/build/components/global-styles/font-library-modal/resolvers.js.map +1 -0
  56. package/build/components/global-styles/font-library-modal/tab-layout.js +45 -0
  57. package/build/components/global-styles/font-library-modal/tab-layout.js.map +1 -0
  58. package/build/components/global-styles/font-library-modal/utils/constants.js +37 -0
  59. package/build/components/global-styles/font-library-modal/utils/constants.js.map +1 -0
  60. package/build/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +58 -0
  61. package/build/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js.map +1 -0
  62. package/build/components/global-styles/font-library-modal/utils/index.js +205 -0
  63. package/build/components/global-styles/font-library-modal/utils/index.js.map +1 -0
  64. package/build/components/global-styles/font-library-modal/utils/make-families-from-faces.js +22 -0
  65. package/build/components/global-styles/font-library-modal/utils/make-families-from-faces.js.map +1 -0
  66. package/build/components/global-styles/font-library-modal/utils/toggleFont.js +92 -0
  67. package/build/components/global-styles/font-library-modal/utils/toggleFont.js.map +1 -0
  68. package/build/components/global-styles/global-styles-provider.js +7 -12
  69. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  70. package/build/components/global-styles/screen-block.js +34 -21
  71. package/build/components/global-styles/screen-block.js.map +1 -1
  72. package/build/components/global-styles/screen-revisions/index.js +1 -3
  73. package/build/components/global-styles/screen-revisions/index.js.map +1 -1
  74. package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js +0 -1
  75. package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js.map +1 -1
  76. package/build/components/global-styles/screen-typography.js +4 -72
  77. package/build/components/global-styles/screen-typography.js.map +1 -1
  78. package/build/components/global-styles/style-variations-container.js +3 -5
  79. package/build/components/global-styles/style-variations-container.js.map +1 -1
  80. package/build/components/global-styles/typogrphy-elements.js +96 -0
  81. package/build/components/global-styles/typogrphy-elements.js.map +1 -0
  82. package/build/components/page-patterns/duplicate-menu-item.js +52 -16
  83. package/build/components/page-patterns/duplicate-menu-item.js.map +1 -1
  84. package/build/components/page-patterns/grid-item.js +46 -20
  85. package/build/components/page-patterns/grid-item.js.map +1 -1
  86. package/build/components/page-patterns/header.js +3 -7
  87. package/build/components/page-patterns/header.js.map +1 -1
  88. package/build/components/page-patterns/index.js +3 -3
  89. package/build/components/page-patterns/index.js.map +1 -1
  90. package/build/components/page-patterns/patterns-list.js +7 -7
  91. package/build/components/page-patterns/patterns-list.js.map +1 -1
  92. package/build/components/page-patterns/rename-menu-item.js +6 -5
  93. package/build/components/page-patterns/rename-menu-item.js.map +1 -1
  94. package/build/components/page-patterns/search-items.js +8 -2
  95. package/build/components/page-patterns/search-items.js.map +1 -1
  96. package/build/components/page-patterns/use-patterns.js +53 -27
  97. package/build/components/page-patterns/use-patterns.js.map +1 -1
  98. package/build/components/page-patterns/utils.js +1 -20
  99. package/build/components/page-patterns/utils.js.map +1 -1
  100. package/build/components/sidebar-edit-mode/page-panels/edit-template.js +33 -24
  101. package/build/components/sidebar-edit-mode/page-panels/edit-template.js.map +1 -1
  102. package/build/components/sidebar-edit-mode/page-panels/hooks.js +64 -0
  103. package/build/components/sidebar-edit-mode/page-panels/hooks.js.map +1 -0
  104. package/build/components/sidebar-edit-mode/page-panels/index.js +1 -4
  105. package/build/components/sidebar-edit-mode/page-panels/index.js.map +1 -1
  106. package/build/components/sidebar-edit-mode/page-panels/page-summary.js +2 -1
  107. package/build/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
  108. package/build/components/sidebar-edit-mode/page-panels/reset-default-template.js +56 -0
  109. package/build/components/sidebar-edit-mode/page-panels/reset-default-template.js.map +1 -0
  110. package/build/components/sidebar-edit-mode/page-panels/swap-template-button.js +91 -0
  111. package/build/components/sidebar-edit-mode/page-panels/swap-template-button.js.map +1 -0
  112. package/build/components/sidebar-edit-mode/template-panel/index.js +11 -9
  113. package/build/components/sidebar-edit-mode/template-panel/index.js.map +1 -1
  114. package/build/components/sidebar-edit-mode/template-panel/last-revision.js +6 -4
  115. package/build/components/sidebar-edit-mode/template-panel/last-revision.js.map +1 -1
  116. package/build/components/sidebar-edit-mode/template-panel/pattern-categories.js +211 -0
  117. package/build/components/sidebar-edit-mode/template-panel/pattern-categories.js.map +1 -0
  118. package/build/components/sidebar-navigation-screen/index.js +6 -4
  119. package/build/components/sidebar-navigation-screen/index.js.map +1 -1
  120. package/build/components/sidebar-navigation-screen-details-footer/index.js +32 -4
  121. package/build/components/sidebar-navigation-screen-details-footer/index.js.map +1 -1
  122. package/build/components/sidebar-navigation-screen-details-panel/sidebar-navigation-screen-details-panel-row.js +4 -2
  123. package/build/components/sidebar-navigation-screen-details-panel/sidebar-navigation-screen-details-panel-row.js.map +1 -1
  124. package/build/components/sidebar-navigation-screen-global-styles/index.js +4 -31
  125. package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  126. package/build/components/sidebar-navigation-screen-page/index.js +3 -3
  127. package/build/components/sidebar-navigation-screen-page/index.js.map +1 -1
  128. package/build/components/sidebar-navigation-screen-pattern/index.js +18 -8
  129. package/build/components/sidebar-navigation-screen-pattern/index.js.map +1 -1
  130. package/build/components/sidebar-navigation-screen-pattern/use-pattern-details.js +34 -5
  131. package/build/components/sidebar-navigation-screen-pattern/use-pattern-details.js.map +1 -1
  132. package/build/components/sidebar-navigation-screen-patterns/index.js +7 -35
  133. package/build/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  134. package/build/components/sidebar-navigation-screen-patterns/use-pattern-categories.js +38 -4
  135. package/build/components/sidebar-navigation-screen-patterns/use-pattern-categories.js.map +1 -1
  136. package/build/components/sidebar-navigation-screen-patterns/use-theme-patterns.js +2 -1
  137. package/build/components/sidebar-navigation-screen-patterns/use-theme-patterns.js.map +1 -1
  138. package/build/components/sidebar-navigation-screen-template/index.js +2 -2
  139. package/build/components/sidebar-navigation-screen-template/index.js.map +1 -1
  140. package/build/components/sidebar-navigation-screen-templates/index.js +1 -1
  141. package/build/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  142. package/build/components/template-actions/index.js +7 -4
  143. package/build/components/template-actions/index.js.map +1 -1
  144. package/build/components/template-actions/rename-menu-item.js +3 -2
  145. package/build/components/template-actions/rename-menu-item.js.map +1 -1
  146. package/build/components/welcome-guide/styles.js +2 -2
  147. package/build/components/welcome-guide/styles.js.map +1 -1
  148. package/build/hooks/push-changes-to-global-styles/index.js +5 -37
  149. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  150. package/build/store/actions.js +29 -6
  151. package/build/store/actions.js.map +1 -1
  152. package/build/utils/constants.js +45 -2
  153. package/build/utils/constants.js.map +1 -1
  154. package/build/utils/is-template-removable.js +6 -1
  155. package/build/utils/is-template-removable.js.map +1 -1
  156. package/build/utils/is-template-revertable.js +6 -1
  157. package/build/utils/is-template-revertable.js.map +1 -1
  158. package/build-module/components/add-new-pattern/index.js +66 -5
  159. package/build-module/components/add-new-pattern/index.js.map +1 -1
  160. package/build-module/components/add-new-template/index.js +3 -2
  161. package/build-module/components/add-new-template/index.js.map +1 -1
  162. package/build-module/components/add-new-template/new-template.js +6 -1
  163. package/build-module/components/add-new-template/new-template.js.map +1 -1
  164. package/build-module/components/add-new-template/utils.js +6 -1
  165. package/build-module/components/add-new-template/utils.js.map +1 -1
  166. package/build-module/components/app/index.js +2 -7
  167. package/build-module/components/app/index.js.map +1 -1
  168. package/build-module/components/block-editor/back-button.js +3 -2
  169. package/build-module/components/block-editor/back-button.js.map +1 -1
  170. package/build-module/components/block-editor/editor-canvas.js +21 -17
  171. package/build-module/components/block-editor/editor-canvas.js.map +1 -1
  172. package/build-module/components/block-editor/site-editor-canvas.js +3 -5
  173. package/build-module/components/block-editor/site-editor-canvas.js.map +1 -1
  174. package/build-module/components/block-editor/use-site-editor-settings.js +8 -4
  175. package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
  176. package/build-module/components/canvas-loader/index.js +18 -1
  177. package/build-module/components/canvas-loader/index.js.map +1 -1
  178. package/build-module/components/editor/index.js +3 -8
  179. package/build-module/components/editor/index.js.map +1 -1
  180. package/build-module/components/global-styles/dimensions-panel.js +5 -4
  181. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  182. package/build-module/components/global-styles/font-families.js +58 -0
  183. package/build-module/components/global-styles/font-families.js.map +1 -0
  184. package/build-module/components/global-styles/font-family-item.js +40 -0
  185. package/build-module/components/global-styles/font-family-item.js.map +1 -0
  186. package/build-module/components/global-styles/font-library-modal/confirm-delete-dialog.js +23 -0
  187. package/build-module/components/global-styles/font-library-modal/confirm-delete-dialog.js.map +1 -0
  188. package/build-module/components/global-styles/font-library-modal/context.js +276 -0
  189. package/build-module/components/global-styles/font-library-modal/context.js.map +1 -0
  190. package/build-module/components/global-styles/font-library-modal/font-card.js +49 -0
  191. package/build-module/components/global-styles/font-library-modal/font-card.js.map +1 -0
  192. package/build-module/components/global-styles/font-library-modal/font-demo.js +62 -0
  193. package/build-module/components/global-styles/font-library-modal/font-demo.js.map +1 -0
  194. package/build-module/components/global-styles/font-library-modal/font-variant.js +42 -0
  195. package/build-module/components/global-styles/font-library-modal/font-variant.js.map +1 -0
  196. package/build-module/components/global-styles/font-library-modal/fonts-grid.js +47 -0
  197. package/build-module/components/global-styles/font-library-modal/fonts-grid.js.map +1 -0
  198. package/build-module/components/global-styles/font-library-modal/index.js +38 -0
  199. package/build-module/components/global-styles/font-library-modal/index.js.map +1 -0
  200. package/build-module/components/global-styles/font-library-modal/installed-fonts.js +120 -0
  201. package/build-module/components/global-styles/font-library-modal/installed-fonts.js.map +1 -0
  202. package/build-module/components/global-styles/font-library-modal/library-font-card.js +36 -0
  203. package/build-module/components/global-styles/font-library-modal/library-font-card.js.map +1 -0
  204. package/build-module/components/global-styles/font-library-modal/library-font-details.js +34 -0
  205. package/build-module/components/global-styles/font-library-modal/library-font-details.js.map +1 -0
  206. package/build-module/components/global-styles/font-library-modal/library-font-variant.js +50 -0
  207. package/build-module/components/global-styles/font-library-modal/library-font-variant.js.map +1 -0
  208. package/build-module/components/global-styles/font-library-modal/local-fonts.js +135 -0
  209. package/build-module/components/global-styles/font-library-modal/local-fonts.js.map +1 -0
  210. package/build-module/components/global-styles/font-library-modal/resolvers.js +28 -0
  211. package/build-module/components/global-styles/font-library-modal/resolvers.js.map +1 -0
  212. package/build-module/components/global-styles/font-library-modal/tab-layout.js +37 -0
  213. package/build-module/components/global-styles/font-library-modal/tab-layout.js.map +1 -0
  214. package/build-module/components/global-styles/font-library-modal/utils/constants.js +26 -0
  215. package/build-module/components/global-styles/font-library-modal/utils/constants.js.map +1 -0
  216. package/build-module/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +52 -0
  217. package/build-module/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js.map +1 -0
  218. package/build-module/components/global-styles/font-library-modal/utils/index.js +190 -0
  219. package/build-module/components/global-styles/font-library-modal/utils/index.js.map +1 -0
  220. package/build-module/components/global-styles/font-library-modal/utils/make-families-from-faces.js +16 -0
  221. package/build-module/components/global-styles/font-library-modal/utils/make-families-from-faces.js.map +1 -0
  222. package/build-module/components/global-styles/font-library-modal/utils/toggleFont.js +86 -0
  223. package/build-module/components/global-styles/font-library-modal/utils/toggleFont.js.map +1 -0
  224. package/build-module/components/global-styles/global-styles-provider.js +7 -12
  225. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  226. package/build-module/components/global-styles/screen-block.js +34 -21
  227. package/build-module/components/global-styles/screen-block.js.map +1 -1
  228. package/build-module/components/global-styles/screen-revisions/index.js +1 -3
  229. package/build-module/components/global-styles/screen-revisions/index.js.map +1 -1
  230. package/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js +0 -1
  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-typography.js +6 -74
  233. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  234. package/build-module/components/global-styles/style-variations-container.js +3 -5
  235. package/build-module/components/global-styles/style-variations-container.js.map +1 -1
  236. package/build-module/components/global-styles/typogrphy-elements.js +87 -0
  237. package/build-module/components/global-styles/typogrphy-elements.js.map +1 -0
  238. package/build-module/components/page-patterns/duplicate-menu-item.js +51 -16
  239. package/build-module/components/page-patterns/duplicate-menu-item.js.map +1 -1
  240. package/build-module/components/page-patterns/grid-item.js +47 -21
  241. package/build-module/components/page-patterns/grid-item.js.map +1 -1
  242. package/build-module/components/page-patterns/header.js +3 -7
  243. package/build-module/components/page-patterns/header.js.map +1 -1
  244. package/build-module/components/page-patterns/index.js +3 -3
  245. package/build-module/components/page-patterns/index.js.map +1 -1
  246. package/build-module/components/page-patterns/patterns-list.js +7 -7
  247. package/build-module/components/page-patterns/patterns-list.js.map +1 -1
  248. package/build-module/components/page-patterns/rename-menu-item.js +6 -5
  249. package/build-module/components/page-patterns/rename-menu-item.js.map +1 -1
  250. package/build-module/components/page-patterns/search-items.js +8 -2
  251. package/build-module/components/page-patterns/search-items.js.map +1 -1
  252. package/build-module/components/page-patterns/use-patterns.js +54 -28
  253. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  254. package/build-module/components/page-patterns/utils.js +0 -11
  255. package/build-module/components/page-patterns/utils.js.map +1 -1
  256. package/build-module/components/sidebar-edit-mode/page-panels/edit-template.js +34 -27
  257. package/build-module/components/sidebar-edit-mode/page-panels/edit-template.js.map +1 -1
  258. package/build-module/components/sidebar-edit-mode/page-panels/hooks.js +54 -0
  259. package/build-module/components/sidebar-edit-mode/page-panels/hooks.js.map +1 -0
  260. package/build-module/components/sidebar-edit-mode/page-panels/index.js +1 -4
  261. package/build-module/components/sidebar-edit-mode/page-panels/index.js.map +1 -1
  262. package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js +2 -1
  263. package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
  264. package/build-module/components/sidebar-edit-mode/page-panels/reset-default-template.js +49 -0
  265. package/build-module/components/sidebar-edit-mode/page-panels/reset-default-template.js.map +1 -0
  266. package/build-module/components/sidebar-edit-mode/page-panels/swap-template-button.js +85 -0
  267. package/build-module/components/sidebar-edit-mode/page-panels/swap-template-button.js.map +1 -0
  268. package/build-module/components/sidebar-edit-mode/template-panel/index.js +12 -10
  269. package/build-module/components/sidebar-edit-mode/template-panel/index.js.map +1 -1
  270. package/build-module/components/sidebar-edit-mode/template-panel/last-revision.js +8 -6
  271. package/build-module/components/sidebar-edit-mode/template-panel/last-revision.js.map +1 -1
  272. package/build-module/components/sidebar-edit-mode/template-panel/pattern-categories.js +202 -0
  273. package/build-module/components/sidebar-edit-mode/template-panel/pattern-categories.js.map +1 -0
  274. package/build-module/components/sidebar-navigation-screen/index.js +6 -4
  275. package/build-module/components/sidebar-navigation-screen/index.js.map +1 -1
  276. package/build-module/components/sidebar-navigation-screen-details-footer/index.js +32 -5
  277. package/build-module/components/sidebar-navigation-screen-details-footer/index.js.map +1 -1
  278. package/build-module/components/sidebar-navigation-screen-details-panel/sidebar-navigation-screen-details-panel-row.js +4 -2
  279. package/build-module/components/sidebar-navigation-screen-details-panel/sidebar-navigation-screen-details-panel-row.js.map +1 -1
  280. package/build-module/components/sidebar-navigation-screen-global-styles/index.js +6 -33
  281. package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  282. package/build-module/components/sidebar-navigation-screen-page/index.js +3 -3
  283. package/build-module/components/sidebar-navigation-screen-page/index.js.map +1 -1
  284. package/build-module/components/sidebar-navigation-screen-pattern/index.js +19 -9
  285. package/build-module/components/sidebar-navigation-screen-pattern/index.js.map +1 -1
  286. package/build-module/components/sidebar-navigation-screen-pattern/use-pattern-details.js +34 -5
  287. package/build-module/components/sidebar-navigation-screen-pattern/use-pattern-details.js.map +1 -1
  288. package/build-module/components/sidebar-navigation-screen-patterns/index.js +10 -38
  289. package/build-module/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  290. package/build-module/components/sidebar-navigation-screen-patterns/use-pattern-categories.js +38 -4
  291. package/build-module/components/sidebar-navigation-screen-patterns/use-pattern-categories.js.map +1 -1
  292. package/build-module/components/sidebar-navigation-screen-patterns/use-theme-patterns.js +3 -2
  293. package/build-module/components/sidebar-navigation-screen-patterns/use-theme-patterns.js.map +1 -1
  294. package/build-module/components/sidebar-navigation-screen-template/index.js +2 -2
  295. package/build-module/components/sidebar-navigation-screen-template/index.js.map +1 -1
  296. package/build-module/components/sidebar-navigation-screen-templates/index.js +1 -1
  297. package/build-module/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  298. package/build-module/components/template-actions/index.js +7 -4
  299. package/build-module/components/template-actions/index.js.map +1 -1
  300. package/build-module/components/template-actions/rename-menu-item.js +3 -2
  301. package/build-module/components/template-actions/rename-menu-item.js.map +1 -1
  302. package/build-module/components/welcome-guide/styles.js +2 -2
  303. package/build-module/components/welcome-guide/styles.js.map +1 -1
  304. package/build-module/hooks/push-changes-to-global-styles/index.js +5 -37
  305. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  306. package/build-module/store/actions.js +30 -7
  307. package/build-module/store/actions.js.map +1 -1
  308. package/build-module/utils/constants.js +35 -1
  309. package/build-module/utils/constants.js.map +1 -1
  310. package/build-module/utils/is-template-removable.js +6 -1
  311. package/build-module/utils/is-template-removable.js.map +1 -1
  312. package/build-module/utils/is-template-revertable.js +6 -1
  313. package/build-module/utils/is-template-revertable.js.map +1 -1
  314. package/build-style/style-rtl.css +244 -37
  315. package/build-style/style.css +244 -37
  316. package/lib/inflate.js +4082 -0
  317. package/lib/lib-font.browser.js +3831 -0
  318. package/lib/unbrotli.js +2679 -0
  319. package/package.json +40 -40
  320. package/src/components/add-new-pattern/index.js +83 -5
  321. package/src/components/add-new-template/index.js +3 -2
  322. package/src/components/add-new-template/new-template.js +6 -1
  323. package/src/components/add-new-template/utils.js +12 -3
  324. package/src/components/app/index.js +9 -12
  325. package/src/components/block-editor/back-button.js +6 -2
  326. package/src/components/block-editor/editor-canvas.js +31 -19
  327. package/src/components/block-editor/site-editor-canvas.js +2 -10
  328. package/src/components/block-editor/style.scss +88 -1
  329. package/src/components/block-editor/use-site-editor-settings.js +26 -19
  330. package/src/components/canvas-loader/index.js +12 -1
  331. package/src/components/canvas-loader/style.scss +1 -1
  332. package/src/components/editor/index.js +3 -8
  333. package/src/components/global-styles/dimensions-panel.js +8 -4
  334. package/src/components/global-styles/font-families.js +71 -0
  335. package/src/components/global-styles/font-family-item.js +44 -0
  336. package/src/components/global-styles/font-library-modal/confirm-delete-dialog.js +33 -0
  337. package/src/components/global-styles/font-library-modal/context.js +347 -0
  338. package/src/components/global-styles/font-library-modal/font-card.js +70 -0
  339. package/src/components/global-styles/font-library-modal/font-demo.js +57 -0
  340. package/src/components/global-styles/font-library-modal/font-variant.js +53 -0
  341. package/src/components/global-styles/font-library-modal/fonts-grid.js +55 -0
  342. package/src/components/global-styles/font-library-modal/index.js +42 -0
  343. package/src/components/global-styles/font-library-modal/installed-fonts.js +174 -0
  344. package/src/components/global-styles/font-library-modal/library-font-card.js +40 -0
  345. package/src/components/global-styles/font-library-modal/library-font-details.js +46 -0
  346. package/src/components/global-styles/font-library-modal/library-font-variant.js +54 -0
  347. package/src/components/global-styles/font-library-modal/local-fonts.js +160 -0
  348. package/src/components/global-styles/font-library-modal/resolvers.js +29 -0
  349. package/src/components/global-styles/font-library-modal/style.scss +113 -0
  350. package/src/components/global-styles/font-library-modal/tab-layout.js +50 -0
  351. package/src/components/global-styles/font-library-modal/utils/constants.js +31 -0
  352. package/src/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +58 -0
  353. package/src/components/global-styles/font-library-modal/utils/index.js +213 -0
  354. package/src/components/global-styles/font-library-modal/utils/make-families-from-faces.js +15 -0
  355. package/src/components/global-styles/font-library-modal/utils/test/getDisplaySrcFromFontFace.spec.js +53 -0
  356. package/src/components/global-styles/font-library-modal/utils/test/getFontFaceVariantName.spec.js +30 -0
  357. package/src/components/global-styles/font-library-modal/utils/test/getIntersectingFontFaces.spec.js +240 -0
  358. package/src/components/global-styles/font-library-modal/utils/test/getPreviewStyle.spec.js +121 -0
  359. package/src/components/global-styles/font-library-modal/utils/test/isUrlEncoded.spec.js +31 -0
  360. package/src/components/global-styles/font-library-modal/utils/test/makeFamiliesFromFaces.spec.js +57 -0
  361. package/src/components/global-styles/font-library-modal/utils/test/makeFormDataFromFontFamilies.spec.js +62 -0
  362. package/src/components/global-styles/font-library-modal/utils/test/mergeFontFaces.spec.js +56 -0
  363. package/src/components/global-styles/font-library-modal/utils/test/mergeFontFamilies.spec.js +108 -0
  364. package/src/components/global-styles/font-library-modal/utils/test/setUIValuesNeeded.spec.js +41 -0
  365. package/src/components/global-styles/font-library-modal/utils/test/toggleFont.spec.js +141 -0
  366. package/src/components/global-styles/font-library-modal/utils/toggleFont.js +90 -0
  367. package/src/components/global-styles/global-styles-provider.js +2 -7
  368. package/src/components/global-styles/screen-block.js +42 -20
  369. package/src/components/global-styles/screen-revisions/index.js +0 -2
  370. package/src/components/global-styles/screen-revisions/use-global-styles-revisions.js +0 -1
  371. package/src/components/global-styles/screen-typography.js +7 -95
  372. package/src/components/global-styles/style-variations-container.js +0 -2
  373. package/src/components/global-styles/typogrphy-elements.js +110 -0
  374. package/src/components/list/style.scss +2 -0
  375. package/src/components/page-patterns/duplicate-menu-item.js +63 -20
  376. package/src/components/page-patterns/grid-item.js +77 -30
  377. package/src/components/page-patterns/header.js +3 -12
  378. package/src/components/page-patterns/index.js +3 -3
  379. package/src/components/page-patterns/patterns-list.js +7 -7
  380. package/src/components/page-patterns/rename-menu-item.js +18 -7
  381. package/src/components/page-patterns/search-items.js +14 -2
  382. package/src/components/page-patterns/style.scss +1 -5
  383. package/src/components/page-patterns/use-patterns.js +67 -33
  384. package/src/components/page-patterns/utils.js +0 -19
  385. package/src/components/sidebar-edit-mode/page-panels/edit-template.js +47 -33
  386. package/src/components/sidebar-edit-mode/page-panels/hooks.js +83 -0
  387. package/src/components/sidebar-edit-mode/page-panels/index.js +0 -4
  388. package/src/components/sidebar-edit-mode/page-panels/page-summary.js +2 -0
  389. package/src/components/sidebar-edit-mode/page-panels/reset-default-template.js +44 -0
  390. package/src/components/sidebar-edit-mode/page-panels/style.scss +41 -10
  391. package/src/components/sidebar-edit-mode/page-panels/swap-template-button.js +82 -0
  392. package/src/components/sidebar-edit-mode/template-panel/index.js +28 -24
  393. package/src/components/sidebar-edit-mode/template-panel/last-revision.js +19 -15
  394. package/src/components/sidebar-edit-mode/template-panel/pattern-categories.js +270 -0
  395. package/src/components/sidebar-navigation-screen/index.js +4 -9
  396. package/src/components/sidebar-navigation-screen/style.scss +7 -1
  397. package/src/components/sidebar-navigation-screen-details-footer/index.js +38 -10
  398. package/src/components/sidebar-navigation-screen-details-footer/style.scss +10 -3
  399. package/src/components/sidebar-navigation-screen-details-panel/sidebar-navigation-screen-details-panel-row.js +2 -0
  400. package/src/components/sidebar-navigation-screen-global-styles/index.js +6 -44
  401. package/src/components/sidebar-navigation-screen-navigation-menus/style.scss +0 -4
  402. package/src/components/sidebar-navigation-screen-page/index.js +3 -3
  403. package/src/components/sidebar-navigation-screen-pattern/index.js +20 -7
  404. package/src/components/sidebar-navigation-screen-pattern/style.scss +0 -3
  405. package/src/components/sidebar-navigation-screen-pattern/use-pattern-details.js +46 -13
  406. package/src/components/sidebar-navigation-screen-patterns/index.js +14 -49
  407. package/src/components/sidebar-navigation-screen-patterns/use-pattern-categories.js +48 -6
  408. package/src/components/sidebar-navigation-screen-patterns/use-theme-patterns.js +3 -5
  409. package/src/components/sidebar-navigation-screen-template/index.js +2 -4
  410. package/src/components/sidebar-navigation-screen-templates/index.js +1 -1
  411. package/src/components/template-actions/index.js +14 -8
  412. package/src/components/template-actions/rename-menu-item.js +15 -4
  413. package/src/components/welcome-guide/styles.js +2 -2
  414. package/src/hooks/push-changes-to-global-styles/index.js +6 -49
  415. package/src/store/actions.js +39 -13
  416. package/src/store/test/actions.js +0 -1
  417. package/src/store/test/reducer.js +0 -1
  418. package/src/style.scss +1 -1
  419. package/src/utils/constants.js +38 -3
  420. package/src/utils/is-template-removable.js +8 -1
  421. package/src/utils/is-template-revertable.js +8 -1
  422. package/build/components/sidebar-navigation-screen-patterns/use-my-patterns.js +0 -30
  423. package/build/components/sidebar-navigation-screen-patterns/use-my-patterns.js.map +0 -1
  424. package/build-module/components/sidebar-navigation-screen-patterns/use-my-patterns.js +0 -23
  425. package/build-module/components/sidebar-navigation-screen-patterns/use-my-patterns.js.map +0 -1
  426. package/src/components/sidebar-navigation-screen-global-styles/style.scss +0 -12
  427. package/src/components/sidebar-navigation-screen-patterns/use-my-patterns.js +0 -24
@@ -211,11 +211,7 @@
211
211
  }
212
212
 
213
213
  .edit-site-patterns__pattern-lock-icon {
214
- display: inline-flex;
215
-
216
- svg {
217
- fill: currentcolor;
218
- }
214
+ fill: currentcolor;
219
215
  }
220
216
  }
221
217
 
@@ -10,14 +10,13 @@ import { decodeEntities } from '@wordpress/html-entities';
10
10
  /**
11
11
  * Internal dependencies
12
12
  */
13
+ import { filterOutDuplicatesByName } from './utils';
13
14
  import {
14
- CORE_PATTERN_SOURCES,
15
- PATTERNS,
16
- SYNC_TYPES,
17
- TEMPLATE_PARTS,
18
- USER_PATTERNS,
19
- filterOutDuplicatesByName,
20
- } from './utils';
15
+ PATTERN_CORE_SOURCES,
16
+ PATTERN_TYPES,
17
+ PATTERN_SYNC_TYPES,
18
+ TEMPLATE_PART_POST_TYPE,
19
+ } from '../../utils/constants';
21
20
  import { unlock } from '../../lock-unlock';
22
21
  import { searchItems } from './search-items';
23
22
  import { store as editSiteStore } from '../../store';
@@ -50,7 +49,7 @@ const selectTemplatePartsAsPatterns = (
50
49
  const { __experimentalGetDefaultTemplatePartAreas } = select( editorStore );
51
50
  const query = { per_page: -1 };
52
51
  const rawTemplateParts =
53
- getEntityRecords( 'postType', TEMPLATE_PARTS, query ) ??
52
+ getEntityRecords( 'postType', TEMPLATE_PART_POST_TYPE, query ) ??
54
53
  EMPTY_PATTERN_LIST;
55
54
  const templateParts = rawTemplateParts.map( ( templatePart ) =>
56
55
  templatePartToPattern( templatePart )
@@ -87,7 +86,7 @@ const selectTemplatePartsAsPatterns = (
87
86
  return { patterns, isResolving };
88
87
  };
89
88
 
90
- const selectThemePatterns = ( select, { categoryId, search = '' } = {} ) => {
89
+ const selectThemePatterns = ( select ) => {
91
90
  const { getSettings } = unlock( select( editSiteStore ) );
92
91
  const settings = getSettings();
93
92
  const blockPatterns =
@@ -96,24 +95,41 @@ const selectThemePatterns = ( select, { categoryId, search = '' } = {} ) => {
96
95
 
97
96
  const restBlockPatterns = select( coreStore ).getBlockPatterns();
98
97
 
99
- let patterns = [
98
+ const patterns = [
100
99
  ...( blockPatterns || [] ),
101
100
  ...( restBlockPatterns || [] ),
102
101
  ]
103
102
  .filter(
104
- ( pattern ) => ! CORE_PATTERN_SOURCES.includes( pattern.source )
103
+ ( pattern ) => ! PATTERN_CORE_SOURCES.includes( pattern.source )
105
104
  )
106
105
  .filter( filterOutDuplicatesByName )
107
106
  .filter( ( pattern ) => pattern.inserter !== false )
108
107
  .map( ( pattern ) => ( {
109
108
  ...pattern,
110
109
  keywords: pattern.keywords || [],
111
- type: 'pattern',
110
+ type: PATTERN_TYPES.theme,
112
111
  blocks: parse( pattern.content, {
113
112
  __unstableSkipMigrationLogs: true,
114
113
  } ),
115
114
  } ) );
116
115
 
116
+ return { patterns, isResolving: false };
117
+ };
118
+ const selectPatterns = (
119
+ select,
120
+ { categoryId, search = '', syncStatus } = {}
121
+ ) => {
122
+ const { patterns: themePatterns } = selectThemePatterns( select );
123
+ const { patterns: userPatterns } = selectUserPatterns( select );
124
+
125
+ let patterns = [ ...( themePatterns || [] ), ...( userPatterns || [] ) ];
126
+
127
+ if ( syncStatus ) {
128
+ patterns = patterns.filter(
129
+ ( pattern ) => pattern.syncStatus === syncStatus
130
+ );
131
+ }
132
+
117
133
  if ( categoryId ) {
118
134
  patterns = searchItems( patterns, search, {
119
135
  categoryId,
@@ -125,35 +141,49 @@ const selectThemePatterns = ( select, { categoryId, search = '' } = {} ) => {
125
141
  hasCategory: ( item ) => ! item.hasOwnProperty( 'categories' ),
126
142
  } );
127
143
  }
128
-
129
144
  return { patterns, isResolving: false };
130
145
  };
131
146
 
132
- const reusableBlockToPattern = ( reusableBlock ) => ( {
133
- blocks: parse( reusableBlock.content.raw, {
147
+ const patternBlockToPattern = ( patternBlock, categories ) => ( {
148
+ blocks: parse( patternBlock.content.raw, {
134
149
  __unstableSkipMigrationLogs: true,
135
150
  } ),
136
- categories: reusableBlock.wp_pattern,
137
- id: reusableBlock.id,
138
- name: reusableBlock.slug,
139
- syncStatus: reusableBlock.wp_pattern_sync_status || SYNC_TYPES.full,
140
- title: reusableBlock.title.raw,
141
- type: reusableBlock.type,
142
- reusableBlock,
151
+ ...( patternBlock.wp_pattern_category.length > 0 && {
152
+ categories: patternBlock.wp_pattern_category.map(
153
+ ( patternCategoryId ) =>
154
+ categories && categories.get( patternCategoryId )
155
+ ? categories.get( patternCategoryId ).slug
156
+ : patternCategoryId
157
+ ),
158
+ } ),
159
+ id: patternBlock.id,
160
+ name: patternBlock.slug,
161
+ syncStatus: patternBlock.wp_pattern_sync_status || PATTERN_SYNC_TYPES.full,
162
+ title: patternBlock.title.raw,
163
+ type: PATTERN_TYPES.user,
164
+ patternBlock,
143
165
  } );
144
166
 
145
167
  const selectUserPatterns = ( select, { search = '', syncStatus } = {} ) => {
146
- const { getEntityRecords, getIsResolving } = select( coreStore );
168
+ const { getEntityRecords, getIsResolving, getUserPatternCategories } =
169
+ select( coreStore );
147
170
 
148
171
  const query = { per_page: -1 };
149
- const records = getEntityRecords( 'postType', USER_PATTERNS, query );
150
-
172
+ const records = getEntityRecords( 'postType', PATTERN_TYPES.user, query );
173
+ const userPatternCategories = getUserPatternCategories();
174
+ const categories = new Map();
175
+ userPatternCategories.forEach( ( userCategory ) =>
176
+ categories.set( userCategory.id, userCategory )
177
+ );
151
178
  let patterns = records
152
- ? records.map( ( record ) => reusableBlockToPattern( record ) )
179
+ ? records.map( ( record ) =>
180
+ patternBlockToPattern( record, categories )
181
+ )
153
182
  : EMPTY_PATTERN_LIST;
183
+
154
184
  const isResolving = getIsResolving( 'getEntityRecords', [
155
185
  'postType',
156
- USER_PATTERNS,
186
+ PATTERN_TYPES.user,
157
187
  query,
158
188
  ] );
159
189
 
@@ -170,24 +200,28 @@ const selectUserPatterns = ( select, { search = '', syncStatus } = {} ) => {
170
200
  hasCategory: () => true,
171
201
  } );
172
202
 
173
- return { patterns, isResolving };
203
+ return { patterns, isResolving, categories: userPatternCategories };
174
204
  };
175
205
 
176
206
  export const usePatterns = (
177
207
  categoryType,
178
208
  categoryId,
179
- { search = '', syncStatus }
209
+ { search = '', syncStatus } = {}
180
210
  ) => {
181
211
  return useSelect(
182
212
  ( select ) => {
183
- if ( categoryType === TEMPLATE_PARTS ) {
213
+ if ( categoryType === TEMPLATE_PART_POST_TYPE ) {
184
214
  return selectTemplatePartsAsPatterns( select, {
185
215
  categoryId,
186
216
  search,
187
217
  } );
188
- } else if ( categoryType === PATTERNS ) {
189
- return selectThemePatterns( select, { categoryId, search } );
190
- } else if ( categoryType === USER_PATTERNS ) {
218
+ } else if ( categoryType === PATTERN_TYPES.theme ) {
219
+ return selectPatterns( select, {
220
+ categoryId,
221
+ search,
222
+ syncStatus,
223
+ } );
224
+ } else if ( categoryType === PATTERN_TYPES.user ) {
191
225
  return selectUserPatterns( select, { search, syncStatus } );
192
226
  }
193
227
  return { patterns: EMPTY_PATTERN_LIST, isResolving: false };
@@ -1,21 +1,2 @@
1
- export const DEFAULT_CATEGORY = 'my-patterns';
2
- export const DEFAULT_TYPE = 'wp_block';
3
- export const PATTERNS = 'pattern';
4
- export const TEMPLATE_PARTS = 'wp_template_part';
5
- export const USER_PATTERNS = 'wp_block';
6
- export const USER_PATTERN_CATEGORY = 'my-patterns';
7
-
8
- export const CORE_PATTERN_SOURCES = [
9
- 'core',
10
- 'pattern-directory/core',
11
- 'pattern-directory/featured',
12
- 'pattern-directory/theme',
13
- ];
14
-
15
- export const SYNC_TYPES = {
16
- full: 'fully',
17
- unsynced: 'unsynced',
18
- };
19
-
20
1
  export const filterOutDuplicatesByName = ( currentItem, index, items ) =>
21
2
  index === items.findIndex( ( item ) => currentItem.name === item.name );
@@ -2,21 +2,31 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useSelect, useDispatch } from '@wordpress/data';
5
- import { useMemo } from '@wordpress/element';
6
5
  import { decodeEntities } from '@wordpress/html-entities';
7
- import { BlockContextProvider, BlockPreview } from '@wordpress/block-editor';
8
- import { Button, __experimentalVStack as VStack } from '@wordpress/components';
6
+ import {
7
+ DropdownMenu,
8
+ MenuGroup,
9
+ MenuItem,
10
+ __experimentalHStack as HStack,
11
+ __experimentalText as Text,
12
+ } from '@wordpress/components';
9
13
  import { __ } from '@wordpress/i18n';
10
14
  import { store as coreStore } from '@wordpress/core-data';
11
- import { parse } from '@wordpress/blocks';
12
15
 
13
16
  /**
14
17
  * Internal dependencies
15
18
  */
16
19
  import { store as editSiteStore } from '../../../store';
20
+ import SwapTemplateButton from './swap-template-button';
21
+ import ResetDefaultTemplate from './reset-default-template';
22
+
23
+ const POPOVER_PROPS = {
24
+ className: 'edit-site-page-panels-edit-template__dropdown',
25
+ placement: 'bottom-start',
26
+ };
17
27
 
18
28
  export default function EditTemplate() {
19
- const { context, hasResolved, template } = useSelect( ( select ) => {
29
+ const { hasResolved, template } = useSelect( ( select ) => {
20
30
  const { getEditedPostContext, getEditedPostType, getEditedPostId } =
21
31
  select( editSiteStore );
22
32
  const { getEditedEntityRecord, hasFinishedResolution } =
@@ -39,39 +49,43 @@ export default function EditTemplate() {
39
49
 
40
50
  const { setHasPageContentFocus } = useDispatch( editSiteStore );
41
51
 
42
- const blockContext = useMemo(
43
- () => ( { ...context, postType: null, postId: null } ),
44
- [ context ]
45
- );
46
-
47
- const blocks = useMemo(
48
- () =>
49
- template.blocks ??
50
- ( template.content && typeof template.content !== 'function'
51
- ? parse( template.content )
52
- : [] ),
53
- [ template.blocks, template.content ]
54
- );
55
-
56
52
  if ( ! hasResolved ) {
57
53
  return null;
58
54
  }
59
55
 
60
56
  return (
61
- <VStack>
62
- <div>{ decodeEntities( template.title ) }</div>
63
- <div className="edit-site-page-panels__edit-template-preview">
64
- <BlockContextProvider value={ blockContext }>
65
- <BlockPreview viewportWidth={ 1024 } blocks={ blocks } />
66
- </BlockContextProvider>
67
- </div>
68
- <Button
69
- className="edit-site-page-panels__edit-template-button"
70
- variant="secondary"
71
- onClick={ () => setHasPageContentFocus( false ) }
57
+ <HStack className="edit-site-summary-field">
58
+ <Text className="edit-site-summary-field__label">
59
+ { __( 'Template' ) }
60
+ </Text>
61
+ <DropdownMenu
62
+ popoverProps={ POPOVER_PROPS }
63
+ focusOnMount
64
+ toggleProps={ {
65
+ variant: 'tertiary',
66
+ className: 'edit-site-summary-field__trigger',
67
+ } }
68
+ label={ __( 'Template options' ) }
69
+ text={ decodeEntities( template.title ) }
70
+ icon={ null }
72
71
  >
73
- { __( 'Edit template' ) }
74
- </Button>
75
- </VStack>
72
+ { ( { onClose } ) => (
73
+ <>
74
+ <MenuGroup>
75
+ <MenuItem
76
+ onClick={ () => {
77
+ setHasPageContentFocus( false );
78
+ onClose();
79
+ } }
80
+ >
81
+ { __( 'Edit template' ) }
82
+ </MenuItem>
83
+ <SwapTemplateButton onClick={ onClose } />
84
+ </MenuGroup>
85
+ <ResetDefaultTemplate onClick={ onClose } />
86
+ </>
87
+ ) }
88
+ </DropdownMenu>
89
+ </HStack>
76
90
  );
77
91
  }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useSelect } from '@wordpress/data';
5
+ import { useMemo } from '@wordpress/element';
6
+ import { store as coreStore } from '@wordpress/core-data';
7
+
8
+ /**
9
+ * Internal dependencies
10
+ */
11
+ import { store as editSiteStore } from '../../../store';
12
+
13
+ export function useEditedPostContext() {
14
+ return useSelect(
15
+ ( select ) => select( editSiteStore ).getEditedPostContext(),
16
+ []
17
+ );
18
+ }
19
+
20
+ export function useIsPostsPage() {
21
+ const { postId } = useEditedPostContext();
22
+ return useSelect(
23
+ ( select ) =>
24
+ +postId ===
25
+ select( coreStore ).getEntityRecord( 'root', 'site' )
26
+ ?.page_for_posts,
27
+ [ postId ]
28
+ );
29
+ }
30
+
31
+ function useTemplates() {
32
+ return useSelect(
33
+ ( select ) =>
34
+ select( coreStore ).getEntityRecords( 'postType', 'wp_template', {
35
+ per_page: -1,
36
+ post_type: 'page',
37
+ } ),
38
+ []
39
+ );
40
+ }
41
+
42
+ export function useAvailableTemplates() {
43
+ const currentTemplateSlug = useCurrentTemplateSlug();
44
+ const isPostsPage = useIsPostsPage();
45
+ const templates = useTemplates();
46
+ return useMemo(
47
+ () =>
48
+ // The posts page template cannot be changed.
49
+ ! isPostsPage &&
50
+ templates?.filter(
51
+ ( template ) =>
52
+ template.is_custom &&
53
+ template.slug !== currentTemplateSlug &&
54
+ !! template.content.raw // Skip empty templates.
55
+ ),
56
+ [ templates, currentTemplateSlug, isPostsPage ]
57
+ );
58
+ }
59
+
60
+ export function useCurrentTemplateSlug() {
61
+ const { postType, postId } = useEditedPostContext();
62
+ const templates = useTemplates();
63
+ const entityTemplate = useSelect(
64
+ ( select ) => {
65
+ const post = select( coreStore ).getEditedEntityRecord(
66
+ 'postType',
67
+ postType,
68
+ postId
69
+ );
70
+ return post?.template;
71
+ },
72
+ [ postType, postId ]
73
+ );
74
+
75
+ if ( ! entityTemplate ) {
76
+ return;
77
+ }
78
+ // If a page has a `template` set and is not included in the list
79
+ // of the theme's templates, do not return it, in order to resolve
80
+ // to the current theme's default template.
81
+ return templates?.find( ( template ) => template.slug === entityTemplate )
82
+ ?.slug;
83
+ }
@@ -20,7 +20,6 @@ import { store as editSiteStore } from '../../../store';
20
20
  import SidebarCard from '../sidebar-card';
21
21
  import PageContent from './page-content';
22
22
  import PageSummary from './page-summary';
23
- import EditTemplate from './edit-template';
24
23
 
25
24
  export default function PagePanels() {
26
25
  const { id, type, hasResolved, status, date, password, title, modified } =
@@ -81,9 +80,6 @@ export default function PagePanels() {
81
80
  <PanelBody title={ __( 'Content' ) }>
82
81
  <PageContent />
83
82
  </PanelBody>
84
- <PanelBody title={ __( 'Template' ) }>
85
- <EditTemplate />
86
- </PanelBody>
87
83
  </>
88
84
  );
89
85
  }
@@ -7,6 +7,7 @@ import { __experimentalVStack as VStack } from '@wordpress/components';
7
7
  */
8
8
  import PageStatus from './page-status';
9
9
  import PublishDate from './publish-date';
10
+ import EditTemplate from './edit-template';
10
11
 
11
12
  export default function PageSummary( {
12
13
  status,
@@ -30,6 +31,7 @@ export default function PageSummary( {
30
31
  postId={ postId }
31
32
  postType={ postType }
32
33
  />
34
+ <EditTemplate />
33
35
  </VStack>
34
36
  );
35
37
  }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useDispatch } from '@wordpress/data';
5
+ import { MenuGroup, MenuItem } from '@wordpress/components';
6
+ import { __ } from '@wordpress/i18n';
7
+ import { useEntityRecord } from '@wordpress/core-data';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import {
13
+ useCurrentTemplateSlug,
14
+ useEditedPostContext,
15
+ useIsPostsPage,
16
+ } from './hooks';
17
+ import { store as editSiteStore } from '../../../store';
18
+
19
+ export default function ResetDefaultTemplate( { onClick } ) {
20
+ const currentTemplateSlug = useCurrentTemplateSlug();
21
+ const isPostsPage = useIsPostsPage();
22
+ const { postType, postId } = useEditedPostContext();
23
+ const entity = useEntityRecord( 'postType', postType, postId );
24
+ const { setPage } = useDispatch( editSiteStore );
25
+ // The default template in a post is indicated by an empty string.
26
+ if ( ! currentTemplateSlug || isPostsPage ) {
27
+ return null;
28
+ }
29
+ return (
30
+ <MenuGroup>
31
+ <MenuItem
32
+ onClick={ async () => {
33
+ entity.edit( { template: '' }, { undoIgnore: true } );
34
+ onClick();
35
+ await setPage( {
36
+ context: { postType, postId },
37
+ } );
38
+ } }
39
+ >
40
+ { __( 'Reset' ) }
41
+ </MenuItem>
42
+ </MenuGroup>
43
+ );
44
+ }
@@ -1,12 +1,37 @@
1
- .edit-site-page-panels__edit-template-preview {
2
- border: 1px solid $gray-200;
3
- height: 200px;
4
- max-height: 200px;
5
- overflow: hidden;
1
+ .edit-site-swap-template-modal {
2
+ z-index: z-index(".edit-site-swap-template-modal");
6
3
  }
7
4
 
8
- .edit-site-page-panels__edit-template-button {
9
- justify-content: center;
5
+ .edit-site-page-panels__swap-template__confirm-modal__actions {
6
+ margin-top: $grid-unit-30;
7
+ }
8
+
9
+ .edit-site-page-panels__swap-template__modal-content .block-editor-block-patterns-list {
10
+ column-count: 2;
11
+ column-gap: $grid-unit-30;
12
+
13
+ // Small top padding required to avoid cutting off the visible outline when hovering items
14
+ padding-top: $border-width-focus-fallback;
15
+
16
+ @include break-medium() {
17
+ column-count: 3;
18
+ }
19
+
20
+ @include break-wide() {
21
+ column-count: 4;
22
+ }
23
+
24
+ .block-editor-block-patterns-list__list-item {
25
+ break-inside: avoid-column;
26
+ }
27
+
28
+ .block-editor-block-patterns-list__item {
29
+ // Avoid to override the BlockPatternList component
30
+ // default hover and focus styles.
31
+ &:not(:focus):not(:hover) .block-editor-block-preview__container {
32
+ box-shadow: 0 0 0 1px $gray-300;
33
+ }
34
+ }
10
35
  }
11
36
 
12
37
  .edit-site-change-status__content {
@@ -36,15 +61,21 @@
36
61
 
37
62
  .edit-site-summary-field {
38
63
  .components-dropdown {
39
- flex-grow: 1;
64
+ width: 70%;
40
65
  }
41
66
 
42
67
  .edit-site-summary-field__trigger {
43
- width: 100%;
68
+ max-width: 100%;
69
+
70
+ // Truncate
71
+ display: block;
72
+ text-align: left;
73
+ white-space: nowrap;
74
+ overflow: hidden;
75
+ text-overflow: ellipsis;
44
76
  }
45
77
 
46
78
  .edit-site-summary-field__label {
47
79
  width: 30%;
48
80
  }
49
81
  }
50
-
@@ -0,0 +1,82 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useDispatch } from '@wordpress/data';
5
+ import { useMemo, useState, useCallback } from '@wordpress/element';
6
+ import { decodeEntities } from '@wordpress/html-entities';
7
+ import { __experimentalBlockPatternsList as BlockPatternsList } from '@wordpress/block-editor';
8
+ import { MenuItem, Modal } from '@wordpress/components';
9
+ import { __ } from '@wordpress/i18n';
10
+ import { useEntityRecord } from '@wordpress/core-data';
11
+ import { parse } from '@wordpress/blocks';
12
+ import { useAsyncList } from '@wordpress/compose';
13
+
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+ import { store as editSiteStore } from '../../../store';
18
+ import { useAvailableTemplates, useEditedPostContext } from './hooks';
19
+
20
+ export default function SwapTemplateButton( { onClick } ) {
21
+ const [ showModal, setShowModal ] = useState( false );
22
+ const availableTemplates = useAvailableTemplates();
23
+ const onClose = useCallback( () => {
24
+ setShowModal( false );
25
+ }, [] );
26
+ const { postType, postId } = useEditedPostContext();
27
+ const entitiy = useEntityRecord( 'postType', postType, postId );
28
+ const { setPage } = useDispatch( editSiteStore );
29
+ if ( ! availableTemplates?.length ) {
30
+ return null;
31
+ }
32
+ const onTemplateSelect = async ( template ) => {
33
+ entitiy.edit( { template: template.name }, { undoIgnore: true } );
34
+ await setPage( {
35
+ context: { postType, postId },
36
+ } );
37
+ onClose(); // Close the template suggestions modal first.
38
+ onClick();
39
+ };
40
+ return (
41
+ <>
42
+ <MenuItem onClick={ () => setShowModal( true ) }>
43
+ { __( 'Swap template' ) }
44
+ </MenuItem>
45
+ { showModal && (
46
+ <Modal
47
+ title={ __( 'Choose a template' ) }
48
+ onRequestClose={ onClose }
49
+ overlayClassName="edit-site-swap-template-modal"
50
+ isFullScreen
51
+ >
52
+ <div className="edit-site-page-panels__swap-template__modal-content">
53
+ <TemplatesList onSelect={ onTemplateSelect } />
54
+ </div>
55
+ </Modal>
56
+ ) }
57
+ </>
58
+ );
59
+ }
60
+
61
+ function TemplatesList( { onSelect } ) {
62
+ const availableTemplates = useAvailableTemplates();
63
+ const templatesAsPatterns = useMemo(
64
+ () =>
65
+ availableTemplates.map( ( template ) => ( {
66
+ name: template.slug,
67
+ blocks: parse( template.content.raw ),
68
+ title: decodeEntities( template.title.rendered ),
69
+ id: template.id,
70
+ } ) ),
71
+ [ availableTemplates ]
72
+ );
73
+ const shownTemplates = useAsyncList( templatesAsPatterns );
74
+ return (
75
+ <BlockPatternsList
76
+ label={ __( 'Templates' ) }
77
+ blockPatterns={ templatesAsPatterns }
78
+ shownPatterns={ shownTemplates }
79
+ onClickPattern={ onSelect }
80
+ />
81
+ );
82
+ }