@wordpress/edit-site 5.30.0 → 5.32.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 (470) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/block-editor/editor-canvas.js +24 -4
  3. package/build/components/block-editor/editor-canvas.js.map +1 -1
  4. package/build/components/block-editor/site-editor-canvas.js +15 -4
  5. package/build/components/block-editor/site-editor-canvas.js.map +1 -1
  6. package/build/components/block-editor/use-site-editor-settings.js +1 -1
  7. package/build/components/block-editor/use-site-editor-settings.js.map +1 -1
  8. package/build/components/editor/index.js +12 -3
  9. package/build/components/editor/index.js.map +1 -1
  10. package/build/components/editor-canvas-container/index.js +1 -2
  11. package/build/components/editor-canvas-container/index.js.map +1 -1
  12. package/build/components/global-styles/background-panel.js +38 -0
  13. package/build/components/global-styles/background-panel.js.map +1 -0
  14. package/build/components/global-styles/color-palette-panel.js +0 -9
  15. package/build/components/global-styles/color-palette-panel.js.map +1 -1
  16. package/build/components/global-styles/font-families.js +1 -1
  17. package/build/components/global-styles/font-families.js.map +1 -1
  18. package/build/components/global-styles/font-library-modal/context.js +53 -17
  19. package/build/components/global-styles/font-library-modal/context.js.map +1 -1
  20. package/build/components/global-styles/font-library-modal/font-collection.js +4 -3
  21. package/build/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  22. package/build/components/global-styles/font-library-modal/google-fonts-confirm-dialog.js +3 -2
  23. package/build/components/global-styles/font-library-modal/google-fonts-confirm-dialog.js.map +1 -1
  24. package/build/components/global-styles/font-library-modal/installed-fonts.js +1 -1
  25. package/build/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  26. package/build/components/global-styles/font-library-modal/upload-fonts.js +44 -10
  27. package/build/components/global-styles/font-library-modal/upload-fonts.js.map +1 -1
  28. package/build/components/global-styles/font-library-modal/utils/index.js +22 -4
  29. package/build/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  30. package/build/components/global-styles/font-library-modal/utils/preview-styles.js +3 -0
  31. package/build/components/global-styles/font-library-modal/utils/preview-styles.js.map +1 -1
  32. package/build/components/global-styles/header.js +1 -1
  33. package/build/components/global-styles/header.js.map +1 -1
  34. package/build/components/global-styles/hooks.js +50 -1
  35. package/build/components/global-styles/hooks.js.map +1 -1
  36. package/build/components/global-styles/palette.js +3 -1
  37. package/build/components/global-styles/palette.js.map +1 -1
  38. package/build/components/global-styles/preview-colors.js +2 -2
  39. package/build/components/global-styles/preview-colors.js.map +1 -1
  40. package/build/components/global-styles/preview-iframe.js +0 -1
  41. package/build/components/global-styles/preview-iframe.js.map +1 -1
  42. package/build/components/global-styles/preview-styles.js +2 -2
  43. package/build/components/global-styles/preview-styles.js.map +1 -1
  44. package/build/components/global-styles/root-menu.js +8 -2
  45. package/build/components/global-styles/root-menu.js.map +1 -1
  46. package/build/components/global-styles/screen-background.js +34 -0
  47. package/build/components/global-styles/screen-background.js.map +1 -0
  48. package/build/components/global-styles/screen-color-palette.js +2 -2
  49. package/build/components/global-styles/screen-color-palette.js.map +1 -1
  50. package/build/components/global-styles/screen-colors.js +5 -10
  51. package/build/components/global-styles/screen-colors.js.map +1 -1
  52. package/build/components/global-styles/screen-style-variations.js +3 -37
  53. package/build/components/global-styles/screen-style-variations.js.map +1 -1
  54. package/build/components/global-styles/screen-typography.js +6 -11
  55. package/build/components/global-styles/screen-typography.js.map +1 -1
  56. package/build/components/global-styles/style-variations-container.js +5 -2
  57. package/build/components/global-styles/style-variations-container.js.map +1 -1
  58. package/build/components/global-styles/typography-elements.js +3 -1
  59. package/build/components/global-styles/typography-elements.js.map +1 -1
  60. package/build/components/global-styles/{preview-typography.js → typography-example.js} +4 -2
  61. package/build/components/global-styles/typography-example.js.map +1 -0
  62. package/build/components/global-styles/typography-preview.js +3 -1
  63. package/build/components/global-styles/typography-preview.js.map +1 -1
  64. package/build/components/global-styles/ui.js +4 -1
  65. package/build/components/global-styles/ui.js.map +1 -1
  66. package/build/components/global-styles/utils.js +1 -1
  67. package/build/components/global-styles/utils.js.map +1 -1
  68. package/build/components/global-styles/variations/variations-color.js +13 -7
  69. package/build/components/global-styles/variations/variations-color.js.map +1 -1
  70. package/build/components/global-styles/variations/variations-typography.js +34 -37
  71. package/build/components/global-styles/variations/variations-typography.js.map +1 -1
  72. package/build/components/header-edit-mode/index.js +2 -1
  73. package/build/components/header-edit-mode/index.js.map +1 -1
  74. package/build/components/keyboard-shortcut-help-modal/config.js +6 -0
  75. package/build/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  76. package/build/components/keyboard-shortcut-help-modal/index.js +3 -0
  77. package/build/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  78. package/build/components/keyboard-shortcuts/global.js +17 -3
  79. package/build/components/keyboard-shortcuts/global.js.map +1 -1
  80. package/build/components/layout/animation.js +129 -0
  81. package/build/components/layout/animation.js.map +1 -0
  82. package/build/components/layout/index.js +9 -17
  83. package/build/components/layout/index.js.map +1 -1
  84. package/build/components/layout/router.js +22 -22
  85. package/build/components/layout/router.js.map +1 -1
  86. package/build/components/page-pages/index.js +24 -27
  87. package/build/components/page-pages/index.js.map +1 -1
  88. package/build/components/page-patterns/delete-category-menu-item.js +6 -1
  89. package/build/components/page-patterns/delete-category-menu-item.js.map +1 -1
  90. package/build/components/page-patterns/index.js +19 -32
  91. package/build/components/page-patterns/index.js.map +1 -1
  92. package/build/components/page-patterns/search-items.js +16 -58
  93. package/build/components/page-patterns/search-items.js.map +1 -1
  94. package/build/components/page-patterns/use-patterns.js +9 -9
  95. package/build/components/page-patterns/use-patterns.js.map +1 -1
  96. package/build/components/page-templates-template-parts/actions.js +54 -41
  97. package/build/components/page-templates-template-parts/actions.js.map +1 -1
  98. package/build/components/page-templates-template-parts/index.js +31 -69
  99. package/build/components/page-templates-template-parts/index.js.map +1 -1
  100. package/build/components/plugin-template-setting-panel/index.js +12 -1
  101. package/build/components/plugin-template-setting-panel/index.js.map +1 -1
  102. package/build/components/save-button/index.js +45 -16
  103. package/build/components/save-button/index.js.map +1 -1
  104. package/build/components/save-hub/index.js +8 -112
  105. package/build/components/save-hub/index.js.map +1 -1
  106. package/build/components/save-panel/index.js +14 -9
  107. package/build/components/save-panel/index.js.map +1 -1
  108. package/build/components/sidebar/index.js +3 -8
  109. package/build/components/sidebar/index.js.map +1 -1
  110. package/build/components/sidebar-dataviews/custom-dataviews-list.js +2 -2
  111. package/build/components/sidebar-dataviews/custom-dataviews-list.js.map +1 -1
  112. package/build/components/sidebar-dataviews/dataview-item.js +2 -2
  113. package/build/components/sidebar-dataviews/dataview-item.js.map +1 -1
  114. package/build/components/sidebar-dataviews/default-views.js +3 -3
  115. package/build/components/sidebar-dataviews/default-views.js.map +1 -1
  116. package/build/components/sidebar-dataviews/index.js +5 -4
  117. package/build/components/sidebar-dataviews/index.js.map +1 -1
  118. package/build/components/sidebar-edit-mode/index.js +1 -2
  119. package/build/components/sidebar-edit-mode/index.js.map +1 -1
  120. package/build/components/sidebar-edit-mode/page-panels/index.js +7 -17
  121. package/build/components/sidebar-edit-mode/page-panels/index.js.map +1 -1
  122. package/build/components/sidebar-edit-mode/page-panels/page-content.js +7 -5
  123. package/build/components/sidebar-edit-mode/page-panels/page-content.js.map +1 -1
  124. package/build/components/sidebar-edit-mode/page-panels/page-summary.js +3 -1
  125. package/build/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
  126. package/build/components/sidebar-edit-mode/template-panel/index.js +32 -18
  127. package/build/components/sidebar-edit-mode/template-panel/index.js.map +1 -1
  128. package/build/components/sidebar-navigation-screen-details-footer/index.js +5 -1
  129. package/build/components/sidebar-navigation-screen-details-footer/index.js.map +1 -1
  130. package/build/components/sidebar-navigation-screen-global-styles/index.js +18 -1
  131. package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  132. package/build/components/sidebar-navigation-screen-navigation-menu/{delete-modal.js → delete-confirm-dialog.js} +4 -5
  133. package/build/components/sidebar-navigation-screen-navigation-menu/delete-confirm-dialog.js.map +1 -0
  134. package/build/components/sidebar-navigation-screen-navigation-menu/more-menu.js +6 -6
  135. package/build/components/sidebar-navigation-screen-navigation-menu/more-menu.js.map +1 -1
  136. package/build/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js +1 -1
  137. package/build/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js.map +1 -1
  138. package/build/components/sidebar-navigation-screen-patterns/index.js +1 -5
  139. package/build/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  140. package/build/components/sidebar-navigation-screen-template/index.js +5 -1
  141. package/build/components/sidebar-navigation-screen-template/index.js.map +1 -1
  142. package/build/components/sidebar-navigation-screen-templates-browse/content.js +2 -2
  143. package/build/components/sidebar-navigation-screen-templates-browse/content.js.map +1 -1
  144. package/build/components/style-book/index.js +1 -1
  145. package/build/components/style-book/index.js.map +1 -1
  146. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js +3 -3
  147. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  148. package/build/components/sync-state-with-url/use-sync-path-with-url.js +1 -11
  149. package/build/components/sync-state-with-url/use-sync-path-with-url.js.map +1 -1
  150. package/build/components/template-actions/index.js +44 -27
  151. package/build/components/template-actions/index.js.map +1 -1
  152. package/build/components/welcome-guide/editor.js +11 -2
  153. package/build/components/welcome-guide/editor.js.map +1 -1
  154. package/build/hooks/index.js +0 -1
  155. package/build/hooks/index.js.map +1 -1
  156. package/build/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +15 -2
  157. package/build/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js.map +1 -1
  158. package/build/store/selectors.js +1 -9
  159. package/build/store/selectors.js.map +1 -1
  160. package/build/utils/constants.js +5 -3
  161. package/build/utils/constants.js.map +1 -1
  162. package/build/utils/get-is-list-page.js +1 -1
  163. package/build/utils/get-is-list-page.js.map +1 -1
  164. package/build/utils/math.js +98 -0
  165. package/build/utils/math.js.map +1 -0
  166. package/build-module/components/block-editor/editor-canvas.js +24 -4
  167. package/build-module/components/block-editor/editor-canvas.js.map +1 -1
  168. package/build-module/components/block-editor/site-editor-canvas.js +15 -4
  169. package/build-module/components/block-editor/site-editor-canvas.js.map +1 -1
  170. package/build-module/components/block-editor/use-site-editor-settings.js +1 -1
  171. package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
  172. package/build-module/components/editor/index.js +13 -4
  173. package/build-module/components/editor/index.js.map +1 -1
  174. package/build-module/components/editor-canvas-container/index.js +1 -2
  175. package/build-module/components/editor-canvas-container/index.js.map +1 -1
  176. package/build-module/components/global-styles/background-panel.js +31 -0
  177. package/build-module/components/global-styles/background-panel.js.map +1 -0
  178. package/build-module/components/global-styles/color-palette-panel.js +0 -8
  179. package/build-module/components/global-styles/color-palette-panel.js.map +1 -1
  180. package/build-module/components/global-styles/font-families.js +1 -1
  181. package/build-module/components/global-styles/font-families.js.map +1 -1
  182. package/build-module/components/global-styles/font-library-modal/context.js +54 -18
  183. package/build-module/components/global-styles/font-library-modal/context.js.map +1 -1
  184. package/build-module/components/global-styles/font-library-modal/font-collection.js +4 -3
  185. package/build-module/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  186. package/build-module/components/global-styles/font-library-modal/google-fonts-confirm-dialog.js +4 -3
  187. package/build-module/components/global-styles/font-library-modal/google-fonts-confirm-dialog.js.map +1 -1
  188. package/build-module/components/global-styles/font-library-modal/installed-fonts.js +1 -1
  189. package/build-module/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  190. package/build-module/components/global-styles/font-library-modal/upload-fonts.js +44 -10
  191. package/build-module/components/global-styles/font-library-modal/upload-fonts.js.map +1 -1
  192. package/build-module/components/global-styles/font-library-modal/utils/index.js +22 -4
  193. package/build-module/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  194. package/build-module/components/global-styles/font-library-modal/utils/preview-styles.js +3 -0
  195. package/build-module/components/global-styles/font-library-modal/utils/preview-styles.js.map +1 -1
  196. package/build-module/components/global-styles/header.js +1 -1
  197. package/build-module/components/global-styles/header.js.map +1 -1
  198. package/build-module/components/global-styles/hooks.js +48 -1
  199. package/build-module/components/global-styles/hooks.js.map +1 -1
  200. package/build-module/components/global-styles/palette.js +3 -1
  201. package/build-module/components/global-styles/palette.js.map +1 -1
  202. package/build-module/components/global-styles/preview-colors.js +2 -2
  203. package/build-module/components/global-styles/preview-colors.js.map +1 -1
  204. package/build-module/components/global-styles/preview-iframe.js +0 -1
  205. package/build-module/components/global-styles/preview-iframe.js.map +1 -1
  206. package/build-module/components/global-styles/preview-styles.js +2 -2
  207. package/build-module/components/global-styles/preview-styles.js.map +1 -1
  208. package/build-module/components/global-styles/root-menu.js +9 -3
  209. package/build-module/components/global-styles/root-menu.js.map +1 -1
  210. package/build-module/components/global-styles/screen-background.js +26 -0
  211. package/build-module/components/global-styles/screen-background.js.map +1 -0
  212. package/build-module/components/global-styles/screen-color-palette.js +2 -2
  213. package/build-module/components/global-styles/screen-color-palette.js.map +1 -1
  214. package/build-module/components/global-styles/screen-colors.js +5 -10
  215. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  216. package/build-module/components/global-styles/screen-style-variations.js +4 -38
  217. package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
  218. package/build-module/components/global-styles/screen-typography.js +6 -11
  219. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  220. package/build-module/components/global-styles/style-variations-container.js +5 -2
  221. package/build-module/components/global-styles/style-variations-container.js.map +1 -1
  222. package/build-module/components/global-styles/typography-elements.js +3 -1
  223. package/build-module/components/global-styles/typography-elements.js.map +1 -1
  224. package/build-module/components/global-styles/{preview-typography.js → typography-example.js} +4 -2
  225. package/build-module/components/global-styles/typography-example.js.map +1 -0
  226. package/build-module/components/global-styles/typography-preview.js +3 -1
  227. package/build-module/components/global-styles/typography-preview.js.map +1 -1
  228. package/build-module/components/global-styles/ui.js +4 -1
  229. package/build-module/components/global-styles/ui.js.map +1 -1
  230. package/build-module/components/global-styles/utils.js +1 -1
  231. package/build-module/components/global-styles/utils.js.map +1 -1
  232. package/build-module/components/global-styles/variations/variations-color.js +13 -7
  233. package/build-module/components/global-styles/variations/variations-color.js.map +1 -1
  234. package/build-module/components/global-styles/variations/variations-typography.js +35 -38
  235. package/build-module/components/global-styles/variations/variations-typography.js.map +1 -1
  236. package/build-module/components/header-edit-mode/index.js +2 -1
  237. package/build-module/components/header-edit-mode/index.js.map +1 -1
  238. package/build-module/components/keyboard-shortcut-help-modal/config.js +6 -0
  239. package/build-module/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  240. package/build-module/components/keyboard-shortcut-help-modal/index.js +3 -0
  241. package/build-module/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  242. package/build-module/components/keyboard-shortcuts/global.js +17 -3
  243. package/build-module/components/keyboard-shortcuts/global.js.map +1 -1
  244. package/build-module/components/layout/animation.js +122 -0
  245. package/build-module/components/layout/animation.js.map +1 -0
  246. package/build-module/components/layout/index.js +9 -17
  247. package/build-module/components/layout/index.js.map +1 -1
  248. package/build-module/components/layout/router.js +22 -22
  249. package/build-module/components/layout/router.js.map +1 -1
  250. package/build-module/components/page-pages/index.js +25 -28
  251. package/build-module/components/page-pages/index.js.map +1 -1
  252. package/build-module/components/page-patterns/delete-category-menu-item.js +6 -1
  253. package/build-module/components/page-patterns/delete-category-menu-item.js.map +1 -1
  254. package/build-module/components/page-patterns/index.js +21 -34
  255. package/build-module/components/page-patterns/index.js.map +1 -1
  256. package/build-module/components/page-patterns/search-items.js +14 -55
  257. package/build-module/components/page-patterns/search-items.js.map +1 -1
  258. package/build-module/components/page-patterns/use-patterns.js +9 -9
  259. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  260. package/build-module/components/page-templates-template-parts/actions.js +54 -40
  261. package/build-module/components/page-templates-template-parts/actions.js.map +1 -1
  262. package/build-module/components/page-templates-template-parts/index.js +34 -72
  263. package/build-module/components/page-templates-template-parts/index.js.map +1 -1
  264. package/build-module/components/plugin-template-setting-panel/index.js +12 -1
  265. package/build-module/components/plugin-template-setting-panel/index.js.map +1 -1
  266. package/build-module/components/save-button/index.js +46 -17
  267. package/build-module/components/save-button/index.js.map +1 -1
  268. package/build-module/components/save-hub/index.js +10 -114
  269. package/build-module/components/save-hub/index.js.map +1 -1
  270. package/build-module/components/save-panel/index.js +14 -9
  271. package/build-module/components/save-panel/index.js.map +1 -1
  272. package/build-module/components/sidebar/index.js +3 -8
  273. package/build-module/components/sidebar/index.js.map +1 -1
  274. package/build-module/components/sidebar-dataviews/custom-dataviews-list.js +2 -2
  275. package/build-module/components/sidebar-dataviews/custom-dataviews-list.js.map +1 -1
  276. package/build-module/components/sidebar-dataviews/dataview-item.js +2 -2
  277. package/build-module/components/sidebar-dataviews/dataview-item.js.map +1 -1
  278. package/build-module/components/sidebar-dataviews/default-views.js +4 -4
  279. package/build-module/components/sidebar-dataviews/default-views.js.map +1 -1
  280. package/build-module/components/sidebar-dataviews/index.js +5 -4
  281. package/build-module/components/sidebar-dataviews/index.js.map +1 -1
  282. package/build-module/components/sidebar-edit-mode/index.js +1 -2
  283. package/build-module/components/sidebar-edit-mode/index.js.map +1 -1
  284. package/build-module/components/sidebar-edit-mode/page-panels/index.js +10 -20
  285. package/build-module/components/sidebar-edit-mode/page-panels/index.js.map +1 -1
  286. package/build-module/components/sidebar-edit-mode/page-panels/page-content.js +7 -5
  287. package/build-module/components/sidebar-edit-mode/page-panels/page-content.js.map +1 -1
  288. package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js +4 -2
  289. package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
  290. package/build-module/components/sidebar-edit-mode/template-panel/index.js +33 -19
  291. package/build-module/components/sidebar-edit-mode/template-panel/index.js.map +1 -1
  292. package/build-module/components/sidebar-navigation-screen-details-footer/index.js +5 -1
  293. package/build-module/components/sidebar-navigation-screen-details-footer/index.js.map +1 -1
  294. package/build-module/components/sidebar-navigation-screen-global-styles/index.js +19 -2
  295. package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  296. package/build-module/components/sidebar-navigation-screen-navigation-menu/{delete-modal.js → delete-confirm-dialog.js} +3 -4
  297. package/build-module/components/sidebar-navigation-screen-navigation-menu/delete-confirm-dialog.js.map +1 -0
  298. package/build-module/components/sidebar-navigation-screen-navigation-menu/more-menu.js +6 -6
  299. package/build-module/components/sidebar-navigation-screen-navigation-menu/more-menu.js.map +1 -1
  300. package/build-module/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js +1 -1
  301. package/build-module/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js.map +1 -1
  302. package/build-module/components/sidebar-navigation-screen-patterns/index.js +1 -5
  303. package/build-module/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  304. package/build-module/components/sidebar-navigation-screen-template/index.js +5 -1
  305. package/build-module/components/sidebar-navigation-screen-template/index.js.map +1 -1
  306. package/build-module/components/sidebar-navigation-screen-templates-browse/content.js +2 -2
  307. package/build-module/components/sidebar-navigation-screen-templates-browse/content.js.map +1 -1
  308. package/build-module/components/style-book/index.js +1 -1
  309. package/build-module/components/style-book/index.js.map +1 -1
  310. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js +3 -3
  311. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  312. package/build-module/components/sync-state-with-url/use-sync-path-with-url.js +1 -11
  313. package/build-module/components/sync-state-with-url/use-sync-path-with-url.js.map +1 -1
  314. package/build-module/components/template-actions/index.js +44 -27
  315. package/build-module/components/template-actions/index.js.map +1 -1
  316. package/build-module/components/welcome-guide/editor.js +11 -2
  317. package/build-module/components/welcome-guide/editor.js.map +1 -1
  318. package/build-module/hooks/index.js +0 -1
  319. package/build-module/hooks/index.js.map +1 -1
  320. package/build-module/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +15 -2
  321. package/build-module/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js.map +1 -1
  322. package/build-module/store/selectors.js +1 -9
  323. package/build-module/store/selectors.js.map +1 -1
  324. package/build-module/utils/constants.js +4 -2
  325. package/build-module/utils/constants.js.map +1 -1
  326. package/build-module/utils/get-is-list-page.js +1 -1
  327. package/build-module/utils/get-is-list-page.js.map +1 -1
  328. package/build-module/utils/math.js +92 -0
  329. package/build-module/utils/math.js.map +1 -0
  330. package/build-style/style-rtl.css +146 -130
  331. package/build-style/style.css +146 -130
  332. package/package.json +44 -44
  333. package/src/components/block-editor/editor-canvas.js +34 -9
  334. package/src/components/block-editor/site-editor-canvas.js +10 -7
  335. package/src/components/block-editor/use-site-editor-settings.js +0 -2
  336. package/src/components/editor/index.js +11 -4
  337. package/src/components/editor-canvas-container/index.js +0 -1
  338. package/src/components/global-styles/background-panel.js +34 -0
  339. package/src/components/global-styles/color-palette-panel.js +0 -11
  340. package/src/components/global-styles/font-families.js +1 -1
  341. package/src/components/global-styles/font-library-modal/context.js +77 -31
  342. package/src/components/global-styles/font-library-modal/font-collection.js +4 -3
  343. package/src/components/global-styles/font-library-modal/google-fonts-confirm-dialog.js +9 -2
  344. package/src/components/global-styles/font-library-modal/installed-fonts.js +1 -1
  345. package/src/components/global-styles/font-library-modal/style.scss +15 -6
  346. package/src/components/global-styles/font-library-modal/upload-fonts.js +53 -8
  347. package/src/components/global-styles/font-library-modal/utils/index.js +21 -8
  348. package/src/components/global-styles/font-library-modal/utils/preview-styles.js +4 -0
  349. package/src/components/global-styles/header.js +1 -1
  350. package/src/components/global-styles/hooks.js +68 -1
  351. package/src/components/global-styles/palette.js +3 -1
  352. package/src/components/global-styles/preview-colors.js +2 -2
  353. package/src/components/global-styles/preview-iframe.js +0 -1
  354. package/src/components/global-styles/preview-styles.js +2 -2
  355. package/src/components/global-styles/root-menu.js +12 -1
  356. package/src/components/global-styles/screen-background.js +29 -0
  357. package/src/components/global-styles/screen-color-palette.js +2 -2
  358. package/src/components/global-styles/screen-colors.js +4 -15
  359. package/src/components/global-styles/screen-style-variations.js +4 -36
  360. package/src/components/global-styles/screen-typography.js +6 -20
  361. package/src/components/global-styles/style-variations-container.js +2 -1
  362. package/src/components/global-styles/style.scss +15 -10
  363. package/src/components/global-styles/typography-elements.js +5 -1
  364. package/src/components/global-styles/{preview-typography.js → typography-example.js} +3 -1
  365. package/src/components/global-styles/typography-preview.js +3 -1
  366. package/src/components/global-styles/ui.js +5 -0
  367. package/src/components/global-styles/utils.js +1 -1
  368. package/src/components/global-styles/variations/style.scss +32 -23
  369. package/src/components/global-styles/variations/variations-color.js +12 -6
  370. package/src/components/global-styles/variations/variations-typography.js +41 -60
  371. package/src/components/header-edit-mode/index.js +1 -0
  372. package/src/components/header-edit-mode/style.scss +28 -17
  373. package/src/components/keyboard-shortcut-help-modal/config.js +4 -0
  374. package/src/components/keyboard-shortcut-help-modal/index.js +4 -0
  375. package/src/components/keyboard-shortcuts/global.js +16 -4
  376. package/src/components/layout/animation.js +122 -0
  377. package/src/components/layout/index.js +12 -27
  378. package/src/components/layout/router.js +26 -25
  379. package/src/components/layout/style.scss +2 -0
  380. package/src/components/page-pages/index.js +33 -54
  381. package/src/components/page-patterns/delete-category-menu-item.js +7 -0
  382. package/src/components/page-patterns/index.js +22 -31
  383. package/src/components/page-patterns/search-items.js +13 -58
  384. package/src/components/page-patterns/use-patterns.js +17 -10
  385. package/src/components/page-templates-template-parts/actions.js +106 -91
  386. package/src/components/page-templates-template-parts/index.js +41 -93
  387. package/src/components/page-templates-template-parts/style.scss +5 -0
  388. package/src/components/plugin-template-setting-panel/index.js +14 -1
  389. package/src/components/save-button/index.js +55 -26
  390. package/src/components/save-hub/index.js +20 -164
  391. package/src/components/save-panel/index.js +24 -17
  392. package/src/components/sidebar/index.js +2 -8
  393. package/src/components/sidebar-dataviews/custom-dataviews-list.js +2 -2
  394. package/src/components/sidebar-dataviews/dataview-item.js +2 -2
  395. package/src/components/sidebar-dataviews/default-views.js +12 -4
  396. package/src/components/sidebar-dataviews/index.js +5 -4
  397. package/src/components/sidebar-edit-mode/index.js +0 -2
  398. package/src/components/sidebar-edit-mode/page-panels/index.js +31 -62
  399. package/src/components/sidebar-edit-mode/page-panels/page-content.js +10 -10
  400. package/src/components/sidebar-edit-mode/page-panels/page-summary.js +2 -0
  401. package/src/components/sidebar-edit-mode/template-panel/index.js +33 -24
  402. package/src/components/sidebar-edit-mode/template-panel/style.scss +1 -29
  403. package/src/components/sidebar-navigation-screen/style.scss +21 -9
  404. package/src/components/sidebar-navigation-screen-details-footer/index.js +6 -2
  405. package/src/components/sidebar-navigation-screen-global-styles/index.js +29 -2
  406. package/src/components/sidebar-navigation-screen-navigation-menu/{delete-modal.js → delete-confirm-dialog.js} +2 -3
  407. package/src/components/sidebar-navigation-screen-navigation-menu/more-menu.js +11 -9
  408. package/src/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js +6 -3
  409. package/src/components/sidebar-navigation-screen-patterns/index.js +0 -7
  410. package/src/components/sidebar-navigation-screen-template/index.js +6 -1
  411. package/src/components/sidebar-navigation-screen-templates-browse/content.js +2 -2
  412. package/src/components/style-book/index.js +1 -3
  413. package/src/components/sync-state-with-url/use-init-edited-entity-from-url.js +3 -3
  414. package/src/components/sync-state-with-url/use-sync-path-with-url.js +3 -19
  415. package/src/components/template-actions/index.js +63 -46
  416. package/src/components/welcome-guide/editor.js +9 -6
  417. package/src/hooks/index.js +0 -1
  418. package/src/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +21 -4
  419. package/src/store/selectors.js +3 -15
  420. package/src/style.scss +0 -2
  421. package/src/utils/constants.js +4 -2
  422. package/src/utils/get-is-list-page.js +1 -1
  423. package/src/utils/math.js +93 -0
  424. package/build/components/actions/index.js +0 -321
  425. package/build/components/actions/index.js.map +0 -1
  426. package/build/components/global-styles/preview-typography.js.map +0 -1
  427. package/build/components/sidebar-edit-mode/sidebar-card/index.js +0 -42
  428. package/build/components/sidebar-edit-mode/sidebar-card/index.js.map +0 -1
  429. package/build/components/sidebar-edit-mode/template-panel/template-actions.js +0 -50
  430. package/build/components/sidebar-edit-mode/template-panel/template-actions.js.map +0 -1
  431. package/build/components/sidebar-edit-mode/template-panel/template-areas.js +0 -70
  432. package/build/components/sidebar-edit-mode/template-panel/template-areas.js.map +0 -1
  433. package/build/components/sidebar-navigation-screen-navigation-menu/delete-modal.js.map +0 -1
  434. package/build/components/sidebar-navigation-screen-pages/index.js +0 -175
  435. package/build/components/sidebar-navigation-screen-pages/index.js.map +0 -1
  436. package/build/components/sidebar-navigation-screen-templates/index.js +0 -132
  437. package/build/components/sidebar-navigation-screen-templates/index.js.map +0 -1
  438. package/build/hooks/template-part-edit.js +0 -82
  439. package/build/hooks/template-part-edit.js.map +0 -1
  440. package/build/store/utils.js +0 -71
  441. package/build/store/utils.js.map +0 -1
  442. package/build-module/components/actions/index.js +0 -310
  443. package/build-module/components/actions/index.js.map +0 -1
  444. package/build-module/components/global-styles/preview-typography.js.map +0 -1
  445. package/build-module/components/sidebar-edit-mode/sidebar-card/index.js +0 -34
  446. package/build-module/components/sidebar-edit-mode/sidebar-card/index.js.map +0 -1
  447. package/build-module/components/sidebar-edit-mode/template-panel/template-actions.js +0 -42
  448. package/build-module/components/sidebar-edit-mode/template-panel/template-actions.js.map +0 -1
  449. package/build-module/components/sidebar-edit-mode/template-panel/template-areas.js +0 -63
  450. package/build-module/components/sidebar-edit-mode/template-panel/template-areas.js.map +0 -1
  451. package/build-module/components/sidebar-navigation-screen-navigation-menu/delete-modal.js.map +0 -1
  452. package/build-module/components/sidebar-navigation-screen-pages/index.js +0 -167
  453. package/build-module/components/sidebar-navigation-screen-pages/index.js.map +0 -1
  454. package/build-module/components/sidebar-navigation-screen-templates/index.js +0 -124
  455. package/build-module/components/sidebar-navigation-screen-templates/index.js.map +0 -1
  456. package/build-module/hooks/template-part-edit.js +0 -75
  457. package/build-module/hooks/template-part-edit.js.map +0 -1
  458. package/build-module/store/utils.js +0 -64
  459. package/build-module/store/utils.js.map +0 -1
  460. package/src/components/actions/index.js +0 -411
  461. package/src/components/sidebar-edit-mode/sidebar-card/index.js +0 -34
  462. package/src/components/sidebar-edit-mode/sidebar-card/style.scss +0 -37
  463. package/src/components/sidebar-edit-mode/template-panel/template-actions.js +0 -49
  464. package/src/components/sidebar-edit-mode/template-panel/template-areas.js +0 -86
  465. package/src/components/sidebar-navigation-screen-pages/index.js +0 -238
  466. package/src/components/sidebar-navigation-screen-templates/index.js +0 -156
  467. package/src/components/sidebar-navigation-screen-templates/style.scss +0 -9
  468. package/src/hooks/template-part-edit.js +0 -89
  469. package/src/store/test/utils.js +0 -191
  470. package/src/store/utils.js +0 -69
