@wordpress/global-styles-ui 1.1.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 (701) hide show
  1. package/LICENSE.md +788 -0
  2. package/README.md +48 -0
  3. package/build/background-panel.js +62 -0
  4. package/build/background-panel.js.map +7 -0
  5. package/build/block-preview-panel.js +90 -0
  6. package/build/block-preview-panel.js.map +7 -0
  7. package/build/color-indicator-wrapper.js +55 -0
  8. package/build/color-indicator-wrapper.js.map +7 -0
  9. package/build/color-palette-panel.js +123 -0
  10. package/build/color-palette-panel.js.map +7 -0
  11. package/build/color-preview.js +94 -0
  12. package/build/color-preview.js.map +7 -0
  13. package/build/color-variations.js +41 -0
  14. package/build/color-variations.js.map +7 -0
  15. package/build/confirm-reset-shadow-dialog.js +55 -0
  16. package/build/confirm-reset-shadow-dialog.js.map +7 -0
  17. package/build/context.js +37 -0
  18. package/build/context.js.map +7 -0
  19. package/build/dimensions-panel.js +89 -0
  20. package/build/dimensions-panel.js.map +7 -0
  21. package/build/font-families.js +114 -0
  22. package/build/font-families.js.map +7 -0
  23. package/build/font-family-item.js +48 -0
  24. package/build/font-family-item.js.map +7 -0
  25. package/build/font-library-modal/collection-font-variant.js +75 -0
  26. package/build/font-library-modal/collection-font-variant.js.map +7 -0
  27. package/build/font-library-modal/context.js +386 -0
  28. package/build/font-library-modal/context.js.map +7 -0
  29. package/build/font-library-modal/font-card.js +81 -0
  30. package/build/font-library-modal/font-card.js.map +7 -0
  31. package/build/font-library-modal/font-collection.js +510 -0
  32. package/build/font-library-modal/font-collection.js.map +7 -0
  33. package/build/font-library-modal/font-demo.js +111 -0
  34. package/build/font-library-modal/font-demo.js.map +7 -0
  35. package/build/font-library-modal/google-fonts-confirm-dialog.js +58 -0
  36. package/build/font-library-modal/google-fonts-confirm-dialog.js.map +7 -0
  37. package/build/font-library-modal/index.js +110 -0
  38. package/build/font-library-modal/index.js.map +7 -0
  39. package/build/font-library-modal/installed-fonts.js +453 -0
  40. package/build/font-library-modal/installed-fonts.js.map +7 -0
  41. package/build/font-library-modal/lib/inflate.js +2628 -0
  42. package/build/font-library-modal/lib/inflate.js.map +7 -0
  43. package/build/font-library-modal/lib/lib-font.browser.d.js +33 -0
  44. package/build/font-library-modal/lib/lib-font.browser.d.js.map +7 -0
  45. package/build/font-library-modal/lib/lib-font.browser.js +3788 -0
  46. package/build/font-library-modal/lib/lib-font.browser.js.map +7 -0
  47. package/build/font-library-modal/lib/unbrotli.js +3678 -0
  48. package/build/font-library-modal/lib/unbrotli.js.map +7 -0
  49. package/build/font-library-modal/library-font-details.js +63 -0
  50. package/build/font-library-modal/library-font-details.js.map +7 -0
  51. package/build/font-library-modal/library-font-variant.js +81 -0
  52. package/build/font-library-modal/library-font-variant.js.map +7 -0
  53. package/build/font-library-modal/resolvers.js +115 -0
  54. package/build/font-library-modal/resolvers.js.map +7 -0
  55. package/build/font-library-modal/types.js +17 -0
  56. package/build/font-library-modal/types.js.map +7 -0
  57. package/build/font-library-modal/upload-fonts.js +207 -0
  58. package/build/font-library-modal/upload-fonts.js.map +7 -0
  59. package/build/font-library-modal/utils/constants.js +49 -0
  60. package/build/font-library-modal/utils/constants.js.map +7 -0
  61. package/build/font-library-modal/utils/filter-fonts.js +39 -0
  62. package/build/font-library-modal/utils/filter-fonts.js.map +7 -0
  63. package/build/font-library-modal/utils/fonts-outline.js +51 -0
  64. package/build/font-library-modal/utils/fonts-outline.js.map +7 -0
  65. package/build/font-library-modal/utils/index.js +274 -0
  66. package/build/font-library-modal/utils/index.js.map +7 -0
  67. package/build/font-library-modal/utils/make-families-from-faces.js +45 -0
  68. package/build/font-library-modal/utils/make-families-from-faces.js.map +7 -0
  69. package/build/font-library-modal/utils/preview-styles.js +119 -0
  70. package/build/font-library-modal/utils/preview-styles.js.map +7 -0
  71. package/build/font-library-modal/utils/set-immutably.js +40 -0
  72. package/build/font-library-modal/utils/set-immutably.js.map +7 -0
  73. package/build/font-library-modal/utils/sort-font-faces.js +59 -0
  74. package/build/font-library-modal/utils/sort-font-faces.js.map +7 -0
  75. package/build/font-library-modal/utils/toggleFont.js +67 -0
  76. package/build/font-library-modal/utils/toggleFont.js.map +7 -0
  77. package/build/font-sizes/confirm-delete-font-size-dialog.js +60 -0
  78. package/build/font-sizes/confirm-delete-font-size-dialog.js.map +7 -0
  79. package/build/font-sizes/confirm-reset-font-sizes-dialog.js +55 -0
  80. package/build/font-sizes/confirm-reset-font-sizes-dialog.js.map +7 -0
  81. package/build/font-sizes/font-size-preview.js +50 -0
  82. package/build/font-sizes/font-size-preview.js.map +7 -0
  83. package/build/font-sizes/font-size.js +261 -0
  84. package/build/font-sizes/font-size.js.map +7 -0
  85. package/build/font-sizes/font-sizes-count.js +40 -0
  86. package/build/font-sizes/font-sizes-count.js.map +7 -0
  87. package/build/font-sizes/font-sizes.js +215 -0
  88. package/build/font-sizes/font-sizes.js.map +7 -0
  89. package/build/font-sizes/rename-font-size-dialog.js +96 -0
  90. package/build/font-sizes/rename-font-size-dialog.js.map +7 -0
  91. package/build/global-styles-ui.js +213 -0
  92. package/build/global-styles-ui.js.map +7 -0
  93. package/build/gradients-palette-panel.js +133 -0
  94. package/build/gradients-palette-panel.js.map +7 -0
  95. package/build/highlighted-colors.js +57 -0
  96. package/build/highlighted-colors.js.map +7 -0
  97. package/build/hooks.js +176 -0
  98. package/build/hooks.js.map +7 -0
  99. package/build/icon-with-current-color.js +56 -0
  100. package/build/icon-with-current-color.js.map +7 -0
  101. package/build/index.js +51 -0
  102. package/build/index.js.map +7 -0
  103. package/build/lock-unlock.js +35 -0
  104. package/build/lock-unlock.js.map +7 -0
  105. package/build/navigation-button.js +52 -0
  106. package/build/navigation-button.js.map +7 -0
  107. package/build/pagination/index.js +133 -0
  108. package/build/pagination/index.js.map +7 -0
  109. package/build/palette.js +93 -0
  110. package/build/palette.js.map +7 -0
  111. package/build/preset-colors.js +40 -0
  112. package/build/preset-colors.js.map +7 -0
  113. package/build/preview-colors.js +86 -0
  114. package/build/preview-colors.js.map +7 -0
  115. package/build/preview-hooks.js +60 -0
  116. package/build/preview-hooks.js.map +7 -0
  117. package/build/preview-styles.js +219 -0
  118. package/build/preview-styles.js.map +7 -0
  119. package/build/preview-typography.js +72 -0
  120. package/build/preview-typography.js.map +7 -0
  121. package/build/preview-wrapper.js +102 -0
  122. package/build/preview-wrapper.js.map +7 -0
  123. package/build/provider.js +54 -0
  124. package/build/provider.js.map +7 -0
  125. package/build/root-menu.js +72 -0
  126. package/build/root-menu.js.map +7 -0
  127. package/build/screen-background.js +58 -0
  128. package/build/screen-background.js.map +7 -0
  129. package/build/screen-block-list.js +160 -0
  130. package/build/screen-block-list.js.map +7 -0
  131. package/build/screen-block.js +316 -0
  132. package/build/screen-block.js.map +7 -0
  133. package/build/screen-color-palette.js +64 -0
  134. package/build/screen-color-palette.js.map +7 -0
  135. package/build/screen-colors.js +85 -0
  136. package/build/screen-colors.js.map +7 -0
  137. package/build/screen-css.js +68 -0
  138. package/build/screen-css.js.map +7 -0
  139. package/build/screen-header.js +61 -0
  140. package/build/screen-header.js.map +7 -0
  141. package/build/screen-layout.js +54 -0
  142. package/build/screen-layout.js.map +7 -0
  143. package/build/screen-revisions/index.js +147 -0
  144. package/build/screen-revisions/index.js.map +7 -0
  145. package/build/screen-revisions/revisions-buttons.js +198 -0
  146. package/build/screen-revisions/revisions-buttons.js.map +7 -0
  147. package/build/screen-revisions/types.js +17 -0
  148. package/build/screen-revisions/types.js.map +7 -0
  149. package/build/screen-revisions/use-global-styles-revisions.js +163 -0
  150. package/build/screen-revisions/use-global-styles-revisions.js.map +7 -0
  151. package/build/screen-root.js +134 -0
  152. package/build/screen-root.js.map +7 -0
  153. package/build/screen-shadows.js +49 -0
  154. package/build/screen-shadows.js.map +7 -0
  155. package/build/screen-style-variations.js +52 -0
  156. package/build/screen-style-variations.js.map +7 -0
  157. package/build/screen-typography-element.js +167 -0
  158. package/build/screen-typography-element.js.map +7 -0
  159. package/build/screen-typography.js +65 -0
  160. package/build/screen-typography.js.map +7 -0
  161. package/build/shadow-utils.js +125 -0
  162. package/build/shadow-utils.js.map +7 -0
  163. package/build/shadows-edit-panel.js +503 -0
  164. package/build/shadows-edit-panel.js.map +7 -0
  165. package/build/shadows-panel.js +203 -0
  166. package/build/shadows-panel.js.map +7 -0
  167. package/build/size-control/index.js +86 -0
  168. package/build/size-control/index.js.map +7 -0
  169. package/build/style-variations-container.js +130 -0
  170. package/build/style-variations-container.js.map +7 -0
  171. package/build/style-variations-content.js +52 -0
  172. package/build/style-variations-content.js.map +7 -0
  173. package/build/style-variations.js +41 -0
  174. package/build/style-variations.js.map +7 -0
  175. package/build/subtitle.js +33 -0
  176. package/build/subtitle.js.map +7 -0
  177. package/build/typography-elements.js +117 -0
  178. package/build/typography-elements.js.map +7 -0
  179. package/build/typography-example.js +79 -0
  180. package/build/typography-example.js.map +7 -0
  181. package/build/typography-panel.js +64 -0
  182. package/build/typography-panel.js.map +7 -0
  183. package/build/typography-preview.js +70 -0
  184. package/build/typography-preview.js.map +7 -0
  185. package/build/typography-variations.js +41 -0
  186. package/build/typography-variations.js.map +7 -0
  187. package/build/utils.js +210 -0
  188. package/build/utils.js.map +7 -0
  189. package/build/variations/variation.js +116 -0
  190. package/build/variations/variation.js.map +7 -0
  191. package/build/variations/variations-color.js +64 -0
  192. package/build/variations/variations-color.js.map +7 -0
  193. package/build/variations/variations-panel.js +69 -0
  194. package/build/variations/variations-panel.js.map +7 -0
  195. package/build/variations/variations-typography.js +80 -0
  196. package/build/variations/variations-typography.js.map +7 -0
  197. package/build/with-global-styles-provider.js +48 -0
  198. package/build/with-global-styles-provider.js.map +7 -0
  199. package/build-module/background-panel.js +38 -0
  200. package/build-module/background-panel.js.map +7 -0
  201. package/build-module/block-preview-panel.js +70 -0
  202. package/build-module/block-preview-panel.js.map +7 -0
  203. package/build-module/color-indicator-wrapper.js +25 -0
  204. package/build-module/color-indicator-wrapper.js.map +7 -0
  205. package/build-module/color-palette-panel.js +97 -0
  206. package/build-module/color-palette-panel.js.map +7 -0
  207. package/build-module/color-preview.js +70 -0
  208. package/build-module/color-preview.js.map +7 -0
  209. package/build-module/color-variations.js +7 -0
  210. package/build-module/color-variations.js.map +7 -0
  211. package/build-module/confirm-reset-shadow-dialog.js +35 -0
  212. package/build-module/confirm-reset-shadow-dialog.js.map +7 -0
  213. package/build-module/context.js +13 -0
  214. package/build-module/context.js.map +7 -0
  215. package/build-module/dimensions-panel.js +69 -0
  216. package/build-module/dimensions-panel.js.map +7 -0
  217. package/build-module/font-families.js +92 -0
  218. package/build-module/font-families.js.map +7 -0
  219. package/build-module/font-family-item.js +32 -0
  220. package/build-module/font-family-item.js.map +7 -0
  221. package/build-module/font-library-modal/collection-font-variant.js +45 -0
  222. package/build-module/font-library-modal/collection-font-variant.js.map +7 -0
  223. package/build-module/font-library-modal/context.js +382 -0
  224. package/build-module/font-library-modal/context.js.map +7 -0
  225. package/build-module/font-library-modal/font-card.js +57 -0
  226. package/build-module/font-library-modal/font-card.js.map +7 -0
  227. package/build-module/font-library-modal/font-collection.js +510 -0
  228. package/build-module/font-library-modal/font-collection.js.map +7 -0
  229. package/build-module/font-library-modal/font-demo.js +94 -0
  230. package/build-module/font-library-modal/font-demo.js.map +7 -0
  231. package/build-module/font-library-modal/google-fonts-confirm-dialog.js +45 -0
  232. package/build-module/font-library-modal/google-fonts-confirm-dialog.js.map +7 -0
  233. package/build-module/font-library-modal/index.js +83 -0
  234. package/build-module/font-library-modal/index.js.map +7 -0
  235. package/build-module/font-library-modal/installed-fonts.js +442 -0
  236. package/build-module/font-library-modal/installed-fonts.js.map +7 -0
  237. package/build-module/font-library-modal/lib/inflate.js +2636 -0
  238. package/build-module/font-library-modal/lib/inflate.js.map +7 -0
  239. package/build-module/font-library-modal/lib/lib-font.browser.d.js +9 -0
  240. package/build-module/font-library-modal/lib/lib-font.browser.d.js.map +7 -0
  241. package/build-module/font-library-modal/lib/lib-font.browser.js +3754 -0
  242. package/build-module/font-library-modal/lib/lib-font.browser.js.map +7 -0
  243. package/build-module/font-library-modal/lib/unbrotli.js +3686 -0
  244. package/build-module/font-library-modal/lib/unbrotli.js.map +7 -0
  245. package/build-module/font-library-modal/library-font-details.js +36 -0
  246. package/build-module/font-library-modal/library-font-details.js.map +7 -0
  247. package/build-module/font-library-modal/library-font-variant.js +51 -0
  248. package/build-module/font-library-modal/library-font-variant.js.map +7 -0
  249. package/build-module/font-library-modal/resolvers.js +76 -0
  250. package/build-module/font-library-modal/resolvers.js.map +7 -0
  251. package/build-module/font-library-modal/types.js +1 -0
  252. package/build-module/font-library-modal/types.js.map +7 -0
  253. package/build-module/font-library-modal/upload-fonts.js +187 -0
  254. package/build-module/font-library-modal/upload-fonts.js.map +7 -0
  255. package/build-module/font-library-modal/utils/constants.js +23 -0
  256. package/build-module/font-library-modal/utils/constants.js.map +7 -0
  257. package/build-module/font-library-modal/utils/filter-fonts.js +19 -0
  258. package/build-module/font-library-modal/utils/filter-fonts.js.map +7 -0
  259. package/build-module/font-library-modal/utils/fonts-outline.js +26 -0
  260. package/build-module/font-library-modal/utils/fonts-outline.js.map +7 -0
  261. package/build-module/font-library-modal/utils/index.js +238 -0
  262. package/build-module/font-library-modal/utils/index.js.map +7 -0
  263. package/build-module/font-library-modal/utils/make-families-from-faces.js +25 -0
  264. package/build-module/font-library-modal/utils/make-families-from-faces.js.map +7 -0
  265. package/build-module/font-library-modal/utils/preview-styles.js +92 -0
  266. package/build-module/font-library-modal/utils/preview-styles.js.map +7 -0
  267. package/build-module/font-library-modal/utils/set-immutably.js +16 -0
  268. package/build-module/font-library-modal/utils/set-immutably.js.map +7 -0
  269. package/build-module/font-library-modal/utils/sort-font-faces.js +35 -0
  270. package/build-module/font-library-modal/utils/sort-font-faces.js.map +7 -0
  271. package/build-module/font-library-modal/utils/toggleFont.js +43 -0
  272. package/build-module/font-library-modal/utils/toggleFont.js.map +7 -0
  273. package/build-module/font-sizes/confirm-delete-font-size-dialog.js +40 -0
  274. package/build-module/font-sizes/confirm-delete-font-size-dialog.js.map +7 -0
  275. package/build-module/font-sizes/confirm-reset-font-sizes-dialog.js +35 -0
  276. package/build-module/font-sizes/confirm-reset-font-sizes-dialog.js.map +7 -0
  277. package/build-module/font-sizes/font-size-preview.js +30 -0
  278. package/build-module/font-sizes/font-size-preview.js.map +7 -0
  279. package/build-module/font-sizes/font-size.js +241 -0
  280. package/build-module/font-sizes/font-size.js.map +7 -0
  281. package/build-module/font-sizes/font-sizes-count.js +25 -0
  282. package/build-module/font-sizes/font-sizes-count.js.map +7 -0
  283. package/build-module/font-sizes/font-sizes.js +200 -0
  284. package/build-module/font-sizes/font-sizes.js.map +7 -0
  285. package/build-module/font-sizes/rename-font-size-dialog.js +82 -0
  286. package/build-module/font-sizes/rename-font-size-dialog.js.map +7 -0
  287. package/build-module/global-styles-ui.js +182 -0
  288. package/build-module/global-styles-ui.js.map +7 -0
  289. package/build-module/gradients-palette-panel.js +118 -0
  290. package/build-module/gradients-palette-panel.js.map +7 -0
  291. package/build-module/highlighted-colors.js +37 -0
  292. package/build-module/highlighted-colors.js.map +7 -0
  293. package/build-module/hooks.js +144 -0
  294. package/build-module/hooks.js.map +7 -0
  295. package/build-module/icon-with-current-color.js +22 -0
  296. package/build-module/icon-with-current-color.js.map +7 -0
  297. package/build-module/index.js +13 -0
  298. package/build-module/index.js.map +7 -0
  299. package/build-module/lock-unlock.js +10 -0
  300. package/build-module/lock-unlock.js.map +7 -0
  301. package/build-module/navigation-button.js +32 -0
  302. package/build-module/navigation-button.js.map +7 -0
  303. package/build-module/pagination/index.js +107 -0
  304. package/build-module/pagination/index.js.map +7 -0
  305. package/build-module/palette.js +70 -0
  306. package/build-module/palette.js.map +7 -0
  307. package/build-module/preset-colors.js +20 -0
  308. package/build-module/preset-colors.js.map +7 -0
  309. package/build-module/preview-colors.js +59 -0
  310. package/build-module/preview-colors.js.map +7 -0
  311. package/build-module/preview-hooks.js +36 -0
  312. package/build-module/preview-hooks.js.map +7 -0
  313. package/build-module/preview-styles.js +193 -0
  314. package/build-module/preview-styles.js.map +7 -0
  315. package/build-module/preview-typography.js +42 -0
  316. package/build-module/preview-typography.js.map +7 -0
  317. package/build-module/preview-wrapper.js +86 -0
  318. package/build-module/preview-wrapper.js.map +7 -0
  319. package/build-module/provider.js +30 -0
  320. package/build-module/provider.js.map +7 -0
  321. package/build-module/root-menu.js +58 -0
  322. package/build-module/root-menu.js.map +7 -0
  323. package/build-module/screen-background.js +28 -0
  324. package/build-module/screen-background.js.map +7 -0
  325. package/build-module/screen-block-list.js +150 -0
  326. package/build-module/screen-block-list.js.map +7 -0
  327. package/build-module/screen-block.js +293 -0
  328. package/build-module/screen-block.js.map +7 -0
  329. package/build-module/screen-color-palette.js +34 -0
  330. package/build-module/screen-color-palette.js.map +7 -0
  331. package/build-module/screen-colors.js +55 -0
  332. package/build-module/screen-colors.js.map +7 -0
  333. package/build-module/screen-css.js +48 -0
  334. package/build-module/screen-css.js.map +7 -0
  335. package/build-module/screen-header.js +44 -0
  336. package/build-module/screen-header.js.map +7 -0
  337. package/build-module/screen-layout.js +24 -0
  338. package/build-module/screen-layout.js.map +7 -0
  339. package/build-module/screen-revisions/index.js +121 -0
  340. package/build-module/screen-revisions/index.js.map +7 -0
  341. package/build-module/screen-revisions/revisions-buttons.js +178 -0
  342. package/build-module/screen-revisions/revisions-buttons.js.map +7 -0
  343. package/build-module/screen-revisions/types.js +1 -0
  344. package/build-module/screen-revisions/types.js.map +7 -0
  345. package/build-module/screen-revisions/use-global-styles-revisions.js +145 -0
  346. package/build-module/screen-revisions/use-global-styles-revisions.js.map +7 -0
  347. package/build-module/screen-root.js +114 -0
  348. package/build-module/screen-root.js.map +7 -0
  349. package/build-module/screen-shadows.js +14 -0
  350. package/build-module/screen-shadows.js.map +7 -0
  351. package/build-module/screen-style-variations.js +32 -0
  352. package/build-module/screen-style-variations.js.map +7 -0
  353. package/build-module/screen-typography-element.js +141 -0
  354. package/build-module/screen-typography-element.js.map +7 -0
  355. package/build-module/screen-typography.js +35 -0
  356. package/build-module/screen-typography.js.map +7 -0
  357. package/build-module/shadow-utils.js +98 -0
  358. package/build-module/shadow-utils.js.map +7 -0
  359. package/build-module/shadows-edit-panel.js +502 -0
  360. package/build-module/shadows-edit-panel.js.map +7 -0
  361. package/build-module/shadows-panel.js +182 -0
  362. package/build-module/shadows-panel.js.map +7 -0
  363. package/build-module/size-control/index.js +72 -0
  364. package/build-module/size-control/index.js.map +7 -0
  365. package/build-module/style-variations-container.js +100 -0
  366. package/build-module/style-variations-container.js.map +7 -0
  367. package/build-module/style-variations-content.js +18 -0
  368. package/build-module/style-variations-content.js.map +7 -0
  369. package/build-module/style-variations.js +7 -0
  370. package/build-module/style-variations.js.map +7 -0
  371. package/build-module/subtitle.js +9 -0
  372. package/build-module/subtitle.js.map +7 -0
  373. package/build-module/typography-elements.js +102 -0
  374. package/build-module/typography-elements.js.map +7 -0
  375. package/build-module/typography-example.js +59 -0
  376. package/build-module/typography-example.js.map +7 -0
  377. package/build-module/typography-panel.js +44 -0
  378. package/build-module/typography-panel.js.map +7 -0
  379. package/build-module/typography-preview.js +50 -0
  380. package/build-module/typography-preview.js.map +7 -0
  381. package/build-module/typography-variations.js +7 -0
  382. package/build-module/typography-variations.js.map +7 -0
  383. package/build-module/utils.js +179 -0
  384. package/build-module/utils.js.map +7 -0
  385. package/build-module/variations/variation.js +86 -0
  386. package/build-module/variations/variation.js.map +7 -0
  387. package/build-module/variations/variations-color.js +37 -0
  388. package/build-module/variations/variations-color.js.map +7 -0
  389. package/build-module/variations/variations-panel.js +44 -0
  390. package/build-module/variations/variations-panel.js.map +7 -0
  391. package/build-module/variations/variations-typography.js +53 -0
  392. package/build-module/variations/variations-typography.js.map +7 -0
  393. package/build-module/with-global-styles-provider.js +24 -0
  394. package/build-module/with-global-styles-provider.js.map +7 -0
  395. package/build-style/style-rtl.css +717 -0
  396. package/build-style/style.css +718 -0
  397. package/build-types/background-panel.d.ts +10 -0
  398. package/build-types/background-panel.d.ts.map +1 -0
  399. package/build-types/block-preview-panel.d.ts +7 -0
  400. package/build-types/block-preview-panel.d.ts.map +1 -0
  401. package/build-types/color-indicator-wrapper.d.ts +7 -0
  402. package/build-types/color-indicator-wrapper.d.ts.map +1 -0
  403. package/build-types/color-palette-panel.d.ts +6 -0
  404. package/build-types/color-palette-panel.d.ts.map +1 -0
  405. package/build-types/color-preview.d.ts +2 -0
  406. package/build-types/color-preview.d.ts.map +1 -0
  407. package/build-types/color-variations.d.ts +27 -0
  408. package/build-types/color-variations.d.ts.map +1 -0
  409. package/build-types/confirm-reset-shadow-dialog.d.ts +10 -0
  410. package/build-types/confirm-reset-shadow-dialog.d.ts.map +1 -0
  411. package/build-types/context.d.ts +10 -0
  412. package/build-types/context.d.ts.map +1 -0
  413. package/build-types/dimensions-panel.d.ts +2 -0
  414. package/build-types/dimensions-panel.d.ts.map +1 -0
  415. package/build-types/font-families.d.ts +4 -0
  416. package/build-types/font-families.d.ts.map +1 -0
  417. package/build-types/font-family-item.d.ts +7 -0
  418. package/build-types/font-family-item.d.ts.map +1 -0
  419. package/build-types/font-library-modal/collection-font-variant.d.ts +4 -0
  420. package/build-types/font-library-modal/collection-font-variant.d.ts.map +1 -0
  421. package/build-types/font-library-modal/context.d.ts +7 -0
  422. package/build-types/font-library-modal/context.d.ts.map +1 -0
  423. package/build-types/font-library-modal/font-card.d.ts +9 -0
  424. package/build-types/font-library-modal/font-card.d.ts.map +1 -0
  425. package/build-types/font-library-modal/font-collection.d.ts +5 -0
  426. package/build-types/font-library-modal/font-collection.d.ts.map +1 -0
  427. package/build-types/font-library-modal/font-demo.d.ts +4 -0
  428. package/build-types/font-library-modal/font-demo.d.ts.map +1 -0
  429. package/build-types/font-library-modal/google-fonts-confirm-dialog.d.ts +3 -0
  430. package/build-types/font-library-modal/google-fonts-confirm-dialog.d.ts.map +1 -0
  431. package/build-types/font-library-modal/index.d.ts +6 -0
  432. package/build-types/font-library-modal/index.d.ts.map +1 -0
  433. package/build-types/font-library-modal/installed-fonts.d.ts +3 -0
  434. package/build-types/font-library-modal/installed-fonts.d.ts.map +1 -0
  435. package/build-types/font-library-modal/library-font-details.d.ts +6 -0
  436. package/build-types/font-library-modal/library-font-details.d.ts.map +1 -0
  437. package/build-types/font-library-modal/library-font-variant.d.ts +7 -0
  438. package/build-types/font-library-modal/library-font-variant.d.ts.map +1 -0
  439. package/build-types/font-library-modal/resolvers.d.ts +43 -0
  440. package/build-types/font-library-modal/resolvers.d.ts.map +1 -0
  441. package/build-types/font-library-modal/types.d.ts +133 -0
  442. package/build-types/font-library-modal/types.d.ts.map +1 -0
  443. package/build-types/font-library-modal/upload-fonts.d.ts +3 -0
  444. package/build-types/font-library-modal/upload-fonts.d.ts.map +1 -0
  445. package/build-types/font-library-modal/utils/constants.d.ts +4 -0
  446. package/build-types/font-library-modal/utils/constants.d.ts.map +1 -0
  447. package/build-types/font-library-modal/utils/filter-fonts.d.ts +25 -0
  448. package/build-types/font-library-modal/utils/filter-fonts.d.ts.map +1 -0
  449. package/build-types/font-library-modal/utils/fonts-outline.d.ts +7 -0
  450. package/build-types/font-library-modal/utils/fonts-outline.d.ts.map +1 -0
  451. package/build-types/font-library-modal/utils/index.d.ts +21 -0
  452. package/build-types/font-library-modal/utils/index.d.ts.map +1 -0
  453. package/build-types/font-library-modal/utils/make-families-from-faces.d.ts +6 -0
  454. package/build-types/font-library-modal/utils/make-families-from-faces.d.ts.map +1 -0
  455. package/build-types/font-library-modal/utils/preview-styles.d.ts +13 -0
  456. package/build-types/font-library-modal/utils/preview-styles.d.ts.map +1 -0
  457. package/build-types/font-library-modal/utils/set-immutably.d.ts +13 -0
  458. package/build-types/font-library-modal/utils/set-immutably.d.ts.map +1 -0
  459. package/build-types/font-library-modal/utils/sort-font-faces.d.ts +6 -0
  460. package/build-types/font-library-modal/utils/sort-font-faces.d.ts.map +1 -0
  461. package/build-types/font-library-modal/utils/toggleFont.d.ts +38 -0
  462. package/build-types/font-library-modal/utils/toggleFont.d.ts.map +1 -0
  463. package/build-types/font-sizes/confirm-delete-font-size-dialog.d.ts +10 -0
  464. package/build-types/font-sizes/confirm-delete-font-size-dialog.d.ts.map +1 -0
  465. package/build-types/font-sizes/confirm-reset-font-sizes-dialog.d.ts +10 -0
  466. package/build-types/font-sizes/confirm-reset-font-sizes-dialog.d.ts.map +1 -0
  467. package/build-types/font-sizes/font-size-preview.d.ts +7 -0
  468. package/build-types/font-sizes/font-size-preview.d.ts.map +1 -0
  469. package/build-types/font-sizes/font-size.d.ts +4 -0
  470. package/build-types/font-sizes/font-size.d.ts.map +1 -0
  471. package/build-types/font-sizes/font-sizes-count.d.ts +3 -0
  472. package/build-types/font-sizes/font-sizes-count.d.ts.map +1 -0
  473. package/build-types/font-sizes/font-sizes.d.ts +3 -0
  474. package/build-types/font-sizes/font-sizes.d.ts.map +1 -0
  475. package/build-types/font-sizes/rename-font-size-dialog.d.ts +9 -0
  476. package/build-types/font-sizes/rename-font-size-dialog.d.ts.map +1 -0
  477. package/build-types/global-styles-ui.d.ts +26 -0
  478. package/build-types/global-styles-ui.d.ts.map +1 -0
  479. package/build-types/gradients-palette-panel.d.ts +6 -0
  480. package/build-types/gradients-palette-panel.d.ts.map +1 -0
  481. package/build-types/highlighted-colors.d.ts +7 -0
  482. package/build-types/highlighted-colors.d.ts.map +1 -0
  483. package/build-types/hooks.d.ts +46 -0
  484. package/build-types/hooks.d.ts.map +1 -0
  485. package/build-types/icon-with-current-color.d.ts +9 -0
  486. package/build-types/icon-with-current-color.d.ts.map +1 -0
  487. package/build-types/index.d.ts +6 -0
  488. package/build-types/index.d.ts.map +1 -0
  489. package/build-types/lock-unlock.d.ts +2 -0
  490. package/build-types/lock-unlock.d.ts.map +1 -0
  491. package/build-types/navigation-button.d.ts +10 -0
  492. package/build-types/navigation-button.d.ts.map +1 -0
  493. package/build-types/pagination/index.d.ts +13 -0
  494. package/build-types/pagination/index.d.ts.map +1 -0
  495. package/build-types/palette.d.ts +6 -0
  496. package/build-types/palette.d.ts.map +1 -0
  497. package/build-types/preset-colors.d.ts +2 -0
  498. package/build-types/preset-colors.d.ts.map +1 -0
  499. package/build-types/preview-colors.d.ts +8 -0
  500. package/build-types/preview-colors.d.ts.map +1 -0
  501. package/build-types/preview-hooks.d.ts +9 -0
  502. package/build-types/preview-hooks.d.ts.map +1 -0
  503. package/build-types/preview-styles.d.ts +9 -0
  504. package/build-types/preview-styles.d.ts.map +1 -0
  505. package/build-types/preview-typography.d.ts +8 -0
  506. package/build-types/preview-typography.d.ts.map +1 -0
  507. package/build-types/preview-wrapper.d.ts +15 -0
  508. package/build-types/preview-wrapper.d.ts.map +1 -0
  509. package/build-types/provider.d.ts +15 -0
  510. package/build-types/provider.d.ts.map +1 -0
  511. package/build-types/root-menu.d.ts +3 -0
  512. package/build-types/root-menu.d.ts.map +1 -0
  513. package/build-types/screen-background.d.ts +3 -0
  514. package/build-types/screen-background.d.ts.map +1 -0
  515. package/build-types/screen-block-list.d.ts +4 -0
  516. package/build-types/screen-block-list.d.ts.map +1 -0
  517. package/build-types/screen-block.d.ts +7 -0
  518. package/build-types/screen-block.d.ts.map +1 -0
  519. package/build-types/screen-color-palette.d.ts +5 -0
  520. package/build-types/screen-color-palette.d.ts.map +1 -0
  521. package/build-types/screen-colors.d.ts +3 -0
  522. package/build-types/screen-colors.d.ts.map +1 -0
  523. package/build-types/screen-css.d.ts +3 -0
  524. package/build-types/screen-css.d.ts.map +1 -0
  525. package/build-types/screen-header.d.ts +8 -0
  526. package/build-types/screen-header.d.ts.map +1 -0
  527. package/build-types/screen-layout.d.ts +3 -0
  528. package/build-types/screen-layout.d.ts.map +1 -0
  529. package/build-types/screen-revisions/index.d.ts +6 -0
  530. package/build-types/screen-revisions/index.d.ts.map +1 -0
  531. package/build-types/screen-revisions/revisions-buttons.d.ts +23 -0
  532. package/build-types/screen-revisions/revisions-buttons.d.ts.map +1 -0
  533. package/build-types/screen-revisions/types.d.ts +17 -0
  534. package/build-types/screen-revisions/types.d.ts.map +1 -0
  535. package/build-types/screen-revisions/use-global-styles-revisions.d.ts +17 -0
  536. package/build-types/screen-revisions/use-global-styles-revisions.d.ts.map +1 -0
  537. package/build-types/screen-root.d.ts +3 -0
  538. package/build-types/screen-root.d.ts.map +1 -0
  539. package/build-types/screen-shadows.d.ts +3 -0
  540. package/build-types/screen-shadows.d.ts.map +1 -0
  541. package/build-types/screen-style-variations.d.ts +3 -0
  542. package/build-types/screen-style-variations.d.ts.map +1 -0
  543. package/build-types/screen-typography-element.d.ts +28 -0
  544. package/build-types/screen-typography-element.d.ts.map +1 -0
  545. package/build-types/screen-typography.d.ts +3 -0
  546. package/build-types/screen-typography.d.ts.map +1 -0
  547. package/build-types/shadow-utils.d.ts +126 -0
  548. package/build-types/shadow-utils.d.ts.map +1 -0
  549. package/build-types/shadows-edit-panel.d.ts +2 -0
  550. package/build-types/shadows-edit-panel.d.ts.map +1 -0
  551. package/build-types/shadows-panel.d.ts +3 -0
  552. package/build-types/shadows-panel.d.ts.map +1 -0
  553. package/build-types/size-control/index.d.ts +11 -0
  554. package/build-types/size-control/index.d.ts.map +1 -0
  555. package/build-types/stories/index.story.d.ts +6 -0
  556. package/build-types/stories/index.story.d.ts.map +1 -0
  557. package/build-types/style-variations-container.d.ts +6 -0
  558. package/build-types/style-variations-container.d.ts.map +1 -0
  559. package/build-types/style-variations-content.d.ts +2 -0
  560. package/build-types/style-variations-content.d.ts.map +1 -0
  561. package/build-types/style-variations.d.ts +25 -0
  562. package/build-types/style-variations.d.ts.map +1 -0
  563. package/build-types/subtitle.d.ts +7 -0
  564. package/build-types/subtitle.d.ts.map +1 -0
  565. package/build-types/test/shadow-utils.spec.d.ts +2 -0
  566. package/build-types/test/shadow-utils.spec.d.ts.map +1 -0
  567. package/build-types/test/utils.spec.d.ts +2 -0
  568. package/build-types/test/utils.spec.d.ts.map +1 -0
  569. package/build-types/typography-elements.d.ts +3 -0
  570. package/build-types/typography-elements.d.ts.map +1 -0
  571. package/build-types/typography-example.d.ts +7 -0
  572. package/build-types/typography-example.d.ts.map +1 -0
  573. package/build-types/typography-panel.d.ts +7 -0
  574. package/build-types/typography-panel.d.ts.map +1 -0
  575. package/build-types/typography-preview.d.ts +8 -0
  576. package/build-types/typography-preview.d.ts.map +1 -0
  577. package/build-types/typography-variations.d.ts +27 -0
  578. package/build-types/typography-variations.d.ts.map +1 -0
  579. package/build-types/utils.d.ts +63 -0
  580. package/build-types/utils.d.ts.map +1 -0
  581. package/build-types/variations/variation.d.ts +10 -0
  582. package/build-types/variations/variation.d.ts.map +1 -0
  583. package/build-types/variations/variations-color.d.ts +7 -0
  584. package/build-types/variations/variations-color.d.ts.map +1 -0
  585. package/build-types/variations/variations-panel.d.ts +13 -0
  586. package/build-types/variations/variations-panel.d.ts.map +1 -0
  587. package/build-types/variations/variations-typography.d.ts +7 -0
  588. package/build-types/variations/variations-typography.d.ts.map +1 -0
  589. package/build-types/with-global-styles-provider.d.ts +20 -0
  590. package/build-types/with-global-styles-provider.d.ts.map +1 -0
  591. package/package.json +67 -0
  592. package/src/README.md +99 -0
  593. package/src/background-panel.tsx +56 -0
  594. package/src/block-preview-panel.tsx +91 -0
  595. package/src/color-indicator-wrapper.tsx +34 -0
  596. package/src/color-palette-panel.tsx +111 -0
  597. package/src/color-preview.tsx +78 -0
  598. package/src/color-variations.tsx +35 -0
  599. package/src/confirm-reset-shadow-dialog.tsx +45 -0
  600. package/src/context.ts +21 -0
  601. package/src/dimensions-panel.tsx +85 -0
  602. package/src/font-families.tsx +127 -0
  603. package/src/font-family-item.tsx +52 -0
  604. package/src/font-library-modal/collection-font-variant.tsx +52 -0
  605. package/src/font-library-modal/context.tsx +591 -0
  606. package/src/font-library-modal/font-card.tsx +77 -0
  607. package/src/font-library-modal/font-collection.tsx +592 -0
  608. package/src/font-library-modal/font-demo.tsx +123 -0
  609. package/src/font-library-modal/google-fonts-confirm-dialog.tsx +57 -0
  610. package/src/font-library-modal/index.tsx +110 -0
  611. package/src/font-library-modal/installed-fonts.tsx +547 -0
  612. package/src/font-library-modal/lib/inflate.js +4112 -0
  613. package/src/font-library-modal/lib/lib-font.browser.d.ts +11 -0
  614. package/src/font-library-modal/lib/lib-font.browser.js +3861 -0
  615. package/src/font-library-modal/lib/unbrotli.js +2706 -0
  616. package/src/font-library-modal/library-font-details.tsx +46 -0
  617. package/src/font-library-modal/library-font-variant.tsx +67 -0
  618. package/src/font-library-modal/resolvers.tsx +100 -0
  619. package/src/font-library-modal/style.scss +222 -0
  620. package/src/font-library-modal/types.ts +176 -0
  621. package/src/font-library-modal/upload-fonts.tsx +269 -0
  622. package/src/font-library-modal/utils/constants.ts +23 -0
  623. package/src/font-library-modal/utils/filter-fonts.ts +47 -0
  624. package/src/font-library-modal/utils/fonts-outline.ts +33 -0
  625. package/src/font-library-modal/utils/index.ts +368 -0
  626. package/src/font-library-modal/utils/make-families-from-faces.ts +34 -0
  627. package/src/font-library-modal/utils/preview-styles.ts +167 -0
  628. package/src/font-library-modal/utils/set-immutably.ts +37 -0
  629. package/src/font-library-modal/utils/sort-font-faces.ts +46 -0
  630. package/src/font-library-modal/utils/toggleFont.ts +109 -0
  631. package/src/font-sizes/confirm-delete-font-size-dialog.tsx +51 -0
  632. package/src/font-sizes/confirm-reset-font-sizes-dialog.tsx +45 -0
  633. package/src/font-sizes/font-size-preview.tsx +47 -0
  634. package/src/font-sizes/font-size.tsx +289 -0
  635. package/src/font-sizes/font-sizes-count.tsx +37 -0
  636. package/src/font-sizes/font-sizes.tsx +265 -0
  637. package/src/font-sizes/rename-font-size-dialog.tsx +83 -0
  638. package/src/global-styles-ui.tsx +292 -0
  639. package/src/gradients-palette-panel.tsx +126 -0
  640. package/src/highlighted-colors.tsx +44 -0
  641. package/src/hooks.ts +251 -0
  642. package/src/icon-with-current-color.tsx +31 -0
  643. package/src/index.ts +7 -0
  644. package/src/lock-unlock.ts +10 -0
  645. package/src/navigation-button.tsx +53 -0
  646. package/src/pagination/index.tsx +107 -0
  647. package/src/pagination/style.scss +7 -0
  648. package/src/palette.tsx +101 -0
  649. package/src/preset-colors.tsx +18 -0
  650. package/src/preview-colors.tsx +68 -0
  651. package/src/preview-hooks.tsx +58 -0
  652. package/src/preview-styles.tsx +196 -0
  653. package/src/preview-typography.tsx +49 -0
  654. package/src/preview-wrapper.tsx +137 -0
  655. package/src/provider.tsx +54 -0
  656. package/src/root-menu.tsx +87 -0
  657. package/src/screen-background.tsx +37 -0
  658. package/src/screen-block-list.tsx +198 -0
  659. package/src/screen-block.tsx +370 -0
  660. package/src/screen-color-palette.tsx +47 -0
  661. package/src/screen-colors.tsx +67 -0
  662. package/src/screen-css.tsx +56 -0
  663. package/src/screen-header.tsx +56 -0
  664. package/src/screen-layout.tsx +34 -0
  665. package/src/screen-revisions/index.tsx +158 -0
  666. package/src/screen-revisions/revisions-buttons.tsx +259 -0
  667. package/src/screen-revisions/style.scss +194 -0
  668. package/src/screen-revisions/types.ts +18 -0
  669. package/src/screen-revisions/use-global-styles-revisions.tsx +204 -0
  670. package/src/screen-root.tsx +146 -0
  671. package/src/screen-shadows.tsx +13 -0
  672. package/src/screen-style-variations.tsx +36 -0
  673. package/src/screen-typography-element.tsx +127 -0
  674. package/src/screen-typography.tsx +41 -0
  675. package/src/shadow-utils.ts +167 -0
  676. package/src/shadows-edit-panel.tsx +559 -0
  677. package/src/shadows-panel.tsx +207 -0
  678. package/src/size-control/index.tsx +97 -0
  679. package/src/size-control/style.scss +7 -0
  680. package/src/stories/index.story.js +410 -0
  681. package/src/style-variations-container.tsx +153 -0
  682. package/src/style-variations-content.tsx +24 -0
  683. package/src/style-variations.tsx +33 -0
  684. package/src/style.scss +287 -0
  685. package/src/subtitle.tsx +17 -0
  686. package/src/test/shadow-utils.spec.js +251 -0
  687. package/src/test/utils.spec.js +59 -0
  688. package/src/typography-elements.tsx +113 -0
  689. package/src/typography-example.tsx +78 -0
  690. package/src/typography-panel.tsx +56 -0
  691. package/src/typography-preview.tsx +61 -0
  692. package/src/typography-variations.tsx +35 -0
  693. package/src/utils.ts +301 -0
  694. package/src/variations/style.scss +43 -0
  695. package/src/variations/variation.tsx +113 -0
  696. package/src/variations/variations-color.tsx +54 -0
  697. package/src/variations/variations-panel.tsx +79 -0
  698. package/src/variations/variations-typography.tsx +65 -0
  699. package/src/with-global-styles-provider.tsx +44 -0
  700. package/tsconfig.json +26 -0
  701. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,591 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { createContext, useState, useEffect } from '@wordpress/element';
