@wordpress/edit-site 5.18.1-next.5a1d1283.0 → 5.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/add-new-pattern/index.js +62 -1
  3. package/build/components/add-new-pattern/index.js.map +1 -1
  4. package/build/components/add-new-template/index.js +3 -2
  5. package/build/components/add-new-template/index.js.map +1 -1
  6. package/build/components/add-new-template/new-template.js +6 -1
  7. package/build/components/add-new-template/new-template.js.map +1 -1
  8. package/build/components/add-new-template/utils.js +6 -1
  9. package/build/components/add-new-template/utils.js.map +1 -1
  10. package/build/components/app/index.js +2 -7
  11. package/build/components/app/index.js.map +1 -1
  12. package/build/components/block-editor/back-button.js +3 -2
  13. package/build/components/block-editor/back-button.js.map +1 -1
  14. package/build/components/block-editor/editor-canvas.js +20 -16
  15. package/build/components/block-editor/editor-canvas.js.map +1 -1
  16. package/build/components/block-editor/site-editor-canvas.js +1 -3
  17. package/build/components/block-editor/site-editor-canvas.js.map +1 -1
  18. package/build/components/block-editor/use-site-editor-settings.js +8 -4
  19. package/build/components/block-editor/use-site-editor-settings.js.map +1 -1
  20. package/build/components/canvas-loader/index.js +18 -1
  21. package/build/components/canvas-loader/index.js.map +1 -1
  22. package/build/components/editor/index.js +3 -8
  23. package/build/components/editor/index.js.map +1 -1
  24. package/build/components/global-styles/dimensions-panel.js +5 -4
  25. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  26. package/build/components/global-styles/font-families.js +68 -0
  27. package/build/components/global-styles/font-families.js.map +1 -0
  28. package/build/components/global-styles/font-family-item.js +47 -0
  29. package/build/components/global-styles/font-family-item.js.map +1 -0
  30. package/build/components/global-styles/font-library-modal/confirm-delete-dialog.js +31 -0
  31. package/build/components/global-styles/font-library-modal/confirm-delete-dialog.js.map +1 -0
  32. package/build/components/global-styles/font-library-modal/context.js +285 -0
  33. package/build/components/global-styles/font-library-modal/context.js.map +1 -0
  34. package/build/components/global-styles/font-library-modal/font-card.js +58 -0
  35. package/build/components/global-styles/font-library-modal/font-card.js.map +1 -0
  36. package/build/components/global-styles/font-library-modal/font-demo.js +69 -0
  37. package/build/components/global-styles/font-library-modal/font-demo.js.map +1 -0
  38. package/build/components/global-styles/font-library-modal/font-variant.js +51 -0
  39. package/build/components/global-styles/font-library-modal/font-variant.js.map +1 -0
  40. package/build/components/global-styles/font-library-modal/fonts-grid.js +54 -0
  41. package/build/components/global-styles/font-library-modal/fonts-grid.js.map +1 -0
  42. package/build/components/global-styles/font-library-modal/index.js +47 -0
  43. package/build/components/global-styles/font-library-modal/index.js.map +1 -0
  44. package/build/components/global-styles/font-library-modal/installed-fonts.js +128 -0
  45. package/build/components/global-styles/font-library-modal/installed-fonts.js.map +1 -0
  46. package/build/components/global-styles/font-library-modal/library-font-card.js +44 -0
  47. package/build/components/global-styles/font-library-modal/library-font-card.js.map +1 -0
  48. package/build/components/global-styles/font-library-modal/library-font-details.js +43 -0
  49. package/build/components/global-styles/font-library-modal/library-font-details.js.map +1 -0
  50. package/build/components/global-styles/font-library-modal/library-font-variant.js +59 -0
  51. package/build/components/global-styles/font-library-modal/library-font-variant.js.map +1 -0
  52. package/build/components/global-styles/font-library-modal/local-fonts.js +143 -0
  53. package/build/components/global-styles/font-library-modal/local-fonts.js.map +1 -0
  54. package/build/components/global-styles/font-library-modal/resolvers.js +37 -0
  55. package/build/components/global-styles/font-library-modal/resolvers.js.map +1 -0
  56. package/build/components/global-styles/font-library-modal/tab-layout.js +45 -0
  57. package/build/components/global-styles/font-library-modal/tab-layout.js.map +1 -0
  58. package/build/components/global-styles/font-library-modal/utils/constants.js +37 -0
  59. package/build/components/global-styles/font-library-modal/utils/constants.js.map +1 -0
  60. package/build/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +58 -0
  61. package/build/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js.map +1 -0
  62. package/build/components/global-styles/font-library-modal/utils/index.js +205 -0
  63. package/build/components/global-styles/font-library-modal/utils/index.js.map +1 -0
  64. package/build/components/global-styles/font-library-modal/utils/make-families-from-faces.js +22 -0
  65. package/build/components/global-styles/font-library-modal/utils/make-families-from-faces.js.map +1 -0
  66. package/build/components/global-styles/font-library-modal/utils/toggleFont.js +92 -0
  67. package/build/components/global-styles/font-library-modal/utils/toggleFont.js.map +1 -0
  68. package/build/components/global-styles/global-styles-provider.js +7 -12
  69. package/build/components/global-styles/global-styles-provider.js.map +1 -1
  70. package/build/components/global-styles/screen-block.js +34 -21
  71. package/build/components/global-styles/screen-block.js.map +1 -1
  72. package/build/components/global-styles/screen-revisions/index.js +1 -3
  73. package/build/components/global-styles/screen-revisions/index.js.map +1 -1
  74. package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js +0 -1
  75. package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js.map +1 -1
  76. package/build/components/global-styles/screen-typography.js +4 -72
  77. package/build/components/global-styles/screen-typography.js.map +1 -1
  78. package/build/components/global-styles/style-variations-container.js +3 -5
  79. package/build/components/global-styles/style-variations-container.js.map +1 -1
  80. package/build/components/global-styles/typogrphy-elements.js +96 -0
  81. package/build/components/global-styles/typogrphy-elements.js.map +1 -0
  82. package/build/components/page-patterns/duplicate-menu-item.js +52 -16
  83. package/build/components/page-patterns/duplicate-menu-item.js.map +1 -1
  84. package/build/components/page-patterns/grid-item.js +46 -20
  85. package/build/components/page-patterns/grid-item.js.map +1 -1
  86. package/build/components/page-patterns/header.js +3 -7
  87. package/build/components/page-patterns/header.js.map +1 -1
  88. package/build/components/page-patterns/index.js +3 -3
  89. package/build/components/page-patterns/index.js.map +1 -1
  90. package/build/components/page-patterns/patterns-list.js +7 -7
  91. package/build/components/page-patterns/patterns-list.js.map +1 -1
  92. package/build/components/page-patterns/rename-menu-item.js +6 -5
  93. package/build/components/page-patterns/rename-menu-item.js.map +1 -1
  94. package/build/components/page-patterns/search-items.js +8 -2
  95. package/build/components/page-patterns/search-items.js.map +1 -1
  96. package/build/components/page-patterns/use-patterns.js +53 -27
  97. package/build/components/page-patterns/use-patterns.js.map +1 -1
  98. package/build/components/page-patterns/utils.js +1 -20
  99. package/build/components/page-patterns/utils.js.map +1 -1
  100. package/build/components/sidebar-edit-mode/page-panels/edit-template.js +33 -24
  101. package/build/components/sidebar-edit-mode/page-panels/edit-template.js.map +1 -1
  102. package/build/components/sidebar-edit-mode/page-panels/hooks.js +64 -0
  103. package/build/components/sidebar-edit-mode/page-panels/hooks.js.map +1 -0
  104. package/build/components/sidebar-edit-mode/page-panels/index.js +1 -4
  105. package/build/components/sidebar-edit-mode/page-panels/index.js.map +1 -1
  106. package/build/components/sidebar-edit-mode/page-panels/page-summary.js +2 -1
  107. package/build/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
  108. package/build/components/sidebar-edit-mode/page-panels/reset-default-template.js +56 -0
  109. package/build/components/sidebar-edit-mode/page-panels/reset-default-template.js.map +1 -0
  110. package/build/components/sidebar-edit-mode/page-panels/swap-template-button.js +91 -0
  111. package/build/components/sidebar-edit-mode/page-panels/swap-template-button.js.map +1 -0
  112. package/build/components/sidebar-edit-mode/template-panel/index.js +11 -9
  113. package/build/components/sidebar-edit-mode/template-panel/index.js.map +1 -1
  114. package/build/components/sidebar-edit-mode/template-panel/last-revision.js +6 -4
  115. package/build/components/sidebar-edit-mode/template-panel/last-revision.js.map +1 -1
  116. package/build/components/sidebar-edit-mode/template-panel/pattern-categories.js +211 -0
  117. package/build/components/sidebar-edit-mode/template-panel/pattern-categories.js.map +1 -0
  118. package/build/components/sidebar-navigation-screen/index.js +6 -4
  119. package/build/components/sidebar-navigation-screen/index.js.map +1 -1
  120. package/build/components/sidebar-navigation-screen-details-footer/index.js +32 -4
  121. package/build/components/sidebar-navigation-screen-details-footer/index.js.map +1 -1
  122. package/build/components/sidebar-navigation-screen-details-panel/sidebar-navigation-screen-details-panel-row.js +4 -2
  123. package/build/components/sidebar-navigation-screen-details-panel/sidebar-navigation-screen-details-panel-row.js.map +1 -1
  124. package/build/components/sidebar-navigation-screen-global-styles/index.js +4 -31
  125. package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  126. package/build/components/sidebar-navigation-screen-page/index.js +3 -3
  127. package/build/components/sidebar-navigation-screen-page/index.js.map +1 -1
  128. package/build/components/sidebar-navigation-screen-pattern/index.js +18 -8
  129. package/build/components/sidebar-navigation-screen-pattern/index.js.map +1 -1
  130. package/build/components/sidebar-navigation-screen-pattern/use-pattern-details.js +34 -5
  131. package/build/components/sidebar-navigation-screen-pattern/use-pattern-details.js.map +1 -1
  132. package/build/components/sidebar-navigation-screen-patterns/index.js +7 -35
  133. package/build/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  134. package/build/components/sidebar-navigation-screen-patterns/use-pattern-categories.js +38 -4
  135. package/build/components/sidebar-navigation-screen-patterns/use-pattern-categories.js.map +1 -1
  136. package/build/components/sidebar-navigation-screen-patterns/use-theme-patterns.js +2 -1
  137. package/build/components/sidebar-navigation-screen-patterns/use-theme-patterns.js.map +1 -1
  138. package/build/components/sidebar-navigation-screen-template/index.js +2 -2
  139. package/build/components/sidebar-navigation-screen-template/index.js.map +1 -1
  140. package/build/components/sidebar-navigation-screen-templates/index.js +1 -1
  141. package/build/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  142. package/build/components/template-actions/index.js +7 -4
  143. package/build/components/template-actions/index.js.map +1 -1
  144. package/build/components/template-actions/rename-menu-item.js +3 -2
  145. package/build/components/template-actions/rename-menu-item.js.map +1 -1
  146. package/build/components/welcome-guide/styles.js +2 -2
  147. package/build/components/welcome-guide/styles.js.map +1 -1
  148. package/build/hooks/push-changes-to-global-styles/index.js +5 -37
  149. package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
  150. package/build/store/actions.js +29 -6
  151. package/build/store/actions.js.map +1 -1
  152. package/build/utils/constants.js +45 -2
  153. package/build/utils/constants.js.map +1 -1
  154. package/build/utils/is-template-removable.js +6 -1
  155. package/build/utils/is-template-removable.js.map +1 -1
  156. package/build/utils/is-template-revertable.js +6 -1
  157. package/build/utils/is-template-revertable.js.map +1 -1
  158. package/build-module/components/add-new-pattern/index.js +66 -5
  159. package/build-module/components/add-new-pattern/index.js.map +1 -1
  160. package/build-module/components/add-new-template/index.js +3 -2
  161. package/build-module/components/add-new-template/index.js.map +1 -1
  162. package/build-module/components/add-new-template/new-template.js +6 -1
  163. package/build-module/components/add-new-template/new-template.js.map +1 -1
  164. package/build-module/components/add-new-template/utils.js +6 -1
  165. package/build-module/components/add-new-template/utils.js.map +1 -1
  166. package/build-module/components/app/index.js +2 -7
  167. package/build-module/components/app/index.js.map +1 -1
  168. package/build-module/components/block-editor/back-button.js +3 -2
  169. package/build-module/components/block-editor/back-button.js.map +1 -1
  170. package/build-module/components/block-editor/editor-canvas.js +21 -17
  171. package/build-module/components/block-editor/editor-canvas.js.map +1 -1
  172. package/build-module/components/block-editor/site-editor-canvas.js +3 -5
  173. package/build-module/components/block-editor/site-editor-canvas.js.map +1 -1
  174. package/build-module/components/block-editor/use-site-editor-settings.js +8 -4
  175. package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
  176. package/build-module/components/canvas-loader/index.js +18 -1
  177. package/build-module/components/canvas-loader/index.js.map +1 -1
  178. package/build-module/components/editor/index.js +3 -8
  179. package/build-module/components/editor/index.js.map +1 -1
  180. package/build-module/components/global-styles/dimensions-panel.js +5 -4
  181. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  182. package/build-module/components/global-styles/font-families.js +58 -0
  183. package/build-module/components/global-styles/font-families.js.map +1 -0
  184. package/build-module/components/global-styles/font-family-item.js +40 -0
  185. package/build-module/components/global-styles/font-family-item.js.map +1 -0
  186. package/build-module/components/global-styles/font-library-modal/confirm-delete-dialog.js +23 -0
  187. package/build-module/components/global-styles/font-library-modal/confirm-delete-dialog.js.map +1 -0
  188. package/build-module/components/global-styles/font-library-modal/context.js +276 -0
  189. package/build-module/components/global-styles/font-library-modal/context.js.map +1 -0
  190. package/build-module/components/global-styles/font-library-modal/font-card.js +49 -0
  191. package/build-module/components/global-styles/font-library-modal/font-card.js.map +1 -0
  192. package/build-module/components/global-styles/font-library-modal/font-demo.js +62 -0
  193. package/build-module/components/global-styles/font-library-modal/font-demo.js.map +1 -0
  194. package/build-module/components/global-styles/font-library-modal/font-variant.js +42 -0
  195. package/build-module/components/global-styles/font-library-modal/font-variant.js.map +1 -0
  196. package/build-module/components/global-styles/font-library-modal/fonts-grid.js +47 -0
  197. package/build-module/components/global-styles/font-library-modal/fonts-grid.js.map +1 -0
  198. package/build-module/components/global-styles/font-library-modal/index.js +38 -0
  199. package/build-module/components/global-styles/font-library-modal/index.js.map +1 -0
  200. package/build-module/components/global-styles/font-library-modal/installed-fonts.js +120 -0
  201. package/build-module/components/global-styles/font-library-modal/installed-fonts.js.map +1 -0
  202. package/build-module/components/global-styles/font-library-modal/library-font-card.js +36 -0
  203. package/build-module/components/global-styles/font-library-modal/library-font-card.js.map +1 -0
  204. package/build-module/components/global-styles/font-library-modal/library-font-details.js +34 -0
  205. package/build-module/components/global-styles/font-library-modal/library-font-details.js.map +1 -0
  206. package/build-module/components/global-styles/font-library-modal/library-font-variant.js +50 -0
  207. package/build-module/components/global-styles/font-library-modal/library-font-variant.js.map +1 -0
  208. package/build-module/components/global-styles/font-library-modal/local-fonts.js +135 -0
  209. package/build-module/components/global-styles/font-library-modal/local-fonts.js.map +1 -0
  210. package/build-module/components/global-styles/font-library-modal/resolvers.js +28 -0
  211. package/build-module/components/global-styles/font-library-modal/resolvers.js.map +1 -0
  212. package/build-module/components/global-styles/font-library-modal/tab-layout.js +37 -0
  213. package/build-module/components/global-styles/font-library-modal/tab-layout.js.map +1 -0
  214. package/build-module/components/global-styles/font-library-modal/utils/constants.js +26 -0
  215. package/build-module/components/global-styles/font-library-modal/utils/constants.js.map +1 -0
  216. package/build-module/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +52 -0
  217. package/build-module/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js.map +1 -0
  218. package/build-module/components/global-styles/font-library-modal/utils/index.js +190 -0
  219. package/build-module/components/global-styles/font-library-modal/utils/index.js.map +1 -0
  220. package/build-module/components/global-styles/font-library-modal/utils/make-families-from-faces.js +16 -0
  221. package/build-module/components/global-styles/font-library-modal/utils/make-families-from-faces.js.map +1 -0
  222. package/build-module/components/global-styles/font-library-modal/utils/toggleFont.js +86 -0
  223. package/build-module/components/global-styles/font-library-modal/utils/toggleFont.js.map +1 -0
  224. package/build-module/components/global-styles/global-styles-provider.js +7 -12
  225. package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
  226. package/build-module/components/global-styles/screen-block.js +34 -21
  227. package/build-module/components/global-styles/screen-block.js.map +1 -1
  228. package/build-module/components/global-styles/screen-revisions/index.js +1 -3
  229. package/build-module/components/global-styles/screen-revisions/index.js.map +1 -1
  230. package/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js +0 -1
  231. package/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js.map +1 -1
  232. package/build-module/components/global-styles/screen-typography.js +6 -74
  233. package/build-module/components/global-styles/screen-typography.js.map +1 -1
  234. package/build-module/components/global-styles/style-variations-container.js +3 -5
  235. package/build-module/components/global-styles/style-variations-container.js.map +1 -1
  236. package/build-module/components/global-styles/typogrphy-elements.js +87 -0
  237. package/build-module/components/global-styles/typogrphy-elements.js.map +1 -0
  238. package/build-module/components/page-patterns/duplicate-menu-item.js +51 -16
  239. package/build-module/components/page-patterns/duplicate-menu-item.js.map +1 -1
  240. package/build-module/components/page-patterns/grid-item.js +47 -21
  241. package/build-module/components/page-patterns/grid-item.js.map +1 -1
  242. package/build-module/components/page-patterns/header.js +3 -7
  243. package/build-module/components/page-patterns/header.js.map +1 -1
  244. package/build-module/components/page-patterns/index.js +3 -3
  245. package/build-module/components/page-patterns/index.js.map +1 -1
  246. package/build-module/components/page-patterns/patterns-list.js +7 -7
  247. package/build-module/components/page-patterns/patterns-list.js.map +1 -1
  248. package/build-module/components/page-patterns/rename-menu-item.js +6 -5
  249. package/build-module/components/page-patterns/rename-menu-item.js.map +1 -1
  250. package/build-module/components/page-patterns/search-items.js +8 -2
  251. package/build-module/components/page-patterns/search-items.js.map +1 -1
  252. package/build-module/components/page-patterns/use-patterns.js +54 -28
  253. package/build-module/components/page-patterns/use-patterns.js.map +1 -1
  254. package/build-module/components/page-patterns/utils.js +0 -11
  255. package/build-module/components/page-patterns/utils.js.map +1 -1
  256. package/build-module/components/sidebar-edit-mode/page-panels/edit-template.js +34 -27
  257. package/build-module/components/sidebar-edit-mode/page-panels/edit-template.js.map +1 -1
  258. package/build-module/components/sidebar-edit-mode/page-panels/hooks.js +54 -0
  259. package/build-module/components/sidebar-edit-mode/page-panels/hooks.js.map +1 -0
  260. package/build-module/components/sidebar-edit-mode/page-panels/index.js +1 -4
  261. package/build-module/components/sidebar-edit-mode/page-panels/index.js.map +1 -1
  262. package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js +2 -1
  263. package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
  264. package/build-module/components/sidebar-edit-mode/page-panels/reset-default-template.js +49 -0
  265. package/build-module/components/sidebar-edit-mode/page-panels/reset-default-template.js.map +1 -0
  266. package/build-module/components/sidebar-edit-mode/page-panels/swap-template-button.js +85 -0
  267. package/build-module/components/sidebar-edit-mode/page-panels/swap-template-button.js.map +1 -0
  268. package/build-module/components/sidebar-edit-mode/template-panel/index.js +12 -10
  269. package/build-module/components/sidebar-edit-mode/template-panel/index.js.map +1 -1
  270. package/build-module/components/sidebar-edit-mode/template-panel/last-revision.js +8 -6
  271. package/build-module/components/sidebar-edit-mode/template-panel/last-revision.js.map +1 -1
  272. package/build-module/components/sidebar-edit-mode/template-panel/pattern-categories.js +202 -0
  273. package/build-module/components/sidebar-edit-mode/template-panel/pattern-categories.js.map +1 -0
  274. package/build-module/components/sidebar-navigation-screen/index.js +6 -4
  275. package/build-module/components/sidebar-navigation-screen/index.js.map +1 -1
  276. package/build-module/components/sidebar-navigation-screen-details-footer/index.js +32 -5
  277. package/build-module/components/sidebar-navigation-screen-details-footer/index.js.map +1 -1
  278. package/build-module/components/sidebar-navigation-screen-details-panel/sidebar-navigation-screen-details-panel-row.js +4 -2
  279. package/build-module/components/sidebar-navigation-screen-details-panel/sidebar-navigation-screen-details-panel-row.js.map +1 -1
  280. package/build-module/components/sidebar-navigation-screen-global-styles/index.js +6 -33
  281. package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
  282. package/build-module/components/sidebar-navigation-screen-page/index.js +3 -3
  283. package/build-module/components/sidebar-navigation-screen-page/index.js.map +1 -1
  284. package/build-module/components/sidebar-navigation-screen-pattern/index.js +19 -9
  285. package/build-module/components/sidebar-navigation-screen-pattern/index.js.map +1 -1
  286. package/build-module/components/sidebar-navigation-screen-pattern/use-pattern-details.js +34 -5
  287. package/build-module/components/sidebar-navigation-screen-pattern/use-pattern-details.js.map +1 -1
  288. package/build-module/components/sidebar-navigation-screen-patterns/index.js +10 -38
  289. package/build-module/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
  290. package/build-module/components/sidebar-navigation-screen-patterns/use-pattern-categories.js +38 -4
  291. package/build-module/components/sidebar-navigation-screen-patterns/use-pattern-categories.js.map +1 -1
  292. package/build-module/components/sidebar-navigation-screen-patterns/use-theme-patterns.js +3 -2
  293. package/build-module/components/sidebar-navigation-screen-patterns/use-theme-patterns.js.map +1 -1
  294. package/build-module/components/sidebar-navigation-screen-template/index.js +2 -2
  295. package/build-module/components/sidebar-navigation-screen-template/index.js.map +1 -1
  296. package/build-module/components/sidebar-navigation-screen-templates/index.js +1 -1
  297. package/build-module/components/sidebar-navigation-screen-templates/index.js.map +1 -1
  298. package/build-module/components/template-actions/index.js +7 -4
  299. package/build-module/components/template-actions/index.js.map +1 -1
  300. package/build-module/components/template-actions/rename-menu-item.js +3 -2
  301. package/build-module/components/template-actions/rename-menu-item.js.map +1 -1
  302. package/build-module/components/welcome-guide/styles.js +2 -2
  303. package/build-module/components/welcome-guide/styles.js.map +1 -1
  304. package/build-module/hooks/push-changes-to-global-styles/index.js +5 -37
  305. package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
  306. package/build-module/store/actions.js +30 -7
  307. package/build-module/store/actions.js.map +1 -1
  308. package/build-module/utils/constants.js +35 -1
  309. package/build-module/utils/constants.js.map +1 -1
  310. package/build-module/utils/is-template-removable.js +6 -1
  311. package/build-module/utils/is-template-removable.js.map +1 -1
  312. package/build-module/utils/is-template-revertable.js +6 -1
  313. package/build-module/utils/is-template-revertable.js.map +1 -1
  314. package/build-style/style-rtl.css +244 -37
  315. package/build-style/style.css +244 -37
  316. package/lib/inflate.js +4082 -0
  317. package/lib/lib-font.browser.js +3831 -0
  318. package/lib/unbrotli.js +2679 -0
  319. package/package.json +40 -40
  320. package/src/components/add-new-pattern/index.js +83 -5
  321. package/src/components/add-new-template/index.js +3 -2
  322. package/src/components/add-new-template/new-template.js +6 -1
  323. package/src/components/add-new-template/utils.js +12 -3
  324. package/src/components/app/index.js +9 -12
  325. package/src/components/block-editor/back-button.js +6 -2
  326. package/src/components/block-editor/editor-canvas.js +31 -19
  327. package/src/components/block-editor/site-editor-canvas.js +2 -10
  328. package/src/components/block-editor/style.scss +88 -1
  329. package/src/components/block-editor/use-site-editor-settings.js +26 -19
  330. package/src/components/canvas-loader/index.js +12 -1
  331. package/src/components/canvas-loader/style.scss +1 -1
  332. package/src/components/editor/index.js +3 -8
  333. package/src/components/global-styles/dimensions-panel.js +8 -4
  334. package/src/components/global-styles/font-families.js +71 -0
  335. package/src/components/global-styles/font-family-item.js +44 -0
  336. package/src/components/global-styles/font-library-modal/confirm-delete-dialog.js +33 -0
  337. package/src/components/global-styles/font-library-modal/context.js +347 -0
  338. package/src/components/global-styles/font-library-modal/font-card.js +70 -0
  339. package/src/components/global-styles/font-library-modal/font-demo.js +57 -0
  340. package/src/components/global-styles/font-library-modal/font-variant.js +53 -0
  341. package/src/components/global-styles/font-library-modal/fonts-grid.js +55 -0
  342. package/src/components/global-styles/font-library-modal/index.js +42 -0
  343. package/src/components/global-styles/font-library-modal/installed-fonts.js +174 -0
  344. package/src/components/global-styles/font-library-modal/library-font-card.js +40 -0
  345. package/src/components/global-styles/font-library-modal/library-font-details.js +46 -0
  346. package/src/components/global-styles/font-library-modal/library-font-variant.js +54 -0
  347. package/src/components/global-styles/font-library-modal/local-fonts.js +160 -0
  348. package/src/components/global-styles/font-library-modal/resolvers.js +29 -0
  349. package/src/components/global-styles/font-library-modal/style.scss +113 -0
  350. package/src/components/global-styles/font-library-modal/tab-layout.js +50 -0
  351. package/src/components/global-styles/font-library-modal/utils/constants.js +31 -0
  352. package/src/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +58 -0
  353. package/src/components/global-styles/font-library-modal/utils/index.js +213 -0
  354. package/src/components/global-styles/font-library-modal/utils/make-families-from-faces.js +15 -0
  355. package/src/components/global-styles/font-library-modal/utils/test/getDisplaySrcFromFontFace.spec.js +53 -0
  356. package/src/components/global-styles/font-library-modal/utils/test/getFontFaceVariantName.spec.js +30 -0
  357. package/src/components/global-styles/font-library-modal/utils/test/getIntersectingFontFaces.spec.js +240 -0
  358. package/src/components/global-styles/font-library-modal/utils/test/getPreviewStyle.spec.js +121 -0
  359. package/src/components/global-styles/font-library-modal/utils/test/isUrlEncoded.spec.js +31 -0
  360. package/src/components/global-styles/font-library-modal/utils/test/makeFamiliesFromFaces.spec.js +57 -0
  361. package/src/components/global-styles/font-library-modal/utils/test/makeFormDataFromFontFamilies.spec.js +62 -0
  362. package/src/components/global-styles/font-library-modal/utils/test/mergeFontFaces.spec.js +56 -0
  363. package/src/components/global-styles/font-library-modal/utils/test/mergeFontFamilies.spec.js +108 -0
  364. package/src/components/global-styles/font-library-modal/utils/test/setUIValuesNeeded.spec.js +41 -0
  365. package/src/components/global-styles/font-library-modal/utils/test/toggleFont.spec.js +141 -0
  366. package/src/components/global-styles/font-library-modal/utils/toggleFont.js +90 -0
  367. package/src/components/global-styles/global-styles-provider.js +2 -7
  368. package/src/components/global-styles/screen-block.js +42 -20
  369. package/src/components/global-styles/screen-revisions/index.js +0 -2
  370. package/src/components/global-styles/screen-revisions/use-global-styles-revisions.js +0 -1
  371. package/src/components/global-styles/screen-typography.js +7 -95
  372. package/src/components/global-styles/style-variations-container.js +0 -2
  373. package/src/components/global-styles/typogrphy-elements.js +110 -0
  374. package/src/components/list/style.scss +2 -0
  375. package/src/components/page-patterns/duplicate-menu-item.js +63 -20
  376. package/src/components/page-patterns/grid-item.js +77 -30
  377. package/src/components/page-patterns/header.js +3 -12
  378. package/src/components/page-patterns/index.js +3 -3
  379. package/src/components/page-patterns/patterns-list.js +7 -7
  380. package/src/components/page-patterns/rename-menu-item.js +18 -7
  381. package/src/components/page-patterns/search-items.js +14 -2
  382. package/src/components/page-patterns/style.scss +1 -5
  383. package/src/components/page-patterns/use-patterns.js +67 -33
  384. package/src/components/page-patterns/utils.js +0 -19
  385. package/src/components/sidebar-edit-mode/page-panels/edit-template.js +47 -33
  386. package/src/components/sidebar-edit-mode/page-panels/hooks.js +83 -0
  387. package/src/components/sidebar-edit-mode/page-panels/index.js +0 -4
  388. package/src/components/sidebar-edit-mode/page-panels/page-summary.js +2 -0
  389. package/src/components/sidebar-edit-mode/page-panels/reset-default-template.js +44 -0
  390. package/src/components/sidebar-edit-mode/page-panels/style.scss +41 -10
  391. package/src/components/sidebar-edit-mode/page-panels/swap-template-button.js +82 -0
  392. package/src/components/sidebar-edit-mode/template-panel/index.js +28 -24
  393. package/src/components/sidebar-edit-mode/template-panel/last-revision.js +19 -15
  394. package/src/components/sidebar-edit-mode/template-panel/pattern-categories.js +270 -0
  395. package/src/components/sidebar-navigation-screen/index.js +4 -9
  396. package/src/components/sidebar-navigation-screen/style.scss +7 -1
  397. package/src/components/sidebar-navigation-screen-details-footer/index.js +38 -10
  398. package/src/components/sidebar-navigation-screen-details-footer/style.scss +10 -3
  399. package/src/components/sidebar-navigation-screen-details-panel/sidebar-navigation-screen-details-panel-row.js +2 -0
  400. package/src/components/sidebar-navigation-screen-global-styles/index.js +6 -44
  401. package/src/components/sidebar-navigation-screen-navigation-menus/style.scss +0 -4
  402. package/src/components/sidebar-navigation-screen-page/index.js +3 -3
  403. package/src/components/sidebar-navigation-screen-pattern/index.js +20 -7
  404. package/src/components/sidebar-navigation-screen-pattern/style.scss +0 -3
  405. package/src/components/sidebar-navigation-screen-pattern/use-pattern-details.js +46 -13
  406. package/src/components/sidebar-navigation-screen-patterns/index.js +14 -49
  407. package/src/components/sidebar-navigation-screen-patterns/use-pattern-categories.js +48 -6
  408. package/src/components/sidebar-navigation-screen-patterns/use-theme-patterns.js +3 -5
  409. package/src/components/sidebar-navigation-screen-template/index.js +2 -4
  410. package/src/components/sidebar-navigation-screen-templates/index.js +1 -1
  411. package/src/components/template-actions/index.js +14 -8
  412. package/src/components/template-actions/rename-menu-item.js +15 -4
  413. package/src/components/welcome-guide/styles.js +2 -2
  414. package/src/hooks/push-changes-to-global-styles/index.js +6 -49
  415. package/src/store/actions.js +39 -13
  416. package/src/style.scss +1 -1
  417. package/src/utils/constants.js +38 -3
  418. package/src/utils/is-template-removable.js +8 -1
  419. package/src/utils/is-template-revertable.js +8 -1
  420. package/build/components/sidebar-navigation-screen-patterns/use-my-patterns.js +0 -30
  421. package/build/components/sidebar-navigation-screen-patterns/use-my-patterns.js.map +0 -1
  422. package/build-module/components/sidebar-navigation-screen-patterns/use-my-patterns.js +0 -23
  423. package/build-module/components/sidebar-navigation-screen-patterns/use-my-patterns.js.map +0 -1
  424. package/src/components/sidebar-navigation-screen-global-styles/style.scss +0 -12
  425. package/src/components/sidebar-navigation-screen-patterns/use-my-patterns.js +0 -24
