@wordpress/edit-site 5.29.0 → 5.31.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 (511) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/actions/index.js +3 -5
  3. package/build/components/actions/index.js.map +1 -1
  4. package/build/components/block-editor/editor-canvas.js +18 -6
  5. package/build/components/block-editor/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 +1 -15
  9. package/build/components/editor/index.js.map +1 -1
  10. package/build/components/global-styles/color-palette-panel.js.map +1 -1
  11. package/build/components/global-styles/font-families.js +1 -1
  12. package/build/components/global-styles/font-families.js.map +1 -1
  13. package/build/components/global-styles/font-library-modal/collection-font-variant.js +2 -2
  14. package/build/components/global-styles/font-library-modal/collection-font-variant.js.map +1 -1
  15. package/build/components/global-styles/font-library-modal/context.js +70 -59
  16. package/build/components/global-styles/font-library-modal/context.js.map +1 -1
  17. package/build/components/global-styles/font-library-modal/font-card.js +10 -15
  18. package/build/components/global-styles/font-library-modal/font-card.js.map +1 -1
  19. package/build/components/global-styles/font-library-modal/font-collection.js +121 -78
  20. package/build/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  21. package/build/components/global-styles/font-library-modal/font-demo.js +29 -8
  22. package/build/components/global-styles/font-library-modal/font-demo.js.map +1 -1
  23. package/build/components/global-styles/font-library-modal/google-fonts-confirm-dialog.js +3 -2
  24. package/build/components/global-styles/font-library-modal/google-fonts-confirm-dialog.js.map +1 -1
  25. package/build/components/global-styles/font-library-modal/index.js +19 -6
  26. package/build/components/global-styles/font-library-modal/index.js.map +1 -1
  27. package/build/components/global-styles/font-library-modal/installed-fonts.js +151 -79
  28. package/build/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  29. package/build/components/global-styles/font-library-modal/library-font-variant.js +2 -2
  30. package/build/components/global-styles/font-library-modal/library-font-variant.js.map +1 -1
  31. package/build/components/global-styles/font-library-modal/upload-fonts.js +51 -23
  32. package/build/components/global-styles/font-library-modal/upload-fonts.js.map +1 -1
  33. package/build/components/global-styles/font-library-modal/utils/index.js +39 -5
  34. package/build/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  35. package/build/components/global-styles/font-library-modal/utils/preview-styles.js +4 -1
  36. package/build/components/global-styles/font-library-modal/utils/preview-styles.js.map +1 -1
  37. package/build/components/global-styles/gradients-palette-panel.js.map +1 -1
  38. package/build/components/global-styles/header.js +2 -2
  39. package/build/components/global-styles/header.js.map +1 -1
  40. package/build/components/global-styles/highlighted-colors.js +50 -0
  41. package/build/components/global-styles/highlighted-colors.js.map +1 -0
  42. package/build/components/global-styles/hooks.js +50 -1
  43. package/build/components/global-styles/hooks.js.map +1 -1
  44. package/build/components/global-styles/preview-colors.js +62 -0
  45. package/build/components/global-styles/preview-colors.js.map +1 -0
  46. package/build/components/global-styles/preview-iframe.js +130 -0
  47. package/build/components/global-styles/preview-iframe.js.map +1 -0
  48. package/build/components/global-styles/preview-styles.js +163 -0
  49. package/build/components/global-styles/preview-styles.js.map +1 -0
  50. package/build/components/global-styles/screen-block-list.js +1 -1
  51. package/build/components/global-styles/screen-block-list.js.map +1 -1
  52. package/build/components/global-styles/screen-block.js +1 -1
  53. package/build/components/global-styles/screen-block.js.map +1 -1
  54. package/build/components/global-styles/screen-colors.js +3 -2
  55. package/build/components/global-styles/screen-colors.js.map +1 -1
  56. package/build/components/global-styles/screen-revisions/index.js +2 -2
  57. package/build/components/global-styles/screen-revisions/index.js.map +1 -1
  58. package/build/components/global-styles/screen-root.js +2 -2
  59. package/build/components/global-styles/screen-root.js.map +1 -1
  60. package/build/components/global-styles/screen-typography.js +5 -2
  61. package/build/components/global-styles/screen-typography.js.map +1 -1
  62. package/build/components/global-styles/style-variations-container.js +12 -84
  63. package/build/components/global-styles/style-variations-container.js.map +1 -1
  64. package/build/components/global-styles/{typogrphy-elements.js → typography-elements.js} +4 -2
  65. package/build/components/global-styles/typography-elements.js.map +1 -0
  66. package/build/components/global-styles/typography-example.js +67 -0
  67. package/build/components/global-styles/typography-example.js.map +1 -0
  68. package/build/components/global-styles/typography-preview.js +3 -1
  69. package/build/components/global-styles/typography-preview.js.map +1 -1
  70. package/build/components/global-styles/ui.js +27 -2
  71. package/build/components/global-styles/ui.js.map +1 -1
  72. package/build/components/global-styles/utils.js +22 -0
  73. package/build/components/global-styles/utils.js.map +1 -1
  74. package/build/components/global-styles/variations/variation.js +90 -0
  75. package/build/components/global-styles/variations/variation.js.map +1 -0
  76. package/build/components/global-styles/variations/variations-color.js +35 -0
  77. package/build/components/global-styles/variations/variations-color.js.map +1 -0
  78. package/build/components/global-styles/{variations-panel.js → variations/variations-panel.js} +1 -1
  79. package/build/components/global-styles/variations/variations-panel.js.map +1 -0
  80. package/build/components/global-styles/variations/variations-typography.js +54 -0
  81. package/build/components/global-styles/variations/variations-typography.js.map +1 -0
  82. package/build/components/header-edit-mode/index.js +14 -12
  83. package/build/components/header-edit-mode/index.js.map +1 -1
  84. package/build/components/header-edit-mode/more-menu/index.js +10 -2
  85. package/build/components/header-edit-mode/more-menu/index.js.map +1 -1
  86. package/build/components/keyboard-shortcut-help-modal/config.js +6 -0
  87. package/build/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  88. package/build/components/keyboard-shortcuts/global.js +17 -3
  89. package/build/components/keyboard-shortcuts/global.js.map +1 -1
  90. package/build/components/layout/index.js +4 -1
  91. package/build/components/layout/index.js.map +1 -1
  92. package/build/components/layout/router.js +2 -5
  93. package/build/components/layout/router.js.map +1 -1
  94. package/build/components/page-pages/index.js +6 -11
  95. package/build/components/page-pages/index.js.map +1 -1
  96. package/build/components/page-patterns/delete-category-menu-item.js +6 -1
  97. package/build/components/page-patterns/delete-category-menu-item.js.map +1 -1
  98. package/build/components/page-patterns/index.js +15 -18
  99. package/build/components/page-patterns/index.js.map +1 -1
  100. package/build/components/page-patterns/use-patterns.js +9 -9
  101. package/build/components/page-patterns/use-patterns.js.map +1 -1
  102. package/build/components/{list/added-by.js → page-templates-template-parts/hooks.js} +1 -61
  103. package/build/components/page-templates-template-parts/hooks.js.map +1 -0
  104. package/build/components/page-templates-template-parts/index.js +25 -22
  105. package/build/components/page-templates-template-parts/index.js.map +1 -1
  106. package/build/components/resizable-frame/index.js +2 -1
  107. package/build/components/resizable-frame/index.js.map +1 -1
  108. package/build/components/revisions/index.js.map +1 -1
  109. package/build/components/save-panel/index.js +31 -11
  110. package/build/components/save-panel/index.js.map +1 -1
  111. package/build/components/sidebar/index.js +3 -4
  112. package/build/components/sidebar/index.js.map +1 -1
  113. package/build/components/sidebar-dataviews/custom-dataviews-list.js +2 -2
  114. package/build/components/sidebar-dataviews/custom-dataviews-list.js.map +1 -1
  115. package/build/components/sidebar-dataviews/dataview-item.js +2 -2
  116. package/build/components/sidebar-dataviews/dataview-item.js.map +1 -1
  117. package/build/components/sidebar-dataviews/default-views.js +4 -2
  118. package/build/components/sidebar-dataviews/default-views.js.map +1 -1
  119. package/build/components/sidebar-dataviews/index.js +4 -3
  120. package/build/components/sidebar-dataviews/index.js.map +1 -1
  121. package/build/components/sidebar-edit-mode/page-panels/index.js +2 -2
  122. package/build/components/sidebar-edit-mode/page-panels/index.js.map +1 -1
  123. package/build/components/sidebar-edit-mode/page-panels/page-status.js.map +1 -1
  124. package/build/components/sidebar-edit-mode/page-panels/page-summary.js +3 -1
  125. package/build/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
  126. package/build/components/sidebar-edit-mode/sidebar-card/index.js +12 -6
  127. package/build/components/sidebar-edit-mode/sidebar-card/index.js.map +1 -1
  128. package/build/components/sidebar-edit-mode/template-panel/index.js +23 -3
  129. package/build/components/sidebar-edit-mode/template-panel/index.js.map +1 -1
  130. package/build/components/sidebar-navigation-screen-global-styles/index.js +13 -1
  131. package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  132. package/build/components/sidebar-navigation-screen-main/index.js +1 -2
  133. package/build/components/sidebar-navigation-screen-main/index.js.map +1 -1
  134. package/build/components/sidebar-navigation-screen-navigation-menu/{delete-modal.js → delete-confirm-dialog.js} +4 -5
  135. package/build/components/sidebar-navigation-screen-navigation-menu/delete-confirm-dialog.js.map +1 -0
  136. package/build/components/sidebar-navigation-screen-navigation-menu/more-menu.js +6 -6
  137. package/build/components/sidebar-navigation-screen-navigation-menu/more-menu.js.map +1 -1
  138. package/build/components/sidebar-navigation-screen-navigation-menu/single-navigation-menu.js +0 -3
  139. package/build/components/sidebar-navigation-screen-navigation-menu/single-navigation-menu.js.map +1 -1
  140. package/build/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js +1 -1
  141. package/build/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js.map +1 -1
  142. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js.map +1 -1
  143. package/build/components/sidebar-navigation-screen-pattern/template-part-navigation-menus.js.map +1 -1
  144. package/build/components/sidebar-navigation-screen-pattern/use-pattern-details.js +2 -2
  145. package/build/components/sidebar-navigation-screen-pattern/use-pattern-details.js.map +1 -1
  146. package/build/components/sidebar-navigation-screen-template/index.js +7 -3
  147. package/build/components/sidebar-navigation-screen-template/index.js.map +1 -1
  148. package/build/components/sidebar-navigation-screen-templates-browse/content.js +6 -6
  149. package/build/components/sidebar-navigation-screen-templates-browse/content.js.map +1 -1
  150. package/build/components/sidebar-navigation-screen-templates-browse/index.js +7 -5
  151. package/build/components/sidebar-navigation-screen-templates-browse/index.js.map +1 -1
  152. package/build/components/start-template-options/index.js.map +1 -1
  153. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js +1 -1
  154. package/build/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  155. package/build/components/sync-state-with-url/use-sync-path-with-url.js +1 -11
  156. package/build/components/sync-state-with-url/use-sync-path-with-url.js.map +1 -1
  157. package/build/components/template-actions/index.js +44 -27
  158. package/build/components/template-actions/index.js.map +1 -1
  159. package/build/components/welcome-guide/editor.js +11 -2
  160. package/build/components/welcome-guide/editor.js.map +1 -1
  161. package/build/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +78 -0
  162. package/build/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js.map +1 -1
  163. package/build/utils/constants.js +5 -3
  164. package/build/utils/constants.js.map +1 -1
  165. package/build/utils/get-is-list-page.js +1 -1
  166. package/build/utils/get-is-list-page.js.map +1 -1
  167. package/build/utils/math.js +98 -0
  168. package/build/utils/math.js.map +1 -0
  169. package/build-module/components/actions/index.js +4 -6
  170. package/build-module/components/actions/index.js.map +1 -1
  171. package/build-module/components/block-editor/editor-canvas.js +18 -6
  172. package/build-module/components/block-editor/editor-canvas.js.map +1 -1
  173. package/build-module/components/block-editor/use-site-editor-settings.js +1 -1
  174. package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
  175. package/build-module/components/editor/index.js +2 -16
  176. package/build-module/components/editor/index.js.map +1 -1
  177. package/build-module/components/global-styles/color-palette-panel.js.map +1 -1
  178. package/build-module/components/global-styles/font-families.js +1 -1
  179. package/build-module/components/global-styles/font-families.js.map +1 -1
  180. package/build-module/components/global-styles/font-library-modal/collection-font-variant.js +4 -4
  181. package/build-module/components/global-styles/font-library-modal/collection-font-variant.js.map +1 -1
  182. package/build-module/components/global-styles/font-library-modal/context.js +72 -61
  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-card.js +11 -16
  185. package/build-module/components/global-styles/font-library-modal/font-card.js.map +1 -1
  186. package/build-module/components/global-styles/font-library-modal/font-collection.js +124 -81
  187. package/build-module/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  188. package/build-module/components/global-styles/font-library-modal/font-demo.js +30 -9
  189. package/build-module/components/global-styles/font-library-modal/font-demo.js.map +1 -1
  190. package/build-module/components/global-styles/font-library-modal/google-fonts-confirm-dialog.js +4 -3
  191. package/build-module/components/global-styles/font-library-modal/google-fonts-confirm-dialog.js.map +1 -1
  192. package/build-module/components/global-styles/font-library-modal/index.js +19 -6
  193. package/build-module/components/global-styles/font-library-modal/index.js.map +1 -1
  194. package/build-module/components/global-styles/font-library-modal/installed-fonts.js +151 -79
  195. package/build-module/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  196. package/build-module/components/global-styles/font-library-modal/library-font-variant.js +4 -4
  197. package/build-module/components/global-styles/font-library-modal/library-font-variant.js.map +1 -1
  198. package/build-module/components/global-styles/font-library-modal/upload-fonts.js +52 -24
  199. package/build-module/components/global-styles/font-library-modal/upload-fonts.js.map +1 -1
  200. package/build-module/components/global-styles/font-library-modal/utils/index.js +38 -5
  201. package/build-module/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  202. package/build-module/components/global-styles/font-library-modal/utils/preview-styles.js +4 -1
  203. package/build-module/components/global-styles/font-library-modal/utils/preview-styles.js.map +1 -1
  204. package/build-module/components/global-styles/gradients-palette-panel.js.map +1 -1
  205. package/build-module/components/global-styles/header.js +2 -2
  206. package/build-module/components/global-styles/header.js.map +1 -1
  207. package/build-module/components/global-styles/highlighted-colors.js +43 -0
  208. package/build-module/components/global-styles/highlighted-colors.js.map +1 -0
  209. package/build-module/components/global-styles/hooks.js +48 -1
  210. package/build-module/components/global-styles/hooks.js.map +1 -1
  211. package/build-module/components/global-styles/preview-colors.js +54 -0
  212. package/build-module/components/global-styles/preview-colors.js.map +1 -0
  213. package/build-module/components/global-styles/preview-iframe.js +123 -0
  214. package/build-module/components/global-styles/preview-iframe.js.map +1 -0
  215. package/build-module/components/global-styles/preview-styles.js +155 -0
  216. package/build-module/components/global-styles/preview-styles.js.map +1 -0
  217. package/build-module/components/global-styles/screen-block-list.js +1 -1
  218. package/build-module/components/global-styles/screen-block-list.js.map +1 -1
  219. package/build-module/components/global-styles/screen-block.js +1 -1
  220. package/build-module/components/global-styles/screen-block.js.map +1 -1
  221. package/build-module/components/global-styles/screen-colors.js +3 -2
  222. package/build-module/components/global-styles/screen-colors.js.map +1 -1
  223. package/build-module/components/global-styles/screen-revisions/index.js +2 -2
  224. package/build-module/components/global-styles/screen-revisions/index.js.map +1 -1
  225. package/build-module/components/global-styles/screen-root.js +2 -2
  226. package/build-module/components/global-styles/screen-root.js.map +1 -1
  227. package/build-module/components/global-styles/screen-typography.js +5 -2
  228. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  229. package/build-module/components/global-styles/style-variations-container.js +13 -85
  230. package/build-module/components/global-styles/style-variations-container.js.map +1 -1
  231. package/build-module/components/global-styles/{typogrphy-elements.js → typography-elements.js} +4 -2
  232. package/build-module/components/global-styles/typography-elements.js.map +1 -0
  233. package/build-module/components/global-styles/typography-example.js +60 -0
  234. package/build-module/components/global-styles/typography-example.js.map +1 -0
  235. package/build-module/components/global-styles/typography-preview.js +3 -1
  236. package/build-module/components/global-styles/typography-preview.js.map +1 -1
  237. package/build-module/components/global-styles/ui.js +27 -2
  238. package/build-module/components/global-styles/ui.js.map +1 -1
  239. package/build-module/components/global-styles/utils.js +21 -0
  240. package/build-module/components/global-styles/utils.js.map +1 -1
  241. package/build-module/components/global-styles/variations/variation.js +82 -0
  242. package/build-module/components/global-styles/variations/variation.js.map +1 -0
  243. package/build-module/components/global-styles/variations/variations-color.js +27 -0
  244. package/build-module/components/global-styles/variations/variations-color.js.map +1 -0
  245. package/build-module/components/global-styles/{variations-panel.js → variations/variations-panel.js} +1 -1
  246. package/build-module/components/global-styles/variations/variations-panel.js.map +1 -0
  247. package/build-module/components/global-styles/variations/variations-typography.js +46 -0
  248. package/build-module/components/global-styles/variations/variations-typography.js.map +1 -0
  249. package/build-module/components/header-edit-mode/index.js +15 -13
  250. package/build-module/components/header-edit-mode/index.js.map +1 -1
  251. package/build-module/components/header-edit-mode/more-menu/index.js +13 -5
  252. package/build-module/components/header-edit-mode/more-menu/index.js.map +1 -1
  253. package/build-module/components/keyboard-shortcut-help-modal/config.js +6 -0
  254. package/build-module/components/keyboard-shortcut-help-modal/config.js.map +1 -1
  255. package/build-module/components/keyboard-shortcuts/global.js +17 -3
  256. package/build-module/components/keyboard-shortcuts/global.js.map +1 -1
  257. package/build-module/components/layout/index.js +4 -1
  258. package/build-module/components/layout/index.js.map +1 -1
  259. package/build-module/components/layout/router.js +2 -5
  260. package/build-module/components/layout/router.js.map +1 -1
  261. package/build-module/components/page-pages/index.js +7 -12
  262. package/build-module/components/page-pages/index.js.map +1 -1
  263. package/build-module/components/page-patterns/delete-category-menu-item.js +6 -1
  264. package/build-module/components/page-patterns/delete-category-menu-item.js.map +1 -1
  265. package/build-module/components/page-patterns/index.js +16 -19
  266. package/build-module/components/page-patterns/index.js.map +1 -1
  267. package/build-module/components/page-patterns/use-patterns.js +9 -9
  268. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  269. package/build-module/components/{list/added-by.js → page-templates-template-parts/hooks.js} +2 -59
  270. package/build-module/components/page-templates-template-parts/hooks.js.map +1 -0
  271. package/build-module/components/page-templates-template-parts/index.js +25 -22
  272. package/build-module/components/page-templates-template-parts/index.js.map +1 -1
  273. package/build-module/components/resizable-frame/index.js +2 -1
  274. package/build-module/components/resizable-frame/index.js.map +1 -1
  275. package/build-module/components/revisions/index.js.map +1 -1
  276. package/build-module/components/save-panel/index.js +31 -11
  277. package/build-module/components/save-panel/index.js.map +1 -1
  278. package/build-module/components/sidebar/index.js +3 -4
  279. package/build-module/components/sidebar/index.js.map +1 -1
  280. package/build-module/components/sidebar-dataviews/custom-dataviews-list.js +2 -2
  281. package/build-module/components/sidebar-dataviews/custom-dataviews-list.js.map +1 -1
  282. package/build-module/components/sidebar-dataviews/dataview-item.js +2 -2
  283. package/build-module/components/sidebar-dataviews/dataview-item.js.map +1 -1
  284. package/build-module/components/sidebar-dataviews/default-views.js +6 -4
  285. package/build-module/components/sidebar-dataviews/default-views.js.map +1 -1
  286. package/build-module/components/sidebar-dataviews/index.js +4 -3
  287. package/build-module/components/sidebar-dataviews/index.js.map +1 -1
  288. package/build-module/components/sidebar-edit-mode/page-panels/index.js +3 -3
  289. package/build-module/components/sidebar-edit-mode/page-panels/index.js.map +1 -1
  290. package/build-module/components/sidebar-edit-mode/page-panels/page-status.js.map +1 -1
  291. package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js +4 -2
  292. package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
  293. package/build-module/components/sidebar-edit-mode/sidebar-card/index.js +13 -7
  294. package/build-module/components/sidebar-edit-mode/sidebar-card/index.js.map +1 -1
  295. package/build-module/components/sidebar-edit-mode/template-panel/index.js +24 -4
  296. package/build-module/components/sidebar-edit-mode/template-panel/index.js.map +1 -1
  297. package/build-module/components/sidebar-navigation-screen-global-styles/index.js +14 -2
  298. package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  299. package/build-module/components/sidebar-navigation-screen-main/index.js +1 -2
  300. package/build-module/components/sidebar-navigation-screen-main/index.js.map +1 -1
  301. package/build-module/components/sidebar-navigation-screen-navigation-menu/{delete-modal.js → delete-confirm-dialog.js} +3 -4
  302. package/build-module/components/sidebar-navigation-screen-navigation-menu/delete-confirm-dialog.js.map +1 -0
  303. package/build-module/components/sidebar-navigation-screen-navigation-menu/more-menu.js +6 -6
  304. package/build-module/components/sidebar-navigation-screen-navigation-menu/more-menu.js.map +1 -1
  305. package/build-module/components/sidebar-navigation-screen-navigation-menu/single-navigation-menu.js +0 -3
  306. package/build-module/components/sidebar-navigation-screen-navigation-menu/single-navigation-menu.js.map +1 -1
  307. package/build-module/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js +1 -1
  308. package/build-module/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js.map +1 -1
  309. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js.map +1 -1
  310. package/build-module/components/sidebar-navigation-screen-pattern/template-part-navigation-menus.js.map +1 -1
  311. package/build-module/components/sidebar-navigation-screen-pattern/use-pattern-details.js +1 -1
  312. package/build-module/components/sidebar-navigation-screen-pattern/use-pattern-details.js.map +1 -1
  313. package/build-module/components/sidebar-navigation-screen-template/index.js +6 -2
  314. package/build-module/components/sidebar-navigation-screen-template/index.js.map +1 -1
  315. package/build-module/components/sidebar-navigation-screen-templates-browse/content.js +5 -5
  316. package/build-module/components/sidebar-navigation-screen-templates-browse/content.js.map +1 -1
  317. package/build-module/components/sidebar-navigation-screen-templates-browse/index.js +7 -5
  318. package/build-module/components/sidebar-navigation-screen-templates-browse/index.js.map +1 -1
  319. package/build-module/components/start-template-options/index.js.map +1 -1
  320. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js +1 -1
  321. package/build-module/components/sync-state-with-url/use-init-edited-entity-from-url.js.map +1 -1
  322. package/build-module/components/sync-state-with-url/use-sync-path-with-url.js +1 -11
  323. package/build-module/components/sync-state-with-url/use-sync-path-with-url.js.map +1 -1
  324. package/build-module/components/template-actions/index.js +44 -27
  325. package/build-module/components/template-actions/index.js.map +1 -1
  326. package/build-module/components/welcome-guide/editor.js +11 -2
  327. package/build-module/components/welcome-guide/editor.js.map +1 -1
  328. package/build-module/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +76 -1
  329. package/build-module/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js.map +1 -1
  330. package/build-module/utils/constants.js +4 -2
  331. package/build-module/utils/constants.js.map +1 -1
  332. package/build-module/utils/get-is-list-page.js +1 -1
  333. package/build-module/utils/get-is-list-page.js.map +1 -1
  334. package/build-module/utils/math.js +92 -0
  335. package/build-module/utils/math.js.map +1 -0
  336. package/build-style/style-rtl.css +196 -315
  337. package/build-style/style.css +196 -315
  338. package/package.json +42 -42
  339. package/src/components/actions/index.js +4 -6
  340. package/src/components/block-editor/editor-canvas.js +20 -6
  341. package/src/components/block-editor/style.scss +0 -3
  342. package/src/components/block-editor/use-site-editor-settings.js +0 -2
  343. package/src/components/editor/index.js +0 -20
  344. package/src/components/global-styles/color-palette-panel.js +0 -1
  345. package/src/components/global-styles/font-families.js +1 -1
  346. package/src/components/global-styles/font-library-modal/collection-font-variant.js +5 -5
  347. package/src/components/global-styles/font-library-modal/context.js +136 -107
  348. package/src/components/global-styles/font-library-modal/font-card.js +11 -26
  349. package/src/components/global-styles/font-library-modal/font-collection.js +298 -218
  350. package/src/components/global-styles/font-library-modal/font-demo.js +38 -4
  351. package/src/components/global-styles/font-library-modal/google-fonts-confirm-dialog.js +9 -2
  352. package/src/components/global-styles/font-library-modal/index.js +23 -16
  353. package/src/components/global-styles/font-library-modal/installed-fonts.js +243 -114
  354. package/src/components/global-styles/font-library-modal/library-font-variant.js +5 -5
  355. package/src/components/global-styles/font-library-modal/style.scss +27 -11
  356. package/src/components/global-styles/font-library-modal/upload-fonts.js +70 -27
  357. package/src/components/global-styles/font-library-modal/utils/index.js +45 -5
  358. package/src/components/global-styles/font-library-modal/utils/preview-styles.js +6 -1
  359. package/src/components/global-styles/font-library-modal/utils/test/getDisplaySrcFromFontFace.spec.js +7 -18
  360. package/src/components/global-styles/gradients-palette-panel.js +2 -2
  361. package/src/components/global-styles/header.js +2 -2
  362. package/src/components/global-styles/highlighted-colors.js +39 -0
  363. package/src/components/global-styles/hooks.js +68 -1
  364. package/src/components/global-styles/preview-colors.js +61 -0
  365. package/src/components/global-styles/preview-iframe.js +152 -0
  366. package/src/components/global-styles/preview-styles.js +185 -0
  367. package/src/components/global-styles/screen-block-list.js +1 -1
  368. package/src/components/global-styles/screen-block.js +4 -1
  369. package/src/components/global-styles/screen-colors.js +3 -2
  370. package/src/components/global-styles/screen-revisions/index.js +5 -2
  371. package/src/components/global-styles/screen-root.js +2 -2
  372. package/src/components/global-styles/screen-typography.js +8 -2
  373. package/src/components/global-styles/style-variations-container.js +14 -92
  374. package/src/components/global-styles/style.scss +4 -35
  375. package/src/components/global-styles/{typogrphy-elements.js → typography-elements.js} +5 -1
  376. package/src/components/global-styles/typography-example.js +64 -0
  377. package/src/components/global-styles/typography-preview.js +3 -1
  378. package/src/components/global-styles/ui.js +26 -2
  379. package/src/components/global-styles/utils.js +37 -0
  380. package/src/components/global-styles/variations/style.scss +38 -0
  381. package/src/components/global-styles/variations/variation.js +93 -0
  382. package/src/components/global-styles/variations/variations-color.js +34 -0
  383. package/src/components/global-styles/{variations-panel.js → variations/variations-panel.js} +1 -1
  384. package/src/components/global-styles/variations/variations-typography.js +63 -0
  385. package/src/components/header-edit-mode/index.js +21 -27
  386. package/src/components/header-edit-mode/more-menu/index.js +17 -8
  387. package/src/components/header-edit-mode/style.scss +4 -0
  388. package/src/components/keyboard-shortcut-help-modal/config.js +4 -0
  389. package/src/components/keyboard-shortcuts/global.js +16 -4
  390. package/src/components/layout/index.js +5 -0
  391. package/src/components/layout/router.js +2 -7
  392. package/src/components/page-pages/index.js +8 -13
  393. package/src/components/page-patterns/delete-category-menu-item.js +7 -0
  394. package/src/components/page-patterns/index.js +23 -24
  395. package/src/components/page-patterns/use-patterns.js +17 -10
  396. package/src/components/{list/added-by.js → page-templates-template-parts/hooks.js} +1 -66
  397. package/src/components/page-templates-template-parts/index.js +34 -25
  398. package/src/components/page-templates-template-parts/style.scss +48 -0
  399. package/src/components/resizable-frame/index.js +1 -0
  400. package/src/components/revisions/index.js +1 -1
  401. package/src/components/save-panel/index.js +56 -27
  402. package/src/components/sidebar/index.js +3 -4
  403. package/src/components/sidebar-dataviews/custom-dataviews-list.js +2 -2
  404. package/src/components/sidebar-dataviews/dataview-item.js +2 -2
  405. package/src/components/sidebar-dataviews/default-views.js +14 -4
  406. package/src/components/sidebar-dataviews/index.js +4 -3
  407. package/src/components/sidebar-edit-mode/page-panels/index.js +2 -2
  408. package/src/components/sidebar-edit-mode/page-panels/page-status.js +1 -1
  409. package/src/components/sidebar-edit-mode/page-panels/page-summary.js +2 -0
  410. package/src/components/sidebar-edit-mode/sidebar-card/index.js +30 -11
  411. package/src/components/sidebar-edit-mode/sidebar-card/style.scss +10 -11
  412. package/src/components/sidebar-edit-mode/template-panel/index.js +25 -6
  413. package/src/components/sidebar-navigation-screen/style.scss +10 -1
  414. package/src/components/sidebar-navigation-screen-global-styles/index.js +35 -2
  415. package/src/components/sidebar-navigation-screen-main/index.js +0 -2
  416. package/src/components/sidebar-navigation-screen-navigation-menu/{delete-modal.js → delete-confirm-dialog.js} +3 -4
  417. package/src/components/sidebar-navigation-screen-navigation-menu/more-menu.js +11 -9
  418. package/src/components/sidebar-navigation-screen-navigation-menu/single-navigation-menu.js +0 -2
  419. package/src/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js +6 -3
  420. package/src/components/sidebar-navigation-screen-pattern/template-part-navigation-menu.js +1 -1
  421. package/src/components/sidebar-navigation-screen-pattern/template-part-navigation-menus.js +1 -1
  422. package/src/components/sidebar-navigation-screen-pattern/use-pattern-details.js +1 -1
  423. package/src/components/sidebar-navigation-screen-template/index.js +7 -2
  424. package/src/components/sidebar-navigation-screen-templates-browse/content.js +5 -5
  425. package/src/components/sidebar-navigation-screen-templates-browse/index.js +5 -3
  426. package/src/components/start-template-options/index.js +1 -1
  427. package/src/components/sync-state-with-url/use-init-edited-entity-from-url.js +1 -1
  428. package/src/components/sync-state-with-url/use-sync-path-with-url.js +3 -19
  429. package/src/components/template-actions/index.js +63 -46
  430. package/src/components/welcome-guide/editor.js +9 -6
  431. package/src/hooks/use-theme-style-variations/test/use-theme-style-variations-by-property.js +173 -0
  432. package/src/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js +85 -1
  433. package/src/style.scss +2 -3
  434. package/src/utils/constants.js +4 -2
  435. package/src/utils/get-is-list-page.js +1 -1
  436. package/src/utils/math.js +93 -0
  437. package/build/components/global-styles/font-library-modal/collection-font-details.js +0 -50
  438. package/build/components/global-styles/font-library-modal/collection-font-details.js.map +0 -1
  439. package/build/components/global-styles/font-library-modal/confirm-delete-dialog.js +0 -30
  440. package/build/components/global-styles/font-library-modal/confirm-delete-dialog.js.map +0 -1
  441. package/build/components/global-styles/font-library-modal/library-font-card.js +0 -39
  442. package/build/components/global-styles/font-library-modal/library-font-card.js.map +0 -1
  443. package/build/components/global-styles/font-library-modal/tab-panel-layout.js +0 -67
  444. package/build/components/global-styles/font-library-modal/tab-panel-layout.js.map +0 -1
  445. package/build/components/global-styles/preview.js +0 -271
  446. package/build/components/global-styles/preview.js.map +0 -1
  447. package/build/components/global-styles/typogrphy-elements.js.map +0 -1
  448. package/build/components/global-styles/variations-panel.js.map +0 -1
  449. package/build/components/list/added-by.js.map +0 -1
  450. package/build/components/list/header.js +0 -55
  451. package/build/components/list/header.js.map +0 -1
  452. package/build/components/list/index.js +0 -80
  453. package/build/components/list/index.js.map +0 -1
  454. package/build/components/list/table.js +0 -94
  455. package/build/components/list/table.js.map +0 -1
  456. package/build/components/list/use-register-shortcuts.js +0 -51
  457. package/build/components/list/use-register-shortcuts.js.map +0 -1
  458. package/build/components/sidebar-edit-mode/template-panel/template-actions.js +0 -50
  459. package/build/components/sidebar-edit-mode/template-panel/template-actions.js.map +0 -1
  460. package/build/components/sidebar-navigation-screen-main/template-part-hint.js +0 -36
  461. package/build/components/sidebar-navigation-screen-main/template-part-hint.js.map +0 -1
  462. package/build/components/sidebar-navigation-screen-navigation-menu/delete-modal.js.map +0 -1
  463. package/build/components/sidebar-navigation-screen-navigation-menu/edit-button.js +0 -36
  464. package/build/components/sidebar-navigation-screen-navigation-menu/edit-button.js.map +0 -1
  465. package/build/components/sidebar-navigation-screen-templates/index.js +0 -132
  466. package/build/components/sidebar-navigation-screen-templates/index.js.map +0 -1
  467. package/build-module/components/global-styles/font-library-modal/collection-font-details.js +0 -42
  468. package/build-module/components/global-styles/font-library-modal/collection-font-details.js.map +0 -1
  469. package/build-module/components/global-styles/font-library-modal/confirm-delete-dialog.js +0 -23
  470. package/build-module/components/global-styles/font-library-modal/confirm-delete-dialog.js.map +0 -1
  471. package/build-module/components/global-styles/font-library-modal/library-font-card.js +0 -31
  472. package/build-module/components/global-styles/font-library-modal/library-font-card.js.map +0 -1
  473. package/build-module/components/global-styles/font-library-modal/tab-panel-layout.js +0 -60
  474. package/build-module/components/global-styles/font-library-modal/tab-panel-layout.js.map +0 -1
  475. package/build-module/components/global-styles/preview.js +0 -264
  476. package/build-module/components/global-styles/preview.js.map +0 -1
  477. package/build-module/components/global-styles/typogrphy-elements.js.map +0 -1
  478. package/build-module/components/global-styles/variations-panel.js.map +0 -1
  479. package/build-module/components/list/added-by.js.map +0 -1
  480. package/build-module/components/list/header.js +0 -47
  481. package/build-module/components/list/header.js.map +0 -1
  482. package/build-module/components/list/index.js +0 -72
  483. package/build-module/components/list/index.js.map +0 -1
  484. package/build-module/components/list/table.js +0 -86
  485. package/build-module/components/list/table.js.map +0 -1
  486. package/build-module/components/list/use-register-shortcuts.js +0 -45
  487. package/build-module/components/list/use-register-shortcuts.js.map +0 -1
  488. package/build-module/components/sidebar-edit-mode/template-panel/template-actions.js +0 -42
  489. package/build-module/components/sidebar-edit-mode/template-panel/template-actions.js.map +0 -1
  490. package/build-module/components/sidebar-navigation-screen-main/template-part-hint.js +0 -29
  491. package/build-module/components/sidebar-navigation-screen-main/template-part-hint.js.map +0 -1
  492. package/build-module/components/sidebar-navigation-screen-navigation-menu/delete-modal.js.map +0 -1
  493. package/build-module/components/sidebar-navigation-screen-navigation-menu/edit-button.js +0 -27
  494. package/build-module/components/sidebar-navigation-screen-navigation-menu/edit-button.js.map +0 -1
  495. package/build-module/components/sidebar-navigation-screen-templates/index.js +0 -124
  496. package/build-module/components/sidebar-navigation-screen-templates/index.js.map +0 -1
  497. package/src/components/global-styles/font-library-modal/collection-font-details.js +0 -56
  498. package/src/components/global-styles/font-library-modal/confirm-delete-dialog.js +0 -33
  499. package/src/components/global-styles/font-library-modal/library-font-card.js +0 -34
  500. package/src/components/global-styles/font-library-modal/tab-panel-layout.js +0 -85
  501. package/src/components/global-styles/preview.js +0 -327
  502. package/src/components/list/header.js +0 -48
  503. package/src/components/list/index.js +0 -87
  504. package/src/components/list/style.scss +0 -188
  505. package/src/components/list/table.js +0 -140
  506. package/src/components/list/use-register-shortcuts.js +0 -49
  507. package/src/components/sidebar-edit-mode/template-panel/template-actions.js +0 -49
  508. package/src/components/sidebar-navigation-screen-main/template-part-hint.js +0 -34
  509. package/src/components/sidebar-navigation-screen-navigation-menu/edit-button.js +0 -22
  510. package/src/components/sidebar-navigation-screen-templates/index.js +0 -156
  511. package/src/components/sidebar-navigation-screen-templates/style.scss +0 -9