@@ -22,13 +22,21 @@ import {
22
22
  FOCUSABLE_ENTITIES,
23
23
  NAVIGATION_POST_TYPE,
24
24
  } from '../../utils/constants';
25
+ import { computeIFrameScale } from '../../utils/math';
25
26
 
26
27
  const { EditorCanvas: EditorCanvasRoot } = unlock( editorPrivateApis );
27
28
 
28
- function EditorCanvas( { enableResizing, settings, children, ...props } ) {
29
- const { hasBlocks, isFocusMode, templateType, canvasMode } = useSelect(
30
- ( select ) => {
31
- const { getBlockCount } = select( blockEditorStore );
29
+ function EditorCanvas( {
30
+ enableResizing,
31
+ settings,
32
+ children,
33
+ onClick,
34
+ ...props
35
+ } ) {
36
+ const { hasBlocks, isFocusMode, templateType, canvasMode, isZoomOutMode } =
37
+ useSelect( ( select ) => {
38
+ const { getBlockCount, __unstableGetEditorMode } =
39
+ select( blockEditorStore );
32
40
  const { getEditedPostType, getCanvasMode } = unlock(
33
41
  select( editSiteStore )
34
42
  );
@@ -37,12 +45,11 @@ function EditorCanvas( { enableResizing, settings, children, ...props } ) {
37
45
  return {
38
46
  templateType: _templateType,
39
47
  isFocusMode: FOCUSABLE_ENTITIES.includes( _templateType ),
48
+ isZoomOutMode: __unstableGetEditorMode() === 'zoom-out',
40
49
  canvasMode: getCanvasMode(),
41
50
  hasBlocks: !! getBlockCount(),
42
51
  };
43
- },
44
- []
45
- );
52
+ }, [] );
46
53
  const { setCanvasMode } = unlock( useDispatch( editSiteStore ) );
47
54
  const [ isFocused, setIsFocused ] = useState( false );
48
55
 
@@ -68,7 +75,13 @@ function EditorCanvas( { enableResizing, settings, children, ...props } ) {
68
75
  setCanvasMode( 'edit' );
69
76
  }
70
77
  },
71
- onClick: () => setCanvasMode( 'edit' ),
78
+ onClick: () => {
79
+ if ( !! onClick ) {
80
+ onClick();
81
+ } else {
82
+ setCanvasMode( 'edit' );
83
+ }
84
+ },
72
85
  readonly: true,
73
86
  };
74
87
  const isTemplateTypeNavigation = templateType === NAVIGATION_POST_TYPE;
@@ -102,6 +115,17 @@ function EditorCanvas( { enableResizing, settings, children, ...props } ) {
102
115
  [ settings.styles, enableResizing, canvasMode ]
103
116
  );
104
117
 
118
+ const frameSize = isZoomOutMode ? 20 : undefined;
119
+
120
+ const scale = isZoomOutMode
121
+ ? ( contentWidth ) =>
122
+ computeIFrameScale(
123
+ { width: 1000, scale: 0.45 },
124
+ { width: 400, scale: 0.9 },
125
+ contentWidth
126
+ )
127
+ : undefined;
128
+
105
129
  return (
106
130
  <EditorCanvasRoot
107
131
  className={ classnames( 'edit-site-editor-canvas__block-list', {
@@ -110,7 +134,8 @@ function EditorCanvas( { enableResizing, settings, children, ...props } ) {
110
134
  renderAppender={ showBlockAppender }
111
135
  styles={ styles }
112
136
  iframeProps={ {
113
- shouldZoom: true,
137
+ scale,
138
+ frameSize,
114
139
  className: classnames(
115
140
  'edit-site-visual-editor__editor-canvas',
116
141
  {
@@ -7,6 +7,7 @@ import classnames from 'classnames';
7
7
  */
8
8
  import { useSelect } from '@wordpress/data';
9
9
  import { useViewportMatch, useResizeObserver } from '@wordpress/compose';
10
+ import { store as blockEditorStore } from '@wordpress/block-editor';
10
11
 
11
12
  /**
12
13
  * Internal dependencies
@@ -26,24 +27,23 @@ import { privateApis as routerPrivateApis } from '@wordpress/router';
26
27
 
27
28
  const { useLocation } = unlock( routerPrivateApis );
28
29
 
29
- export default function SiteEditorCanvas() {
30
+ export default function SiteEditorCanvas( { onClick } ) {
30
31
  const location = useLocation();
31
- const { templateType, isFocusableEntity, isViewMode } = useSelect(
32
- ( select ) => {
32
+ const { templateType, isFocusableEntity, isViewMode, isZoomOutMode } =
33
+ useSelect( ( select ) => {
33
34
  const { getEditedPostType, getCanvasMode } = unlock(
34
35
  select( editSiteStore )
35
36
  );
36
-
37
+ const { __unstableGetEditorMode } = select( blockEditorStore );
37
38
  const _templateType = getEditedPostType();
38
39
 
39
40
  return {
40
41
  templateType: _templateType,
41
42
  isFocusableEntity: FOCUSABLE_ENTITIES.includes( _templateType ),
42
43
  isViewMode: getCanvasMode() === 'view',
44
+ isZoomOutMode: __unstableGetEditorMode() === 'zoom-out',
43
45
  };
44
- },
45
- []
46
- );
46
+ }, [] );
47
47
  const isFocusMode = location.params.focusMode || isFocusableEntity;
48
48
  const [ resizeObserver, sizes ] = useResizeObserver();
49
49
 
@@ -55,6 +55,8 @@ export default function SiteEditorCanvas() {
55
55
  ! isViewMode &&
56
56
  // Disable resizing in mobile viewport.
57
57
  ! isMobileViewport &&
58
+ // Dsiable resizing in zoomed-out mode.
59
+ ! isZoomOutMode &&
58
60
  // Disable resizing when editing a template in focus mode.
59
61
  templateType !== TEMPLATE_POST_TYPE;
60
62
 
@@ -87,6 +89,7 @@ export default function SiteEditorCanvas() {
87
89
  <EditorCanvas
88
90
  enableResizing={ enableResizing }
89
91
  settings={ settings }
92
+ onClick={ onClick }
90
93
  >
91
94
  { resizeObserver }
92
95
  </EditorCanvas>
@@ -101,8 +101,6 @@ function useNavigateToPreviousEntityRecord() {
101
101
  ( location.params.postId &&
102
102
  FOCUSABLE_ENTITIES.includes( location.params.postType ) );
103
103
  const didComeFromEditorCanvas =
104
- previousLocation?.params.postId &&
105
- previousLocation?.params.postType &&
106
104
  previousLocation?.params.canvas === 'edit';
107
105
  const showBackButton = isFocusMode && didComeFromEditorCanvas;
108
106
  return showBackButton ? () => history.back() : undefined;
@@ -6,7 +6,7 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { useSelect } from '@wordpress/data';
9
+ import { useDispatch, useSelect } from '@wordpress/data';
10
10
  import { Notice } from '@wordpress/components';
11
11
  import { useInstanceId, useViewportMatch } from '@wordpress/compose';
12
12
  import { store as preferencesStore } from '@wordpress/preferences';
@@ -72,7 +72,7 @@ const interfaceLabels = {
72
72
  footer: __( 'Editor footer' ),
73
73
  };
74
74
 
75
- export default function Editor( { isLoading } ) {
75
+ export default function Editor( { isLoading, onClick } ) {
76
76
  const {
77
77
  record: editedPost,
78
78
  getTitle,
@@ -174,6 +174,8 @@ export default function Editor( { isLoading } ) {
174
174
  'edit-site-editor__loading-progress'
175
175
  );
176
176
 
177
+ const { closeGeneralSidebar } = useDispatch( editSiteStore );
178
+
177
179
  const settings = useSpecificEditorSettings();
178
180
  const isReady =
179
181
  ! isLoading &&
@@ -225,7 +227,7 @@ export default function Editor( { isLoading } ) {
225
227
  { ! isLargeViewport && (
226
228
  <BlockToolbar hideDragHandle />
227
229
  ) }
228
- <SiteEditorCanvas />
230
+ <SiteEditorCanvas onClick={ onClick } />
229
231
  <PatternModal />
230
232
  </>
231
233
  ) }
@@ -243,7 +245,12 @@ export default function Editor( { isLoading } ) {
243
245
  }
244
246
  secondarySidebar={
245
247
  isEditMode &&
246
- ( ( shouldShowInserter && <InserterSidebar /> ) ||
248
+ ( ( shouldShowInserter && (
249
+ <InserterSidebar
250
+ closeGeneralSidebar={ closeGeneralSidebar }
251
+ isRightSidebarOpen={ isRightSidebarOpen }
252
+ />
253
+ ) ) ||
247
254
  ( shouldShowListView && <ListViewSidebar /> ) )
248
255
  }
249
256
  sidebar={
@@ -134,7 +134,6 @@ function EditorCanvasContainer( {
134
134
  icon={ closeSmall }
135
135
  label={ closeButtonLabel || __( 'Close' ) }
136
136
  onClick={ onCloseContainer }
137
- showTooltip={ false }
138
137
  />
139
138
  ) }
140
139
  { childrenWithProps }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { unlock } from '../../lock-unlock';
10
+
11
+ const {
12
+ useGlobalStyle,
13
+ useGlobalSetting,
14
+ BackgroundPanel: StylesBackgroundPanel,
15
+ } = unlock( blockEditorPrivateApis );
16
+
17
+ export default function BackgroundPanel() {
18
+ const [ style ] = useGlobalStyle( '', undefined, 'user', {
19
+ shouldDecodeEncode: false,
20
+ } );
21
+ const [ inheritedStyle, setStyle ] = useGlobalStyle( '', undefined, 'all', {
22
+ shouldDecodeEncode: false,
23
+ } );
24
+ const [ settings ] = useGlobalSetting( '' );
25
+
26
+ return (
27
+ <StylesBackgroundPanel
28
+ inheritedValue={ inheritedStyle }
29
+ value={ style }
30
+ onChange={ setStyle }
31
+ settings={ settings }
32
+ />
33
+ );
34
+ }
@@ -13,8 +13,6 @@ import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
13
13
  * Internal dependencies
14
14
  */
15
15
  import { unlock } from '../../lock-unlock';
16
- import ColorVariations from './variations/variations-color';
17
- import { useCurrentMergeThemeStyleVariationsWithUserConfig } from '../../hooks/use-theme-style-variations/use-theme-style-variations-by-property';
18
16
 
19
17
  const { useGlobalSetting } = unlock( blockEditorPrivateApis );
20
18
  const mobilePopoverProps = { placement: 'bottom-start', offset: 8 };
@@ -47,12 +45,6 @@ export default function ColorPalettePanel( { name } ) {
47
45
  'color.defaultPalette',
48
46
  name
49
47
  );
50
- const colorVariations = useCurrentMergeThemeStyleVariationsWithUserConfig( {
51
- property: 'color',
52
- filter: ( variation ) =>
53
- variation?.settings?.color &&
54
- Object.keys( variation?.settings?.color ).length,
55
- } );
56
48
  const isMobileViewport = useViewportMatch( 'small', '<' );
57
49
  const popoverProps = isMobileViewport ? mobilePopoverProps : undefined;
58
50
 
@@ -85,9 +77,6 @@ export default function ColorPalettePanel( { name } ) {
85
77
  popoverProps={ popoverProps }
86
78
  />
87
79
  ) }
88
- { !! colorVariations.length && (
89
- <ColorVariations variations={ colorVariations } />
90
- ) }
91
80
  <PaletteEdit
92
81
  colors={ customColors }
93
82
  onChange={ setCustomColors }
@@ -37,7 +37,7 @@ function FontFamilies() {
37
37
  />
38
38
  ) }
39
39
 
40
- <VStack spacing={ 3 }>
40
+ <VStack spacing={ 2 }>
41
41
  <HStack justify="space-between">
42
42
  <Subtitle level={ 3 }>{ __( 'Fonts' ) }</Subtitle>
43
43
  <HStack justify="flex-end">
@@ -9,7 +9,7 @@ import {
9
9
  useEntityRecords,
10
10
  store as coreStore,
11
11
  } from '@wordpress/core-data';
12
- import { __, sprintf } from '@wordpress/i18n';
12
+ import { __ } from '@wordpress/i18n';
13
13
 
14
14
  /**
15
15
  * Internal dependencies
@@ -105,18 +105,31 @@ function FontLibraryProvider( { children } ) {
105
105
  const [ modalTabOpen, setModalTabOpen ] = useState( false );
106
106
  const [ libraryFontSelected, setLibraryFontSelected ] = useState( null );
107
107
 
108
- const baseThemeFonts = baseFontFamilies?.theme
109
- ? baseFontFamilies.theme
110
- .map( ( f ) => setUIValuesNeeded( f, { source: 'theme' } ) )
111
- .sort( ( a, b ) => a.name.localeCompare( b.name ) )
112
- : [];
113
-
108
+ // Themes Fonts are the fonts defined in the global styles (database persisted theme.json data).
114
109
  const themeFonts = fontFamilies?.theme
115
110
  ? fontFamilies.theme
116
111
  .map( ( f ) => setUIValuesNeeded( f, { source: 'theme' } ) )
117
112
  .sort( ( a, b ) => a.name.localeCompare( b.name ) )
118
113
  : [];
119
114
 
115
+ const themeFontsSlugs = new Set( themeFonts.map( ( f ) => f.slug ) );
116
+
117
+ /*
118
+ * Base Theme Fonts are the fonts defined in the theme.json *file*.
119
+ *
120
+ * Uses the fonts from global styles + the ones from the theme.json file that hasn't repeated slugs.
121
+ * Avoids incosistencies with the fonts listed in the font library modal as base (unactivated).
122
+ * These inconsistencies can happen when the active theme fonts in global styles aren't defined in theme.json file as when a theme style variation is applied.
123
+ */
124
+ const baseThemeFonts = baseFontFamilies?.theme
125
+ ? themeFonts.concat(
126
+ baseFontFamilies.theme
127
+ .filter( ( f ) => ! themeFontsSlugs.has( f.slug ) )
128
+ .map( ( f ) => setUIValuesNeeded( f, { source: 'theme' } ) )
129
+ .sort( ( a, b ) => a.name.localeCompare( b.name ) )
130
+ )
131
+ : [];
132
+
120
133
  const customFonts = fontFamilies?.custom
121
134
  ? fontFamilies.custom
122
135
  .map( ( f ) => setUIValuesNeeded( f, { source: 'custom' } ) )
@@ -144,8 +157,7 @@ function FontLibraryProvider( { children } ) {
144
157
  return;
145
158
  }
146
159
 
147
- const fonts =
148
- font.source === 'theme' ? baseThemeFonts : baseCustomFonts;
160
+ const fonts = font.source === 'theme' ? themeFonts : baseCustomFonts;
149
161
 
150
162
  // Tries to find the font in the installed fonts
151
163
  const fontSelected = fonts.find( ( f ) => f.slug === font.slug );
@@ -269,13 +281,29 @@ function FontLibraryProvider( { children } ) {
269
281
  sucessfullyInstalledFontFaces?.length > 0 ||
270
282
  alreadyInstalledFontFaces?.length > 0
271
283
  ) {
272
- fontFamilyToInstall.fontFace = [
284
+ // Use font data from REST API not from client to ensure
285
+ // correct font information is used.
286
+ installedFontFamily.fontFace = [
273
287
  ...sucessfullyInstalledFontFaces,
274
- ...alreadyInstalledFontFaces,
275
288
  ];
276
- fontFamiliesToActivate.push( fontFamilyToInstall );
277
- } else if ( isANewFontFamily ) {
278
- // If the font family is new, delete it to avoid having font families without font faces.
289
+
290
+ fontFamiliesToActivate.push( installedFontFamily );
291
+ }
292
+
293
+ // If it's a system font but was installed successfully, activate it.
294
+ if (
295
+ installedFontFamily &&
296
+ ! fontFamilyToInstall?.fontFace?.length
297
+ ) {
298
+ fontFamiliesToActivate.push( installedFontFamily );
299
+ }
300
+
301
+ // If the font family is new and is not a system font, delete it to avoid having font families without font faces.
302
+ if (
303
+ isANewFontFamily &&
304
+ fontFamilyToInstall?.fontFace?.length > 0 &&
305
+ sucessfullyInstalledFontFaces?.length === 0
306
+ ) {
279
307
  await fetchUninstallFontFamily( installedFontFamily.id );
280
308
  }
281
309
 
@@ -284,6 +312,14 @@ function FontLibraryProvider( { children } ) {
284
312
  );
285
313
  }
286
314
 
315
+ installationErrors = installationErrors.reduce(
316
+ ( unique, item ) =>
317
+ unique.includes( item.message )
318
+ ? unique
319
+ : [ ...unique, item.message ],
320
+ []
321
+ );
322
+
287
323
  if ( fontFamiliesToActivate.length > 0 ) {
288
324
  // Activate the font family (add the font family to the global styles).
289
325
  activateCustomFontFamilies( fontFamiliesToActivate );
@@ -300,18 +336,13 @@ function FontLibraryProvider( { children } ) {
300
336
  }
301
337
 
302
338
  if ( installationErrors.length > 0 ) {
303
- throw new Error(
304
- sprintf(
305
- /* translators: %s: Specific error message returned from server. */
306
- __( 'There were some errors installing fonts. %s' ),
307
- installationErrors.reduce(
308
- ( errorMessageCollection, error ) => {
309
- return `${ errorMessageCollection } ${ error.message }`;
310
- },
311
- ''
312
- )
313
- )
339
+ const installError = new Error(
340
+ __( 'There was an error installing fonts.' )
314
341
  );
342
+
343
+ installError.installationErrors = installationErrors;
344
+
345
+ throw installError;
315
346
  }
316
347
  } finally {
317
348
  setIsInstalling( false );
@@ -373,14 +404,29 @@ function FontLibraryProvider( { children } ) {
373
404
  };
374
405
 
375
406
  const activateCustomFontFamilies = ( fontsToAdd ) => {
376
- // Merge the existing custom fonts with the new fonts.
407
+ // Removes the id from the families and faces to avoid saving that to global styles post content.
408
+ const fontsToActivate = fontsToAdd.map(
409
+ ( { id: _familyDbId, fontFace, ...font } ) => ( {
410
+ ...font,
411
+ ...( fontFace && fontFace.length > 0
412
+ ? {
413
+ fontFace: fontFace.map(
414
+ ( { id: _faceDbId, ...face } ) => face
415
+ ),
416
+ }
417
+ : {} ),
418
+ } )
419
+ );
420
+
377
421
  // Activate the fonts by set the new custom fonts array.
378
422
  setFontFamilies( {
379
423
  ...fontFamilies,
380
- custom: mergeFontFamilies( fontFamilies?.custom, fontsToAdd ),
424
+ // Merge the existing custom fonts with the new fonts.
425
+ custom: mergeFontFamilies( fontFamilies?.custom, fontsToActivate ),
381
426
  } );
427
+
382
428
  // Add custom fonts to the browser.
383
- fontsToAdd.forEach( ( font ) => {
429
+ fontsToActivate.forEach( ( font ) => {
384
430
  if ( font.fontFace ) {
385
431
  font.fontFace.forEach( ( face ) => {
386
432
  // Load font faces just in the iframe because they already are in the document.
@@ -408,15 +454,15 @@ function FontLibraryProvider( { children } ) {
408
454
 
409
455
  const isFaceActivated = isFontActivated(
410
456
  font.slug,
411
- face.fontStyle,
412
- face.fontWeight,
457
+ face?.fontStyle,
458
+ face?.fontWeight,
413
459
  font.source
414
460
  );
415
461
 
416
462
  if ( isFaceActivated ) {
417
463
  loadFontFaceInBrowser(
418
464
  face,
419
- getDisplaySrcFromFontFace( face.src ),
465
+ getDisplaySrcFromFontFace( face?.src ),
420
466
  'all'
421
467
  );
422
468
  } else {
@@ -344,8 +344,9 @@ function FontCollection( { slug } ) {
344
344
  size="small"
345
345
  onClick={ () => {
346
346
  setSelectedFont( null );
347
+ setNotice( null );
347
348
  } }
348
- aria-label={ __( 'Navigate to the previous view' ) }
349
+ label={ __( 'Back' ) }
349
350
  />
350
351
  <Heading
351
352
  level={ 2 }
@@ -441,13 +442,13 @@ function FontCollection( { slug } ) {
441
442
  sprintf(
442
443
  // translators: %s: Total number of pages.
443
444
  _x(
444
- 'Page <CurrenPageControl /> of %s',
445
+ 'Page <CurrentPageControl /> of %s',
445
446
  'paging'
446
447
  ),
447
448
  totalPages
448
449
  ),
449
450
  {
450
- CurrenPageControl: (
451
+ CurrentPageControl: (
451
452
  <SelectControl
452
453
  aria-label={ __( 'Current page' ) }
453
454
  value={ page }
@@ -6,6 +6,7 @@ import {
6
6
  Button,
7
7
  Card,
8
8
  CardBody,
9
+ __experimentalHeading as Heading,
9
10
  __experimentalText as Text,
10
11
  __experimentalSpacer as Spacer,
11
12
  } from '@wordpress/components';
@@ -24,7 +25,9 @@ function GoogleFontsConfirmDialog() {
24
25
  <div className="font-library__google-fonts-confirm">
25
26
  <Card>
26
27
  <CardBody>
27
- <Text as="h3">{ __( 'Connect to Google Fonts' ) }</Text>
28
+ <Heading level={ 2 }>
29
+ { __( 'Connect to Google Fonts' ) }
30
+ </Heading>
28
31
  <Spacer margin={ 6 } />
29
32
  <Text as="p">
30
33
  { __(
@@ -38,7 +41,11 @@ function GoogleFontsConfirmDialog() {
38
41
  ) }
39
42
  </Text>
40
43
  <Spacer margin={ 6 } />
41
- <Button variant="primary" onClick={ handleConfirm }>
44
+ <Button
45
+ __next40pxDefaultSize
46
+ variant="primary"
47
+ onClick={ handleConfirm }
48
+ >
42
49
  { __( 'Allow access to Google Fonts' ) }
43
50
  </Button>
44
51
  </CardBody>
@@ -202,7 +202,7 @@ function InstalledFonts() {
202
202
  onClick={ () => {
203
203
  handleSetLibraryFontSelected( null );
204
204
  } }
205
- aria-label={ __( 'Navigate to the previous view' ) }
205
+ label={ __( 'Back' ) }
206
206
  />
207
207
  <Heading
208
208
  level={ 2 }
@@ -1,5 +1,5 @@
1
1
  .font-library-modal {
2
- // @todo: If a new prop is added to the Modal component that constrains
2
+ // @todo If a new prop is added to the Modal component that constrains
3
3
  // the content width, we should use that prop instead of this style.
4
4
  // see https://github.com/WordPress/gutenberg/issues/54471.
5
5
  &.font-library-modal {
@@ -125,13 +125,22 @@ button.font-library-modal__upload-area {
125
125
  align-items: center;
126
126
  margin-top: $grid-unit-80;
127
127
 
128
- h3 {
129
- font-size: 1.4rem;
128
+ p {
129
+ line-height: $default-line-height;
130
+ }
131
+
132
+ h2 {
133
+ font-size: 1.2rem;
134
+ font-weight: 400;
130
135
  }
131
136
 
132
137
  .components-card {
133
- width: 50%;
134
- min-width: 350px;
135
- max-width: 400px;
138
+ padding: $grid-unit-20;
139
+ width: 400px;
140
+ }
141
+
142
+ .components-button {
143
+ width: 100%;
144
+ justify-content: center;
136
145
  }
137
146
  }
@@ -45,29 +45,48 @@ function UploadFonts() {
45
45
  * @param {Array} files The files to be filtered
46
46
  * @return {void}
47
47
  */
48
- const handleFilesUpload = ( files ) => {
48
+ const handleFilesUpload = async ( files ) => {
49
49
  setNotice( null );
50
50
  setIsUploading( true );
51
51
  const uniqueFilenames = new Set();
52
52
  const selectedFiles = [ ...files ];
53
- const allowedFiles = selectedFiles.filter( ( file ) => {
53
+ let hasInvalidFiles = false;
54
+
55
+ // Use map to create a promise for each file check, then filter with Promise.all.
56
+ const checkFilesPromises = selectedFiles.map( async ( file ) => {
57
+ const isFont = await isFontFile( file );
58
+ if ( ! isFont ) {
59
+ hasInvalidFiles = true;
60
+ return null; // Return null for invalid files.
61
+ }
62
+ // Check for duplicates
54
63
  if ( uniqueFilenames.has( file.name ) ) {
55
- return false; // Discard duplicates
64
+ return null; // Return null for duplicates.
56
65
  }
57
- // Eliminates files that are not allowed
66
+ // Check if the file extension is allowed.
58
67
  const fileExtension = file.name.split( '.' ).pop().toLowerCase();
59
68
  if ( ALLOWED_FILE_EXTENSIONS.includes( fileExtension ) ) {
60
69
  uniqueFilenames.add( file.name );
61
- return true; // Keep file if the extension is allowed
70
+ return file; // Return the file if it passes all checks.
62
71
  }
63
- return false; // Discard file extension not allowed
72
+ return null; // Return null for disallowed file extensions.
64
73
  } );
74
+
75
+ // Filter out the nulls after all promises have resolved.
76
+ const allowedFiles = ( await Promise.all( checkFilesPromises ) ).filter(
77
+ ( file ) => null !== file
78
+ );
79
+
65
80
  if ( allowedFiles.length > 0 ) {
66
81
  loadFiles( allowedFiles );
67
82
  } else {
83
+ const message = hasInvalidFiles
84
+ ? __( 'Sorry, you are not allowed to upload this file type.' )
85
+ : __( 'No fonts found to install.' );
86
+
68
87
  setNotice( {
69
88
  type: 'error',
70
- message: __( 'No fonts found to install.' ),
89
+ message,
71
90
  } );
72
91
  setIsUploading( false );
73
92
  }
@@ -94,6 +113,23 @@ function UploadFonts() {
94
113
  handleInstall( fontFacesLoaded );
95
114
  };
96
115
 
116
+ /**
117
+ * Checks if a file is a valid Font file.
118
+ *
119
+ * @param {File} file The file to be checked.
120
+ * @return {boolean} Whether the file is a valid font file.
121
+ */
122
+ async function isFontFile( file ) {
123
+ const font = new Font( 'Uploaded Font' );
124
+ try {
125
+ const buffer = await readFileAsArrayBuffer( file );
126
+ await font.fromDataBuffer( buffer, 'font' );
127
+ return true;
128
+ } catch ( error ) {
129
+ return false;
130
+ }
131
+ }
132
+
97
133
  // Create a function to read the file as array buffer
98
134
  async function readFileAsArrayBuffer( file ) {
99
135
  return new Promise( ( resolve, reject ) => {
@@ -154,6 +190,7 @@ function UploadFonts() {
154
190
  setNotice( {
155
191
  type: 'error',
156
192
  message: error.message,
193
+ errors: error?.installationErrors,
157
194
  } );
158
195
  }
159
196
 
@@ -167,9 +204,17 @@ function UploadFonts() {
167
204
  { notice && (
168
205
  <Notice
169
206
  status={ notice.type }
207
+ __unstableHTML
170
208
  onRemove={ () => setNotice( null ) }
171
209
  >
172
210
  { notice.message }
211
+ { notice.errors && (
212
+ <ul>
213
+ { notice.errors.map( ( error, index ) => (
214
+ <li key={ index }>{ error }</li>
215
+ ) ) }
216
+ </ul>
217
+ ) }
173
218
  </Notice>
174
219
  ) }
175
220
  { isUploading && (
@@ -199,7 +244,7 @@ function UploadFonts() {
199
244
  <Spacer margin={ 2 } />
200
245
  <Text className="font-library-modal__upload-area__text">
201
246
  { __(
202
- 'Uploaded fonts appear in your library and can be used in your theme. Supported formats: .tff, .otf, .woff, and .woff2.'
247
+ 'Uploaded fonts appear in your library and can be used in your theme. Supported formats: .ttf, .otf, .woff, and .woff2.'
203
248
  ) }
204
249
  </Text>
205
250
  </VStack>