@@ -3,6 +3,8 @@
3
3
  */
4
4
  import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
5
5
  import { privateApis as componentsPrivateApis } from '@wordpress/components';
6
+ import { store as coreStore } from '@wordpress/core-data';
7
+ import { useSelect } from '@wordpress/data';
6
8
 
7
9
  /**
8
10
  * Internal dependencies
@@ -19,11 +21,20 @@ export default function CanvasLoader( { id } ) {
19
21
  const { highlightedColors } = useStylesPreviewColors();
20
22
  const indicatorColor =
21
23
  highlightedColors[ 0 ]?.color ?? fallbackIndicatorColor;
24
+ const { elapsed, total } = useSelect( ( select ) => {
25
+ const selectorsByStatus = select( coreStore ).countSelectorsByStatus();
26
+ const resolving = selectorsByStatus.resolving ?? 0;
27
+ const finished = selectorsByStatus.finished ?? 0;
28
+ return {
29
+ elapsed: finished,
30
+ total: finished + resolving,
31
+ };
32
+ }, [] );
22
33
 
23
34
  return (
24
35
  <div className="edit-site-canvas-loader">
25
36
  <Theme accent={ indicatorColor } background={ backgroundColor }>
26
- <ProgressBar id={ id } />
37
+ <ProgressBar id={ id } max={ total } value={ elapsed } />
27
38
  </Theme>
28
39
  </div>
29
40
  );
@@ -9,7 +9,7 @@
9
9
  align-items: center;
10
10
  justify-content: center;
11
11
 
12
- animation: 0.5s ease 1s edit-site-canvas-loader__fade-in-animation;
12
+ animation: 0.5s ease 0.2s edit-site-canvas-loader__fade-in-animation;
13
13
  animation-fill-mode: forwards;
14
14
  @include reduce-motion("animation");
15
15
 
@@ -44,6 +44,7 @@ import CanvasLoader from '../canvas-loader';
44
44
  import { unlock } from '../../lock-unlock';
45
45
  import useEditedEntityRecord from '../use-edited-entity-record';
46
46
  import { SidebarFixedBottomSlot } from '../sidebar-edit-mode/sidebar-fixed-bottom';
47
+ import { POST_TYPE_LABELS, TEMPLATE_POST_TYPE } from '../../utils/constants';
47
48
 
48
49
  const { BlockRemovalWarningModal } = unlock( blockEditorPrivateApis );
49
50
 
@@ -58,13 +59,6 @@ const interfaceLabels = {
58
59
  footer: __( 'Editor footer' ),
59
60
  };
60
61
 
61
- const typeLabels = {
62
- wp_template: __( 'Template' ),
63
- wp_template_part: __( 'Template Part' ),
64
- wp_block: __( 'Pattern' ),
65
- wp_navigation: __( 'Navigation' ),
66
- };
67
-
68
62
  // Prevent accidental removal of certain blocks, asking the user for
69
63
  // confirmation.
70
64
  const blockRemovalRules = {
@@ -171,7 +165,8 @@ export default function Editor( { isLoading } ) {
171
165
  // translators: A breadcrumb trail in browser tab. %1$s: title of template being edited, %2$s: type of template (Template or Template Part).
172
166
  __( '%1$s ‹ %2$s ‹ Editor' ),
173
167
  getTitle(),
174
- typeLabels[ editedPostType ] ?? typeLabels.wp_template
168
+ POST_TYPE_LABELS[ editedPostType ] ??
169
+ POST_TYPE_LABELS[ TEMPLATE_POST_TYPE ]
175
170
  );
176
171
  }
177
172
 
@@ -33,6 +33,7 @@ export default function DimensionsPanel() {
33
33
  const [ inheritedStyle, setStyle ] = useGlobalStyle( '', undefined, 'all', {
34
34
  shouldDecodeEncode: false,
35
35
  } );
36
+ const [ userSettings ] = useGlobalSetting( '', undefined, 'user' );
36
37
  const [ rawSettings, setSettings ] = useGlobalSetting( '' );
37
38
  const settings = useSettingsForBlockElement( rawSettings );
38
39
 
@@ -48,17 +49,20 @@ export default function DimensionsPanel() {
48
49
  const styleWithLayout = useMemo( () => {
49
50
  return {
50
51
  ...style,
51
- layout: settings.layout,
52
+ layout: userSettings.layout,
52
53
  };
53
- }, [ style, settings.layout ] );
54
+ }, [ style, userSettings.layout ] );
54
55
 
55
56
  const onChange = ( newStyle ) => {
56
57
  const updatedStyle = { ...newStyle };
57
58
  delete updatedStyle.layout;
58
59
  setStyle( updatedStyle );
59
60
 
60
- if ( newStyle.layout !== settings.layout ) {
61
- const updatedSettings = { ...rawSettings, layout: newStyle.layout };
61
+ if ( newStyle.layout !== userSettings.layout ) {
62
+ const updatedSettings = {
63
+ ...userSettings,
64
+ layout: newStyle.layout,
65
+ };
62
66
 
63
67
  // Ensure any changes to layout definitions are not persisted.
64
68
  if ( updatedSettings.layout?.definitions ) {
@@ -0,0 +1,71 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import {
6
+ __experimentalItemGroup as ItemGroup,
7
+ __experimentalVStack as VStack,
8
+ __experimentalHStack as HStack,
9
+ Button,
10
+ Tooltip,
11
+ } from '@wordpress/components';
12
+ import { typography } from '@wordpress/icons';
13
+ import { useContext } from '@wordpress/element';
14
+
15
+ /**
16
+ * Internal dependencies
17
+ */
18
+ import FontLibraryProvider, {
19
+ FontLibraryContext,
20
+ } from './font-library-modal/context';
21
+ import FontLibraryModal from './font-library-modal';
22
+ import FontFamilyItem from './font-family-item';
23
+ import Subtitle from './subtitle';
24
+
25
+ function FontFamilies() {
26
+ const { modalTabOpen, toggleModal, themeFonts, customFonts } =
27
+ useContext( FontLibraryContext );
28
+
29
+ return (
30
+ <>
31
+ { !! modalTabOpen && (
32
+ <FontLibraryModal
33
+ onRequestClose={ () => toggleModal() }
34
+ initialTabName={ modalTabOpen }
35
+ />
36
+ ) }
37
+
38
+ <VStack spacing={ 3 }>
39
+ <HStack justify="space-between">
40
+ <Subtitle level={ 3 }>{ __( 'Fonts' ) }</Subtitle>
41
+ <HStack justify="flex-end">
42
+ <Tooltip text={ __( 'Manage fonts' ) }>
43
+ <Button
44
+ onClick={ () =>
45
+ toggleModal( 'installed-fonts' )
46
+ }
47
+ aria-label={ __( 'Manage fonts' ) }
48
+ icon={ typography }
49
+ size={ 'small' }
50
+ />
51
+ </Tooltip>
52
+ </HStack>
53
+ </HStack>
54
+ <ItemGroup isBordered isSeparated>
55
+ { customFonts.map( ( font ) => (
56
+ <FontFamilyItem key={ font.slug } font={ font } />
57
+ ) ) }
58
+ { themeFonts.map( ( font ) => (
59
+ <FontFamilyItem key={ font.slug } font={ font } />
60
+ ) ) }
61
+ </ItemGroup>
62
+ </VStack>
63
+ </>
64
+ );
65
+ }
66
+
67
+ export default ( { ...props } ) => (
68
+ <FontLibraryProvider>
69
+ <FontFamilies { ...props } />
70
+ </FontLibraryProvider>
71
+ );
@@ -0,0 +1,44 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { _n } from '@wordpress/i18n';
5
+ import {
6
+ __experimentalHStack as HStack,
7
+ __experimentalItem as Item,
8
+ FlexItem,
9
+ } from '@wordpress/components';
10
+ import { useContext } from '@wordpress/element';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import { FontLibraryContext } from './font-library-modal/context';
16
+ import { getPreviewStyle } from './font-library-modal/utils';
17
+
18
+ function FontFamilyItem( { font } ) {
19
+ const { handleSetLibraryFontSelected, toggleModal } =
20
+ useContext( FontLibraryContext );
21
+
22
+ const variantsCount = font?.fontFace?.length || 1;
23
+
24
+ const handleClick = () => {
25
+ handleSetLibraryFontSelected( font );
26
+ toggleModal( 'installed-fonts' );
27
+ };
28
+
29
+ const previewStyle = getPreviewStyle( font );
30
+
31
+ return (
32
+ <Item onClick={ handleClick }>
33
+ <HStack justify="space-between">
34
+ <FlexItem style={ previewStyle }>{ font.name }</FlexItem>
35
+ <FlexItem style={ { color: '#9e9e9e' } }>
36
+ { variantsCount }{ ' ' }
37
+ { _n( 'variant', 'variants', variantsCount ) }
38
+ </FlexItem>
39
+ </HStack>
40
+ </Item>
41
+ );
42
+ }
43
+
44
+ export default FontFamilyItem;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __, sprintf } from '@wordpress/i18n';
5
+ import { __experimentalConfirmDialog as ConfirmDialog } from '@wordpress/components';
6
+
7
+ function ConfirmDeleteDialog( {
8
+ font,
9
+ isConfirmDeleteOpen,
10
+ handleConfirmUninstall,
11
+ handleCancelUninstall,
12
+ } ) {
13
+ return (
14
+ <ConfirmDialog
15
+ isOpen={ isConfirmDeleteOpen }
16
+ cancelButtonText={ __( 'No, keep the font' ) }
17
+ confirmButtonText={ __( 'Yes, uninstall' ) }
18
+ onCancel={ handleCancelUninstall }
19
+ onConfirm={ handleConfirmUninstall }
20
+ >
21
+ { font &&
22
+ sprintf(
23
+ /* translators: %s: Name of the font. */
24
+ __(
25
+ 'Would you like to remove %s and all its variants and assets?'
26
+ ),
27
+ font.name
28
+ ) }
29
+ </ConfirmDialog>
30
+ );
31
+ }
32
+
33
+ export default ConfirmDeleteDialog;
@@ -0,0 +1,347 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { createContext, useState, useEffect } from '@wordpress/element';
5
+ import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
6
+ import { useSelect, useDispatch } from '@wordpress/data';
7
+ import {
8
+ useEntityRecord,
9
+ useEntityRecords,
10
+ store as coreStore,
11
+ } from '@wordpress/core-data';
12
+ import { store as noticesStore } from '@wordpress/notices';
13
+ import { __ } from '@wordpress/i18n';
14
+
15
+ /**
16
+ * Internal dependencies
17
+ */
18
+ import { fetchInstallFonts, fetchUninstallFonts } from './resolvers';
19
+ import { unlock } from '../../../lock-unlock';
20
+ const { useGlobalSetting } = unlock( blockEditorPrivateApis );
21
+ import {
22
+ setUIValuesNeeded,
23
+ mergeFontFamilies,
24
+ loadFontFaceInBrowser,
25
+ getDisplaySrcFromFontFace,
26
+ makeFormDataFromFontFamilies,
27
+ } from './utils';
28
+ import { toggleFont } from './utils/toggleFont';
29
+ import getIntersectingFontFaces from './utils/get-intersecting-font-faces';
30
+
31
+ export const FontLibraryContext = createContext( {} );
32
+
33
+ function FontLibraryProvider( { children } ) {
34
+ const { __experimentalSaveSpecifiedEntityEdits: saveSpecifiedEntityEdits } =
35
+ useDispatch( coreStore );
36
+ const { globalStylesId } = useSelect( ( select ) => {
37
+ const { __experimentalGetCurrentGlobalStylesId } = select( coreStore );
38
+ return { globalStylesId: __experimentalGetCurrentGlobalStylesId() };
39
+ } );
40
+
41
+ const globalStyles = useEntityRecord(
42
+ 'root',
43
+ 'globalStyles',
44
+ globalStylesId
45
+ );
46
+ const fontFamiliesHasChanges =
47
+ !! globalStyles?.edits?.settings?.typography?.fontFamilies;
48
+
49
+ const { createErrorNotice } = useDispatch( noticesStore );
50
+
51
+ const [ isInstalling, setIsInstalling ] = useState( false );
52
+ const [ refreshKey, setRefreshKey ] = useState( 0 );
53
+
54
+ const refreshLibrary = () => {
55
+ setRefreshKey( ( prevKey ) => prevKey + 1 );
56
+ };
57
+
58
+ const {
59
+ records: libraryPosts = [],
60
+ isResolving: isResolvingLibrary,
61
+ hasResolved: hasResolvedLibrary,
62
+ } = useEntityRecords( 'postType', 'wp_font_family', { refreshKey } );
63
+
64
+ const libraryFonts =
65
+ ( libraryPosts || [] ).map( ( post ) =>
66
+ JSON.parse( post.content.raw )
67
+ ) || [];
68
+
69
+ // Global Styles (settings) font families
70
+ const [ fontFamilies, setFontFamilies ] = useGlobalSetting(
71
+ 'typography.fontFamilies'
72
+ );
73
+ // theme.json file font families
74
+ const [ baseFontFamilies ] = useGlobalSetting(
75
+ 'typography.fontFamilies',
76
+ undefined,
77
+ 'base'
78
+ );
79
+
80
+ // Save font families to the global styles post in the database.
81
+ const saveFontFamilies = () => {
82
+ saveSpecifiedEntityEdits( 'root', 'globalStyles', globalStylesId, [
83
+ 'settings.typography.fontFamilies',
84
+ ] );
85
+ };
86
+
87
+ // Library Fonts
88
+ const [ modalTabOpen, setModalTabOpen ] = useState( false );
89
+ const [ libraryFontSelected, setLibraryFontSelected ] = useState( null );
90
+
91
+ const baseThemeFonts = baseFontFamilies?.theme
92
+ ? baseFontFamilies.theme
93
+ .map( ( f ) => setUIValuesNeeded( f, { source: 'theme' } ) )
94
+ .sort( ( a, b ) => a.name.localeCompare( b.name ) )
95
+ : [];
96
+
97
+ const themeFonts = fontFamilies?.theme
98
+ ? fontFamilies.theme
99
+ .map( ( f ) => setUIValuesNeeded( f, { source: 'theme' } ) )
100
+ .sort( ( a, b ) => a.name.localeCompare( b.name ) )
101
+ : [];
102
+
103
+ const customFonts = fontFamilies?.custom
104
+ ? fontFamilies.custom
105
+ .map( ( f ) => setUIValuesNeeded( f, { source: 'custom' } ) )
106
+ .sort( ( a, b ) => a.name.localeCompare( b.name ) )
107
+ : [];
108
+
109
+ const baseCustomFonts = libraryFonts
110
+ ? libraryFonts
111
+ .map( ( f ) => setUIValuesNeeded( f, { source: 'custom' } ) )
112
+ .sort( ( a, b ) => a.name.localeCompare( b.name ) )
113
+ : [];
114
+
115
+ useEffect( () => {
116
+ if ( ! modalTabOpen ) {
117
+ setLibraryFontSelected( null );
118
+ }
119
+ }, [ modalTabOpen ] );
120
+
121
+ const handleSetLibraryFontSelected = ( font ) => {
122
+ // If font is null, reset the selected font
123
+ if ( ! font ) {
124
+ setLibraryFontSelected( null );
125
+ return;
126
+ }
127
+
128
+ const fonts =
129
+ font.source === 'theme' ? baseThemeFonts : baseCustomFonts;
130
+
131
+ // Tries to find the font in the installed fonts
132
+ const fontSelected = fonts.find( ( f ) => f.slug === font.slug );
133
+ // If the font is not found (it is only defined in custom styles), use the font from custom styles
134
+ setLibraryFontSelected( {
135
+ ...( fontSelected || font ),
136
+ source: font.source,
137
+ } );
138
+ };
139
+
140
+ const toggleModal = ( tabName ) => {
141
+ setModalTabOpen( tabName || null );
142
+ };
143
+
144
+ // Demo
145
+ const [ loadedFontUrls ] = useState( new Set() );
146
+
147
+ // Theme data
148
+ const { site, currentTheme } = useSelect( ( select ) => {
149
+ return {
150
+ site: select( coreStore ).getSite(),
151
+ currentTheme: select( coreStore ).getCurrentTheme(),
152
+ };
153
+ } );
154
+ const themeUrl =
155
+ site?.url + '/wp-content/themes/' + currentTheme?.stylesheet;
156
+
157
+ const getAvailableFontsOutline = ( availableFontFamilies ) => {
158
+ const outline = availableFontFamilies.reduce( ( acc, font ) => {
159
+ const availableFontFaces = Array.isArray( font?.fontFace )
160
+ ? font?.fontFace.map(
161
+ ( face ) => `${ face.fontStyle + face.fontWeight }`
162
+ )
163
+ : [ 'normal400' ]; // If the font doesn't have fontFace, we assume it is a system font and we add the defaults: normal 400
164
+
165
+ acc[ font.slug ] = availableFontFaces;
166
+ return acc;
167
+ }, {} );
168
+ return outline;
169
+ };
170
+
171
+ const getActivatedFontsOutline = ( source ) => {
172
+ switch ( source ) {
173
+ case 'theme':
174
+ return getAvailableFontsOutline( themeFonts );
175
+ case 'custom':
176
+ default:
177
+ return getAvailableFontsOutline( customFonts );
178
+ }
179
+ };
180
+
181
+ const isFontActivated = ( slug, style, weight, source ) => {
182
+ if ( ! style && ! weight ) {
183
+ return !! getActivatedFontsOutline( source )[ slug ];
184
+ }
185
+ return !! getActivatedFontsOutline( source )[ slug ]?.includes(
186
+ style + weight
187
+ );
188
+ };
189
+
190
+ const getFontFacesActivated = ( slug, source ) => {
191
+ return getActivatedFontsOutline( source )[ slug ] || [];
192
+ };
193
+
194
+ async function installFonts( fonts ) {
195
+ setIsInstalling( true );
196
+ try {
197
+ // Prepare formData to install.
198
+ const formData = makeFormDataFromFontFamilies( fonts );
199
+ // Install the fonts (upload the font files to the server and create the post in the database).
200
+ const fontsInstalled = await fetchInstallFonts( formData );
201
+ // Get intersecting font faces between the fonts we tried to installed and the fonts that were installed
202
+ // (to avoid activating a non installed font).
203
+ const fontToBeActivated = getIntersectingFontFaces(
204
+ fontsInstalled,
205
+ fonts
206
+ );
207
+ // Activate the font families (add the font families to the global styles).
208
+ activateCustomFontFamilies( fontToBeActivated );
209
+ // Save the global styles to the database.
210
+ saveSpecifiedEntityEdits( 'root', 'globalStyles', globalStylesId, [
211
+ 'settings.typography.fontFamilies',
212
+ ] );
213
+ refreshLibrary();
214
+ setIsInstalling( false );
215
+ return true;
216
+ } catch ( e ) {
217
+ // eslint-disable-next-line no-console
218
+ console.error( e );
219
+ createErrorNotice( __( 'Error installing fonts.' ), {
220
+ type: 'snackbar',
221
+ } );
222
+ setIsInstalling( false );
223
+ return false;
224
+ }
225
+ }
226
+
227
+ async function uninstallFont( font ) {
228
+ try {
229
+ // Uninstall the font (remove the font files from the server and the post from the database).
230
+ await fetchUninstallFonts( [ font ] );
231
+ // Deactivate the font family (remove the font family from the global styles).
232
+ deactivateFontFamily( font );
233
+ // Save the global styles to the database.
234
+ await saveSpecifiedEntityEdits(
235
+ 'root',
236
+ 'globalStyles',
237
+ globalStylesId,
238
+ [ 'settings.typography.fontFamilies' ]
239
+ );
240
+ // Refresh the library (the the library font families from database).
241
+ refreshLibrary();
242
+ return true;
243
+ } catch ( e ) {
244
+ // eslint-disable-next-line no-console
245
+ console.error( e );
246
+ createErrorNotice( __( 'Error uninstalling fonts.' ), {
247
+ type: 'snackbar',
248
+ } );
249
+ return false;
250
+ }
251
+ }
252
+
253
+ const deactivateFontFamily = ( font ) => {
254
+ // If the user doesn't have custom fonts defined, include as custom fonts all the theme fonts
255
+ // We want to save as active all the theme fonts at the beginning
256
+ const initialCustomFonts = fontFamilies?.[ font.source ] ?? [];
257
+ const newCustomFonts = initialCustomFonts.filter(
258
+ ( f ) => f.slug !== font.slug
259
+ );
260
+ setFontFamilies( {
261
+ ...fontFamilies,
262
+ [ font.source ]: newCustomFonts,
263
+ } );
264
+ };
265
+
266
+ const activateCustomFontFamilies = ( fontsToAdd ) => {
267
+ // Merge the existing custom fonts with the new fonts.
268
+ const newCustomFonts = mergeFontFamilies(
269
+ fontFamilies?.custom,
270
+ fontsToAdd
271
+ );
272
+ // Activate the fonts by set the new custom fonts array.
273
+ setFontFamilies( {
274
+ ...fontFamilies,
275
+ custom: newCustomFonts,
276
+ } );
277
+ // Add custom fonts to the browser.
278
+ fontsToAdd.forEach( ( font ) => {
279
+ font.fontFace.forEach( ( face ) => {
280
+ // Load font faces just in the iframe because they already are in the document.
281
+ loadFontFaceInBrowser(
282
+ face,
283
+ getDisplaySrcFromFontFace( face.src ),
284
+ 'iframe'
285
+ );
286
+ } );
287
+ } );
288
+ };
289
+
290
+ const toggleActivateFont = ( font, face ) => {
291
+ // If the user doesn't have custom fonts defined, include as custom fonts all the theme fonts
292
+ // We want to save as active all the theme fonts at the beginning
293
+ const initialFonts = fontFamilies?.[ font.source ] ?? [];
294
+ // Toggles the received font family or font face
295
+ const newFonts = toggleFont( font, face, initialFonts );
296
+ // Updates the font families activated in global settings:
297
+ setFontFamilies( {
298
+ ...fontFamilies,
299
+ [ font.source ]: newFonts,
300
+ } );
301
+ };
302
+
303
+ const loadFontFaceAsset = async ( fontFace ) => {
304
+ // If the font doesn't have a src, don't load it.
305
+ if ( ! fontFace.src ) return;
306
+ // Get the src of the font.
307
+ const src = getDisplaySrcFromFontFace( fontFace.src, themeUrl );
308
+ // If the font is already loaded, don't load it again.
309
+ if ( loadedFontUrls.has( src ) ) return;
310
+ // Load the font in the browser.
311
+ loadFontFaceInBrowser( fontFace, src, 'document' );
312
+ // Add the font to the loaded fonts list.
313
+ loadedFontUrls.add( src );
314
+ };
315
+
316
+ return (
317
+ <FontLibraryContext.Provider
318
+ value={ {
319
+ libraryFontSelected,
320
+ handleSetLibraryFontSelected,
321
+ themeFonts,
322
+ baseThemeFonts,
323
+ customFonts,
324
+ baseCustomFonts,
325
+ isFontActivated,
326
+ getFontFacesActivated,
327
+ loadFontFaceAsset,
328
+ installFonts,
329
+ uninstallFont,
330
+ toggleActivateFont,
331
+ getAvailableFontsOutline,
332
+ modalTabOpen,
333
+ toggleModal,
334
+ refreshLibrary,
335
+ saveFontFamilies,
336
+ fontFamiliesHasChanges,
337
+ isResolvingLibrary,
338
+ hasResolvedLibrary,
339
+ isInstalling,
340
+ } }
341
+ >
342
+ { children }
343
+ </FontLibraryContext.Provider>
344
+ );
345
+ }
346
+
347
+ export default FontLibraryProvider;
@@ -0,0 +1,70 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { _n } from '@wordpress/i18n';
5
+ import {
6
+ __experimentalText as Text,
7
+ Button,
8
+ Flex,
9
+ FlexItem,
10
+ } from '@wordpress/components';
11
+
12
+ /**
13
+ * Internal dependencies
14
+ */
15
+ import FontDemo from './font-demo';
16
+ import { getPreviewStyle } from './utils';
17
+
18
+ function FontCard( { font, onClick, actionHandler, variantsText } ) {
19
+ const fakeFontFace = {
20
+ fontStyle: 'normal',
21
+ fontWeight: '400',
22
+ fontFamily: font.fontFamily,
23
+ fake: true,
24
+ };
25
+
26
+ const displayFontFace =
27
+ font.fontFace && font.fontFace.length
28
+ ? font?.fontFace?.find(
29
+ ( face ) =>
30
+ face.fontStyle === 'normal' && face.fontWeight === '400'
31
+ ) || font.fontFace[ 0 ]
32
+ : fakeFontFace;
33
+
34
+ const demoStyle = getPreviewStyle( font );
35
+
36
+ const variantsCount = font.fontFace?.length || 1;
37
+
38
+ const style = {
39
+ cursor: !! onClick ? 'pointer' : 'default',
40
+ };
41
+
42
+ return (
43
+ <Button
44
+ onClick={ onClick }
45
+ style={ style }
46
+ className="font-library-modal__font-card"
47
+ >
48
+ <Flex justify="space-between" wrap={ false }>
49
+ <FontDemo
50
+ fontFace={ displayFontFace }
51
+ text={ font.name }
52
+ style={ demoStyle }
53
+ />
54
+ <Flex justify="flex-end">
55
+ <FlexItem>
56
+ <Text className="font-library-modal__font-card__count">
57
+ { variantsText ||
58
+ variantsCount +
59
+ ' ' +
60
+ _n( 'variant', 'variants', variantsCount ) }
61
+ </Text>
62
+ </FlexItem>
63
+ <FlexItem>{ !! actionHandler && actionHandler }</FlexItem>
64
+ </Flex>
65
+ </Flex>
66
+ </Button>
67
+ );
68
+ }
69
+
70
+ export default FontCard;