@@ -22,9 +22,17 @@
22
22
  font-weight: 500;
23
23
  font-size: 11px;
24
24
  }
25
+
26
+ // Add padding so the focus state outline (box-shadow) of font list items is visible
27
+ .components-navigator-screen {
28
+ padding: 3px;
29
+ }
25
30
  }
26
31
 
27
32
  .font-library-modal__tabpanel-layout {
33
+
34
+ margin-top: $grid-unit-40;
35
+
28
36
  .font-library-modal__tabpanel-layout__footer {
29
37
  border-top: 1px solid $gray-300;
30
38
  margin: 0 #{$grid-unit-40 * -1} #{$grid-unit-40 * -1};
@@ -47,6 +55,10 @@
47
55
  padding: $grid-unit-20;
48
56
  margin-top: -1px; /* To collapse the margin with the previous element */
49
57
 
58
+ &:hover {
59
+ background-color: $gray-100;
60
+ }
61
+
50
62
  .font-library-modal__font-card__name {
51
63
  font-weight: bold;
52
64
  }
@@ -56,12 +68,6 @@
56
68
  }
57
69
  }
58
70
 
59
- .font-library-modal__library-font-variant {
60
- border: 1px solid $gray-200;
61
- padding: $grid-unit-20;
62
- margin-top: -1px; /* To collapse the margin with the previous element */
63
- }
64
-
65
71
  .font-library-modal__font-variant_demo-image {
66
72
  display: block;
67
73
  height: $grid-unit-30;
@@ -117,14 +123,24 @@ button.font-library-modal__upload-area {
117
123
  display: flex;
118
124
  justify-content: center;
119
125
  align-items: center;
126
+ margin-top: $grid-unit-80;
127
+
128
+ p {
129
+ line-height: $default-line-height;
130
+ }
120
131
 
121
- h3 {
122
- font-size: 1.4rem;
132
+ h2 {
133
+ font-size: 1.2rem;
134
+ font-weight: 400;
123
135
  }
124
136
 
125
137
  .components-card {
126
- width: 50%;
127
- min-width: 250px;
128
- max-width: 350px;
138
+ padding: $grid-unit-20;
139
+ width: 400px;
140
+ }
141
+
142
+ .components-button {
143
+ width: 100%;
144
+ justify-content: center;
129
145
  }
130
146
  }
@@ -3,11 +3,12 @@
3
3
  */
4
4
  import { __ } from '@wordpress/i18n';
5
5
  import {
6
- Button,
7
- DropZone,
8
6
  __experimentalSpacer as Spacer,
9
7
  __experimentalText as Text,
10
8
  __experimentalVStack as VStack,
9
+ Button,
10
+ DropZone,
11
+ Notice,
11
12
  FormFileUpload,
12
13
  FlexItem,
13
14
  privateApis as componentsPrivateApis,
@@ -22,13 +23,13 @@ import { FontLibraryContext } from './context';
22
23
  import { Font } from '../../../../lib/lib-font.browser';
23
24
  import makeFamiliesFromFaces from './utils/make-families-from-faces';
24
25
  import { loadFontFaceInBrowser } from './utils';
25
- import TabPanelLayout from './tab-panel-layout';
26
26
  import { unlock } from '../../../lock-unlock';
27
27
 
28
28
  const { ProgressBar } = unlock( componentsPrivateApis );
29
29
 
30
30
  function UploadFonts() {
31
- const { installFont, notice, setNotice } = useContext( FontLibraryContext );
31
+ const { installFonts, notice, setNotice } =
32
+ useContext( FontLibraryContext );
32
33
  const [ isUploading, setIsUploading ] = useState( false );
33
34
 
34
35
  const handleDropZone = ( files ) => {
@@ -44,29 +45,48 @@ function UploadFonts() {
44
45
  * @param {Array} files The files to be filtered
45
46
  * @return {void}
46
47
  */
47
- const handleFilesUpload = ( files ) => {
48
+ const handleFilesUpload = async ( files ) => {
48
49
  setNotice( null );
49
50
  setIsUploading( true );
50
51
  const uniqueFilenames = new Set();
51
52
  const selectedFiles = [ ...files ];
52
- 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
53
63
  if ( uniqueFilenames.has( file.name ) ) {
54
- return false; // Discard duplicates
64
+ return null; // Return null for duplicates.
55
65
  }
56
- // Eliminates files that are not allowed
66
+ // Check if the file extension is allowed.
57
67
  const fileExtension = file.name.split( '.' ).pop().toLowerCase();
58
68
  if ( ALLOWED_FILE_EXTENSIONS.includes( fileExtension ) ) {
59
69
  uniqueFilenames.add( file.name );
60
- return true; // Keep file if the extension is allowed
70
+ return file; // Return the file if it passes all checks.
61
71
  }
62
- return false; // Discard file extension not allowed
72
+ return null; // Return null for disallowed file extensions.
63
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
+
64
80
  if ( allowedFiles.length > 0 ) {
65
81
  loadFiles( allowedFiles );
66
82
  } else {
83
+ const message = hasInvalidFiles
84
+ ? __( 'Sorry, you are not allowed to upload this file type.' )
85
+ : __( 'No fonts found to install.' );
86
+
67
87
  setNotice( {
68
88
  type: 'error',
69
- message: __( 'No fonts found to install.' ),
89
+ message,
70
90
  } );
71
91
  setIsUploading( false );
72
92
  }
@@ -93,6 +113,23 @@ function UploadFonts() {
93
113
  handleInstall( fontFacesLoaded );
94
114
  };
95
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
+
96
133
  // Create a function to read the file as array buffer
97
134
  async function readFileAsArrayBuffer( file ) {
98
135
  return new Promise( ( resolve, reject ) => {
@@ -143,19 +180,8 @@ function UploadFonts() {
143
180
  const handleInstall = async ( fontFaces ) => {
144
181
  const fontFamilies = makeFamiliesFromFaces( fontFaces );
145
182
 
146
- if ( fontFamilies.length > 1 ) {
147
- setNotice( {
148
- type: 'error',
149
- message: __(
150
- 'Variants from only one font family can be uploaded at a time.'
151
- ),
152
- } );
153
- setIsUploading( false );
154
- return;
155
- }
156
-
157
183
  try {
158
- await installFont( fontFamilies[ 0 ] );
184
+ await installFonts( fontFamilies );
159
185
  setNotice( {
160
186
  type: 'success',
161
187
  message: __( 'Fonts were installed successfully.' ),
@@ -164,6 +190,7 @@ function UploadFonts() {
164
190
  setNotice( {
165
191
  type: 'error',
166
192
  message: error.message,
193
+ errors: error?.installationErrors,
167
194
  } );
168
195
  }
169
196
 
@@ -171,9 +198,25 @@ function UploadFonts() {
171
198
  };
172
199
 
173
200
  return (
174
- <TabPanelLayout notice={ notice }>
201
+ <div className="font-library-modal__tabpanel-layout">
175
202
  <DropZone onFilesDrop={ handleDropZone } />
176
203
  <VStack className="font-library-modal__local-fonts">
204
+ { notice && (
205
+ <Notice
206
+ status={ notice.type }
207
+ __unstableHTML
208
+ onRemove={ () => setNotice( null ) }
209
+ >
210
+ { notice.message }
211
+ { notice.errors && (
212
+ <ul>
213
+ { notice.errors.map( ( error, index ) => (
214
+ <li key={ index }>{ error }</li>
215
+ ) ) }
216
+ </ul>
217
+ ) }
218
+ </Notice>
219
+ ) }
177
220
  { isUploading && (
178
221
  <FlexItem>
179
222
  <div className="font-library-modal__upload-area">
@@ -186,7 +229,7 @@ function UploadFonts() {
186
229
  accept={ ALLOWED_FILE_EXTENSIONS.map(
187
230
  ( ext ) => `.${ ext }`
188
231
  ).join( ',' ) }
189
- multiple={ true }
232
+ multiple
190
233
  onChange={ onFilesUpload }
191
234
  render={ ( { openFileDialog } ) => (
192
235
  <Button
@@ -201,11 +244,11 @@ function UploadFonts() {
201
244
  <Spacer margin={ 2 } />
202
245
  <Text className="font-library-modal__upload-area__text">
203
246
  { __(
204
- '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.'
205
248
  ) }
206
249
  </Text>
207
250
  </VStack>
208
- </TabPanelLayout>
251
+ </div>
209
252
  );
210
253
  }
211
254
 
@@ -121,7 +121,47 @@ export async function loadFontFaceInBrowser( fontFace, source, addTo = 'all' ) {
121
121
  }
122
122
  }
123
123
 
124
- export function getDisplaySrcFromFontFace( input, urlPrefix ) {
124
+ /*
125
+ * Unloads the font face and remove it from the browser.
126
+ * It also removes it from the iframe document.
127
+ *
128
+ * Note that Font faces that were added to the set using the CSS @font-face rule
129
+ * remain connected to the corresponding CSS, and cannot be deleted.
130
+ *
131
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/FontFaceSet/delete.
132
+ */
133
+ export function unloadFontFaceInBrowser( fontFace, removeFrom = 'all' ) {
134
+ const unloadFontFace = ( fonts ) => {
135
+ fonts.forEach( ( f ) => {
136
+ if (
137
+ f.family === formatFontFaceName( fontFace?.fontFamily ) &&
138
+ f.weight === fontFace?.fontWeight &&
139
+ f.style === fontFace?.fontStyle
140
+ ) {
141
+ fonts.delete( f );
142
+ }
143
+ } );
144
+ };
145
+
146
+ if ( removeFrom === 'document' || removeFrom === 'all' ) {
147
+ unloadFontFace( document.fonts );
148
+ }
149
+
150
+ if ( removeFrom === 'iframe' || removeFrom === 'all' ) {
151
+ const iframeDocument = document.querySelector(
152
+ 'iframe[name="editor-canvas"]'
153
+ ).contentDocument;
154
+ unloadFontFace( iframeDocument.fonts );
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Retrieves the display source from a font face src.
160
+ *
161
+ * @param {string|string[]} input - The font face src.
162
+ * @return {string|undefined} The display source or undefined if the input is invalid.
163
+ */
164
+ export function getDisplaySrcFromFontFace( input ) {
125
165
  if ( ! input ) {
126
166
  return;
127
167
  }
@@ -132,9 +172,9 @@ export function getDisplaySrcFromFontFace( input, urlPrefix ) {
132
172
  } else {
133
173
  src = input;
134
174
  }
135
- // If it is a theme font, we need to make the url absolute
136
- if ( src.startsWith( 'file:.' ) && urlPrefix ) {
137
- src = src.replace( 'file:.', urlPrefix );
175
+ // It's expected theme fonts will already be loaded in the browser.
176
+ if ( src.startsWith( 'file:.' ) ) {
177
+ return;
138
178
  }
139
179
  if ( ! isUrlEncoded( src ) ) {
140
180
  src = encodeURI( src );
@@ -219,7 +259,7 @@ export async function batchInstallFontFaces( fontFamilyId, fontFacesData ) {
219
259
  // Handle network errors or other fetch-related errors
220
260
  results.errors.push( {
221
261
  data: fontFacesData[ index ],
222
- message: `Fetch error: ${ result.reason.message }`,
262
+ message: result.reason.message,
223
263
  } );
224
264
  }
225
265
  } );
@@ -87,6 +87,10 @@ export function formatFontFamily( input ) {
87
87
  * formatFontFaceName(", 'Open Sans', 'Helvetica Neue', sans-serif") => "Open Sans"
88
88
  */
89
89
  export function formatFontFaceName( input ) {
90
+ if ( ! input ) {
91
+ return '';
92
+ }
93
+
90
94
  let output = input.trim();
91
95
  if ( output.includes( ',' ) ) {
92
96
  output = output
@@ -117,7 +121,8 @@ export function getFamilyPreviewStyle( family ) {
117
121
  if ( family.fontFace ) {
118
122
  //get all the font faces with normal style
119
123
  const normalFaces = family.fontFace.filter(
120
- ( face ) => face.fontStyle.toLowerCase() === 'normal'
124
+ ( face ) =>
125
+ face?.fontStyle && face.fontStyle.toLowerCase() === 'normal'
121
126
  );
122
127
  if ( normalFaces.length > 0 ) {
123
128
  style.fontStyle = 'normal';
@@ -21,33 +21,22 @@ describe( 'getDisplaySrcFromFontFace', () => {
21
21
  );
22
22
  } );
23
23
 
24
- it( 'makes URL absolute when it starts with file:. and urlPrefix is given', () => {
25
- const input = 'file:./font1';
26
- const urlPrefix = 'http://example.com';
27
- expect( getDisplaySrcFromFontFace( input, urlPrefix ) ).toBe(
28
- 'http://example.com/font1'
29
- );
30
- } );
31
-
32
- it( 'does not modify URL if it does not start with file:.', () => {
33
- const input = [ 'http://some-other-place.com/font1' ];
34
- const urlPrefix = 'http://example.com';
35
- expect( getDisplaySrcFromFontFace( input, urlPrefix ) ).toBe(
36
- 'http://some-other-place.com/font1'
37
- );
24
+ it( 'return undefined when the url starts with file:', () => {
25
+ const input = 'file:./theme/assets/font1.ttf';
26
+ expect( getDisplaySrcFromFontFace( input ) ).toBe( undefined );
38
27
  } );
39
28
 
40
29
  it( 'encodes the URL if it is not encoded', () => {
41
- const input = 'file:./assets/font one with spaces.ttf';
30
+ const input = 'https://example.org/font one with spaces.ttf';
42
31
  expect( getDisplaySrcFromFontFace( input ) ).toBe(
43
- 'file:./assets/font%20one%20with%20spaces.ttf'
32
+ 'https://example.org/font%20one%20with%20spaces.ttf'
44
33
  );
45
34
  } );
46
35
 
47
36
  it( 'does not encode the URL if it is already encoded', () => {
48
- const input = 'file:./font%20one';
37
+ const input = 'https://example.org/fonts/font%20one.ttf';
49
38
  expect( getDisplaySrcFromFontFace( input ) ).toBe(
50
- 'file:./font%20one'
39
+ 'https://example.org/fonts/font%20one.ttf'
51
40
  );
52
41
  } );
53
42
  } );
@@ -114,8 +114,8 @@ export default function GradientPalettePanel( { name } ) {
114
114
  <Spacer margin={ 3 } />
115
115
  <DuotonePicker
116
116
  duotonePalette={ duotonePalette }
117
- disableCustomDuotone={ true }
118
- disableCustomColors={ true }
117
+ disableCustomDuotone
118
+ disableCustomColors
119
119
  clearable={ false }
120
120
  onChange={ noop }
121
121
  />
@@ -25,8 +25,8 @@ function ScreenHeader( { title, description, onBack } ) {
25
25
  { minWidth: 24, padding: 0 }
26
26
  }
27
27
  icon={ isRTL() ? chevronRight : chevronLeft }
28
- isSmall
29
- aria-label={ __( 'Navigate to the previous view' ) }
28
+ size="small"
29
+ label={ __( 'Back' ) }
30
30
  onClick={ onBack }
31
31
  />
32
32
  <Spacer>
@@ -0,0 +1,39 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __unstableMotion as motion } from '@wordpress/components';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { useStylesPreviewColors } from './hooks';
10
+
11
+ export default function HighlightedColors( {
12
+ normalizedColorSwatchSize,
13
+ ratio,
14
+ } ) {
15
+ const { highlightedColors } = useStylesPreviewColors();
16
+ const scaledSwatchSize = normalizedColorSwatchSize * ratio;
17
+ return highlightedColors.map( ( { slug, color }, index ) => (
18
+ <motion.div
19
+ key={ slug }
20
+ style={ {
21
+ height: scaledSwatchSize,
22
+ width: scaledSwatchSize,
23
+ background: color,
24
+ borderRadius: scaledSwatchSize / 2,
25
+ } }
26
+ animate={ {
27
+ scale: 1,
28
+ opacity: 1,
29
+ } }
30
+ initial={ {
31
+ scale: 0.1,
32
+ opacity: 0,
33
+ } }
34
+ transition={ {
35
+ delay: index === 1 ? 0.2 : 0.1,
36
+ } }
37
+ />
38
+ ) );
39
+ }
@@ -9,14 +9,21 @@ import a11yPlugin from 'colord/plugins/a11y';
9
9
  */
10
10
  import { store as blocksStore } from '@wordpress/blocks';
11
11
  import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
12
+ import { useContext } from '@wordpress/element';
13
+ import { __ } from '@wordpress/i18n';
12
14
 
13
15
  /**
14
16
  * Internal dependencies
15
17
  */
18
+ import { mergeBaseAndUserConfigs } from './global-styles-provider';
19
+ import { useCurrentMergeThemeStyleVariationsWithUserConfig } from '../../hooks/use-theme-style-variations/use-theme-style-variations-by-property';
20
+ import { getFontFamilies } from './utils';
16
21
  import { unlock } from '../../lock-unlock';
17
22
  import { useSelect } from '@wordpress/data';
18
23
 
19
- const { useGlobalSetting, useGlobalStyle } = unlock( blockEditorPrivateApis );
24
+ const { useGlobalSetting, useGlobalStyle, GlobalStylesContext } = unlock(
25
+ blockEditorPrivateApis
26
+ );
20
27
 
21
28
  // Enable colord's a11y plugin.
22
29
  extend( [ a11yPlugin ] );
@@ -92,3 +99,63 @@ export function useSupportedStyles( name, element ) {
92
99
 
93
100
  return supportedPanels;
94
101
  }
102
+
103
+ export function useColorVariations() {
104
+ const colorVariations = useCurrentMergeThemeStyleVariationsWithUserConfig( {
105
+ property: 'color',
106
+ } );
107
+ /*
108
+ * Filter out variations with no settings or styles.
109
+ */
110
+ return colorVariations?.length
111
+ ? colorVariations.filter( ( variation ) => {
112
+ const { settings, styles, title } = variation;
113
+ return (
114
+ title === __( 'Default' ) || // Always preseve the default variation.
115
+ Object.keys( settings ).length > 0 ||
116
+ Object.keys( styles ).length > 0
117
+ );
118
+ } )
119
+ : [];
120
+ }
121
+
122
+ export function useTypographyVariations() {
123
+ const typographyVariations =
124
+ useCurrentMergeThemeStyleVariationsWithUserConfig( {
125
+ property: 'typography',
126
+ } );
127
+
128
+ const { base } = useContext( GlobalStylesContext );
129
+ /*
130
+ * Filter duplicate variations based on whether the variaitons
131
+ * have different heading and body font families.
132
+ */
133
+ return typographyVariations?.length
134
+ ? Object.values(
135
+ typographyVariations.reduce( ( acc, variation ) => {
136
+ const [ bodyFontFamily, headingFontFamily ] =
137
+ getFontFamilies(
138
+ mergeBaseAndUserConfigs( base, variation )
139
+ );
140
+
141
+ // Always preseve the default variation.
142
+ if ( variation?.title === 'Default' ) {
143
+ acc[
144
+ `${ headingFontFamily?.name }:${ bodyFontFamily?.name }`
145
+ ] = variation;
146
+ } else if (
147
+ headingFontFamily?.name &&
148
+ bodyFontFamily?.name &&
149
+ ! acc[
150
+ `${ headingFontFamily?.name }:${ bodyFontFamily?.name }`
151
+ ]
152
+ ) {
153
+ acc[
154
+ `${ headingFontFamily?.name }:${ bodyFontFamily?.name }`
155
+ ] = variation;
156
+ }
157
+ return acc;
158
+ }, {} )
159
+ )
160
+ : [];
161
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ __experimentalHStack as HStack,
6
+ __unstableMotion as motion,
7
+ } from '@wordpress/components';
8
+
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+ import HighlightedColors from './highlighted-colors';
13
+ import PreviewIframe from './preview-iframe';
14
+
15
+ const firstFrameVariants = {
16
+ start: {
17
+ scale: 1,
18
+ opacity: 1,
19
+ },
20
+ hover: {
21
+ scale: 0,
22
+ opacity: 0,
23
+ },
24
+ };
25
+
26
+ const StylesPreviewColors = ( { label, isFocused, withHoverView } ) => {
27
+ return (
28
+ <PreviewIframe
29
+ label={ label }
30
+ isFocused={ isFocused }
31
+ withHoverView={ withHoverView }
32
+ >
33
+ { ( { ratio, key } ) => (
34
+ <motion.div
35
+ key={ key }
36
+ variants={ firstFrameVariants }
37
+ style={ {
38
+ height: '100%',
39
+ overflow: 'hidden',
40
+ } }
41
+ >
42
+ <HStack
43
+ spacing={ 10 * ratio }
44
+ justify="center"
45
+ style={ {
46
+ height: '100%',
47
+ overflow: 'hidden',
48
+ } }
49
+ >
50
+ <HighlightedColors
51
+ normalizedColorSwatchSize={ 66 }
52
+ ratio={ ratio }
53
+ />
54
+ </HStack>
55
+ </motion.div>
56
+ ) }
57
+ </PreviewIframe>
58
+ );
59
+ };
60
+
61
+ export default StylesPreviewColors;