5
+ import { useSelect, useDispatch } from '@wordpress/data';
6
+ import {
7
+ useEntityRecord,
8
+ useEntityRecords,
9
+ store as coreStore,
10
+ } from '@wordpress/core-data';
11
+ import { __ } from '@wordpress/i18n';
12
+ import type {
13
+ FontFamilyPreset,
14
+ GlobalStylesConfig,
15
+ } from '@wordpress/global-styles-engine';
16
+
17
+ /**
18
+ * Internal dependencies
19
+ */
20
+ import {
21
+ fetchGetFontFamilyBySlug,
22
+ fetchInstallFontFamily,
23
+ fetchUninstallFontFamily,
24
+ fetchFontCollections,
25
+ fetchFontCollection,
26
+ } from './resolvers';
27
+ import {
28
+ setUIValuesNeeded,
29
+ mergeFontFamilies,
30
+ loadFontFaceInBrowser,
31
+ unloadFontFaceInBrowser,
32
+ getDisplaySrcFromFontFace,
33
+ makeFontFacesFormData,
34
+ makeFontFamilyFormData,
35
+ batchInstallFontFaces,
36
+ checkFontFaceInstalled,
37
+ } from './utils';
38
+ import { setImmutably } from './utils/set-immutably';
39
+ import { toggleFont } from './utils/toggleFont';
40
+ import type {
41
+ CollectionFontFamily,
42
+ FontCollection,
43
+ FontFace,
44
+ FontFamily,
45
+ FontLibraryState,
46
+ } from './types';
47
+ import { useSetting } from '../hooks';
48
+
49
+ export const FontLibraryContext = createContext< FontLibraryState >(
50
+ {} as FontLibraryState
51
+ );
52
+ FontLibraryContext.displayName = 'FontLibraryContext';
53
+
54
+ function FontLibraryProvider( { children }: { children: React.ReactNode } ) {
55
+ const { saveEntityRecord } = useDispatch( coreStore );
56
+ const { globalStylesId } = useSelect( ( select ) => {
57
+ const { __experimentalGetCurrentGlobalStylesId } = select( coreStore );
58
+ return { globalStylesId: __experimentalGetCurrentGlobalStylesId() };
59
+ }, [] );
60
+
61
+ const globalStyles = useEntityRecord< GlobalStylesConfig >(
62
+ 'root',
63
+ 'globalStyles',
64
+ globalStylesId
65
+ );
66
+
67
+ const [ isInstalling, setIsInstalling ] = useState( false );
68
+ const [ refreshKey, setRefreshKey ] = useState( 0 );
69
+
70
+ const refreshLibrary = () => {
71
+ setRefreshKey( Date.now() );
72
+ };
73
+
74
+ const { records: libraryPosts = [], isResolving: isResolvingLibrary } =
75
+ useEntityRecords< CollectionFontFamily >(
76
+ 'postType',
77
+ 'wp_font_family',
78
+ {
79
+ refreshKey,
80
+ _embed: true,
81
+ }
82
+ );
83
+
84
+ const libraryFonts: FontFamilyPreset[] =
85
+ ( libraryPosts || [] ).map( ( fontFamilyPost ) => {
86
+ return {
87
+ id: fontFamilyPost.id,
88
+ ...( fontFamilyPost.font_family_settings || {} ),
89
+ fontFace:
90
+ fontFamilyPost?._embedded?.font_faces?.map(
91
+ ( face ) => face.font_face_settings
92
+ ) || [],
93
+ };
94
+ } ) || [];
95
+
96
+ // Global Styles (settings) font families
97
+ const [ fontFamilies, setFontFamilies ] = useSetting<
98
+ Record< string, FontFamilyPreset[] > | undefined
99
+ >( 'typography.fontFamilies' );
100
+
101
+ /*
102
+ * Save the font families to the database.
103
+
104
+ * This function is called when the user activates or deactivates a font family.
105
+ * It only updates the global styles post content in the database for new font families.
106
+ * This avoids saving other styles/settings changed by the user using other parts of the editor.
107
+ *
108
+ * It uses the font families from the param to avoid using the font families from an outdated state.
109
+ *
110
+ * @param {Array} fonts - The font families that will be saved to the database.
111
+ */
112
+ const saveFontFamilies = async (
113
+ fonts:
114
+ | FontFamilyPreset[]
115
+ | Record< string, FontFamilyPreset[] >
116
+ | undefined
117
+ ) => {
118
+ // Gets the global styles database post content.
119
+ const updatedGlobalStyles = globalStyles.record;
120
+
121
+ // Updates the database version of global styles with the edited font families in the client.
122
+ setImmutably(
123
+ updatedGlobalStyles ?? {},
124
+ [ 'settings', 'typography', 'fontFamilies' ],
125
+ fonts
126
+ );
127
+
128
+ // Saves a new version of the global styles in the database.
129
+ await saveEntityRecord( 'root', 'globalStyles', updatedGlobalStyles );
130
+ };
131
+
132
+ // Library Fonts
133
+ const [ modalTabOpen, setModalTabOpen ] = useState( '' );
134
+ const [ libraryFontSelected, setLibraryFontSelected ] = useState<
135
+ FontFamily | undefined
136
+ >( undefined );
137
+
138
+ // Themes Fonts are the fonts defined in the global styles (database persisted theme.json data).
139
+ const themeFonts = fontFamilies?.theme
140
+ ? fontFamilies.theme
141
+ .map( ( f ) => setUIValuesNeeded( f, { source: 'theme' } ) )
142
+ .sort( ( a, b ) => a.name.localeCompare( b.name ) )
143
+ : [];
144
+
145
+ const customFonts = fontFamilies?.custom
146
+ ? fontFamilies.custom
147
+ .map( ( f ) => setUIValuesNeeded( f, { source: 'custom' } ) )
148
+ .sort( ( a, b ) => a.name.localeCompare( b.name ) )
149
+ : [];
150
+
151
+ const baseCustomFonts = libraryFonts
152
+ ? libraryFonts
153
+ .map( ( f ) => setUIValuesNeeded( f, { source: 'custom' } ) )
154
+ .sort( ( a, b ) => a.name.localeCompare( b.name ) )
155
+ : [];
156
+
157
+ useEffect( () => {
158
+ if ( ! modalTabOpen ) {
159
+ setLibraryFontSelected( undefined );
160
+ }
161
+ }, [ modalTabOpen ] );
162
+
163
+ const handleSetLibraryFontSelected = ( font?: FontFamily ) => {
164
+ // If font is null, reset the selected font
165
+ if ( ! font ) {
166
+ setLibraryFontSelected( undefined );
167
+ return;
168
+ }
169
+
170
+ const fonts = font.source === 'theme' ? themeFonts : baseCustomFonts;
171
+
172
+ // Tries to find the font in the installed fonts
173
+ const fontSelected = fonts.find( ( f ) => f.slug === font.slug );
174
+ // If the font is not found (it is only defined in custom styles), use the font from custom styles
175
+ setLibraryFontSelected( {
176
+ ...( fontSelected || font ),
177
+ source: font.source,
178
+ } );
179
+ };
180
+
181
+ // Demo
182
+ const [ loadedFontUrls ] = useState( new Set() );
183
+
184
+ const getAvailableFontsOutline = (
185
+ availableFontFamilies: FontFamily[]
186
+ ) => {
187
+ const outline: Record< string, string[] > =
188
+ availableFontFamilies.reduce(
189
+ ( acc: Record< string, string[] >, font ) => {
190
+ const availableFontFaces =
191
+ font?.fontFace && font.fontFace?.length > 0
192
+ ? font?.fontFace.map(
193
+ ( face ) =>
194
+ `${ face.fontStyle ?? '' }${
195
+ face.fontWeight ?? ''
196
+ }`
197
+ )
198
+ : [ 'normal400' ]; // If the font doesn't have fontFace, we assume it is a system font and we add the defaults: normal 400
199
+
200
+ acc[ font.slug ] = availableFontFaces;
201
+ return acc;
202
+ },
203
+ {}
204
+ );
205
+ return outline;
206
+ };
207
+
208
+ const getActivatedFontsOutline = ( source?: string ) => {
209
+ switch ( source ) {
210
+ case 'theme':
211
+ return getAvailableFontsOutline( themeFonts );
212
+ case 'custom':
213
+ default:
214
+ return getAvailableFontsOutline( customFonts );
215
+ }
216
+ };
217
+
218
+ const isFontActivated = (
219
+ slug: string,
220
+ style?: string,
221
+ weight?: string | number,
222
+ source?: string
223
+ ) => {
224
+ if ( ! style && ! weight ) {
225
+ return !! getActivatedFontsOutline( source )[ slug ];
226
+ }
227
+ return !! getActivatedFontsOutline( source )[ slug ]?.includes(
228
+ ( style ?? '' ) + ( weight ?? '' )
229
+ );
230
+ };
231
+
232
+ const getFontFacesActivated = ( slug: string, source?: string ) => {
233
+ return getActivatedFontsOutline( source )[ slug ] || [];
234
+ };
235
+
236
+ async function installFonts( fontFamiliesToInstall: FontFamily[] ) {
237
+ setIsInstalling( true );
238
+ try {
239
+ const fontFamiliesToActivate = [];
240
+ let installationErrors: Array< {
241
+ message: string;
242
+ } > = [];
243
+
244
+ for ( const fontFamilyToInstall of fontFamiliesToInstall ) {
245
+ let isANewFontFamily = false;
246
+
247
+ // Get the font family if it already exists.
248
+ let installedFontFamily = await fetchGetFontFamilyBySlug(
249
+ fontFamilyToInstall.slug
250
+ );
251
+
252
+ // Otherwise create it.
253
+ if ( ! installedFontFamily ) {
254
+ isANewFontFamily = true;
255
+ // Prepare font family form data to install.
256
+ installedFontFamily = await fetchInstallFontFamily(
257
+ makeFontFamilyFormData( fontFamilyToInstall )
258
+ );
259
+ }
260
+
261
+ // Collect font faces that have already been installed (to be activated later)
262
+ const alreadyInstalledFontFaces =
263
+ installedFontFamily.fontFace && fontFamilyToInstall.fontFace
264
+ ? installedFontFamily.fontFace.filter(
265
+ ( fontFaceToInstall: FontFace ) =>
266
+ fontFaceToInstall &&
267
+ fontFamilyToInstall.fontFace &&
268
+ checkFontFaceInstalled(
269
+ fontFaceToInstall,
270
+ fontFamilyToInstall.fontFace
271
+ )
272
+ )
273
+ : [];
274
+
275
+ // Filter out Font Faces that have already been installed (so that they are not re-installed)
276
+ if (
277
+ installedFontFamily.fontFace &&
278
+ fontFamilyToInstall.fontFace
279
+ ) {
280
+ fontFamilyToInstall.fontFace =
281
+ fontFamilyToInstall.fontFace.filter(
282
+ ( fontFaceToInstall ) =>
283
+ ! checkFontFaceInstalled(
284
+ fontFaceToInstall,
285
+ installedFontFamily.fontFace
286
+ )
287
+ );
288
+ }
289
+
290
+ // Install the fonts (upload the font files to the server and create the post in the database).
291
+ let successfullyInstalledFontFaces: FontFace[] = [];
292
+ let unsuccessfullyInstalledFontFaces: {
293
+ message: string;
294
+ }[] = [];
295
+ if ( fontFamilyToInstall?.fontFace?.length ?? 0 > 0 ) {
296
+ const response = await batchInstallFontFaces(
297
+ installedFontFamily.id,
298
+ makeFontFacesFormData(
299
+ fontFamilyToInstall as FontFamily
300
+ )
301
+ );
302
+ successfullyInstalledFontFaces = response?.successes;
303
+ unsuccessfullyInstalledFontFaces = response?.errors;
304
+ }
305
+
306
+ // Use the successfully installed font faces
307
+ // As well as any font faces that were already installed (those will be activated)
308
+ if (
309
+ successfullyInstalledFontFaces?.length > 0 ||
310
+ alreadyInstalledFontFaces?.length > 0
311
+ ) {
312
+ // Use font data from REST API not from client to ensure
313
+ // correct font information is used.
314
+ installedFontFamily.fontFace = [
315
+ ...successfullyInstalledFontFaces,
316
+ ];
317
+
318
+ fontFamiliesToActivate.push( installedFontFamily );
319
+ }
320
+
321
+ // If it's a system font but was installed successfully, activate it.
322
+ if (
323
+ installedFontFamily &&
324
+ ! fontFamilyToInstall?.fontFace?.length
325
+ ) {
326
+ fontFamiliesToActivate.push( installedFontFamily );
327
+ }
328
+
329
+ // If the font family is new and is not a system font, delete it to avoid having font families without font faces.
330
+ if (
331
+ isANewFontFamily &&
332
+ ( fontFamilyToInstall?.fontFace?.length ?? 0 ) > 0 &&
333
+ successfullyInstalledFontFaces?.length === 0
334
+ ) {
335
+ await fetchUninstallFontFamily( installedFontFamily.id );
336
+ }
337
+
338
+ installationErrors = installationErrors.concat(
339
+ unsuccessfullyInstalledFontFaces
340
+ );
341
+ }
342
+
343
+ const installationErrorMessages: string[] =
344
+ installationErrors.reduce(
345
+ ( unique: string[], item ) =>
346
+ unique.includes( item.message )
347
+ ? unique
348
+ : [ ...unique, item.message ],
349
+ []
350
+ );
351
+
352
+ if ( fontFamiliesToActivate.length > 0 ) {
353
+ // Activate the font family (add the font family to the global styles).
354
+ const activeFonts = activateCustomFontFamilies(
355
+ fontFamiliesToActivate
356
+ );
357
+ // Save the global styles to the database.
358
+ await saveFontFamilies( activeFonts );
359
+
360
+ refreshLibrary();
361
+ }
362
+
363
+ if ( installationErrorMessages.length > 0 ) {
364
+ const installError: Error & {
365
+ installationErrors?: string[];
366
+ } = new Error( __( 'There was an error installing fonts.' ) );
367
+
368
+ installError.installationErrors = installationErrorMessages;
369
+
370
+ throw installError;
371
+ }
372
+ } finally {
373
+ setIsInstalling( false );
374
+ }
375
+ }
376
+
377
+ async function uninstallFontFamily( fontFamilyToUninstall: FontFamily ) {
378
+ if ( ! fontFamilyToUninstall?.id ) {
379
+ throw new Error( __( 'Font family to uninstall is not defined.' ) );
380
+ }
381
+ try {
382
+ // Uninstall the font family.
383
+ // (Removes the font files from the server and the posts from the database).
384
+ const uninstalledFontFamily = await fetchUninstallFontFamily(
385
+ fontFamilyToUninstall.id
386
+ );
387
+
388
+ // Deactivate the font family if delete request is successful
389
+ // (Removes the font family from the global styles).
390
+ if ( uninstalledFontFamily.deleted ) {
391
+ const activeFonts = deactivateFontFamily(
392
+ fontFamilyToUninstall
393
+ );
394
+ // Save the global styles to the database.
395
+ await saveFontFamilies( activeFonts );
396
+ }
397
+
398
+ // Refresh the library (the library font families from database).
399
+ refreshLibrary();
400
+
401
+ return uninstalledFontFamily;
402
+ } catch ( error ) {
403
+ // eslint-disable-next-line no-console
404
+ console.error(
405
+ `There was an error uninstalling the font family:`,
406
+ error
407
+ );
408
+ throw error;
409
+ }
410
+ }
411
+
412
+ const deactivateFontFamily = ( font: FontFamily ) => {
413
+ // If the user doesn't have custom fonts defined, include as custom fonts all the theme fonts
414
+ // We want to save as active all the theme fonts at the beginning
415
+ const initialCustomFonts = fontFamilies?.[ font.source ?? '' ] ?? [];
416
+ const newCustomFonts = initialCustomFonts.filter(
417
+ ( f ) => f.slug !== font.slug
418
+ );
419
+ const activeFonts = {
420
+ ...fontFamilies,
421
+ [ font.source ?? '' ]: newCustomFonts,
422
+ };
423
+ setFontFamilies( activeFonts );
424
+
425
+ if ( font.fontFace ) {
426
+ font.fontFace.forEach( ( face ) => {
427
+ unloadFontFaceInBrowser( face, 'all' );
428
+ } );
429
+ }
430
+ return activeFonts;
431
+ };
432
+
433
+ const activateCustomFontFamilies = ( fontsToAdd: FontFamily[] ) => {
434
+ const fontsToActivate = cleanFontsForSave( fontsToAdd );
435
+
436
+ const activeFonts = {
437
+ ...fontFamilies,
438
+ // Merge the existing custom fonts with the new fonts.
439
+ custom: mergeFontFamilies( fontFamilies?.custom, fontsToActivate ),
440
+ };
441
+
442
+ // Activate the fonts by set the new custom fonts array.
443
+ setFontFamilies( activeFonts );
444
+
445
+ loadFontsInBrowser( fontsToActivate );
446
+
447
+ return activeFonts;
448
+ };
449
+
450
+ // Removes the id from the families and faces to avoid saving that to global styles post content.
451
+ const cleanFontsForSave = ( fonts: FontFamily[] ) => {
452
+ return fonts.map( ( { id: _familyDbId, fontFace, ...font } ) => ( {
453
+ ...font,
454
+ ...( fontFace && fontFace.length > 0
455
+ ? {
456
+ fontFace: fontFace.map(
457
+ ( { id: _faceDbId, ...face } ) => face
458
+ ),
459
+ }
460
+ : {} ),
461
+ } ) );
462
+ };
463
+
464
+ const loadFontsInBrowser = ( fonts: FontFamily[] ) => {
465
+ // Add custom fonts to the browser.
466
+ fonts.forEach( ( font ) => {
467
+ if ( font.fontFace ) {
468
+ font.fontFace.forEach( ( face ) => {
469
+ const displaySrc = getDisplaySrcFromFontFace(
470
+ face?.src ?? ''
471
+ );
472
+ if ( displaySrc ) {
473
+ // Load font faces just in the iframe because they already are in the document.
474
+ loadFontFaceInBrowser( face, displaySrc, 'all' );
475
+ }
476
+ } );
477
+ }
478
+ } );
479
+ };
480
+
481
+ const toggleActivateFont = ( font: FontFamily, face?: FontFace ) => {
482
+ // If the user doesn't have custom fonts defined, include as custom fonts all the theme fonts
483
+ // We want to save as active all the theme fonts at the beginning
484
+ const initialFonts = fontFamilies?.[ font.source ?? '' ] ?? [];
485
+ // Toggles the received font family or font face
486
+ const newFonts = toggleFont( font, face, initialFonts );
487
+ // Updates the font families activated in global settings:
488
+ setFontFamilies( {
489
+ ...fontFamilies,
490
+ [ font.source ?? '' ]: newFonts,
491
+ } );
492
+
493
+ const isFaceActivated = isFontActivated(
494
+ font.slug,
495
+ face?.fontStyle ?? '',
496
+ face?.fontWeight ?? '',
497
+ font.source ?? 'custom'
498
+ );
499
+
500
+ if ( face && isFaceActivated ) {
501
+ unloadFontFaceInBrowser( face, 'all' );
502
+ } else {
503
+ const displaySrc = getDisplaySrcFromFontFace( face?.src ?? '' );
504
+ // If the font doesn't have a src, don't load it.
505
+ if ( face && displaySrc ) {
506
+ loadFontFaceInBrowser( face, displaySrc, 'all' );
507
+ }
508
+ }
509
+ };
510
+
511
+ const loadFontFaceAsset = async ( fontFace: FontFace ) => {
512
+ // If the font doesn't have a src, don't load it.
513
+ if ( ! fontFace.src ) {
514
+ return;
515
+ }
516
+ // Get the src of the font.
517
+ const src = getDisplaySrcFromFontFace( fontFace.src );
518
+ // If the font is already loaded, don't load it again.
519
+ if ( ! src || loadedFontUrls.has( src ) ) {
520
+ return;
521
+ }
522
+ // Load the font in the browser.
523
+ loadFontFaceInBrowser( fontFace, src, 'document' );
524
+ // Add the font to the loaded fonts list.
525
+ loadedFontUrls.add( src );
526
+ };
527
+
528
+ // Font Collections
529
+ const [ collections, setFontCollections ] = useState< FontCollection[] >(
530
+ []
531
+ );
532
+ const getFontCollections = async () => {
533
+ const response = await fetchFontCollections();
534
+ setFontCollections( response );
535
+ };
536
+ const getFontCollection = async ( slug: string ) => {
537
+ try {
538
+ const hasData = !! collections.find(
539
+ ( collection ) => collection.slug === slug
540
+ )?.font_families;
541
+ if ( hasData ) {
542
+ return;
543
+ }
544
+ const response = await fetchFontCollection( slug );
545
+ const updatedCollections = collections.map( ( collection ) =>
546
+ collection.slug === slug
547
+ ? { ...collection, ...response }
548
+ : collection
549
+ );
550
+ setFontCollections( updatedCollections );
551
+ } catch ( e ) {
552
+ // eslint-disable-next-line no-console
553
+ console.error( e );
554
+ throw e;
555
+ }
556
+ };
557
+
558
+ useEffect( () => {
559
+ getFontCollections();
560
+ }, [] );
561
+
562
+ return (
563
+ <FontLibraryContext.Provider
564
+ value={ {
565
+ libraryFontSelected,
566
+ handleSetLibraryFontSelected,
567
+ fontFamilies: fontFamilies ?? {},
568
+ baseCustomFonts,
569
+ isFontActivated,
570
+ getFontFacesActivated,
571
+ loadFontFaceAsset,
572
+ installFonts,
573
+ uninstallFontFamily,
574
+ toggleActivateFont,
575
+ getAvailableFontsOutline,
576
+ modalTabOpen,
577
+ setModalTabOpen,
578
+ refreshLibrary,
579
+ saveFontFamilies,
580
+ isResolvingLibrary,
581
+ isInstalling,
582
+ collections,
583
+ getFontCollection,
584
+ } }
585
+ >
586
+ { children }
587
+ </FontLibraryContext.Provider>
588
+ );
589
+ }
590
+
591
+ export default FontLibraryProvider;
@@ -0,0 +1,77 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { _n, sprintf, isRTL } from '@wordpress/i18n';
5
+ import {
6
+ useNavigator,
7
+ __experimentalText as Text,
8
+ Button,
9
+ Flex,
10
+ FlexItem,
11
+ } from '@wordpress/components';
12
+ import { Icon, chevronLeft, chevronRight } from '@wordpress/icons';
13
+
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+ import FontDemo from './font-demo';
18
+ import type { FontFamily } from './types';
19
+
20
+ function FontCard( {
21
+ font,
22
+ onClick,
23
+ variantsText,
24
+ navigatorPath,
25
+ }: {
26
+ font: FontFamily;
27
+ onClick: () => void;
28
+ variantsText?: string;
29
+ navigatorPath?: string;
30
+ } ) {
31
+ const variantsCount = font.fontFace?.length || 1;
32
+
33
+ const style = {
34
+ cursor: !! onClick ? 'pointer' : 'default',
35
+ };
36
+
37
+ const navigator = useNavigator();
38
+
39
+ return (
40
+ <Button
41
+ __next40pxDefaultSize
42
+ onClick={ () => {
43
+ onClick();
44
+ if ( navigatorPath ) {
45
+ navigator.goTo( navigatorPath );
46
+ }
47
+ } }
48
+ style={ style }
49
+ className="font-library-modal__font-card"
50
+ >
51
+ <Flex justify="space-between" wrap={ false }>
52
+ <FontDemo font={ font } />
53
+ <Flex justify="flex-end">
54
+ <FlexItem>
55
+ <Text className="font-library-modal__font-card__count">
56
+ { variantsText ||
57
+ sprintf(
58
+ /* translators: %d: Number of font variants. */
59
+ _n(
60
+ '%d variant',
61
+ '%d variants',
62
+ variantsCount
63
+ ),
64
+ variantsCount
65
+ ) }
66
+ </Text>
67
+ </FlexItem>
68
+ <FlexItem>
69
+ <Icon icon={ isRTL() ? chevronLeft : chevronRight } />
70
+ </FlexItem>
71
+ </Flex>
72
+ </Flex>
73
+ </Button>
74
+ );
75
+ }
76
+
77
+ export default FontCard;