@wordpress/global-styles-ui 1.1.0 → 1.2.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 (413) hide show
  1. package/build/background-panel.js +5 -3
  2. package/build/background-panel.js.map +1 -1
  3. package/build/block-preview-panel.js +4 -2
  4. package/build/block-preview-panel.js.map +1 -1
  5. package/build/color-indicator-wrapper.js +3 -1
  6. package/build/color-indicator-wrapper.js.map +1 -1
  7. package/build/color-palette-panel.js +4 -2
  8. package/build/color-palette-panel.js.map +1 -1
  9. package/build/color-preview.js +3 -1
  10. package/build/color-preview.js.map +1 -1
  11. package/build/color-variations.js +3 -1
  12. package/build/color-variations.js.map +1 -1
  13. package/build/confirm-reset-shadow-dialog.js +3 -1
  14. package/build/confirm-reset-shadow-dialog.js.map +1 -1
  15. package/build/context.js +3 -1
  16. package/build/context.js.map +1 -1
  17. package/build/dimensions-panel.js +5 -3
  18. package/build/dimensions-panel.js.map +1 -1
  19. package/build/font-families.js +3 -1
  20. package/build/font-families.js.map +1 -1
  21. package/build/font-family-item.js +3 -1
  22. package/build/font-family-item.js.map +1 -1
  23. package/build/font-library-modal/collection-font-variant.js +3 -1
  24. package/build/font-library-modal/collection-font-variant.js.map +1 -1
  25. package/build/font-library-modal/context.js +4 -2
  26. package/build/font-library-modal/context.js.map +1 -1
  27. package/build/font-library-modal/font-card.js +3 -1
  28. package/build/font-library-modal/font-card.js.map +1 -1
  29. package/build/font-library-modal/font-collection.js +6 -4
  30. package/build/font-library-modal/font-collection.js.map +2 -2
  31. package/build/font-library-modal/font-demo.js +3 -1
  32. package/build/font-library-modal/font-demo.js.map +1 -1
  33. package/build/font-library-modal/google-fonts-confirm-dialog.js +3 -1
  34. package/build/font-library-modal/google-fonts-confirm-dialog.js.map +2 -2
  35. package/build/font-library-modal/index.js +7 -5
  36. package/build/font-library-modal/index.js.map +1 -1
  37. package/build/font-library-modal/installed-fonts.js +3 -1
  38. package/build/font-library-modal/installed-fonts.js.map +1 -1
  39. package/build/font-library-modal/lib/inflate.js +2 -0
  40. package/build/font-library-modal/lib/inflate.js.map +1 -1
  41. package/build/font-library-modal/lib/lib-font.browser.d.js +4 -2
  42. package/build/font-library-modal/lib/lib-font.browser.d.js.map +1 -1
  43. package/build/font-library-modal/lib/lib-font.browser.js +345 -343
  44. package/build/font-library-modal/lib/lib-font.browser.js.map +1 -1
  45. package/build/font-library-modal/lib/unbrotli.js +2 -0
  46. package/build/font-library-modal/lib/unbrotli.js.map +1 -1
  47. package/build/font-library-modal/library-font-details.js +3 -1
  48. package/build/font-library-modal/library-font-details.js.map +1 -1
  49. package/build/font-library-modal/library-font-variant.js +3 -1
  50. package/build/font-library-modal/library-font-variant.js.map +1 -1
  51. package/build/font-library-modal/resolvers.js +4 -2
  52. package/build/font-library-modal/resolvers.js.map +2 -2
  53. package/build/font-library-modal/types.js +2 -0
  54. package/build/font-library-modal/types.js.map +1 -1
  55. package/build/font-library-modal/upload-fonts.js +3 -1
  56. package/build/font-library-modal/upload-fonts.js.map +2 -2
  57. package/build/font-library-modal/utils/constants.js +5 -3
  58. package/build/font-library-modal/utils/constants.js.map +1 -1
  59. package/build/font-library-modal/utils/filter-fonts.js +2 -0
  60. package/build/font-library-modal/utils/filter-fonts.js.map +1 -1
  61. package/build/font-library-modal/utils/fonts-outline.js +2 -0
  62. package/build/font-library-modal/utils/fonts-outline.js.map +1 -1
  63. package/build/font-library-modal/utils/index.js +4 -2
  64. package/build/font-library-modal/utils/index.js.map +2 -2
  65. package/build/font-library-modal/utils/make-families-from-faces.js +3 -1
  66. package/build/font-library-modal/utils/make-families-from-faces.js.map +1 -1
  67. package/build/font-library-modal/utils/preview-styles.js +2 -0
  68. package/build/font-library-modal/utils/preview-styles.js.map +1 -1
  69. package/build/font-library-modal/utils/set-immutably.js +2 -0
  70. package/build/font-library-modal/utils/set-immutably.js.map +1 -1
  71. package/build/font-library-modal/utils/sort-font-faces.js +2 -0
  72. package/build/font-library-modal/utils/sort-font-faces.js.map +1 -1
  73. package/build/font-library-modal/utils/toggleFont.js +2 -0
  74. package/build/font-library-modal/utils/toggleFont.js.map +1 -1
  75. package/build/font-sizes/confirm-delete-font-size-dialog.js +3 -1
  76. package/build/font-sizes/confirm-delete-font-size-dialog.js.map +1 -1
  77. package/build/font-sizes/confirm-reset-font-sizes-dialog.js +3 -1
  78. package/build/font-sizes/confirm-reset-font-sizes-dialog.js.map +1 -1
  79. package/build/font-sizes/font-size-preview.js +3 -1
  80. package/build/font-sizes/font-size-preview.js.map +1 -1
  81. package/build/font-sizes/font-size.js +4 -2
  82. package/build/font-sizes/font-size.js.map +1 -1
  83. package/build/font-sizes/font-sizes-count.js +3 -1
  84. package/build/font-sizes/font-sizes-count.js.map +1 -1
  85. package/build/font-sizes/font-sizes.js +4 -2
  86. package/build/font-sizes/font-sizes.js.map +1 -1
  87. package/build/font-sizes/rename-font-size-dialog.js +3 -1
  88. package/build/font-sizes/rename-font-size-dialog.js.map +1 -1
  89. package/build/global-styles-ui.js +43 -22
  90. package/build/global-styles-ui.js.map +2 -2
  91. package/build/gradients-palette-panel.js +5 -3
  92. package/build/gradients-palette-panel.js.map +1 -1
  93. package/build/highlighted-colors.js +3 -1
  94. package/build/highlighted-colors.js.map +1 -1
  95. package/build/hooks.js +4 -2
  96. package/build/hooks.js.map +1 -1
  97. package/build/icon-with-current-color.js +3 -1
  98. package/build/icon-with-current-color.js.map +1 -1
  99. package/build/index.js +2 -0
  100. package/build/index.js.map +1 -1
  101. package/build/lock-unlock.js +3 -1
  102. package/build/lock-unlock.js.map +1 -1
  103. package/build/navigation-button.js +3 -1
  104. package/build/navigation-button.js.map +1 -1
  105. package/build/pagination/index.js +3 -1
  106. package/build/pagination/index.js.map +1 -1
  107. package/build/palette.js +4 -2
  108. package/build/palette.js.map +1 -1
  109. package/build/preset-colors.js +3 -1
  110. package/build/preset-colors.js.map +1 -1
  111. package/build/preview-colors.js +5 -3
  112. package/build/preview-colors.js.map +1 -1
  113. package/build/preview-hooks.js +2 -0
  114. package/build/preview-hooks.js.map +1 -1
  115. package/build/preview-styles.js +6 -4
  116. package/build/preview-styles.js.map +1 -1
  117. package/build/preview-typography.js +4 -2
  118. package/build/preview-typography.js.map +1 -1
  119. package/build/preview-wrapper.js +6 -4
  120. package/build/preview-wrapper.js.map +1 -1
  121. package/build/provider.js +3 -1
  122. package/build/provider.js.map +1 -1
  123. package/build/root-menu.js +4 -2
  124. package/build/root-menu.js.map +1 -1
  125. package/build/screen-background.js +4 -2
  126. package/build/screen-background.js.map +1 -1
  127. package/build/screen-block-list.js +5 -3
  128. package/build/screen-block-list.js.map +2 -2
  129. package/build/screen-block.js +5 -3
  130. package/build/screen-block.js.map +1 -1
  131. package/build/screen-color-palette.js +4 -2
  132. package/build/screen-color-palette.js.map +1 -1
  133. package/build/screen-colors.js +4 -2
  134. package/build/screen-colors.js.map +1 -1
  135. package/build/screen-css.js +33 -25
  136. package/build/screen-css.js.map +2 -2
  137. package/build/screen-header.js +3 -1
  138. package/build/screen-header.js.map +1 -1
  139. package/build/screen-layout.js +4 -2
  140. package/build/screen-layout.js.map +1 -1
  141. package/build/screen-revisions/index.js +4 -2
  142. package/build/screen-revisions/index.js.map +1 -1
  143. package/build/screen-revisions/revisions-buttons.js +4 -2
  144. package/build/screen-revisions/revisions-buttons.js.map +1 -1
  145. package/build/screen-revisions/types.js +2 -0
  146. package/build/screen-revisions/types.js.map +1 -1
  147. package/build/screen-revisions/use-global-styles-revisions.js +5 -3
  148. package/build/screen-revisions/use-global-styles-revisions.js.map +1 -1
  149. package/build/screen-root.js +6 -39
  150. package/build/screen-root.js.map +2 -2
  151. package/build/screen-shadows.js +3 -1
  152. package/build/screen-shadows.js.map +1 -1
  153. package/build/screen-style-variations.js +3 -1
  154. package/build/screen-style-variations.js.map +1 -1
  155. package/build/screen-typography-element.js +4 -2
  156. package/build/screen-typography-element.js.map +1 -1
  157. package/build/screen-typography.js +3 -1
  158. package/build/screen-typography.js.map +1 -1
  159. package/build/shadow-utils.js +3 -1
  160. package/build/shadow-utils.js.map +1 -1
  161. package/build/shadows-edit-panel.js +6 -4
  162. package/build/shadows-edit-panel.js.map +1 -1
  163. package/build/shadows-panel.js +5 -3
  164. package/build/shadows-panel.js.map +1 -1
  165. package/build/size-control/index.js +4 -2
  166. package/build/size-control/index.js.map +1 -1
  167. package/build/style-variations-container.js +3 -1
  168. package/build/style-variations-container.js.map +1 -1
  169. package/build/style-variations-content.js +3 -1
  170. package/build/style-variations-content.js.map +1 -1
  171. package/build/style-variations.js +3 -1
  172. package/build/style-variations.js.map +1 -1
  173. package/build/subtitle.js +3 -1
  174. package/build/subtitle.js.map +1 -1
  175. package/build/typography-elements.js +3 -1
  176. package/build/typography-elements.js.map +1 -1
  177. package/build/typography-example.js +3 -1
  178. package/build/typography-example.js.map +1 -1
  179. package/build/typography-panel.js +4 -2
  180. package/build/typography-panel.js.map +1 -1
  181. package/build/typography-preview.js +3 -1
  182. package/build/typography-preview.js.map +1 -1
  183. package/build/typography-variations.js +3 -1
  184. package/build/typography-variations.js.map +1 -1
  185. package/build/utils.js +3 -1
  186. package/build/utils.js.map +1 -1
  187. package/build/variations/variation.js +3 -1
  188. package/build/variations/variation.js.map +1 -1
  189. package/build/variations/variations-color.js +4 -2
  190. package/build/variations/variations-color.js.map +1 -1
  191. package/build/variations/variations-panel.js +3 -1
  192. package/build/variations/variations-panel.js.map +1 -1
  193. package/build/variations/variations-typography.js +4 -2
  194. package/build/variations/variations-typography.js.map +1 -1
  195. package/build/with-global-styles-provider.js +3 -1
  196. package/build/with-global-styles-provider.js.map +1 -1
  197. package/build-module/background-panel.js +4 -3
  198. package/build-module/background-panel.js.map +1 -1
  199. package/build-module/block-preview-panel.js +3 -2
  200. package/build-module/block-preview-panel.js.map +1 -1
  201. package/build-module/color-indicator-wrapper.js +2 -1
  202. package/build-module/color-indicator-wrapper.js.map +1 -1
  203. package/build-module/color-palette-panel.js +3 -2
  204. package/build-module/color-palette-panel.js.map +1 -1
  205. package/build-module/color-preview.js +2 -1
  206. package/build-module/color-preview.js.map +1 -1
  207. package/build-module/color-variations.js +2 -1
  208. package/build-module/color-variations.js.map +1 -1
  209. package/build-module/confirm-reset-shadow-dialog.js +2 -1
  210. package/build-module/confirm-reset-shadow-dialog.js.map +1 -1
  211. package/build-module/context.js +2 -1
  212. package/build-module/context.js.map +1 -1
  213. package/build-module/dimensions-panel.js +4 -3
  214. package/build-module/dimensions-panel.js.map +1 -1
  215. package/build-module/font-families.js +2 -1
  216. package/build-module/font-families.js.map +1 -1
  217. package/build-module/font-family-item.js +2 -1
  218. package/build-module/font-family-item.js.map +1 -1
  219. package/build-module/font-library-modal/collection-font-variant.js +2 -1
  220. package/build-module/font-library-modal/collection-font-variant.js.map +1 -1
  221. package/build-module/font-library-modal/context.js +3 -2
  222. package/build-module/font-library-modal/context.js.map +1 -1
  223. package/build-module/font-library-modal/font-card.js +2 -1
  224. package/build-module/font-library-modal/font-card.js.map +1 -1
  225. package/build-module/font-library-modal/font-collection.js +5 -4
  226. package/build-module/font-library-modal/font-collection.js.map +2 -2
  227. package/build-module/font-library-modal/font-demo.js +2 -1
  228. package/build-module/font-library-modal/font-demo.js.map +1 -1
  229. package/build-module/font-library-modal/google-fonts-confirm-dialog.js +2 -1
  230. package/build-module/font-library-modal/google-fonts-confirm-dialog.js.map +2 -2
  231. package/build-module/font-library-modal/index.js +6 -5
  232. package/build-module/font-library-modal/index.js.map +1 -1
  233. package/build-module/font-library-modal/installed-fonts.js +2 -1
  234. package/build-module/font-library-modal/installed-fonts.js.map +1 -1
  235. package/build-module/font-library-modal/lib/inflate.js +11 -3
  236. package/build-module/font-library-modal/lib/inflate.js.map +1 -1
  237. package/build-module/font-library-modal/lib/lib-font.browser.d.js +3 -2
  238. package/build-module/font-library-modal/lib/lib-font.browser.d.js.map +1 -1
  239. package/build-module/font-library-modal/lib/lib-font.browser.js +344 -343
  240. package/build-module/font-library-modal/lib/lib-font.browser.js.map +1 -1
  241. package/build-module/font-library-modal/lib/unbrotli.js +11 -3
  242. package/build-module/font-library-modal/lib/unbrotli.js.map +1 -1
  243. package/build-module/font-library-modal/library-font-details.js +2 -1
  244. package/build-module/font-library-modal/library-font-details.js.map +1 -1
  245. package/build-module/font-library-modal/library-font-variant.js +2 -1
  246. package/build-module/font-library-modal/library-font-variant.js.map +1 -1
  247. package/build-module/font-library-modal/resolvers.js +3 -2
  248. package/build-module/font-library-modal/resolvers.js.map +2 -2
  249. package/build-module/font-library-modal/upload-fonts.js +2 -1
  250. package/build-module/font-library-modal/upload-fonts.js.map +2 -2
  251. package/build-module/font-library-modal/utils/constants.js +4 -3
  252. package/build-module/font-library-modal/utils/constants.js.map +1 -1
  253. package/build-module/font-library-modal/utils/filter-fonts.js +1 -0
  254. package/build-module/font-library-modal/utils/filter-fonts.js.map +1 -1
  255. package/build-module/font-library-modal/utils/fonts-outline.js +1 -0
  256. package/build-module/font-library-modal/utils/fonts-outline.js.map +1 -1
  257. package/build-module/font-library-modal/utils/index.js +3 -2
  258. package/build-module/font-library-modal/utils/index.js.map +2 -2
  259. package/build-module/font-library-modal/utils/make-families-from-faces.js +2 -1
  260. package/build-module/font-library-modal/utils/make-families-from-faces.js.map +1 -1
  261. package/build-module/font-library-modal/utils/preview-styles.js +1 -0
  262. package/build-module/font-library-modal/utils/preview-styles.js.map +1 -1
  263. package/build-module/font-library-modal/utils/set-immutably.js +1 -0
  264. package/build-module/font-library-modal/utils/set-immutably.js.map +1 -1
  265. package/build-module/font-library-modal/utils/sort-font-faces.js +1 -0
  266. package/build-module/font-library-modal/utils/sort-font-faces.js.map +1 -1
  267. package/build-module/font-library-modal/utils/toggleFont.js +1 -0
  268. package/build-module/font-library-modal/utils/toggleFont.js.map +1 -1
  269. package/build-module/font-sizes/confirm-delete-font-size-dialog.js +2 -1
  270. package/build-module/font-sizes/confirm-delete-font-size-dialog.js.map +1 -1
  271. package/build-module/font-sizes/confirm-reset-font-sizes-dialog.js +2 -1
  272. package/build-module/font-sizes/confirm-reset-font-sizes-dialog.js.map +1 -1
  273. package/build-module/font-sizes/font-size-preview.js +2 -1
  274. package/build-module/font-sizes/font-size-preview.js.map +1 -1
  275. package/build-module/font-sizes/font-size.js +3 -2
  276. package/build-module/font-sizes/font-size.js.map +1 -1
  277. package/build-module/font-sizes/font-sizes-count.js +2 -1
  278. package/build-module/font-sizes/font-sizes-count.js.map +1 -1
  279. package/build-module/font-sizes/font-sizes.js +3 -2
  280. package/build-module/font-sizes/font-sizes.js.map +1 -1
  281. package/build-module/font-sizes/rename-font-size-dialog.js +2 -1
  282. package/build-module/font-sizes/rename-font-size-dialog.js.map +1 -1
  283. package/build-module/global-styles-ui.js +42 -22
  284. package/build-module/global-styles-ui.js.map +2 -2
  285. package/build-module/gradients-palette-panel.js +4 -3
  286. package/build-module/gradients-palette-panel.js.map +1 -1
  287. package/build-module/highlighted-colors.js +2 -1
  288. package/build-module/highlighted-colors.js.map +1 -1
  289. package/build-module/hooks.js +3 -2
  290. package/build-module/hooks.js.map +1 -1
  291. package/build-module/icon-with-current-color.js +2 -1
  292. package/build-module/icon-with-current-color.js.map +1 -1
  293. package/build-module/index.js +1 -0
  294. package/build-module/index.js.map +1 -1
  295. package/build-module/lock-unlock.js +2 -1
  296. package/build-module/lock-unlock.js.map +1 -1
  297. package/build-module/navigation-button.js +2 -1
  298. package/build-module/navigation-button.js.map +1 -1
  299. package/build-module/pagination/index.js +2 -1
  300. package/build-module/pagination/index.js.map +1 -1
  301. package/build-module/palette.js +3 -2
  302. package/build-module/palette.js.map +1 -1
  303. package/build-module/preset-colors.js +2 -1
  304. package/build-module/preset-colors.js.map +1 -1
  305. package/build-module/preview-colors.js +4 -3
  306. package/build-module/preview-colors.js.map +1 -1
  307. package/build-module/preview-hooks.js +1 -0
  308. package/build-module/preview-hooks.js.map +1 -1
  309. package/build-module/preview-styles.js +5 -4
  310. package/build-module/preview-styles.js.map +1 -1
  311. package/build-module/preview-typography.js +3 -2
  312. package/build-module/preview-typography.js.map +1 -1
  313. package/build-module/preview-wrapper.js +5 -4
  314. package/build-module/preview-wrapper.js.map +1 -1
  315. package/build-module/provider.js +2 -1
  316. package/build-module/provider.js.map +1 -1
  317. package/build-module/root-menu.js +3 -2
  318. package/build-module/root-menu.js.map +1 -1
  319. package/build-module/screen-background.js +3 -2
  320. package/build-module/screen-background.js.map +1 -1
  321. package/build-module/screen-block-list.js +4 -3
  322. package/build-module/screen-block-list.js.map +2 -2
  323. package/build-module/screen-block.js +4 -3
  324. package/build-module/screen-block.js.map +1 -1
  325. package/build-module/screen-color-palette.js +3 -2
  326. package/build-module/screen-color-palette.js.map +1 -1
  327. package/build-module/screen-colors.js +3 -2
  328. package/build-module/screen-colors.js.map +1 -1
  329. package/build-module/screen-css.js +32 -25
  330. package/build-module/screen-css.js.map +2 -2
  331. package/build-module/screen-header.js +2 -1
  332. package/build-module/screen-header.js.map +1 -1
  333. package/build-module/screen-layout.js +3 -2
  334. package/build-module/screen-layout.js.map +1 -1
  335. package/build-module/screen-revisions/index.js +3 -2
  336. package/build-module/screen-revisions/index.js.map +1 -1
  337. package/build-module/screen-revisions/revisions-buttons.js +3 -2
  338. package/build-module/screen-revisions/revisions-buttons.js.map +1 -1
  339. package/build-module/screen-revisions/use-global-styles-revisions.js +4 -3
  340. package/build-module/screen-revisions/use-global-styles-revisions.js.map +1 -1
  341. package/build-module/screen-root.js +5 -39
  342. package/build-module/screen-root.js.map +2 -2
  343. package/build-module/screen-shadows.js +2 -1
  344. package/build-module/screen-shadows.js.map +1 -1
  345. package/build-module/screen-style-variations.js +2 -1
  346. package/build-module/screen-style-variations.js.map +1 -1
  347. package/build-module/screen-typography-element.js +3 -2
  348. package/build-module/screen-typography-element.js.map +1 -1
  349. package/build-module/screen-typography.js +2 -1
  350. package/build-module/screen-typography.js.map +1 -1
  351. package/build-module/shadow-utils.js +2 -1
  352. package/build-module/shadow-utils.js.map +1 -1
  353. package/build-module/shadows-edit-panel.js +5 -4
  354. package/build-module/shadows-edit-panel.js.map +1 -1
  355. package/build-module/shadows-panel.js +4 -3
  356. package/build-module/shadows-panel.js.map +1 -1
  357. package/build-module/size-control/index.js +3 -2
  358. package/build-module/size-control/index.js.map +1 -1
  359. package/build-module/style-variations-container.js +2 -1
  360. package/build-module/style-variations-container.js.map +1 -1
  361. package/build-module/style-variations-content.js +2 -1
  362. package/build-module/style-variations-content.js.map +1 -1
  363. package/build-module/style-variations.js +2 -1
  364. package/build-module/style-variations.js.map +1 -1
  365. package/build-module/subtitle.js +2 -1
  366. package/build-module/subtitle.js.map +1 -1
  367. package/build-module/typography-elements.js +2 -1
  368. package/build-module/typography-elements.js.map +1 -1
  369. package/build-module/typography-example.js +2 -1
  370. package/build-module/typography-example.js.map +1 -1
  371. package/build-module/typography-panel.js +3 -2
  372. package/build-module/typography-panel.js.map +1 -1
  373. package/build-module/typography-preview.js +2 -1
  374. package/build-module/typography-preview.js.map +1 -1
  375. package/build-module/typography-variations.js +2 -1
  376. package/build-module/typography-variations.js.map +1 -1
  377. package/build-module/utils.js +2 -1
  378. package/build-module/utils.js.map +1 -1
  379. package/build-module/variations/variation.js +2 -1
  380. package/build-module/variations/variation.js.map +1 -1
  381. package/build-module/variations/variations-color.js +3 -2
  382. package/build-module/variations/variations-color.js.map +1 -1
  383. package/build-module/variations/variations-panel.js +2 -1
  384. package/build-module/variations/variations-panel.js.map +1 -1
  385. package/build-module/variations/variations-typography.js +3 -2
  386. package/build-module/variations/variations-typography.js.map +1 -1
  387. package/build-module/with-global-styles-provider.js +2 -1
  388. package/build-module/with-global-styles-provider.js.map +1 -1
  389. package/build-types/block-preview-panel.d.ts.map +1 -1
  390. package/build-types/font-library-modal/font-collection.d.ts.map +1 -1
  391. package/build-types/font-library-modal/google-fonts-confirm-dialog.d.ts.map +1 -1
  392. package/build-types/font-library-modal/resolvers.d.ts.map +1 -1
  393. package/build-types/font-library-modal/upload-fonts.d.ts.map +1 -1
  394. package/build-types/font-library-modal/utils/index.d.ts.map +1 -1
  395. package/build-types/global-styles-ui.d.ts.map +1 -1
  396. package/build-types/preview-colors.d.ts.map +1 -1
  397. package/build-types/preview-typography.d.ts.map +1 -1
  398. package/build-types/screen-block-list.d.ts.map +1 -1
  399. package/build-types/screen-css.d.ts.map +1 -1
  400. package/build-types/screen-root.d.ts.map +1 -1
  401. package/build-types/utils.d.ts.map +1 -1
  402. package/build-types/with-global-styles-provider.d.ts.map +1 -1
  403. package/package.json +17 -17
  404. package/src/font-library-modal/font-collection.tsx +0 -1
  405. package/src/font-library-modal/google-fonts-confirm-dialog.tsx +0 -1
  406. package/src/font-library-modal/resolvers.tsx +0 -3
  407. package/src/font-library-modal/upload-fonts.tsx +0 -1
  408. package/src/font-library-modal/utils/index.ts +0 -2
  409. package/src/global-styles-ui.tsx +63 -42
  410. package/src/screen-block-list.tsx +0 -1
  411. package/src/screen-css.tsx +19 -13
  412. package/src/screen-root.tsx +4 -53
  413. package/tsconfig.tsbuildinfo +1 -1
@@ -1,10 +1,11 @@
1
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
1
+ // packages/global-styles-ui/src/font-library-modal/library-font-details.tsx
2
2
  import {
3
3
  __experimentalVStack as VStack,
4
4
  __experimentalSpacer as Spacer
5
5
  } from "@wordpress/components";
6
6
  import LibraryFontVariant from "./library-font-variant";
7
7
  import { sortFontFaces } from "./utils/sort-font-faces";
8
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
9
  function LibraryFontDetails({ font }) {
9
10
  const fontFaces = font.fontFace && font.fontFace.length ? sortFontFaces(font.fontFace) : [
10
11
  {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/font-library-modal/library-font-details.tsx"],
4
4
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalVStack as VStack,\n\t__experimentalSpacer as Spacer,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport LibraryFontVariant from './library-font-variant';\nimport { sortFontFaces } from './utils/sort-font-faces';\nimport type { FontFamily } from './types';\n\nfunction LibraryFontDetails( { font }: { font: FontFamily } ) {\n\tconst fontFaces =\n\t\tfont.fontFace && font.fontFace.length\n\t\t\t? sortFontFaces( font.fontFace )\n\t\t\t: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfontFamily: font.fontFamily,\n\t\t\t\t\t\tfontStyle: 'normal',\n\t\t\t\t\t\tfontWeight: '400',\n\t\t\t\t\t},\n\t\t\t ];\n\n\treturn (\n\t\t<>\n\t\t\t<Spacer margin={ 4 } />\n\t\t\t<VStack spacing={ 0 }>\n\t\t\t\t<Spacer margin={ 8 } />\n\t\t\t\t{ fontFaces.map( ( face, i ) => (\n\t\t\t\t\t<LibraryFontVariant\n\t\t\t\t\t\tfont={ font }\n\t\t\t\t\t\tface={ face }\n\t\t\t\t\t\tkey={ `face${ i }` }\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t</VStack>\n\t\t\t<Spacer margin={ 8 } />\n\t\t</>\n\t);\n}\n\nexport default LibraryFontDetails;\n"],
5
- "mappings": "AA4BE,mBACC,KACA,YAFD;AAzBF;AAAA,EACC,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,OAClB;AAKP,OAAO,wBAAwB;AAC/B,SAAS,qBAAqB;AAG9B,SAAS,mBAAoB,EAAE,KAAK,GAA0B;AAC7D,QAAM,YACL,KAAK,YAAY,KAAK,SAAS,SAC5B,cAAe,KAAK,QAAS,IAC7B;AAAA,IACA;AAAA,MACC,YAAY,KAAK;AAAA,MACjB,WAAW;AAAA,MACX,YAAY;AAAA,IACb;AAAA,EACA;AAEJ,SACC,iCACC;AAAA,wBAAC,UAAO,QAAS,GAAI;AAAA,IACrB,qBAAC,UAAO,SAAU,GACjB;AAAA,0BAAC,UAAO,QAAS,GAAI;AAAA,MACnB,UAAU,IAAK,CAAE,MAAM,MACxB;AAAA,QAAC;AAAA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,QACM,OAAQ,CAAE;AAAA,MACjB,CACC;AAAA,OACH;AAAA,IACA,oBAAC,UAAO,QAAS,GAAI;AAAA,KACtB;AAEF;AAEA,IAAO,+BAAQ;",
5
+ "mappings": ";AAGA;AAAA,EACC,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,OAClB;AAKP,OAAO,wBAAwB;AAC/B,SAAS,qBAAqB;AAgB5B,mBACC,KACA,YAFD;AAbF,SAAS,mBAAoB,EAAE,KAAK,GAA0B;AAC7D,QAAM,YACL,KAAK,YAAY,KAAK,SAAS,SAC5B,cAAe,KAAK,QAAS,IAC7B;AAAA,IACA;AAAA,MACC,YAAY,KAAK;AAAA,MACjB,WAAW;AAAA,MACX,YAAY;AAAA,IACb;AAAA,EACA;AAEJ,SACC,iCACC;AAAA,wBAAC,UAAO,QAAS,GAAI;AAAA,IACrB,qBAAC,UAAO,SAAU,GACjB;AAAA,0BAAC,UAAO,QAAS,GAAI;AAAA,MACnB,UAAU,IAAK,CAAE,MAAM,MACxB;AAAA,QAAC;AAAA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,QACM,OAAQ,CAAE;AAAA,MACjB,CACC;AAAA,OACH;AAAA,IACA,oBAAC,UAAO,QAAS,GAAI;AAAA,KACtB;AAEF;AAEA,IAAO,+BAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,9 +1,10 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
1
+ // packages/global-styles-ui/src/font-library-modal/library-font-variant.tsx
2
2
  import { useContext, useId } from "@wordpress/element";
3
3
  import { CheckboxControl, Flex } from "@wordpress/components";
4
4
  import { getFontFaceVariantName } from "./utils";
5
5
  import { FontLibraryContext } from "./context";
6
6
  import FontDemo from "./font-demo";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
7
8
  function LibraryFontVariant({
8
9
  face,
9
10
  font
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/font-library-modal/library-font-variant.tsx"],
4
4
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useContext, useId } from '@wordpress/element';\nimport { CheckboxControl, Flex } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { getFontFaceVariantName } from './utils';\nimport { FontLibraryContext } from './context';\nimport FontDemo from './font-demo';\nimport type { FontFace, FontFamily } from './types';\n\nfunction LibraryFontVariant( {\n\tface,\n\tfont,\n}: {\n\tface: FontFace;\n\tfont: FontFamily;\n} ) {\n\tconst { isFontActivated, toggleActivateFont } =\n\t\tuseContext( FontLibraryContext );\n\n\tconst isInstalled =\n\t\t( font?.fontFace?.length ?? 0 ) > 0\n\t\t\t? isFontActivated(\n\t\t\t\t\tfont.slug,\n\t\t\t\t\tface.fontStyle,\n\t\t\t\t\tface.fontWeight,\n\t\t\t\t\tfont.source\n\t\t\t )\n\t\t\t: isFontActivated( font.slug, undefined, undefined, font.source );\n\n\tconst handleToggleActivation = () => {\n\t\tif ( ( font?.fontFace?.length ?? 0 ) > 0 ) {\n\t\t\ttoggleActivateFont( font, face );\n\t\t\treturn;\n\t\t}\n\t\ttoggleActivateFont( font );\n\t};\n\n\tconst displayName = font.name + ' ' + getFontFaceVariantName( face );\n\tconst checkboxId = useId();\n\n\treturn (\n\t\t<div className=\"font-library-modal__font-card\">\n\t\t\t<Flex justify=\"flex-start\" align=\"center\" gap=\"1rem\">\n\t\t\t\t<CheckboxControl\n\t\t\t\t\tchecked={ isInstalled }\n\t\t\t\t\tonChange={ handleToggleActivation }\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tid={ checkboxId }\n\t\t\t\t/>\n\t\t\t\t<label htmlFor={ checkboxId }>\n\t\t\t\t\t<FontDemo\n\t\t\t\t\t\tfont={ face }\n\t\t\t\t\t\ttext={ displayName }\n\t\t\t\t\t\tonClick={ handleToggleActivation }\n\t\t\t\t\t/>\n\t\t\t\t</label>\n\t\t\t</Flex>\n\t\t</div>\n\t);\n}\n\nexport default LibraryFontVariant;\n"],
5
- "mappings": "AA+CG,SACC,KADD;AA5CH,SAAS,YAAY,aAAa;AAClC,SAAS,iBAAiB,YAAY;AAKtC,SAAS,8BAA8B;AACvC,SAAS,0BAA0B;AACnC,OAAO,cAAc;AAGrB,SAAS,mBAAoB;AAAA,EAC5B;AAAA,EACA;AACD,GAGI;AACH,QAAM,EAAE,iBAAiB,mBAAmB,IAC3C,WAAY,kBAAmB;AAEhC,QAAM,eACH,MAAM,UAAU,UAAU,KAAM,IAC/B;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACL,IACA,gBAAiB,KAAK,MAAM,QAAW,QAAW,KAAK,MAAO;AAElE,QAAM,yBAAyB,MAAM;AACpC,SAAO,MAAM,UAAU,UAAU,KAAM,GAAI;AAC1C,yBAAoB,MAAM,IAAK;AAC/B;AAAA,IACD;AACA,uBAAoB,IAAK;AAAA,EAC1B;AAEA,QAAM,cAAc,KAAK,OAAO,MAAM,uBAAwB,IAAK;AACnE,QAAM,aAAa,MAAM;AAEzB,SACC,oBAAC,SAAI,WAAU,iCACd,+BAAC,QAAK,SAAQ,cAAa,OAAM,UAAS,KAAI,QAC7C;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,SAAU;AAAA,QACV,UAAW;AAAA,QACX,yBAAuB;AAAA,QACvB,IAAK;AAAA;AAAA,IACN;AAAA,IACA,oBAAC,WAAM,SAAU,YAChB;AAAA,MAAC;AAAA;AAAA,QACA,MAAO;AAAA,QACP,MAAO;AAAA,QACP,SAAU;AAAA;AAAA,IACX,GACD;AAAA,KACD,GACD;AAEF;AAEA,IAAO,+BAAQ;",
5
+ "mappings": ";AAGA,SAAS,YAAY,aAAa;AAClC,SAAS,iBAAiB,YAAY;AAKtC,SAAS,8BAA8B;AACvC,SAAS,0BAA0B;AACnC,OAAO,cAAc;AAoClB,SACC,KADD;AAjCH,SAAS,mBAAoB;AAAA,EAC5B;AAAA,EACA;AACD,GAGI;AACH,QAAM,EAAE,iBAAiB,mBAAmB,IAC3C,WAAY,kBAAmB;AAEhC,QAAM,eACH,MAAM,UAAU,UAAU,KAAM,IAC/B;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACL,IACA,gBAAiB,KAAK,MAAM,QAAW,QAAW,KAAK,MAAO;AAElE,QAAM,yBAAyB,MAAM;AACpC,SAAO,MAAM,UAAU,UAAU,KAAM,GAAI;AAC1C,yBAAoB,MAAM,IAAK;AAC/B;AAAA,IACD;AACA,uBAAoB,IAAK;AAAA,EAC1B;AAEA,QAAM,cAAc,KAAK,OAAO,MAAM,uBAAwB,IAAK;AACnE,QAAM,aAAa,MAAM;AAEzB,SACC,oBAAC,SAAI,WAAU,iCACd,+BAAC,QAAK,SAAQ,cAAa,OAAM,UAAS,KAAI,QAC7C;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,SAAU;AAAA,QACV,UAAW;AAAA,QACX,yBAAuB;AAAA,QACvB,IAAK;AAAA;AAAA,IACN;AAAA,IACA,oBAAC,WAAM,SAAU,YAChB;AAAA,MAAC;AAAA;AAAA,QACA,MAAO;AAAA,QACP,MAAO;AAAA,QACP,SAAU;AAAA;AAAA,IACX,GACD;AAAA,KACD,GACD;AAEF;AAEA,IAAO,+BAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,7 @@
1
+ // packages/global-styles-ui/src/font-library-modal/resolvers.tsx
1
2
  import apiFetch from "@wordpress/api-fetch";
2
- const FONT_FAMILIES_URL = "/wp/v2/font-families";
3
- const FONT_COLLECTIONS_URL = "/wp/v2/font-collections";
3
+ var FONT_FAMILIES_URL = "/wp/v2/font-families";
4
+ var FONT_COLLECTIONS_URL = "/wp/v2/font-collections";
4
5
  async function fetchInstallFontFamily(data) {
5
6
  const config = {
6
7
  path: FONT_FAMILIES_URL,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/font-library-modal/resolvers.tsx"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\n// The font library modal is pre-existent in Gutenberg\n// It needs to be refactored to move all the API calls to core-data.\n// eslint-disable-next-line no-restricted-imports\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Internal dependencies\n */\nimport type {\n\tCollectionFontFace,\n\tCollectionFontFamily,\n\tFontCollection,\n\tFontFace,\n} from './types';\n\nconst FONT_FAMILIES_URL = '/wp/v2/font-families';\nconst FONT_COLLECTIONS_URL = '/wp/v2/font-collections';\n\nexport async function fetchInstallFontFamily( data: FormData ) {\n\tconst config = {\n\t\tpath: FONT_FAMILIES_URL,\n\t\tmethod: 'POST',\n\t\tbody: data,\n\t};\n\tconst response: CollectionFontFamily = await apiFetch( config );\n\treturn {\n\t\tid: response.id as string,\n\t\t...response.font_family_settings,\n\t\tfontFace: [],\n\t};\n}\n\nexport async function fetchInstallFontFace(\n\tfontFamilyId: string,\n\tdata: FormData\n): Promise< FontFace > {\n\tconst config = {\n\t\tpath: `${ FONT_FAMILIES_URL }/${ fontFamilyId }/font-faces`,\n\t\tmethod: 'POST',\n\t\tbody: data,\n\t};\n\tconst response = ( await apiFetch( config ) ) as CollectionFontFace;\n\treturn {\n\t\tid: response.id,\n\t\t...response.font_face_settings,\n\t};\n}\n\nexport async function fetchGetFontFamilyBySlug( slug: string ) {\n\tconst config = {\n\t\tpath: `${ FONT_FAMILIES_URL }?slug=${ slug }&_embed=true`,\n\t\tmethod: 'GET',\n\t};\n\tconst response = ( await apiFetch( config ) ) as\n\t\t| CollectionFontFamily[]\n\t\t| undefined;\n\tif ( ! response || response.length === 0 ) {\n\t\treturn null;\n\t}\n\tconst fontFamilyPost = response[ 0 ];\n\treturn {\n\t\tid: fontFamilyPost.id,\n\t\t...fontFamilyPost.font_family_settings,\n\t\tfontFace:\n\t\t\t( fontFamilyPost?._embedded?.font_faces ?? [] ).map(\n\t\t\t\t( face ) => face.font_face_settings\n\t\t\t) || [],\n\t};\n}\n\nexport async function fetchUninstallFontFamily(\n\tfontFamilyId: string\n): Promise< {\n\tdeleted: boolean;\n} > {\n\tconst config = {\n\t\tpath: `${ FONT_FAMILIES_URL }/${ fontFamilyId }?force=true`,\n\t\tmethod: 'DELETE',\n\t};\n\treturn await apiFetch( config );\n}\n\nexport async function fetchFontCollections() {\n\tconst config = {\n\t\tpath: `${ FONT_COLLECTIONS_URL }?_fields=slug,name,description`,\n\t\tmethod: 'GET',\n\t};\n\treturn ( await apiFetch( config ) ) as FontCollection[];\n}\n\nexport async function fetchFontCollection( id: string ) {\n\tconst config = {\n\t\tpath: `${ FONT_COLLECTIONS_URL }/${ id }`,\n\t\tmethod: 'GET',\n\t};\n\treturn ( await apiFetch( config ) ) as FontCollection;\n}\n"],
5
- "mappings": "AAMA,OAAO,cAAc;AAYrB,MAAM,oBAAoB;AAC1B,MAAM,uBAAuB;AAE7B,eAAsB,uBAAwB,MAAiB;AAC9D,QAAM,SAAS;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACP;AACA,QAAM,WAAiC,MAAM,SAAU,MAAO;AAC9D,SAAO;AAAA,IACN,IAAI,SAAS;AAAA,IACb,GAAG,SAAS;AAAA,IACZ,UAAU,CAAC;AAAA,EACZ;AACD;AAEA,eAAsB,qBACrB,cACA,MACsB;AACtB,QAAM,SAAS;AAAA,IACd,MAAM,GAAI,iBAAkB,IAAK,YAAa;AAAA,IAC9C,QAAQ;AAAA,IACR,MAAM;AAAA,EACP;AACA,QAAM,WAAa,MAAM,SAAU,MAAO;AAC1C,SAAO;AAAA,IACN,IAAI,SAAS;AAAA,IACb,GAAG,SAAS;AAAA,EACb;AACD;AAEA,eAAsB,yBAA0B,MAAe;AAC9D,QAAM,SAAS;AAAA,IACd,MAAM,GAAI,iBAAkB,SAAU,IAAK;AAAA,IAC3C,QAAQ;AAAA,EACT;AACA,QAAM,WAAa,MAAM,SAAU,MAAO;AAG1C,MAAK,CAAE,YAAY,SAAS,WAAW,GAAI;AAC1C,WAAO;AAAA,EACR;AACA,QAAM,iBAAiB,SAAU,CAAE;AACnC,SAAO;AAAA,IACN,IAAI,eAAe;AAAA,IACnB,GAAG,eAAe;AAAA,IAClB,WACG,gBAAgB,WAAW,cAAc,CAAC,GAAI;AAAA,MAC/C,CAAE,SAAU,KAAK;AAAA,IAClB,KAAK,CAAC;AAAA,EACR;AACD;AAEA,eAAsB,yBACrB,cAGG;AACH,QAAM,SAAS;AAAA,IACd,MAAM,GAAI,iBAAkB,IAAK,YAAa;AAAA,IAC9C,QAAQ;AAAA,EACT;AACA,SAAO,MAAM,SAAU,MAAO;AAC/B;AAEA,eAAsB,uBAAuB;AAC5C,QAAM,SAAS;AAAA,IACd,MAAM,GAAI,oBAAqB;AAAA,IAC/B,QAAQ;AAAA,EACT;AACA,SAAS,MAAM,SAAU,MAAO;AACjC;AAEA,eAAsB,oBAAqB,IAAa;AACvD,QAAM,SAAS;AAAA,IACd,MAAM,GAAI,oBAAqB,IAAK,EAAG;AAAA,IACvC,QAAQ;AAAA,EACT;AACA,SAAS,MAAM,SAAU,MAAO;AACjC;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Internal dependencies\n */\nimport type {\n\tCollectionFontFace,\n\tCollectionFontFamily,\n\tFontCollection,\n\tFontFace,\n} from './types';\n\nconst FONT_FAMILIES_URL = '/wp/v2/font-families';\nconst FONT_COLLECTIONS_URL = '/wp/v2/font-collections';\n\nexport async function fetchInstallFontFamily( data: FormData ) {\n\tconst config = {\n\t\tpath: FONT_FAMILIES_URL,\n\t\tmethod: 'POST',\n\t\tbody: data,\n\t};\n\tconst response: CollectionFontFamily = await apiFetch( config );\n\treturn {\n\t\tid: response.id as string,\n\t\t...response.font_family_settings,\n\t\tfontFace: [],\n\t};\n}\n\nexport async function fetchInstallFontFace(\n\tfontFamilyId: string,\n\tdata: FormData\n): Promise< FontFace > {\n\tconst config = {\n\t\tpath: `${ FONT_FAMILIES_URL }/${ fontFamilyId }/font-faces`,\n\t\tmethod: 'POST',\n\t\tbody: data,\n\t};\n\tconst response = ( await apiFetch( config ) ) as CollectionFontFace;\n\treturn {\n\t\tid: response.id,\n\t\t...response.font_face_settings,\n\t};\n}\n\nexport async function fetchGetFontFamilyBySlug( slug: string ) {\n\tconst config = {\n\t\tpath: `${ FONT_FAMILIES_URL }?slug=${ slug }&_embed=true`,\n\t\tmethod: 'GET',\n\t};\n\tconst response = ( await apiFetch( config ) ) as\n\t\t| CollectionFontFamily[]\n\t\t| undefined;\n\tif ( ! response || response.length === 0 ) {\n\t\treturn null;\n\t}\n\tconst fontFamilyPost = response[ 0 ];\n\treturn {\n\t\tid: fontFamilyPost.id,\n\t\t...fontFamilyPost.font_family_settings,\n\t\tfontFace:\n\t\t\t( fontFamilyPost?._embedded?.font_faces ?? [] ).map(\n\t\t\t\t( face ) => face.font_face_settings\n\t\t\t) || [],\n\t};\n}\n\nexport async function fetchUninstallFontFamily(\n\tfontFamilyId: string\n): Promise< {\n\tdeleted: boolean;\n} > {\n\tconst config = {\n\t\tpath: `${ FONT_FAMILIES_URL }/${ fontFamilyId }?force=true`,\n\t\tmethod: 'DELETE',\n\t};\n\treturn await apiFetch( config );\n}\n\nexport async function fetchFontCollections() {\n\tconst config = {\n\t\tpath: `${ FONT_COLLECTIONS_URL }?_fields=slug,name,description`,\n\t\tmethod: 'GET',\n\t};\n\treturn ( await apiFetch( config ) ) as FontCollection[];\n}\n\nexport async function fetchFontCollection( id: string ) {\n\tconst config = {\n\t\tpath: `${ FONT_COLLECTIONS_URL }/${ id }`,\n\t\tmethod: 'GET',\n\t};\n\treturn ( await apiFetch( config ) ) as FontCollection;\n}\n"],
5
+ "mappings": ";AAGA,OAAO,cAAc;AAYrB,IAAM,oBAAoB;AAC1B,IAAM,uBAAuB;AAE7B,eAAsB,uBAAwB,MAAiB;AAC9D,QAAM,SAAS;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACP;AACA,QAAM,WAAiC,MAAM,SAAU,MAAO;AAC9D,SAAO;AAAA,IACN,IAAI,SAAS;AAAA,IACb,GAAG,SAAS;AAAA,IACZ,UAAU,CAAC;AAAA,EACZ;AACD;AAEA,eAAsB,qBACrB,cACA,MACsB;AACtB,QAAM,SAAS;AAAA,IACd,MAAM,GAAI,iBAAkB,IAAK,YAAa;AAAA,IAC9C,QAAQ;AAAA,IACR,MAAM;AAAA,EACP;AACA,QAAM,WAAa,MAAM,SAAU,MAAO;AAC1C,SAAO;AAAA,IACN,IAAI,SAAS;AAAA,IACb,GAAG,SAAS;AAAA,EACb;AACD;AAEA,eAAsB,yBAA0B,MAAe;AAC9D,QAAM,SAAS;AAAA,IACd,MAAM,GAAI,iBAAkB,SAAU,IAAK;AAAA,IAC3C,QAAQ;AAAA,EACT;AACA,QAAM,WAAa,MAAM,SAAU,MAAO;AAG1C,MAAK,CAAE,YAAY,SAAS,WAAW,GAAI;AAC1C,WAAO;AAAA,EACR;AACA,QAAM,iBAAiB,SAAU,CAAE;AACnC,SAAO;AAAA,IACN,IAAI,eAAe;AAAA,IACnB,GAAG,eAAe;AAAA,IAClB,WACG,gBAAgB,WAAW,cAAc,CAAC,GAAI;AAAA,MAC/C,CAAE,SAAU,KAAK;AAAA,IAClB,KAAK,CAAC;AAAA,EACR;AACD;AAEA,eAAsB,yBACrB,cAGG;AACH,QAAM,SAAS;AAAA,IACd,MAAM,GAAI,iBAAkB,IAAK,YAAa;AAAA,IAC9C,QAAQ;AAAA,EACT;AACA,SAAO,MAAM,SAAU,MAAO;AAC/B;AAEA,eAAsB,uBAAuB;AAC5C,QAAM,SAAS;AAAA,IACd,MAAM,GAAI,oBAAqB;AAAA,IAC/B,QAAQ;AAAA,EACT;AACA,SAAS,MAAM,SAAU,MAAO;AACjC;AAEA,eAAsB,oBAAqB,IAAa;AACvD,QAAM,SAAS;AAAA,IACd,MAAM,GAAI,oBAAqB,IAAK,EAAG;AAAA,IACvC,QAAQ;AAAA,EACT;AACA,SAAS,MAAM,SAAU,MAAO;AACjC;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,4 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
1
+ // packages/global-styles-ui/src/font-library-modal/upload-fonts.tsx
2
2
  import { __ } from "@wordpress/i18n";
3
3
  import {
4
4
  __experimentalSpacer as Spacer,
@@ -17,6 +17,7 @@ import { FontLibraryContext } from "./context";
17
17
  import { Font } from "./lib/lib-font.browser";
18
18
  import makeFamiliesFromFaces from "./utils/make-families-from-faces";
19
19
  import { loadFontFaceInBrowser } from "./utils";
20
+ import { jsx, jsxs } from "react/jsx-runtime";
20
21
  function UploadFonts() {
21
22
  const { installFonts } = useContext(FontLibraryContext);
22
23
  const [isUploading, setIsUploading] = useState(false);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/font-library-modal/upload-fonts.tsx"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\t__experimentalSpacer as Spacer,\n\t__experimentalText as Text,\n\t__experimentalVStack as VStack,\n\tButton,\n\tDropZone,\n\tNotice,\n\tFormFileUpload,\n\tFlexItem,\n\tProgressBar,\n} from '@wordpress/components';\nimport { useContext, useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { ALLOWED_FILE_EXTENSIONS } from './utils/constants';\nimport { FontLibraryContext } from './context';\nimport { Font } from './lib/lib-font.browser';\nimport makeFamiliesFromFaces from './utils/make-families-from-faces';\nimport { loadFontFaceInBrowser } from './utils';\nimport type { FontFace } from './types';\n\nfunction UploadFonts() {\n\tconst { installFonts } = useContext( FontLibraryContext );\n\tconst [ isUploading, setIsUploading ] = useState( false );\n\tconst [ notice, setNotice ] = useState< {\n\t\ttype: 'success' | 'error';\n\t\tmessage: string;\n\t\terrors?: string[];\n\t} | null >( null );\n\n\tconst handleDropZone = ( files: File[] ) => {\n\t\thandleFilesUpload( files );\n\t};\n\tconst onFilesUpload = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\thandleFilesUpload( event.target.files );\n\t};\n\n\t/**\n\t * Filters the selected files to only allow the ones with the allowed extensions\n\t *\n\t * @param {Array} files The files to be filtered\n\t * @return {void}\n\t */\n\tconst handleFilesUpload = async ( files: FileList | File[] | null ) => {\n\t\tif ( ! files ) {\n\t\t\treturn;\n\t\t}\n\t\tsetNotice( null );\n\t\tsetIsUploading( true );\n\t\tconst uniqueFilenames = new Set();\n\t\tconst selectedFiles = [ ...files ];\n\t\tlet hasInvalidFiles = false;\n\n\t\t// Use map to create a promise for each file check, then filter with Promise.all.\n\t\tconst checkFilesPromises = selectedFiles.map( async ( file ) => {\n\t\t\tconst isFont = await isFontFile( file );\n\t\t\tif ( ! isFont ) {\n\t\t\t\thasInvalidFiles = true;\n\t\t\t\treturn null; // Return null for invalid files.\n\t\t\t}\n\t\t\t// Check for duplicates\n\t\t\tif ( uniqueFilenames.has( file.name ) ) {\n\t\t\t\treturn null; // Return null for duplicates.\n\t\t\t}\n\t\t\t// Check if the file extension is allowed.\n\t\t\tconst fileExtension = (\n\t\t\t\t( ( file.name ?? '' ).split( '.' ) ?? [] ).pop() ?? ''\n\t\t\t).toLowerCase();\n\t\t\tif ( ALLOWED_FILE_EXTENSIONS.includes( fileExtension ) ) {\n\t\t\t\tuniqueFilenames.add( file.name );\n\t\t\t\treturn file; // Return the file if it passes all checks.\n\t\t\t}\n\t\t\treturn null; // Return null for disallowed file extensions.\n\t\t} );\n\n\t\t// Filter out the nulls after all promises have resolved.\n\t\tconst allowedFiles: File[] = (\n\t\t\tawait Promise.all( checkFilesPromises )\n\t\t).filter( ( file ) => null !== file );\n\n\t\tif ( allowedFiles.length > 0 ) {\n\t\t\tloadFiles( allowedFiles );\n\t\t} else {\n\t\t\tconst message = hasInvalidFiles\n\t\t\t\t? __( 'Sorry, you are not allowed to upload this file type.' )\n\t\t\t\t: __( 'No fonts found to install.' );\n\n\t\t\tsetNotice( {\n\t\t\t\ttype: 'error',\n\t\t\t\tmessage,\n\t\t\t} );\n\t\t\tsetIsUploading( false );\n\t\t}\n\t};\n\n\t/**\n\t * Loads the selected files and reads the font metadata\n\t *\n\t * @param {Array} files The files to be loaded\n\t * @return {void}\n\t */\n\tconst loadFiles = async ( files: File[] ) => {\n\t\tconst fontFacesLoaded = await Promise.all(\n\t\t\tfiles.map( async ( fontFile: File ) => {\n\t\t\t\tconst fontFaceData = await getFontFaceMetadata( fontFile );\n\t\t\t\tawait loadFontFaceInBrowser(\n\t\t\t\t\tfontFaceData,\n\t\t\t\t\tfontFaceData.file,\n\t\t\t\t\t'all'\n\t\t\t\t);\n\t\t\t\treturn fontFaceData;\n\t\t\t} )\n\t\t);\n\t\thandleInstall( fontFacesLoaded );\n\t};\n\n\t/**\n\t * Checks if a file is a valid Font file.\n\t *\n\t * @param {File} file The file to be checked.\n\t * @return {boolean} Whether the file is a valid font file.\n\t */\n\tasync function isFontFile( file: File ) {\n\t\tconst font = new Font( 'Uploaded Font' );\n\t\ttry {\n\t\t\tconst buffer = await readFileAsArrayBuffer( file );\n\t\t\tawait font.fromDataBuffer( buffer, 'font' );\n\t\t\treturn true;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t} catch ( error ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Create a function to read the file as array buffer\n\tasync function readFileAsArrayBuffer( file: File ) {\n\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\tconst reader = new window.FileReader();\n\t\t\treader.readAsArrayBuffer( file );\n\t\t\treader.onload = () => resolve( reader.result );\n\t\t\treader.onerror = reject;\n\t\t} );\n\t}\n\n\tconst getFontFaceMetadata = async ( fontFile: File ) => {\n\t\tconst buffer = await readFileAsArrayBuffer( fontFile );\n\t\tconst fontObj: Font & {\n\t\t\tonload?: ( val: { detail: { font: any } } ) => void;\n\t\t} = new Font( 'Uploaded Font' );\n\t\tfontObj.fromDataBuffer( buffer, fontFile.name );\n\t\t// Assuming that fromDataBuffer triggers onload event and returning a Promise\n\t\tconst onloadEvent: { detail: { font: any } } = await new Promise(\n\t\t\t( resolve ) => ( fontObj.onload = resolve )\n\t\t);\n\t\tconst font = onloadEvent.detail.font;\n\t\tconst { name } = font.opentype.tables;\n\t\tconst fontName = name.get( 16 ) || name.get( 1 );\n\t\tconst isItalic = name.get( 2 ).toLowerCase().includes( 'italic' );\n\t\tconst fontWeight =\n\t\t\tfont.opentype.tables[ 'OS/2' ].usWeightClass || 'normal';\n\t\tconst isVariable = !! font.opentype.tables.fvar;\n\t\tconst weightAxis =\n\t\t\tisVariable &&\n\t\t\tfont.opentype.tables.fvar.axes.find(\n\t\t\t\t( { tag }: { tag: string } ) => tag === 'wght'\n\t\t\t);\n\t\tconst weightRange = weightAxis\n\t\t\t? `${ weightAxis.minValue } ${ weightAxis.maxValue }`\n\t\t\t: null;\n\t\treturn {\n\t\t\tfile: fontFile,\n\t\t\tfontFamily: fontName,\n\t\t\tfontStyle: isItalic ? 'italic' : 'normal',\n\t\t\tfontWeight: weightRange || fontWeight,\n\t\t};\n\t};\n\n\t/**\n\t * Creates the font family definition and sends it to the server\n\t *\n\t * @param {Array} fontFaces The font faces to be installed\n\t * @return {void}\n\t */\n\tconst handleInstall = async ( fontFaces: FontFace[] ) => {\n\t\tconst fontFamilies = makeFamiliesFromFaces( fontFaces );\n\n\t\ttry {\n\t\t\tawait installFonts( fontFamilies );\n\t\t\tsetNotice( {\n\t\t\t\ttype: 'success',\n\t\t\t\tmessage: __( 'Fonts were installed successfully.' ),\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\tconst typedError = error as Error & {\n\t\t\t\tinstallationErrors?: string[];\n\t\t\t};\n\t\t\tsetNotice( {\n\t\t\t\ttype: 'error',\n\t\t\t\tmessage: typedError.message,\n\t\t\t\terrors: typedError?.installationErrors,\n\t\t\t} );\n\t\t}\n\n\t\tsetIsUploading( false );\n\t};\n\n\treturn (\n\t\t<div className=\"font-library-modal__tabpanel-layout\">\n\t\t\t<DropZone onFilesDrop={ handleDropZone } />\n\t\t\t<VStack className=\"font-library-modal__local-fonts\">\n\t\t\t\t{ notice && (\n\t\t\t\t\t<Notice\n\t\t\t\t\t\tstatus={ notice.type }\n\t\t\t\t\t\t__unstableHTML\n\t\t\t\t\t\tonRemove={ () => setNotice( null ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ notice.message }\n\t\t\t\t\t\t{ notice.errors && (\n\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t{ notice.errors.map( ( error, index ) => (\n\t\t\t\t\t\t\t\t\t<li key={ index }>{ error }</li>\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Notice>\n\t\t\t\t) }\n\t\t\t\t{ isUploading && (\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<div className=\"font-library-modal__upload-area\">\n\t\t\t\t\t\t\t<ProgressBar />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t) }\n\t\t\t\t{ ! isUploading && (\n\t\t\t\t\t<FormFileUpload\n\t\t\t\t\t\taccept={ ALLOWED_FILE_EXTENSIONS.map(\n\t\t\t\t\t\t\t( ext ) => `.${ ext }`\n\t\t\t\t\t\t).join( ',' ) }\n\t\t\t\t\t\tmultiple\n\t\t\t\t\t\tonChange={ onFilesUpload }\n\t\t\t\t\t\trender={ ( { openFileDialog } ) => (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\tclassName=\"font-library-modal__upload-area\"\n\t\t\t\t\t\t\t\tonClick={ openFileDialog }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Upload font' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t<Spacer margin={ 2 } />\n\t\t\t\t<Text className=\"font-library-modal__upload-area__text\">\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Uploaded fonts appear in your library and can be used in your theme. Supported formats: .ttf, .otf, .woff, and .woff2.'\n\t\t\t\t\t) }\n\t\t\t\t</Text>\n\t\t\t</VStack>\n\t\t</div>\n\t);\n}\n\nexport default UploadFonts;\n"],
5
- "mappings": "AAsNG,cAGE,YAHF;AAnNH,SAAS,UAAU;AACnB;AAAA,EACC,wBAAwB;AAAA,EACxB,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,YAAY,gBAAgB;AAKrC,SAAS,+BAA+B;AACxC,SAAS,0BAA0B;AACnC,SAAS,YAAY;AACrB,OAAO,2BAA2B;AAClC,SAAS,6BAA6B;AAGtC,SAAS,cAAc;AACtB,QAAM,EAAE,aAAa,IAAI,WAAY,kBAAmB;AACxD,QAAM,CAAE,aAAa,cAAe,IAAI,SAAU,KAAM;AACxD,QAAM,CAAE,QAAQ,SAAU,IAAI,SAIlB,IAAK;AAEjB,QAAM,iBAAiB,CAAE,UAAmB;AAC3C,sBAAmB,KAAM;AAAA,EAC1B;AACA,QAAM,gBAAgB,CAAE,UAAkD;AACzE,sBAAmB,MAAM,OAAO,KAAM;AAAA,EACvC;AAQA,QAAM,oBAAoB,OAAQ,UAAqC;AACtE,QAAK,CAAE,OAAQ;AACd;AAAA,IACD;AACA,cAAW,IAAK;AAChB,mBAAgB,IAAK;AACrB,UAAM,kBAAkB,oBAAI,IAAI;AAChC,UAAM,gBAAgB,CAAE,GAAG,KAAM;AACjC,QAAI,kBAAkB;AAGtB,UAAM,qBAAqB,cAAc,IAAK,OAAQ,SAAU;AAC/D,YAAM,SAAS,MAAM,WAAY,IAAK;AACtC,UAAK,CAAE,QAAS;AACf,0BAAkB;AAClB,eAAO;AAAA,MACR;AAEA,UAAK,gBAAgB,IAAK,KAAK,IAAK,GAAI;AACvC,eAAO;AAAA,MACR;AAEA,YAAM,mBACD,KAAK,QAAQ,IAAK,MAAO,GAAI,KAAK,CAAC,GAAI,IAAI,KAAK,IACnD,YAAY;AACd,UAAK,wBAAwB,SAAU,aAAc,GAAI;AACxD,wBAAgB,IAAK,KAAK,IAAK;AAC/B,eAAO;AAAA,MACR;AACA,aAAO;AAAA,IACR,CAAE;AAGF,UAAM,gBACL,MAAM,QAAQ,IAAK,kBAAmB,GACrC,OAAQ,CAAE,SAAU,SAAS,IAAK;AAEpC,QAAK,aAAa,SAAS,GAAI;AAC9B,gBAAW,YAAa;AAAA,IACzB,OAAO;AACN,YAAM,UAAU,kBACb,GAAI,sDAAuD,IAC3D,GAAI,4BAA6B;AAEpC,gBAAW;AAAA,QACV,MAAM;AAAA,QACN;AAAA,MACD,CAAE;AACF,qBAAgB,KAAM;AAAA,IACvB;AAAA,EACD;AAQA,QAAM,YAAY,OAAQ,UAAmB;AAC5C,UAAM,kBAAkB,MAAM,QAAQ;AAAA,MACrC,MAAM,IAAK,OAAQ,aAAoB;AACtC,cAAM,eAAe,MAAM,oBAAqB,QAAS;AACzD,cAAM;AAAA,UACL;AAAA,UACA,aAAa;AAAA,UACb;AAAA,QACD;AACA,eAAO;AAAA,MACR,CAAE;AAAA,IACH;AACA,kBAAe,eAAgB;AAAA,EAChC;AAQA,iBAAe,WAAY,MAAa;AACvC,UAAM,OAAO,IAAI,KAAM,eAAgB;AACvC,QAAI;AACH,YAAM,SAAS,MAAM,sBAAuB,IAAK;AACjD,YAAM,KAAK,eAAgB,QAAQ,MAAO;AAC1C,aAAO;AAAA,IAER,SAAU,OAAQ;AACjB,aAAO;AAAA,IACR;AAAA,EACD;AAGA,iBAAe,sBAAuB,MAAa;AAClD,WAAO,IAAI,QAAS,CAAE,SAAS,WAAY;AAC1C,YAAM,SAAS,IAAI,OAAO,WAAW;AACrC,aAAO,kBAAmB,IAAK;AAC/B,aAAO,SAAS,MAAM,QAAS,OAAO,MAAO;AAC7C,aAAO,UAAU;AAAA,IAClB,CAAE;AAAA,EACH;AAEA,QAAM,sBAAsB,OAAQ,aAAoB;AACvD,UAAM,SAAS,MAAM,sBAAuB,QAAS;AACrD,UAAM,UAEF,IAAI,KAAM,eAAgB;AAC9B,YAAQ,eAAgB,QAAQ,SAAS,IAAK;AAE9C,UAAM,cAAyC,MAAM,IAAI;AAAA,MACxD,CAAE,YAAe,QAAQ,SAAS;AAAA,IACnC;AACA,UAAM,OAAO,YAAY,OAAO;AAChC,UAAM,EAAE,KAAK,IAAI,KAAK,SAAS;AAC/B,UAAM,WAAW,KAAK,IAAK,EAAG,KAAK,KAAK,IAAK,CAAE;AAC/C,UAAM,WAAW,KAAK,IAAK,CAAE,EAAE,YAAY,EAAE,SAAU,QAAS;AAChE,UAAM,aACL,KAAK,SAAS,OAAQ,MAAO,EAAE,iBAAiB;AACjD,UAAM,aAAa,CAAC,CAAE,KAAK,SAAS,OAAO;AAC3C,UAAM,aACL,cACA,KAAK,SAAS,OAAO,KAAK,KAAK;AAAA,MAC9B,CAAE,EAAE,IAAI,MAAwB,QAAQ;AAAA,IACzC;AACD,UAAM,cAAc,aACjB,GAAI,WAAW,QAAS,IAAK,WAAW,QAAS,KACjD;AACH,WAAO;AAAA,MACN,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,WAAW,WAAW,WAAW;AAAA,MACjC,YAAY,eAAe;AAAA,IAC5B;AAAA,EACD;AAQA,QAAM,gBAAgB,OAAQ,cAA2B;AACxD,UAAM,eAAe,sBAAuB,SAAU;AAEtD,QAAI;AACH,YAAM,aAAc,YAAa;AACjC,gBAAW;AAAA,QACV,MAAM;AAAA,QACN,SAAS,GAAI,oCAAqC;AAAA,MACnD,CAAE;AAAA,IACH,SAAU,OAAQ;AACjB,YAAM,aAAa;AAGnB,gBAAW;AAAA,QACV,MAAM;AAAA,QACN,SAAS,WAAW;AAAA,QACpB,QAAQ,YAAY;AAAA,MACrB,CAAE;AAAA,IACH;AAEA,mBAAgB,KAAM;AAAA,EACvB;AAEA,SACC,qBAAC,SAAI,WAAU,uCACd;AAAA,wBAAC,YAAS,aAAc,gBAAiB;AAAA,IACzC,qBAAC,UAAO,WAAU,mCACf;AAAA,gBACD;AAAA,QAAC;AAAA;AAAA,UACA,QAAS,OAAO;AAAA,UAChB,gBAAc;AAAA,UACd,UAAW,MAAM,UAAW,IAAK;AAAA,UAE/B;AAAA,mBAAO;AAAA,YACP,OAAO,UACR,oBAAC,QACE,iBAAO,OAAO,IAAK,CAAE,OAAO,UAC7B,oBAAC,QAAmB,mBAAV,KAAiB,CAC1B,GACH;AAAA;AAAA;AAAA,MAEF;AAAA,MAEC,eACD,oBAAC,YACA,8BAAC,SAAI,WAAU,mCACd,8BAAC,eAAY,GACd,GACD;AAAA,MAEC,CAAE,eACH;AAAA,QAAC;AAAA;AAAA,UACA,QAAS,wBAAwB;AAAA,YAChC,CAAE,QAAS,IAAK,GAAI;AAAA,UACrB,EAAE,KAAM,GAAI;AAAA,UACZ,UAAQ;AAAA,UACR,UAAW;AAAA,UACX,QAAS,CAAE,EAAE,eAAe,MAC3B;AAAA,YAAC;AAAA;AAAA,cACA,uBAAqB;AAAA,cACrB,WAAU;AAAA,cACV,SAAU;AAAA,cAER,aAAI,aAAc;AAAA;AAAA,UACrB;AAAA;AAAA,MAEF;AAAA,MAED,oBAAC,UAAO,QAAS,GAAI;AAAA,MACrB,oBAAC,QAAK,WAAU,yCACb;AAAA,QACD;AAAA,MACD,GACD;AAAA,OACD;AAAA,KACD;AAEF;AAEA,IAAO,uBAAQ;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\t__experimentalSpacer as Spacer,\n\t__experimentalText as Text,\n\t__experimentalVStack as VStack,\n\tButton,\n\tDropZone,\n\tNotice,\n\tFormFileUpload,\n\tFlexItem,\n\tProgressBar,\n} from '@wordpress/components';\nimport { useContext, useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { ALLOWED_FILE_EXTENSIONS } from './utils/constants';\nimport { FontLibraryContext } from './context';\nimport { Font } from './lib/lib-font.browser';\nimport makeFamiliesFromFaces from './utils/make-families-from-faces';\nimport { loadFontFaceInBrowser } from './utils';\nimport type { FontFace } from './types';\n\nfunction UploadFonts() {\n\tconst { installFonts } = useContext( FontLibraryContext );\n\tconst [ isUploading, setIsUploading ] = useState( false );\n\tconst [ notice, setNotice ] = useState< {\n\t\ttype: 'success' | 'error';\n\t\tmessage: string;\n\t\terrors?: string[];\n\t} | null >( null );\n\n\tconst handleDropZone = ( files: File[] ) => {\n\t\thandleFilesUpload( files );\n\t};\n\tconst onFilesUpload = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\thandleFilesUpload( event.target.files );\n\t};\n\n\t/**\n\t * Filters the selected files to only allow the ones with the allowed extensions\n\t *\n\t * @param {Array} files The files to be filtered\n\t * @return {void}\n\t */\n\tconst handleFilesUpload = async ( files: FileList | File[] | null ) => {\n\t\tif ( ! files ) {\n\t\t\treturn;\n\t\t}\n\t\tsetNotice( null );\n\t\tsetIsUploading( true );\n\t\tconst uniqueFilenames = new Set();\n\t\tconst selectedFiles = [ ...files ];\n\t\tlet hasInvalidFiles = false;\n\n\t\t// Use map to create a promise for each file check, then filter with Promise.all.\n\t\tconst checkFilesPromises = selectedFiles.map( async ( file ) => {\n\t\t\tconst isFont = await isFontFile( file );\n\t\t\tif ( ! isFont ) {\n\t\t\t\thasInvalidFiles = true;\n\t\t\t\treturn null; // Return null for invalid files.\n\t\t\t}\n\t\t\t// Check for duplicates\n\t\t\tif ( uniqueFilenames.has( file.name ) ) {\n\t\t\t\treturn null; // Return null for duplicates.\n\t\t\t}\n\t\t\t// Check if the file extension is allowed.\n\t\t\tconst fileExtension = (\n\t\t\t\t( ( file.name ?? '' ).split( '.' ) ?? [] ).pop() ?? ''\n\t\t\t).toLowerCase();\n\t\t\tif ( ALLOWED_FILE_EXTENSIONS.includes( fileExtension ) ) {\n\t\t\t\tuniqueFilenames.add( file.name );\n\t\t\t\treturn file; // Return the file if it passes all checks.\n\t\t\t}\n\t\t\treturn null; // Return null for disallowed file extensions.\n\t\t} );\n\n\t\t// Filter out the nulls after all promises have resolved.\n\t\tconst allowedFiles: File[] = (\n\t\t\tawait Promise.all( checkFilesPromises )\n\t\t).filter( ( file ) => null !== file );\n\n\t\tif ( allowedFiles.length > 0 ) {\n\t\t\tloadFiles( allowedFiles );\n\t\t} else {\n\t\t\tconst message = hasInvalidFiles\n\t\t\t\t? __( 'Sorry, you are not allowed to upload this file type.' )\n\t\t\t\t: __( 'No fonts found to install.' );\n\n\t\t\tsetNotice( {\n\t\t\t\ttype: 'error',\n\t\t\t\tmessage,\n\t\t\t} );\n\t\t\tsetIsUploading( false );\n\t\t}\n\t};\n\n\t/**\n\t * Loads the selected files and reads the font metadata\n\t *\n\t * @param {Array} files The files to be loaded\n\t * @return {void}\n\t */\n\tconst loadFiles = async ( files: File[] ) => {\n\t\tconst fontFacesLoaded = await Promise.all(\n\t\t\tfiles.map( async ( fontFile: File ) => {\n\t\t\t\tconst fontFaceData = await getFontFaceMetadata( fontFile );\n\t\t\t\tawait loadFontFaceInBrowser(\n\t\t\t\t\tfontFaceData,\n\t\t\t\t\tfontFaceData.file,\n\t\t\t\t\t'all'\n\t\t\t\t);\n\t\t\t\treturn fontFaceData;\n\t\t\t} )\n\t\t);\n\t\thandleInstall( fontFacesLoaded );\n\t};\n\n\t/**\n\t * Checks if a file is a valid Font file.\n\t *\n\t * @param {File} file The file to be checked.\n\t * @return {boolean} Whether the file is a valid font file.\n\t */\n\tasync function isFontFile( file: File ) {\n\t\tconst font = new Font( 'Uploaded Font' );\n\t\ttry {\n\t\t\tconst buffer = await readFileAsArrayBuffer( file );\n\t\t\tawait font.fromDataBuffer( buffer, 'font' );\n\t\t\treturn true;\n\t\t} catch ( error ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Create a function to read the file as array buffer\n\tasync function readFileAsArrayBuffer( file: File ) {\n\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\tconst reader = new window.FileReader();\n\t\t\treader.readAsArrayBuffer( file );\n\t\t\treader.onload = () => resolve( reader.result );\n\t\t\treader.onerror = reject;\n\t\t} );\n\t}\n\n\tconst getFontFaceMetadata = async ( fontFile: File ) => {\n\t\tconst buffer = await readFileAsArrayBuffer( fontFile );\n\t\tconst fontObj: Font & {\n\t\t\tonload?: ( val: { detail: { font: any } } ) => void;\n\t\t} = new Font( 'Uploaded Font' );\n\t\tfontObj.fromDataBuffer( buffer, fontFile.name );\n\t\t// Assuming that fromDataBuffer triggers onload event and returning a Promise\n\t\tconst onloadEvent: { detail: { font: any } } = await new Promise(\n\t\t\t( resolve ) => ( fontObj.onload = resolve )\n\t\t);\n\t\tconst font = onloadEvent.detail.font;\n\t\tconst { name } = font.opentype.tables;\n\t\tconst fontName = name.get( 16 ) || name.get( 1 );\n\t\tconst isItalic = name.get( 2 ).toLowerCase().includes( 'italic' );\n\t\tconst fontWeight =\n\t\t\tfont.opentype.tables[ 'OS/2' ].usWeightClass || 'normal';\n\t\tconst isVariable = !! font.opentype.tables.fvar;\n\t\tconst weightAxis =\n\t\t\tisVariable &&\n\t\t\tfont.opentype.tables.fvar.axes.find(\n\t\t\t\t( { tag }: { tag: string } ) => tag === 'wght'\n\t\t\t);\n\t\tconst weightRange = weightAxis\n\t\t\t? `${ weightAxis.minValue } ${ weightAxis.maxValue }`\n\t\t\t: null;\n\t\treturn {\n\t\t\tfile: fontFile,\n\t\t\tfontFamily: fontName,\n\t\t\tfontStyle: isItalic ? 'italic' : 'normal',\n\t\t\tfontWeight: weightRange || fontWeight,\n\t\t};\n\t};\n\n\t/**\n\t * Creates the font family definition and sends it to the server\n\t *\n\t * @param {Array} fontFaces The font faces to be installed\n\t * @return {void}\n\t */\n\tconst handleInstall = async ( fontFaces: FontFace[] ) => {\n\t\tconst fontFamilies = makeFamiliesFromFaces( fontFaces );\n\n\t\ttry {\n\t\t\tawait installFonts( fontFamilies );\n\t\t\tsetNotice( {\n\t\t\t\ttype: 'success',\n\t\t\t\tmessage: __( 'Fonts were installed successfully.' ),\n\t\t\t} );\n\t\t} catch ( error ) {\n\t\t\tconst typedError = error as Error & {\n\t\t\t\tinstallationErrors?: string[];\n\t\t\t};\n\t\t\tsetNotice( {\n\t\t\t\ttype: 'error',\n\t\t\t\tmessage: typedError.message,\n\t\t\t\terrors: typedError?.installationErrors,\n\t\t\t} );\n\t\t}\n\n\t\tsetIsUploading( false );\n\t};\n\n\treturn (\n\t\t<div className=\"font-library-modal__tabpanel-layout\">\n\t\t\t<DropZone onFilesDrop={ handleDropZone } />\n\t\t\t<VStack className=\"font-library-modal__local-fonts\">\n\t\t\t\t{ notice && (\n\t\t\t\t\t<Notice\n\t\t\t\t\t\tstatus={ notice.type }\n\t\t\t\t\t\t__unstableHTML\n\t\t\t\t\t\tonRemove={ () => setNotice( null ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ notice.message }\n\t\t\t\t\t\t{ notice.errors && (\n\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t{ notice.errors.map( ( error, index ) => (\n\t\t\t\t\t\t\t\t\t<li key={ index }>{ error }</li>\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Notice>\n\t\t\t\t) }\n\t\t\t\t{ isUploading && (\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<div className=\"font-library-modal__upload-area\">\n\t\t\t\t\t\t\t<ProgressBar />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t) }\n\t\t\t\t{ ! isUploading && (\n\t\t\t\t\t<FormFileUpload\n\t\t\t\t\t\taccept={ ALLOWED_FILE_EXTENSIONS.map(\n\t\t\t\t\t\t\t( ext ) => `.${ ext }`\n\t\t\t\t\t\t).join( ',' ) }\n\t\t\t\t\t\tmultiple\n\t\t\t\t\t\tonChange={ onFilesUpload }\n\t\t\t\t\t\trender={ ( { openFileDialog } ) => (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\tclassName=\"font-library-modal__upload-area\"\n\t\t\t\t\t\t\t\tonClick={ openFileDialog }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Upload font' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t<Spacer margin={ 2 } />\n\t\t\t\t<Text className=\"font-library-modal__upload-area__text\">\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Uploaded fonts appear in your library and can be used in your theme. Supported formats: .ttf, .otf, .woff, and .woff2.'\n\t\t\t\t\t) }\n\t\t\t\t</Text>\n\t\t\t</VStack>\n\t\t</div>\n\t);\n}\n\nexport default UploadFonts;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,7 @@
1
+ // packages/global-styles-ui/src/font-library-modal/utils/constants.ts
1
2
  import { _x } from "@wordpress/i18n";
2
- const ALLOWED_FILE_EXTENSIONS = ["otf", "ttf", "woff", "woff2"];
3
- const FONT_WEIGHTS = {
3
+ var ALLOWED_FILE_EXTENSIONS = ["otf", "ttf", "woff", "woff2"];
4
+ var FONT_WEIGHTS = {
4
5
  100: _x("Thin", "font weight"),
5
6
  200: _x("Extra-light", "font weight"),
6
7
  300: _x("Light", "font weight"),
@@ -11,7 +12,7 @@ const FONT_WEIGHTS = {
11
12
  800: _x("Extra-bold", "font weight"),
12
13
  900: _x("Black", "font weight")
13
14
  };
14
- const FONT_STYLES = {
15
+ var FONT_STYLES = {
15
16
  normal: _x("Normal", "font style"),
16
17
  italic: _x("Italic", "font style")
17
18
  };
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/font-library-modal/utils/constants.ts"],
4
4
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { _x } from '@wordpress/i18n';\n\nexport const ALLOWED_FILE_EXTENSIONS = [ 'otf', 'ttf', 'woff', 'woff2' ];\n\nexport const FONT_WEIGHTS: Record< string, string > = {\n\t100: _x( 'Thin', 'font weight' ),\n\t200: _x( 'Extra-light', 'font weight' ),\n\t300: _x( 'Light', 'font weight' ),\n\t400: _x( 'Normal', 'font weight' ),\n\t500: _x( 'Medium', 'font weight' ),\n\t600: _x( 'Semi-bold', 'font weight' ),\n\t700: _x( 'Bold', 'font weight' ),\n\t800: _x( 'Extra-bold', 'font weight' ),\n\t900: _x( 'Black', 'font weight' ),\n};\n\nexport const FONT_STYLES: Record< string, string > = {\n\tnormal: _x( 'Normal', 'font style' ),\n\titalic: _x( 'Italic', 'font style' ),\n};\n"],
5
- "mappings": "AAGA,SAAS,UAAU;AAEZ,MAAM,0BAA0B,CAAE,OAAO,OAAO,QAAQ,OAAQ;AAEhE,MAAM,eAAyC;AAAA,EACrD,KAAK,GAAI,QAAQ,aAAc;AAAA,EAC/B,KAAK,GAAI,eAAe,aAAc;AAAA,EACtC,KAAK,GAAI,SAAS,aAAc;AAAA,EAChC,KAAK,GAAI,UAAU,aAAc;AAAA,EACjC,KAAK,GAAI,UAAU,aAAc;AAAA,EACjC,KAAK,GAAI,aAAa,aAAc;AAAA,EACpC,KAAK,GAAI,QAAQ,aAAc;AAAA,EAC/B,KAAK,GAAI,cAAc,aAAc;AAAA,EACrC,KAAK,GAAI,SAAS,aAAc;AACjC;AAEO,MAAM,cAAwC;AAAA,EACpD,QAAQ,GAAI,UAAU,YAAa;AAAA,EACnC,QAAQ,GAAI,UAAU,YAAa;AACpC;",
5
+ "mappings": ";AAGA,SAAS,UAAU;AAEZ,IAAM,0BAA0B,CAAE,OAAO,OAAO,QAAQ,OAAQ;AAEhE,IAAM,eAAyC;AAAA,EACrD,KAAK,GAAI,QAAQ,aAAc;AAAA,EAC/B,KAAK,GAAI,eAAe,aAAc;AAAA,EACtC,KAAK,GAAI,SAAS,aAAc;AAAA,EAChC,KAAK,GAAI,UAAU,aAAc;AAAA,EACjC,KAAK,GAAI,UAAU,aAAc;AAAA,EACjC,KAAK,GAAI,aAAa,aAAc;AAAA,EACpC,KAAK,GAAI,QAAQ,aAAc;AAAA,EAC/B,KAAK,GAAI,cAAc,aAAc;AAAA,EACrC,KAAK,GAAI,SAAS,aAAc;AACjC;AAEO,IAAM,cAAwC;AAAA,EACpD,QAAQ,GAAI,UAAU,YAAa;AAAA,EACnC,QAAQ,GAAI,UAAU,YAAa;AACpC;",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,4 @@
1
+ // packages/global-styles-ui/src/font-library-modal/utils/filter-fonts.ts
1
2
  function filterFonts(fonts, filters) {
2
3
  const { category, search } = filters;
3
4
  let filteredFonts = fonts || [];
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/font-library-modal/utils/filter-fonts.ts"],
4
4
  "sourcesContent": ["/**\n * Internal dependencies\n */\nimport type { CollectionFontFamily } from '../types';\n\n/**\n * Filters a list of fonts based on the specified filters.\n *\n * This function filters a given array of fonts based on the criteria provided in the filters object.\n * It supports filtering by category and a search term. If the category is provided and not equal to 'all',\n * the function filters the fonts array to include only those fonts that belong to the specified category.\n * Additionally, if a search term is provided, it filters the fonts array to include only those fonts\n * whose name includes the search term, case-insensitively.\n *\n * @param fonts Array of font objects in font-collection schema fashion to be filtered. Each font object should have a 'categories' property and a 'font_family_settings' property with a 'name' key.\n * @param filters Object containing the filter criteria. It should have a 'category' key and/or a 'search' key.\n * @param filters.category The category to filter fonts by. If 'all', no category filtering is applied.\n * @param filters.search The search term to filter fonts by. If provided, only fonts whose\n *\n * @return Array of filtered font objects based on the provided criteria.\n */\nexport default function filterFonts(\n\tfonts: CollectionFontFamily[],\n\tfilters: { category?: string; search?: string }\n): CollectionFontFamily[] {\n\tconst { category, search } = filters;\n\tlet filteredFonts = fonts || [];\n\n\tif ( category && category !== 'all' ) {\n\t\tfilteredFonts = filteredFonts.filter(\n\t\t\t( font ) =>\n\t\t\t\tfont.categories && font.categories.indexOf( category ) !== -1\n\t\t);\n\t}\n\n\tif ( search ) {\n\t\tfilteredFonts = filteredFonts.filter(\n\t\t\t( font ) =>\n\t\t\t\tfont.font_family_settings &&\n\t\t\t\tfont.font_family_settings.name\n\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t.includes( search.toLowerCase() )\n\t\t);\n\t}\n\n\treturn filteredFonts;\n}\n"],
5
- "mappings": "AAqBe,SAAR,YACN,OACA,SACyB;AACzB,QAAM,EAAE,UAAU,OAAO,IAAI;AAC7B,MAAI,gBAAgB,SAAS,CAAC;AAE9B,MAAK,YAAY,aAAa,OAAQ;AACrC,oBAAgB,cAAc;AAAA,MAC7B,CAAE,SACD,KAAK,cAAc,KAAK,WAAW,QAAS,QAAS,MAAM;AAAA,IAC7D;AAAA,EACD;AAEA,MAAK,QAAS;AACb,oBAAgB,cAAc;AAAA,MAC7B,CAAE,SACD,KAAK,wBACL,KAAK,qBAAqB,KACxB,YAAY,EACZ,SAAU,OAAO,YAAY,CAAE;AAAA,IACnC;AAAA,EACD;AAEA,SAAO;AACR;",
5
+ "mappings": ";AAqBe,SAAR,YACN,OACA,SACyB;AACzB,QAAM,EAAE,UAAU,OAAO,IAAI;AAC7B,MAAI,gBAAgB,SAAS,CAAC;AAE9B,MAAK,YAAY,aAAa,OAAQ;AACrC,oBAAgB,cAAc;AAAA,MAC7B,CAAE,SACD,KAAK,cAAc,KAAK,WAAW,QAAS,QAAS,MAAM;AAAA,IAC7D;AAAA,EACD;AAEA,MAAK,QAAS;AACb,oBAAgB,cAAc;AAAA,MAC7B,CAAE,SACD,KAAK,wBACL,KAAK,qBAAqB,KACxB,YAAY,EACZ,SAAU,OAAO,YAAY,CAAE;AAAA,IACnC;AAAA,EACD;AAEA,SAAO;AACR;",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,4 @@
1
+ // packages/global-styles-ui/src/font-library-modal/utils/fonts-outline.ts
1
2
  function getFontsOutline(fonts) {
2
3
  return fonts.reduce(
3
4
  (acc, font) => ({
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/font-library-modal/utils/fonts-outline.ts"],
4
4
  "sourcesContent": ["/**\n * Internal dependencies\n */\nimport type { FontFace, FontFamily } from '../types';\n\nexport function getFontsOutline(\n\tfonts: FontFamily[]\n): Record< string, Record< string, boolean > > {\n\treturn fonts.reduce(\n\t\t( acc, font ) => ( {\n\t\t\t...acc,\n\t\t\t[ font.slug ]: ( font?.fontFace || [] ).reduce(\n\t\t\t\t( faces, face ) => ( {\n\t\t\t\t\t...faces,\n\t\t\t\t\t[ `${ face.fontStyle }-${ face.fontWeight }` ]: true,\n\t\t\t\t} ),\n\t\t\t\t{}\n\t\t\t),\n\t\t} ),\n\t\t{}\n\t);\n}\n\nexport function isFontFontFaceInOutline(\n\tslug: string,\n\tface: FontFace | null,\n\toutline: Record< string, Record< string, boolean > >\n): boolean {\n\tif ( ! face ) {\n\t\treturn !! outline[ slug ];\n\t}\n\treturn !! outline[ slug ]?.[ `${ face.fontStyle }-${ face.fontWeight }` ];\n}\n"],
5
- "mappings": "AAKO,SAAS,gBACf,OAC8C;AAC9C,SAAO,MAAM;AAAA,IACZ,CAAE,KAAK,UAAY;AAAA,MAClB,GAAG;AAAA,MACH,CAAE,KAAK,IAAK,IAAK,MAAM,YAAY,CAAC,GAAI;AAAA,QACvC,CAAE,OAAO,UAAY;AAAA,UACpB,GAAG;AAAA,UACH,CAAE,GAAI,KAAK,SAAU,IAAK,KAAK,UAAW,EAAG,GAAG;AAAA,QACjD;AAAA,QACA,CAAC;AAAA,MACF;AAAA,IACD;AAAA,IACA,CAAC;AAAA,EACF;AACD;AAEO,SAAS,wBACf,MACA,MACA,SACU;AACV,MAAK,CAAE,MAAO;AACb,WAAO,CAAC,CAAE,QAAS,IAAK;AAAA,EACzB;AACA,SAAO,CAAC,CAAE,QAAS,IAAK,IAAK,GAAI,KAAK,SAAU,IAAK,KAAK,UAAW,EAAG;AACzE;",
5
+ "mappings": ";AAKO,SAAS,gBACf,OAC8C;AAC9C,SAAO,MAAM;AAAA,IACZ,CAAE,KAAK,UAAY;AAAA,MAClB,GAAG;AAAA,MACH,CAAE,KAAK,IAAK,IAAK,MAAM,YAAY,CAAC,GAAI;AAAA,QACvC,CAAE,OAAO,UAAY;AAAA,UACpB,GAAG;AAAA,UACH,CAAE,GAAI,KAAK,SAAU,IAAK,KAAK,UAAW,EAAG,GAAG;AAAA,QACjD;AAAA,QACA,CAAC;AAAA,MACF;AAAA,IACD;AAAA,IACA,CAAC;AAAA,EACF;AACD;AAEO,SAAS,wBACf,MACA,MACA,SACU;AACV,MAAK,CAAE,MAAO;AACb,WAAO,CAAC,CAAE,QAAS,IAAK;AAAA,EACzB;AACA,SAAO,CAAC,CAAE,QAAS,IAAK,IAAK,GAAI,KAAK,SAAU,IAAK,KAAK,UAAW,EAAG;AACzE;",
6
6
  "names": []
7
7
  }
@@ -1,10 +1,11 @@
1
+ // packages/global-styles-ui/src/font-library-modal/utils/index.ts
1
2
  import { privateApis as componentsPrivateApis } from "@wordpress/components";
2
3
  import { FONT_WEIGHTS, FONT_STYLES } from "./constants";
3
4
  import { fetchInstallFontFace } from "../resolvers";
4
5
  import { formatFontFaceName } from "./preview-styles";
5
6
  import { unlock } from "../../lock-unlock";
6
- const { File } = window;
7
- const { kebabCase } = unlock(componentsPrivateApis);
7
+ var { File } = window;
8
+ var { kebabCase } = unlock(componentsPrivateApis);
8
9
  function setUIValuesNeeded(font, extraValues = {}) {
9
10
  if (!font.name && (font.fontFamily || font.slug)) {
10
11
  font.name = font.fontFamily || font.slug;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/font-library-modal/utils/index.ts"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { FONT_WEIGHTS, FONT_STYLES } from './constants';\nimport { fetchInstallFontFace } from '../resolvers';\nimport { formatFontFaceName } from './preview-styles';\nimport type { FontFamily, FontFace, FontUploadResult } from '../types';\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Browser dependencies\n */\nconst { File } = window;\nconst { kebabCase } = unlock( componentsPrivateApis );\n\nexport function setUIValuesNeeded(\n\tfont: FontFamily,\n\textraValues: Partial< FontFamily > = {}\n): FontFamily {\n\tif ( ! font.name && ( font.fontFamily || font.slug ) ) {\n\t\tfont.name = font.fontFamily || font.slug;\n\t}\n\treturn {\n\t\t...font,\n\t\t...extraValues,\n\t};\n}\n\nexport function isUrlEncoded( url: string ): boolean {\n\tif ( typeof url !== 'string' ) {\n\t\treturn false;\n\t}\n\treturn url !== decodeURIComponent( url );\n}\n\nexport function getFontFaceVariantName( face: FontFace ): string {\n\tconst weightName = FONT_WEIGHTS[ face.fontWeight ?? '' ] || face.fontWeight;\n\tconst styleName =\n\t\tface.fontStyle === 'normal'\n\t\t\t? ''\n\t\t\t: FONT_STYLES[ face.fontStyle ?? '' ] || face.fontStyle;\n\treturn `${ weightName } ${ styleName }`;\n}\n\nexport function mergeFontFaces(\n\texisting: FontFace[] = [],\n\tincoming: FontFace[] = []\n): FontFace[] {\n\tconst map = new Map();\n\tfor ( const face of existing ) {\n\t\tmap.set( `${ face.fontWeight }${ face.fontStyle }`, face );\n\t}\n\tfor ( const face of incoming ) {\n\t\t// This will overwrite if the src already exists, keeping it unique.\n\t\tmap.set( `${ face.fontWeight }${ face.fontStyle }`, face );\n\t}\n\treturn Array.from( map.values() );\n}\n\nexport function mergeFontFamilies(\n\texisting: FontFamily[] = [],\n\tincoming: FontFamily[] = []\n): FontFamily[] {\n\tconst map = new Map();\n\t// Add the existing array to the map.\n\tfor ( const font of existing ) {\n\t\tmap.set( font.slug, { ...font } );\n\t}\n\t// Add the incoming array to the map, overwriting existing values excepting fontFace that need to be merged.\n\tfor ( const font of incoming ) {\n\t\tif ( map.has( font.slug ) ) {\n\t\t\tconst { fontFace: incomingFontFaces, ...restIncoming } = font;\n\t\t\tconst existingFont = map.get( font.slug );\n\t\t\t// Merge the fontFaces existing with the incoming fontFaces.\n\t\t\tconst mergedFontFaces = mergeFontFaces(\n\t\t\t\texistingFont.fontFace,\n\t\t\t\tincomingFontFaces\n\t\t\t);\n\t\t\t// Except for the fontFace key all the other keys are overwritten with the incoming values.\n\t\t\tmap.set( font.slug, {\n\t\t\t\t...restIncoming,\n\t\t\t\tfontFace: mergedFontFaces,\n\t\t\t} );\n\t\t} else {\n\t\t\tmap.set( font.slug, { ...font } );\n\t\t}\n\t}\n\treturn Array.from( map.values() );\n}\n\n/*\n * Loads the font face from a URL and adds it to the browser.\n * It also adds it to the iframe document.\n */\nexport async function loadFontFaceInBrowser(\n\tfontFace: FontFace,\n\tsource: string | File,\n\taddTo: 'all' | 'document' | 'iframe' = 'all'\n): Promise< void > {\n\tlet dataSource;\n\n\tif ( typeof source === 'string' ) {\n\t\tdataSource = `url(${ source })`;\n\t\t// eslint-disable-next-line no-undef\n\t} else if ( source instanceof File ) {\n\t\tdataSource = await source.arrayBuffer();\n\t} else {\n\t\treturn;\n\t}\n\n\tconst newFont = new window.FontFace(\n\t\tformatFontFaceName( fontFace.fontFamily ),\n\t\tdataSource,\n\t\t{\n\t\t\tstyle: fontFace.fontStyle,\n\t\t\tweight: String( fontFace.fontWeight ),\n\t\t}\n\t);\n\n\tconst loadedFace = await newFont.load();\n\n\tif ( addTo === 'document' || addTo === 'all' ) {\n\t\tdocument.fonts.add( loadedFace );\n\t}\n\n\tif ( addTo === 'iframe' || addTo === 'all' ) {\n\t\tconst iframe = document.querySelector(\n\t\t\t'iframe[name=\"editor-canvas\"]'\n\t\t) as HTMLIFrameElement;\n\t\tif ( iframe?.contentDocument ) {\n\t\t\tiframe.contentDocument.fonts.add( loadedFace );\n\t\t}\n\t}\n}\n\n/*\n * Unloads the font face and remove it from the browser.\n * It also removes it from the iframe document.\n *\n * Note that Font faces that were added to the set using the CSS @font-face rule\n * remain connected to the corresponding CSS, and cannot be deleted.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/FontFaceSet/delete.\n */\nexport function unloadFontFaceInBrowser(\n\tfontFace: FontFace,\n\tremoveFrom: 'all' | 'document' | 'iframe' = 'all'\n): void {\n\tconst unloadFontFace = ( fonts: FontFaceSet ) => {\n\t\tfonts.forEach( ( f ) => {\n\t\t\tif (\n\t\t\t\tf.family === formatFontFaceName( fontFace?.fontFamily ) &&\n\t\t\t\tf.weight === fontFace?.fontWeight &&\n\t\t\t\tf.style === fontFace?.fontStyle\n\t\t\t) {\n\t\t\t\tfonts.delete( f );\n\t\t\t}\n\t\t} );\n\t};\n\n\tif ( removeFrom === 'document' || removeFrom === 'all' ) {\n\t\tunloadFontFace( document.fonts );\n\t}\n\n\tif ( removeFrom === 'iframe' || removeFrom === 'all' ) {\n\t\tconst iframe = document.querySelector(\n\t\t\t'iframe[name=\"editor-canvas\"]'\n\t\t) as HTMLIFrameElement;\n\t\tif ( iframe?.contentDocument ) {\n\t\t\tunloadFontFace( iframe.contentDocument.fonts );\n\t\t}\n\t}\n}\n\n/**\n * Retrieves the display source from a font face src.\n *\n * @param {string|string[]} input - The font face src.\n * @return {string|undefined} The display source or undefined if the input is invalid.\n */\nexport function getDisplaySrcFromFontFace(\n\tinput: string | string[]\n): string | undefined {\n\tif ( ! input ) {\n\t\treturn;\n\t}\n\n\tlet src;\n\tif ( Array.isArray( input ) ) {\n\t\tsrc = input[ 0 ];\n\t} else {\n\t\tsrc = input;\n\t}\n\t// It's expected theme fonts will already be loaded in the browser.\n\tif ( src.startsWith( 'file:.' ) ) {\n\t\treturn;\n\t}\n\tif ( ! isUrlEncoded( src ) ) {\n\t\tsrc = encodeURI( src );\n\t}\n\treturn src;\n}\n\nexport function makeFontFamilyFormData( fontFamily: FontFamily ): FormData {\n\tconst formData = new FormData();\n\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tconst { fontFace, category, ...familyWithValidParameters } = fontFamily;\n\tconst fontFamilySettings = {\n\t\t...familyWithValidParameters,\n\t\tslug: kebabCase( fontFamily.slug ),\n\t};\n\n\tformData.append(\n\t\t'font_family_settings',\n\t\tJSON.stringify( fontFamilySettings )\n\t);\n\treturn formData;\n}\n\nexport function makeFontFacesFormData( font: FontFamily ): FormData[] {\n\tconst fontFacesFormData = ( font?.fontFace ?? [] ).map(\n\t\t( item, faceIndex ) => {\n\t\t\tconst face = { ...item };\n\t\t\tconst formData = new FormData();\n\t\t\tif ( face.file ) {\n\t\t\t\t// Normalize to an array, since face.file may be a single file or an array of files.\n\t\t\t\tconst files = Array.isArray( face.file )\n\t\t\t\t\t? face.file\n\t\t\t\t\t: [ face.file ];\n\t\t\t\tconst src: string[] = [];\n\n\t\t\t\tfiles.forEach( ( file, key ) => {\n\t\t\t\t\t// Slugified file name because the it might contain spaces or characters treated differently on the server.\n\t\t\t\t\tconst fileId = `file-${ faceIndex }-${ key }`;\n\t\t\t\t\t// Add the files to the formData\n\t\t\t\t\tformData.append( fileId, file, file.name );\n\t\t\t\t\tsrc.push( fileId );\n\t\t\t\t} );\n\n\t\t\t\tface.src = src.length === 1 ? src[ 0 ] : src;\n\t\t\t\tdelete face.file;\n\n\t\t\t\tformData.append( 'font_face_settings', JSON.stringify( face ) );\n\t\t\t} else {\n\t\t\t\tformData.append( 'font_face_settings', JSON.stringify( face ) );\n\t\t\t}\n\t\t\treturn formData;\n\t\t}\n\t);\n\n\treturn fontFacesFormData;\n}\n\nexport async function batchInstallFontFaces(\n\tfontFamilyId: string,\n\tfontFacesData: FormData[]\n): Promise< FontUploadResult > {\n\tconst responses: {\n\t\tstatus: 'fulfilled' | 'rejected';\n\t\tvalue?: FontFace;\n\t\treason?: Error;\n\t}[] = [];\n\n\t/*\n\t * Uses the same response format as Promise.allSettled, but executes requests in sequence to work\n\t * around a race condition that can cause an error when the fonts directory doesn't exist yet.\n\t */\n\tfor ( const faceData of fontFacesData ) {\n\t\ttry {\n\t\t\tconst response = await fetchInstallFontFace(\n\t\t\t\tfontFamilyId,\n\t\t\t\tfaceData\n\t\t\t);\n\t\t\tresponses.push( { status: 'fulfilled', value: response } );\n\t\t} catch ( error ) {\n\t\t\tresponses.push( { status: 'rejected', reason: error as Error } );\n\t\t}\n\t}\n\n\tconst results: {\n\t\tsuccesses: FontFace[];\n\t\terrors: Array< {\n\t\t\tdata: FormData;\n\t\t\tmessage: string;\n\t\t} >;\n\t} = {\n\t\terrors: [],\n\t\tsuccesses: [],\n\t};\n\n\tresponses.forEach( ( result, index ) => {\n\t\tif ( result.status === 'fulfilled' && result.value ) {\n\t\t\tconst response = result.value;\n\t\t\tresults.successes.push( response );\n\t\t} else if ( result.reason ) {\n\t\t\t// Handle network errors or other fetch-related errors\n\t\t\tresults.errors.push( {\n\t\t\t\tdata: fontFacesData[ index ],\n\t\t\t\tmessage: result.reason.message,\n\t\t\t} );\n\t\t}\n\t} );\n\n\treturn results;\n}\n\n/*\n * Downloads a font face asset from a URL to the client and returns a File object.\n */\nexport async function downloadFontFaceAssets(\n\tsrc: string | string[]\n): Promise< File | File[] > {\n\t// Normalize to an array, since `src` could be a string or array.\n\tsrc = Array.isArray( src ) ? src : [ src ];\n\n\tconst files = await Promise.all(\n\t\tsrc.map( async ( url ) => {\n\t\t\treturn fetch( new Request( url ) )\n\t\t\t\t.then( ( response ) => {\n\t\t\t\t\tif ( ! response.ok ) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Error downloading font face asset from ${ url }. Server responded with status: ${ response.status }`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn response.blob();\n\t\t\t\t} )\n\t\t\t\t.then( ( blob ) => {\n\t\t\t\t\tconst filename = url.split( '/' ).pop() as string;\n\t\t\t\t\tconst file = new File( [ blob ], filename, {\n\t\t\t\t\t\ttype: blob.type,\n\t\t\t\t\t} );\n\t\t\t\t\treturn file;\n\t\t\t\t} );\n\t\t} )\n\t);\n\n\t// If we only have one file return it (not the array). Otherwise return all of them in the array.\n\treturn files.length === 1 ? files[ 0 ] : files;\n}\n\n/*\n * Determine if a given Font Face is present in a given collection.\n * We determine that a font face has been installed by comparing the fontWeight and fontStyle\n *\n * @param {Object} fontFace The Font Face to seek\n * @param {Array} collection The Collection to seek in\n * @returns True if the font face is found in the collection. Otherwise False.\n */\nexport function checkFontFaceInstalled(\n\tfontFace: FontFace,\n\tcollection: FontFace[]\n): boolean {\n\treturn (\n\t\t-1 !==\n\t\tcollection.findIndex( ( collectionFontFace ) => {\n\t\t\treturn (\n\t\t\t\tcollectionFontFace.fontWeight === fontFace.fontWeight &&\n\t\t\t\tcollectionFontFace.fontStyle === fontFace.fontStyle\n\t\t\t);\n\t\t} )\n\t);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { FONT_WEIGHTS, FONT_STYLES } from './constants';\nimport { fetchInstallFontFace } from '../resolvers';\nimport { formatFontFaceName } from './preview-styles';\nimport type { FontFamily, FontFace, FontUploadResult } from '../types';\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Browser dependencies\n */\nconst { File } = window;\nconst { kebabCase } = unlock( componentsPrivateApis );\n\nexport function setUIValuesNeeded(\n\tfont: FontFamily,\n\textraValues: Partial< FontFamily > = {}\n): FontFamily {\n\tif ( ! font.name && ( font.fontFamily || font.slug ) ) {\n\t\tfont.name = font.fontFamily || font.slug;\n\t}\n\treturn {\n\t\t...font,\n\t\t...extraValues,\n\t};\n}\n\nexport function isUrlEncoded( url: string ): boolean {\n\tif ( typeof url !== 'string' ) {\n\t\treturn false;\n\t}\n\treturn url !== decodeURIComponent( url );\n}\n\nexport function getFontFaceVariantName( face: FontFace ): string {\n\tconst weightName = FONT_WEIGHTS[ face.fontWeight ?? '' ] || face.fontWeight;\n\tconst styleName =\n\t\tface.fontStyle === 'normal'\n\t\t\t? ''\n\t\t\t: FONT_STYLES[ face.fontStyle ?? '' ] || face.fontStyle;\n\treturn `${ weightName } ${ styleName }`;\n}\n\nexport function mergeFontFaces(\n\texisting: FontFace[] = [],\n\tincoming: FontFace[] = []\n): FontFace[] {\n\tconst map = new Map();\n\tfor ( const face of existing ) {\n\t\tmap.set( `${ face.fontWeight }${ face.fontStyle }`, face );\n\t}\n\tfor ( const face of incoming ) {\n\t\t// This will overwrite if the src already exists, keeping it unique.\n\t\tmap.set( `${ face.fontWeight }${ face.fontStyle }`, face );\n\t}\n\treturn Array.from( map.values() );\n}\n\nexport function mergeFontFamilies(\n\texisting: FontFamily[] = [],\n\tincoming: FontFamily[] = []\n): FontFamily[] {\n\tconst map = new Map();\n\t// Add the existing array to the map.\n\tfor ( const font of existing ) {\n\t\tmap.set( font.slug, { ...font } );\n\t}\n\t// Add the incoming array to the map, overwriting existing values excepting fontFace that need to be merged.\n\tfor ( const font of incoming ) {\n\t\tif ( map.has( font.slug ) ) {\n\t\t\tconst { fontFace: incomingFontFaces, ...restIncoming } = font;\n\t\t\tconst existingFont = map.get( font.slug );\n\t\t\t// Merge the fontFaces existing with the incoming fontFaces.\n\t\t\tconst mergedFontFaces = mergeFontFaces(\n\t\t\t\texistingFont.fontFace,\n\t\t\t\tincomingFontFaces\n\t\t\t);\n\t\t\t// Except for the fontFace key all the other keys are overwritten with the incoming values.\n\t\t\tmap.set( font.slug, {\n\t\t\t\t...restIncoming,\n\t\t\t\tfontFace: mergedFontFaces,\n\t\t\t} );\n\t\t} else {\n\t\t\tmap.set( font.slug, { ...font } );\n\t\t}\n\t}\n\treturn Array.from( map.values() );\n}\n\n/*\n * Loads the font face from a URL and adds it to the browser.\n * It also adds it to the iframe document.\n */\nexport async function loadFontFaceInBrowser(\n\tfontFace: FontFace,\n\tsource: string | File,\n\taddTo: 'all' | 'document' | 'iframe' = 'all'\n): Promise< void > {\n\tlet dataSource;\n\n\tif ( typeof source === 'string' ) {\n\t\tdataSource = `url(${ source })`;\n\t} else if ( source instanceof File ) {\n\t\tdataSource = await source.arrayBuffer();\n\t} else {\n\t\treturn;\n\t}\n\n\tconst newFont = new window.FontFace(\n\t\tformatFontFaceName( fontFace.fontFamily ),\n\t\tdataSource,\n\t\t{\n\t\t\tstyle: fontFace.fontStyle,\n\t\t\tweight: String( fontFace.fontWeight ),\n\t\t}\n\t);\n\n\tconst loadedFace = await newFont.load();\n\n\tif ( addTo === 'document' || addTo === 'all' ) {\n\t\tdocument.fonts.add( loadedFace );\n\t}\n\n\tif ( addTo === 'iframe' || addTo === 'all' ) {\n\t\tconst iframe = document.querySelector(\n\t\t\t'iframe[name=\"editor-canvas\"]'\n\t\t) as HTMLIFrameElement;\n\t\tif ( iframe?.contentDocument ) {\n\t\t\tiframe.contentDocument.fonts.add( loadedFace );\n\t\t}\n\t}\n}\n\n/*\n * Unloads the font face and remove it from the browser.\n * It also removes it from the iframe document.\n *\n * Note that Font faces that were added to the set using the CSS @font-face rule\n * remain connected to the corresponding CSS, and cannot be deleted.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/FontFaceSet/delete.\n */\nexport function unloadFontFaceInBrowser(\n\tfontFace: FontFace,\n\tremoveFrom: 'all' | 'document' | 'iframe' = 'all'\n): void {\n\tconst unloadFontFace = ( fonts: FontFaceSet ) => {\n\t\tfonts.forEach( ( f ) => {\n\t\t\tif (\n\t\t\t\tf.family === formatFontFaceName( fontFace?.fontFamily ) &&\n\t\t\t\tf.weight === fontFace?.fontWeight &&\n\t\t\t\tf.style === fontFace?.fontStyle\n\t\t\t) {\n\t\t\t\tfonts.delete( f );\n\t\t\t}\n\t\t} );\n\t};\n\n\tif ( removeFrom === 'document' || removeFrom === 'all' ) {\n\t\tunloadFontFace( document.fonts );\n\t}\n\n\tif ( removeFrom === 'iframe' || removeFrom === 'all' ) {\n\t\tconst iframe = document.querySelector(\n\t\t\t'iframe[name=\"editor-canvas\"]'\n\t\t) as HTMLIFrameElement;\n\t\tif ( iframe?.contentDocument ) {\n\t\t\tunloadFontFace( iframe.contentDocument.fonts );\n\t\t}\n\t}\n}\n\n/**\n * Retrieves the display source from a font face src.\n *\n * @param {string|string[]} input - The font face src.\n * @return {string|undefined} The display source or undefined if the input is invalid.\n */\nexport function getDisplaySrcFromFontFace(\n\tinput: string | string[]\n): string | undefined {\n\tif ( ! input ) {\n\t\treturn;\n\t}\n\n\tlet src;\n\tif ( Array.isArray( input ) ) {\n\t\tsrc = input[ 0 ];\n\t} else {\n\t\tsrc = input;\n\t}\n\t// It's expected theme fonts will already be loaded in the browser.\n\tif ( src.startsWith( 'file:.' ) ) {\n\t\treturn;\n\t}\n\tif ( ! isUrlEncoded( src ) ) {\n\t\tsrc = encodeURI( src );\n\t}\n\treturn src;\n}\n\nexport function makeFontFamilyFormData( fontFamily: FontFamily ): FormData {\n\tconst formData = new FormData();\n\n\tconst { fontFace, category, ...familyWithValidParameters } = fontFamily;\n\tconst fontFamilySettings = {\n\t\t...familyWithValidParameters,\n\t\tslug: kebabCase( fontFamily.slug ),\n\t};\n\n\tformData.append(\n\t\t'font_family_settings',\n\t\tJSON.stringify( fontFamilySettings )\n\t);\n\treturn formData;\n}\n\nexport function makeFontFacesFormData( font: FontFamily ): FormData[] {\n\tconst fontFacesFormData = ( font?.fontFace ?? [] ).map(\n\t\t( item, faceIndex ) => {\n\t\t\tconst face = { ...item };\n\t\t\tconst formData = new FormData();\n\t\t\tif ( face.file ) {\n\t\t\t\t// Normalize to an array, since face.file may be a single file or an array of files.\n\t\t\t\tconst files = Array.isArray( face.file )\n\t\t\t\t\t? face.file\n\t\t\t\t\t: [ face.file ];\n\t\t\t\tconst src: string[] = [];\n\n\t\t\t\tfiles.forEach( ( file, key ) => {\n\t\t\t\t\t// Slugified file name because the it might contain spaces or characters treated differently on the server.\n\t\t\t\t\tconst fileId = `file-${ faceIndex }-${ key }`;\n\t\t\t\t\t// Add the files to the formData\n\t\t\t\t\tformData.append( fileId, file, file.name );\n\t\t\t\t\tsrc.push( fileId );\n\t\t\t\t} );\n\n\t\t\t\tface.src = src.length === 1 ? src[ 0 ] : src;\n\t\t\t\tdelete face.file;\n\n\t\t\t\tformData.append( 'font_face_settings', JSON.stringify( face ) );\n\t\t\t} else {\n\t\t\t\tformData.append( 'font_face_settings', JSON.stringify( face ) );\n\t\t\t}\n\t\t\treturn formData;\n\t\t}\n\t);\n\n\treturn fontFacesFormData;\n}\n\nexport async function batchInstallFontFaces(\n\tfontFamilyId: string,\n\tfontFacesData: FormData[]\n): Promise< FontUploadResult > {\n\tconst responses: {\n\t\tstatus: 'fulfilled' | 'rejected';\n\t\tvalue?: FontFace;\n\t\treason?: Error;\n\t}[] = [];\n\n\t/*\n\t * Uses the same response format as Promise.allSettled, but executes requests in sequence to work\n\t * around a race condition that can cause an error when the fonts directory doesn't exist yet.\n\t */\n\tfor ( const faceData of fontFacesData ) {\n\t\ttry {\n\t\t\tconst response = await fetchInstallFontFace(\n\t\t\t\tfontFamilyId,\n\t\t\t\tfaceData\n\t\t\t);\n\t\t\tresponses.push( { status: 'fulfilled', value: response } );\n\t\t} catch ( error ) {\n\t\t\tresponses.push( { status: 'rejected', reason: error as Error } );\n\t\t}\n\t}\n\n\tconst results: {\n\t\tsuccesses: FontFace[];\n\t\terrors: Array< {\n\t\t\tdata: FormData;\n\t\t\tmessage: string;\n\t\t} >;\n\t} = {\n\t\terrors: [],\n\t\tsuccesses: [],\n\t};\n\n\tresponses.forEach( ( result, index ) => {\n\t\tif ( result.status === 'fulfilled' && result.value ) {\n\t\t\tconst response = result.value;\n\t\t\tresults.successes.push( response );\n\t\t} else if ( result.reason ) {\n\t\t\t// Handle network errors or other fetch-related errors\n\t\t\tresults.errors.push( {\n\t\t\t\tdata: fontFacesData[ index ],\n\t\t\t\tmessage: result.reason.message,\n\t\t\t} );\n\t\t}\n\t} );\n\n\treturn results;\n}\n\n/*\n * Downloads a font face asset from a URL to the client and returns a File object.\n */\nexport async function downloadFontFaceAssets(\n\tsrc: string | string[]\n): Promise< File | File[] > {\n\t// Normalize to an array, since `src` could be a string or array.\n\tsrc = Array.isArray( src ) ? src : [ src ];\n\n\tconst files = await Promise.all(\n\t\tsrc.map( async ( url ) => {\n\t\t\treturn fetch( new Request( url ) )\n\t\t\t\t.then( ( response ) => {\n\t\t\t\t\tif ( ! response.ok ) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Error downloading font face asset from ${ url }. Server responded with status: ${ response.status }`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn response.blob();\n\t\t\t\t} )\n\t\t\t\t.then( ( blob ) => {\n\t\t\t\t\tconst filename = url.split( '/' ).pop() as string;\n\t\t\t\t\tconst file = new File( [ blob ], filename, {\n\t\t\t\t\t\ttype: blob.type,\n\t\t\t\t\t} );\n\t\t\t\t\treturn file;\n\t\t\t\t} );\n\t\t} )\n\t);\n\n\t// If we only have one file return it (not the array). Otherwise return all of them in the array.\n\treturn files.length === 1 ? files[ 0 ] : files;\n}\n\n/*\n * Determine if a given Font Face is present in a given collection.\n * We determine that a font face has been installed by comparing the fontWeight and fontStyle\n *\n * @param {Object} fontFace The Font Face to seek\n * @param {Array} collection The Collection to seek in\n * @returns True if the font face is found in the collection. Otherwise False.\n */\nexport function checkFontFaceInstalled(\n\tfontFace: FontFace,\n\tcollection: FontFace[]\n): boolean {\n\treturn (\n\t\t-1 !==\n\t\tcollection.findIndex( ( collectionFontFace ) => {\n\t\t\treturn (\n\t\t\t\tcollectionFontFace.fontWeight === fontFace.fontWeight &&\n\t\t\t\tcollectionFontFace.fontStyle === fontFace.fontStyle\n\t\t\t);\n\t\t} )\n\t);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,7 @@
1
+ // packages/global-styles-ui/src/font-library-modal/utils/make-families-from-faces.ts
1
2
  import { privateApis as componentsPrivateApis } from "@wordpress/components";
2
3
  import { unlock } from "../../lock-unlock";
3
- const { kebabCase } = unlock(componentsPrivateApis);
4
+ var { kebabCase } = unlock(componentsPrivateApis);
4
5
  function makeFamiliesFromFaces(fontFaces) {
5
6
  const fontFamiliesObject = fontFaces.reduce(
6
7
  (acc, item) => {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/font-library-modal/utils/make-families-from-faces.ts"],
4
4
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport type { FontFamily, FontFace } from '../types';\nimport { unlock } from '../../lock-unlock';\n\nconst { kebabCase } = unlock( componentsPrivateApis );\n\nexport default function makeFamiliesFromFaces(\n\tfontFaces: FontFace[]\n): FontFamily[] {\n\tconst fontFamiliesObject = fontFaces.reduce(\n\t\t( acc: Record< string, FontFamily >, item: FontFace ) => {\n\t\t\tif ( ! acc[ item.fontFamily ] ) {\n\t\t\t\tacc[ item.fontFamily ] = {\n\t\t\t\t\tname: item.fontFamily,\n\t\t\t\t\tfontFamily: item.fontFamily,\n\t\t\t\t\tslug: kebabCase( item.fontFamily.toLowerCase() ),\n\t\t\t\t\tfontFace: [],\n\t\t\t\t};\n\t\t\t}\n\t\t\t// @ts-expect-error\n\t\t\tacc[ item.fontFamily ].fontFace.push( item );\n\t\t\treturn acc;\n\t\t},\n\t\t{}\n\t);\n\treturn Object.values( fontFamiliesObject ) as FontFamily[];\n}\n"],
5
- "mappings": "AAGA,SAAS,eAAe,6BAA6B;AAMrD,SAAS,cAAc;AAEvB,MAAM,EAAE,UAAU,IAAI,OAAQ,qBAAsB;AAErC,SAAR,sBACN,WACe;AACf,QAAM,qBAAqB,UAAU;AAAA,IACpC,CAAE,KAAmC,SAAoB;AACxD,UAAK,CAAE,IAAK,KAAK,UAAW,GAAI;AAC/B,YAAK,KAAK,UAAW,IAAI;AAAA,UACxB,MAAM,KAAK;AAAA,UACX,YAAY,KAAK;AAAA,UACjB,MAAM,UAAW,KAAK,WAAW,YAAY,CAAE;AAAA,UAC/C,UAAU,CAAC;AAAA,QACZ;AAAA,MACD;AAEA,UAAK,KAAK,UAAW,EAAE,SAAS,KAAM,IAAK;AAC3C,aAAO;AAAA,IACR;AAAA,IACA,CAAC;AAAA,EACF;AACA,SAAO,OAAO,OAAQ,kBAAmB;AAC1C;",
5
+ "mappings": ";AAGA,SAAS,eAAe,6BAA6B;AAMrD,SAAS,cAAc;AAEvB,IAAM,EAAE,UAAU,IAAI,OAAQ,qBAAsB;AAErC,SAAR,sBACN,WACe;AACf,QAAM,qBAAqB,UAAU;AAAA,IACpC,CAAE,KAAmC,SAAoB;AACxD,UAAK,CAAE,IAAK,KAAK,UAAW,GAAI;AAC/B,YAAK,KAAK,UAAW,IAAI;AAAA,UACxB,MAAM,KAAK;AAAA,UACX,YAAY,KAAK;AAAA,UACjB,MAAM,UAAW,KAAK,WAAW,YAAY,CAAE;AAAA,UAC/C,UAAU,CAAC;AAAA,QACZ;AAAA,MACD;AAEA,UAAK,KAAK,UAAW,EAAE,SAAS,KAAM,IAAK;AAC3C,aAAO;AAAA,IACR;AAAA,IACA,CAAC;AAAA,EACF;AACA,SAAO,OAAO,OAAQ,kBAAmB;AAC1C;",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,4 @@
1
+ // packages/global-styles-ui/src/font-library-modal/utils/preview-styles.ts
1
2
  function findNearest(input, numbers) {
2
3
  if (numbers.length === 0) {
3
4
  return null;
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/font-library-modal/utils/preview-styles.ts"],
4
4
  "sourcesContent": ["/**\n * External dependencies\n */\nimport type { CSSProperties } from 'react';\n\n/**\n * Internal dependencies\n */\nimport type { FontFace, FontFamily } from '../types';\n\nfunction findNearest( input: number, numbers: number[] ) {\n\t// If the numbers array is empty, return null\n\tif ( numbers.length === 0 ) {\n\t\treturn null;\n\t}\n\t// Sort the array based on the absolute difference with the input\n\tnumbers.sort( ( a, b ) => Math.abs( input - a ) - Math.abs( input - b ) );\n\t// Return the first element (which will be the nearest) from the sorted array\n\treturn numbers[ 0 ];\n}\n\nfunction extractFontWeights( fontFaces: FontFace[] ): number[] {\n\tconst result: number[] = [];\n\n\tfontFaces.forEach( ( face ) => {\n\t\tconst weights = String( face.fontWeight ).split( ' ' );\n\n\t\tif ( weights.length === 2 ) {\n\t\t\tconst start = parseInt( weights[ 0 ] );\n\t\t\tconst end = parseInt( weights[ 1 ] );\n\n\t\t\tfor ( let i = start; i <= end; i += 100 ) {\n\t\t\t\tresult.push( i );\n\t\t\t}\n\t\t} else if ( weights.length === 1 ) {\n\t\t\tresult.push( parseInt( weights[ 0 ] ) );\n\t\t}\n\t} );\n\n\treturn result;\n}\n\n/*\n * Format the font family to use in the CSS font-family property of a CSS rule.\n *\n * The input can be a string with the font family name or a string with multiple font family names separated by commas.\n * It follows the recommendations from the CSS Fonts Module Level 4.\n * https://www.w3.org/TR/css-fonts-4/#font-family-prop\n *\n * @param {string} input - The font family.\n * @return {string} The formatted font family.\n *\n * Example:\n * formatFontFamily( \"Open Sans, Font+Name, sans-serif\" ) => '\"Open Sans\", \"Font+Name\", sans-serif'\n * formatFontFamily( \"'Open Sans', generic(kai), sans-serif\" ) => '\"Open Sans\", sans-serif'\n * formatFontFamily( \"DotGothic16, Slabo 27px, serif\" ) => '\"DotGothic16\",\"Slabo 27px\",serif'\n * formatFontFamily( \"Mine's, Moe's Typography\" ) => `\"mine's\",\"Moe's Typography\"`\n */\nexport function formatFontFamily( input: string ) {\n\t// Matches strings that are not exclusively alphabetic characters or hyphens, and do not exactly follow the pattern generic(alphabetic characters or hyphens).\n\tconst regex = /^(?!generic\\([ a-zA-Z\\-]+\\)$)(?!^[a-zA-Z\\-]+$).+/;\n\tconst output = input.trim();\n\n\tconst formatItem = ( item: string ) => {\n\t\titem = item.trim();\n\t\tif ( item.match( regex ) ) {\n\t\t\t// removes leading and trailing quotes.\n\t\t\titem = item.replace( /^[\"']|[\"']$/g, '' );\n\t\t\treturn `\"${ item }\"`;\n\t\t}\n\t\treturn item;\n\t};\n\n\tif ( output.includes( ',' ) ) {\n\t\treturn output\n\t\t\t.split( ',' )\n\t\t\t.map( formatItem )\n\t\t\t.filter( ( item ) => item !== '' )\n\t\t\t.join( ', ' );\n\t}\n\n\treturn formatItem( output );\n}\n\n/*\n * Format the font face name to use in the font-family property of a font face.\n *\n * The input can be a string with the font face name or a string with multiple font face names separated by commas.\n * It removes the leading and trailing quotes from the font face name.\n *\n * @param {string} input - The font face name.\n * @return {string} The formatted font face name.\n *\n * Example:\n * formatFontFaceName(\"Open Sans\") => \"Open Sans\"\n * formatFontFaceName(\"'Open Sans', sans-serif\") => \"Open Sans\"\n * formatFontFaceName(\", 'Open Sans', 'Helvetica Neue', sans-serif\") => \"Open Sans\"\n */\nexport function formatFontFaceName( input: string ) {\n\tif ( ! input ) {\n\t\treturn '';\n\t}\n\n\tlet output = input.trim();\n\tif ( output.includes( ',' ) ) {\n\t\toutput = (\n\t\t\toutput\n\t\t\t\t.split( ',' )\n\t\t\t\t// finds the first item that is not an empty string.\n\t\t\t\t.find( ( item ) => item.trim() !== '' ) ?? ''\n\t\t).trim();\n\t}\n\t// removes leading and trailing quotes.\n\toutput = output.replace( /^[\"']|[\"']$/g, '' );\n\n\t// Firefox needs the font name to be wrapped in double quotes meanwhile other browsers don't.\n\tif ( window.navigator.userAgent.toLowerCase().includes( 'firefox' ) ) {\n\t\toutput = `\"${ output }\"`;\n\t}\n\treturn output;\n}\n\nexport function getFamilyPreviewStyle(\n\tfamily: FontFamily | FontFace\n): CSSProperties {\n\tconst style: CSSProperties = {\n\t\tfontFamily: formatFontFamily( family.fontFamily ),\n\t};\n\n\tif ( ! ( 'fontFace' in family ) || ! Array.isArray( family.fontFace ) ) {\n\t\tstyle.fontWeight = '400';\n\t\tstyle.fontStyle = 'normal';\n\t\treturn style;\n\t}\n\n\tif ( family.fontFace ) {\n\t\t//get all the font faces with normal style\n\t\tconst normalFaces = family.fontFace.filter(\n\t\t\t( face ) =>\n\t\t\t\tface?.fontStyle && face.fontStyle.toLowerCase() === 'normal'\n\t\t);\n\t\tif ( normalFaces.length > 0 ) {\n\t\t\tstyle.fontStyle = 'normal';\n\t\t\tconst normalWeights = extractFontWeights( normalFaces );\n\t\t\tconst nearestWeight = findNearest( 400, normalWeights );\n\t\t\tstyle.fontWeight = String( nearestWeight ) || '400';\n\t\t} else {\n\t\t\tstyle.fontStyle =\n\t\t\t\t( family.fontFace.length && family.fontFace[ 0 ].fontStyle ) ||\n\t\t\t\t'normal';\n\t\t\tstyle.fontWeight =\n\t\t\t\t( family.fontFace.length &&\n\t\t\t\t\tString( family.fontFace[ 0 ].fontWeight ) ) ||\n\t\t\t\t'400';\n\t\t}\n\t}\n\n\treturn style;\n}\n\nexport function getFacePreviewStyle( face: FontFace ): CSSProperties {\n\treturn {\n\t\tfontFamily: formatFontFamily( face.fontFamily ),\n\t\tfontStyle: face.fontStyle || 'normal',\n\t\tfontWeight: face.fontWeight || '400',\n\t};\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,4 @@
1
+ // packages/global-styles-ui/src/font-library-modal/utils/set-immutably.ts
1
2
  function setImmutably(object, path, value) {
2
3
  path = Array.isArray(path) ? [...path] : [path];
3
4
  object = Array.isArray(object) ? [...object] : { ...object };
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/font-library-modal/utils/set-immutably.ts"],
4
4
  "sourcesContent": ["/**\n * Immutably sets a value inside an object. Like `lodash#set`, but returning a\n * new object. Treats nullish initial values as empty objects. Clones any\n * nested objects. Supports arrays, too.\n * Duplicated from `packages/global-styles-engine/src/utils/object.ts`\n *\n * @param object Object to set a value in.\n * @param path Path in the object to modify.\n * @param value New value to set.\n * @return Cloned object with the new value set.\n */\nexport function setImmutably(\n\tobject: Object,\n\tpath: string | number | ( string | number )[],\n\tvalue: any\n) {\n\t// Normalize path\n\tpath = Array.isArray( path ) ? [ ...path ] : [ path ];\n\n\t// Shallowly clone the base of the object\n\tobject = Array.isArray( object ) ? [ ...object ] : { ...object };\n\n\tconst leaf = path.pop();\n\n\t// Traverse object from root to leaf, shallowly cloning at each level\n\tlet prev = object;\n\tfor ( const key of path ) {\n\t\t// @ts-expect-error\n\t\tconst lvl = prev[ key ];\n\t\t// @ts-expect-error\n\t\tprev = prev[ key ] = Array.isArray( lvl ) ? [ ...lvl ] : { ...lvl };\n\t}\n\t// @ts-expect-error\n\tprev[ leaf ] = value;\n\n\treturn object;\n}\n"],
5
- "mappings": "AAWO,SAAS,aACf,QACA,MACA,OACC;AAED,SAAO,MAAM,QAAS,IAAK,IAAI,CAAE,GAAG,IAAK,IAAI,CAAE,IAAK;AAGpD,WAAS,MAAM,QAAS,MAAO,IAAI,CAAE,GAAG,MAAO,IAAI,EAAE,GAAG,OAAO;AAE/D,QAAM,OAAO,KAAK,IAAI;AAGtB,MAAI,OAAO;AACX,aAAY,OAAO,MAAO;AAEzB,UAAM,MAAM,KAAM,GAAI;AAEtB,WAAO,KAAM,GAAI,IAAI,MAAM,QAAS,GAAI,IAAI,CAAE,GAAG,GAAI,IAAI,EAAE,GAAG,IAAI;AAAA,EACnE;AAEA,OAAM,IAAK,IAAI;AAEf,SAAO;AACR;",
5
+ "mappings": ";AAWO,SAAS,aACf,QACA,MACA,OACC;AAED,SAAO,MAAM,QAAS,IAAK,IAAI,CAAE,GAAG,IAAK,IAAI,CAAE,IAAK;AAGpD,WAAS,MAAM,QAAS,MAAO,IAAI,CAAE,GAAG,MAAO,IAAI,EAAE,GAAG,OAAO;AAE/D,QAAM,OAAO,KAAK,IAAI;AAGtB,MAAI,OAAO;AACX,aAAY,OAAO,MAAO;AAEzB,UAAM,MAAM,KAAM,GAAI;AAEtB,WAAO,KAAM,GAAI,IAAI,MAAM,QAAS,GAAI,IAAI,CAAE,GAAG,GAAI,IAAI,EAAE,GAAG,IAAI;AAAA,EACnE;AAEA,OAAM,IAAK,IAAI;AAEf,SAAO;AACR;",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,4 @@
1
+ // packages/global-styles-ui/src/font-library-modal/utils/sort-font-faces.ts
1
2
  function getNumericFontWeight(value) {
2
3
  switch (value) {
3
4
  case "normal":
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/font-library-modal/utils/sort-font-faces.ts"],
4
4
  "sourcesContent": ["/**\n * Internal dependencies\n */\nimport type { FontFace } from '../types';\n\nfunction getNumericFontWeight( value: string ): number {\n\tswitch ( value ) {\n\t\tcase 'normal':\n\t\t\treturn 400;\n\t\tcase 'bold':\n\t\t\treturn 700;\n\t\tcase 'bolder':\n\t\t\treturn 500;\n\t\tcase 'lighter':\n\t\t\treturn 300;\n\t\tdefault:\n\t\t\treturn parseInt( value, 10 );\n\t}\n}\n\nexport function sortFontFaces( faces: FontFace[] ): FontFace[] {\n\treturn faces.sort( ( a, b ) => {\n\t\t// Ensure 'normal' fontStyle is always first\n\t\tif ( a.fontStyle === 'normal' && b.fontStyle !== 'normal' ) {\n\t\t\treturn -1;\n\t\t}\n\t\tif ( b.fontStyle === 'normal' && a.fontStyle !== 'normal' ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// If both fontStyles are the same, sort by fontWeight\n\t\tif ( a.fontStyle === b.fontStyle ) {\n\t\t\treturn (\n\t\t\t\tgetNumericFontWeight( a.fontWeight?.toString() ?? 'normal' ) -\n\t\t\t\tgetNumericFontWeight( b.fontWeight?.toString() ?? 'normal' )\n\t\t\t);\n\t\t}\n\n\t\t// Sort other fontStyles alphabetically\n\t\tif ( ! a.fontStyle || ! b.fontStyle ) {\n\t\t\treturn ! a.fontStyle ? 1 : -1;\n\t\t}\n\n\t\treturn a.fontStyle.localeCompare( b.fontStyle );\n\t} );\n}\n"],
5
- "mappings": "AAKA,SAAS,qBAAsB,OAAwB;AACtD,UAAS,OAAQ;AAAA,IAChB,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR;AACC,aAAO,SAAU,OAAO,EAAG;AAAA,EAC7B;AACD;AAEO,SAAS,cAAe,OAAgC;AAC9D,SAAO,MAAM,KAAM,CAAE,GAAG,MAAO;AAE9B,QAAK,EAAE,cAAc,YAAY,EAAE,cAAc,UAAW;AAC3D,aAAO;AAAA,IACR;AACA,QAAK,EAAE,cAAc,YAAY,EAAE,cAAc,UAAW;AAC3D,aAAO;AAAA,IACR;AAGA,QAAK,EAAE,cAAc,EAAE,WAAY;AAClC,aACC,qBAAsB,EAAE,YAAY,SAAS,KAAK,QAAS,IAC3D,qBAAsB,EAAE,YAAY,SAAS,KAAK,QAAS;AAAA,IAE7D;AAGA,QAAK,CAAE,EAAE,aAAa,CAAE,EAAE,WAAY;AACrC,aAAO,CAAE,EAAE,YAAY,IAAI;AAAA,IAC5B;AAEA,WAAO,EAAE,UAAU,cAAe,EAAE,SAAU;AAAA,EAC/C,CAAE;AACH;",
5
+ "mappings": ";AAKA,SAAS,qBAAsB,OAAwB;AACtD,UAAS,OAAQ;AAAA,IAChB,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR;AACC,aAAO,SAAU,OAAO,EAAG;AAAA,EAC7B;AACD;AAEO,SAAS,cAAe,OAAgC;AAC9D,SAAO,MAAM,KAAM,CAAE,GAAG,MAAO;AAE9B,QAAK,EAAE,cAAc,YAAY,EAAE,cAAc,UAAW;AAC3D,aAAO;AAAA,IACR;AACA,QAAK,EAAE,cAAc,YAAY,EAAE,cAAc,UAAW;AAC3D,aAAO;AAAA,IACR;AAGA,QAAK,EAAE,cAAc,EAAE,WAAY;AAClC,aACC,qBAAsB,EAAE,YAAY,SAAS,KAAK,QAAS,IAC3D,qBAAsB,EAAE,YAAY,SAAS,KAAK,QAAS;AAAA,IAE7D;AAGA,QAAK,CAAE,EAAE,aAAa,CAAE,EAAE,WAAY;AACrC,aAAO,CAAE,EAAE,YAAY,IAAI;AAAA,IAC5B;AAEA,WAAO,EAAE,UAAU,cAAe,EAAE,SAAU;AAAA,EAC/C,CAAE;AACH;",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,4 @@
1
+ // packages/global-styles-ui/src/font-library-modal/utils/toggleFont.ts
1
2
  function toggleFont(font, face, initialfonts = []) {
2
3
  const isFontActivated = (f) => f.slug === font.slug;
3
4
  const getActivatedFont = (fonts) => fonts.find(isFontActivated);
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/font-library-modal/utils/toggleFont.ts"],
4
4
  "sourcesContent": ["/**\n * Toggles the activation of a given font or font variant within a list of custom fonts.\n *\n * - If only the font is provided (without face), the entire font family's activation is toggled.\n * - If both font and face are provided, the activation of the specific font variant is toggled.\n *\n * @param {Object} font - The font to be toggled.\n * @param {string} font.slug - The unique identifier for the font.\n * @param {Array} [font.fontFace] - The list of font variants (faces) associated with the font.\n *\n * @param {Object} [face] - The specific font variant to be toggled.\n * @param {string} face.fontWeight - The weight of the font variant.\n * @param {string} face.fontStyle - The style of the font variant.\n *\n * @param {Array} initialfonts - The initial list of custom fonts.\n *\n * @return {Array} - The updated list of custom fonts with the font/font variant toggled.\n *\n * @example\n * const customFonts = [\n * { slug: 'roboto', fontFace: [{ fontWeight: '400', fontStyle: 'normal' }] }\n * ];\n *\n * toggleFont({ slug: 'roboto' }, null, customFonts);\n * // This will remove 'roboto' from customFonts\n *\n * toggleFont({ slug: 'roboto' }, { fontWeight: '400', fontStyle: 'normal' }, customFonts);\n * // This will remove the specified face from 'roboto' in customFonts\n *\n * toggleFont({ slug: 'roboto' }, { fontWeight: '500', fontStyle: 'normal' }, customFonts);\n * // This will add the specified face to 'roboto' in customFonts\n */\n/**\n * Internal dependencies\n */\nimport type { FontFamily, FontFace } from '../types';\n\nexport function toggleFont(\n\tfont: FontFamily,\n\tface?: FontFace,\n\tinitialfonts: FontFamily[] = []\n): FontFamily[] {\n\t// Helper to check if a font is activated based on its slug\n\tconst isFontActivated = ( f: FontFamily ): boolean => f.slug === font.slug;\n\n\t// Helper to get the activated font from a list of fonts\n\tconst getActivatedFont = ( fonts: FontFamily[] ): FontFamily | undefined =>\n\t\tfonts.find( isFontActivated );\n\n\t// Toggle the activation status of an entire font family\n\tconst toggleEntireFontFamily = (\n\t\tactivatedFont: FontFamily | undefined\n\t): FontFamily[] => {\n\t\tif ( ! activatedFont ) {\n\t\t\t// If the font is not active, activate the entire font family\n\t\t\treturn [ ...initialfonts, font ];\n\t\t}\n\t\t// If the font is already active, deactivate the entire font family\n\t\treturn initialfonts.filter(\n\t\t\t( f: FontFamily ) => ! isFontActivated( f )\n\t\t);\n\t};\n\n\t// Toggle the activation status of a specific font variant\n\tconst toggleFontVariant = (\n\t\tactivatedFont: FontFamily | undefined\n\t): FontFamily[] => {\n\t\tconst isFaceActivated = ( f: FontFace ): boolean =>\n\t\t\tf.fontWeight === face!.fontWeight &&\n\t\t\tf.fontStyle === face!.fontStyle;\n\n\t\tif ( ! activatedFont ) {\n\t\t\t// If the font family is not active, activate the font family with the font variant\n\t\t\treturn [ ...initialfonts, { ...font, fontFace: [ face! ] } ];\n\t\t}\n\n\t\tlet newFontFaces = activatedFont.fontFace || [];\n\n\t\tif ( newFontFaces.find( isFaceActivated ) ) {\n\t\t\t// If the font variant is active, deactivate it\n\t\t\tnewFontFaces = newFontFaces.filter(\n\t\t\t\t( f: FontFace ) => ! isFaceActivated( f )\n\t\t\t);\n\t\t} else {\n\t\t\t// If the font variant is not active, activate it\n\t\t\tnewFontFaces = [ ...newFontFaces, face! ];\n\t\t}\n\n\t\t// If there are no more font faces, deactivate the font family\n\t\tif ( newFontFaces.length === 0 ) {\n\t\t\treturn initialfonts.filter(\n\t\t\t\t( f: FontFamily ) => ! isFontActivated( f )\n\t\t\t);\n\t\t}\n\n\t\t// Return updated fonts list with toggled font variant\n\t\treturn initialfonts.map( ( f: FontFamily ) =>\n\t\t\tisFontActivated( f ) ? { ...f, fontFace: newFontFaces } : f\n\t\t);\n\t};\n\n\tconst activatedFont = getActivatedFont( initialfonts );\n\n\tif ( ! face ) {\n\t\treturn toggleEntireFontFamily( activatedFont );\n\t}\n\n\treturn toggleFontVariant( activatedFont );\n}\n"],
5
- "mappings": "AAqCO,SAAS,WACf,MACA,MACA,eAA6B,CAAC,GACf;AAEf,QAAM,kBAAkB,CAAE,MAA4B,EAAE,SAAS,KAAK;AAGtE,QAAM,mBAAmB,CAAE,UAC1B,MAAM,KAAM,eAAgB;AAG7B,QAAM,yBAAyB,CAC9BA,mBACkB;AAClB,QAAK,CAAEA,gBAAgB;AAEtB,aAAO,CAAE,GAAG,cAAc,IAAK;AAAA,IAChC;AAEA,WAAO,aAAa;AAAA,MACnB,CAAE,MAAmB,CAAE,gBAAiB,CAAE;AAAA,IAC3C;AAAA,EACD;AAGA,QAAM,oBAAoB,CACzBA,mBACkB;AAClB,UAAM,kBAAkB,CAAE,MACzB,EAAE,eAAe,KAAM,cACvB,EAAE,cAAc,KAAM;AAEvB,QAAK,CAAEA,gBAAgB;AAEtB,aAAO,CAAE,GAAG,cAAc,EAAE,GAAG,MAAM,UAAU,CAAE,IAAM,EAAE,CAAE;AAAA,IAC5D;AAEA,QAAI,eAAeA,eAAc,YAAY,CAAC;AAE9C,QAAK,aAAa,KAAM,eAAgB,GAAI;AAE3C,qBAAe,aAAa;AAAA,QAC3B,CAAE,MAAiB,CAAE,gBAAiB,CAAE;AAAA,MACzC;AAAA,IACD,OAAO;AAEN,qBAAe,CAAE,GAAG,cAAc,IAAM;AAAA,IACzC;AAGA,QAAK,aAAa,WAAW,GAAI;AAChC,aAAO,aAAa;AAAA,QACnB,CAAE,MAAmB,CAAE,gBAAiB,CAAE;AAAA,MAC3C;AAAA,IACD;AAGA,WAAO,aAAa;AAAA,MAAK,CAAE,MAC1B,gBAAiB,CAAE,IAAI,EAAE,GAAG,GAAG,UAAU,aAAa,IAAI;AAAA,IAC3D;AAAA,EACD;AAEA,QAAM,gBAAgB,iBAAkB,YAAa;AAErD,MAAK,CAAE,MAAO;AACb,WAAO,uBAAwB,aAAc;AAAA,EAC9C;AAEA,SAAO,kBAAmB,aAAc;AACzC;",
5
+ "mappings": ";AAqCO,SAAS,WACf,MACA,MACA,eAA6B,CAAC,GACf;AAEf,QAAM,kBAAkB,CAAE,MAA4B,EAAE,SAAS,KAAK;AAGtE,QAAM,mBAAmB,CAAE,UAC1B,MAAM,KAAM,eAAgB;AAG7B,QAAM,yBAAyB,CAC9BA,mBACkB;AAClB,QAAK,CAAEA,gBAAgB;AAEtB,aAAO,CAAE,GAAG,cAAc,IAAK;AAAA,IAChC;AAEA,WAAO,aAAa;AAAA,MACnB,CAAE,MAAmB,CAAE,gBAAiB,CAAE;AAAA,IAC3C;AAAA,EACD;AAGA,QAAM,oBAAoB,CACzBA,mBACkB;AAClB,UAAM,kBAAkB,CAAE,MACzB,EAAE,eAAe,KAAM,cACvB,EAAE,cAAc,KAAM;AAEvB,QAAK,CAAEA,gBAAgB;AAEtB,aAAO,CAAE,GAAG,cAAc,EAAE,GAAG,MAAM,UAAU,CAAE,IAAM,EAAE,CAAE;AAAA,IAC5D;AAEA,QAAI,eAAeA,eAAc,YAAY,CAAC;AAE9C,QAAK,aAAa,KAAM,eAAgB,GAAI;AAE3C,qBAAe,aAAa;AAAA,QAC3B,CAAE,MAAiB,CAAE,gBAAiB,CAAE;AAAA,MACzC;AAAA,IACD,OAAO;AAEN,qBAAe,CAAE,GAAG,cAAc,IAAM;AAAA,IACzC;AAGA,QAAK,aAAa,WAAW,GAAI;AAChC,aAAO,aAAa;AAAA,QACnB,CAAE,MAAmB,CAAE,gBAAiB,CAAE;AAAA,MAC3C;AAAA,IACD;AAGA,WAAO,aAAa;AAAA,MAAK,CAAE,MAC1B,gBAAiB,CAAE,IAAI,EAAE,GAAG,GAAG,UAAU,aAAa,IAAI;AAAA,IAC3D;AAAA,EACD;AAEA,QAAM,gBAAgB,iBAAkB,YAAa;AAErD,MAAK,CAAE,MAAO;AACb,WAAO,uBAAwB,aAAc;AAAA,EAC9C;AAEA,SAAO,kBAAmB,aAAc;AACzC;",
6
6
  "names": ["activatedFont"]
7
7
  }
@@ -1,6 +1,7 @@
1
- import { jsx } from "react/jsx-runtime";
1
+ // packages/global-styles-ui/src/font-sizes/confirm-delete-font-size-dialog.tsx
2
2
  import { __experimentalConfirmDialog as ConfirmDialog } from "@wordpress/components";
3
3
  import { __, sprintf } from "@wordpress/i18n";
4
+ import { jsx } from "react/jsx-runtime";
4
5
  function ConfirmDeleteFontSizeDialog({
5
6
  fontSize,
6
7
  isOpen,
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/font-sizes/confirm-delete-font-size-dialog.tsx"],
4
4
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __experimentalConfirmDialog as ConfirmDialog } from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport type { FontSize } from '@wordpress/global-styles-engine';\n\ninterface ConfirmDeleteFontSizeDialogProps {\n\tfontSize: FontSize;\n\tisOpen: boolean;\n\ttoggleOpen: () => void;\n\thandleRemoveFontSize: ( fontSize: FontSize ) => void;\n}\n\nfunction ConfirmDeleteFontSizeDialog( {\n\tfontSize,\n\tisOpen,\n\ttoggleOpen,\n\thandleRemoveFontSize,\n}: ConfirmDeleteFontSizeDialogProps ) {\n\tconst handleConfirm = async () => {\n\t\ttoggleOpen();\n\t\thandleRemoveFontSize( fontSize );\n\t};\n\n\tconst handleCancel = () => {\n\t\ttoggleOpen();\n\t};\n\n\treturn (\n\t\t<ConfirmDialog\n\t\t\tisOpen={ isOpen }\n\t\t\tcancelButtonText={ __( 'Cancel' ) }\n\t\t\tconfirmButtonText={ __( 'Delete' ) }\n\t\t\tonCancel={ handleCancel }\n\t\t\tonConfirm={ handleConfirm }\n\t\t\tsize=\"medium\"\n\t\t>\n\t\t\t{ fontSize &&\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: %s: Name of the font size preset. */\n\t\t\t\t\t__(\n\t\t\t\t\t\t'Are you sure you want to delete \"%s\" font size preset?'\n\t\t\t\t\t),\n\t\t\t\t\tfontSize.name\n\t\t\t\t) }\n\t\t</ConfirmDialog>\n\t);\n}\n\nexport default ConfirmDeleteFontSizeDialog;\n"],
5
- "mappings": "AA8BE;AA3BF,SAAS,+BAA+B,qBAAqB;AAC7D,SAAS,IAAI,eAAe;AAU5B,SAAS,4BAA6B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAsC;AACrC,QAAM,gBAAgB,YAAY;AACjC,eAAW;AACX,yBAAsB,QAAS;AAAA,EAChC;AAEA,QAAM,eAAe,MAAM;AAC1B,eAAW;AAAA,EACZ;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,kBAAmB,GAAI,QAAS;AAAA,MAChC,mBAAoB,GAAI,QAAS;AAAA,MACjC,UAAW;AAAA,MACX,WAAY;AAAA,MACZ,MAAK;AAAA,MAEH,sBACD;AAAA;AAAA,QAEC;AAAA,UACC;AAAA,QACD;AAAA,QACA,SAAS;AAAA,MACV;AAAA;AAAA,EACF;AAEF;AAEA,IAAO,0CAAQ;",
5
+ "mappings": ";AAGA,SAAS,+BAA+B,qBAAqB;AAC7D,SAAS,IAAI,eAAe;AA0B1B;AAhBF,SAAS,4BAA6B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAsC;AACrC,QAAM,gBAAgB,YAAY;AACjC,eAAW;AACX,yBAAsB,QAAS;AAAA,EAChC;AAEA,QAAM,eAAe,MAAM;AAC1B,eAAW;AAAA,EACZ;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,kBAAmB,GAAI,QAAS;AAAA,MAChC,mBAAoB,GAAI,QAAS;AAAA,MACjC,UAAW;AAAA,MACX,WAAY;AAAA,MACZ,MAAK;AAAA,MAEH,sBACD;AAAA;AAAA,QAEC;AAAA,UACC;AAAA,QACD;AAAA,QACA,SAAS;AAAA,MACV;AAAA;AAAA,EACF;AAEF;AAEA,IAAO,0CAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,7 @@
1
- import { jsx } from "react/jsx-runtime";
1
+ // packages/global-styles-ui/src/font-sizes/confirm-reset-font-sizes-dialog.tsx
2
2
  import { __experimentalConfirmDialog as ConfirmDialog } from "@wordpress/components";
3
3
  import { __ } from "@wordpress/i18n";
4
+ import { jsx } from "react/jsx-runtime";
4
5
  function ConfirmResetFontSizesDialog({
5
6
  text,
6
7
  confirmButtonText,
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/font-sizes/confirm-reset-font-sizes-dialog.tsx"],
4
4
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __experimentalConfirmDialog as ConfirmDialog } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\ninterface ConfirmResetFontSizesDialogProps {\n\ttext: string;\n\tconfirmButtonText: string;\n\tisOpen: boolean;\n\ttoggleOpen: () => void;\n\tonConfirm: () => void;\n}\n\nfunction ConfirmResetFontSizesDialog( {\n\ttext,\n\tconfirmButtonText,\n\tisOpen,\n\ttoggleOpen,\n\tonConfirm,\n}: ConfirmResetFontSizesDialogProps ) {\n\tconst handleConfirm = async () => {\n\t\ttoggleOpen();\n\t\tonConfirm();\n\t};\n\n\tconst handleCancel = () => {\n\t\ttoggleOpen();\n\t};\n\n\treturn (\n\t\t<ConfirmDialog\n\t\t\tisOpen={ isOpen }\n\t\t\tcancelButtonText={ __( 'Cancel' ) }\n\t\t\tconfirmButtonText={ confirmButtonText }\n\t\t\tonCancel={ handleCancel }\n\t\t\tonConfirm={ handleConfirm }\n\t\t\tsize=\"medium\"\n\t\t>\n\t\t\t{ text }\n\t\t</ConfirmDialog>\n\t);\n}\n\nexport default ConfirmResetFontSizesDialog;\n"],
5
- "mappings": "AA+BE;AA5BF,SAAS,+BAA+B,qBAAqB;AAC7D,SAAS,UAAU;AAUnB,SAAS,4BAA6B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAsC;AACrC,QAAM,gBAAgB,YAAY;AACjC,eAAW;AACX,cAAU;AAAA,EACX;AAEA,QAAM,eAAe,MAAM;AAC1B,eAAW;AAAA,EACZ;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,kBAAmB,GAAI,QAAS;AAAA,MAChC;AAAA,MACA,UAAW;AAAA,MACX,WAAY;AAAA,MACZ,MAAK;AAAA,MAEH;AAAA;AAAA,EACH;AAEF;AAEA,IAAO,0CAAQ;",
5
+ "mappings": ";AAGA,SAAS,+BAA+B,qBAAqB;AAC7D,SAAS,UAAU;AA2BjB;AAjBF,SAAS,4BAA6B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAsC;AACrC,QAAM,gBAAgB,YAAY;AACjC,eAAW;AACX,cAAU;AAAA,EACX;AAEA,QAAM,eAAe,MAAM;AAC1B,eAAW;AAAA,EACZ;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,kBAAmB,GAAI,QAAS;AAAA,MAChC;AAAA,MACA,UAAW;AAAA,MACX,WAAY;AAAA,MACZ,MAAK;AAAA,MAEH;AAAA;AAAA,EACH;AAEF;AAEA,IAAO,0CAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,8 @@
1
- import { jsx } from "react/jsx-runtime";
1
+ // packages/global-styles-ui/src/font-sizes/font-size-preview.tsx
2
2
  import { getComputedFluidTypographyValue } from "@wordpress/block-editor";
3
3
  import { __ } from "@wordpress/i18n";
4
4
  import { useStyle } from "../hooks";
5
+ import { jsx } from "react/jsx-runtime";
5
6
  function FontSizePreview({ fontSize }) {
6
7
  const [font] = useStyle("typography");
7
8
  const input = typeof fontSize?.fluid === "object" && fontSize?.fluid?.min && fontSize?.fluid?.max ? {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/font-sizes/font-size-preview.tsx"],
4
4
  "sourcesContent": ["/**\n * WordPress dependencies\n */\n// @ts-expect-error: Not typed yet.\nimport { getComputedFluidTypographyValue } from '@wordpress/block-editor';\nimport { __ } from '@wordpress/i18n';\nimport type { FontSize } from '@wordpress/global-styles-engine';\n\n/**\n * Internal dependencies\n */\nimport { useStyle } from '../hooks';\n\ninterface FontSizePreviewProps {\n\tfontSize: FontSize;\n}\n\nfunction FontSizePreview( { fontSize }: FontSizePreviewProps ) {\n\tconst [ font ] = useStyle< { fontFamily?: string } >( 'typography' );\n\n\tconst input =\n\t\ttypeof fontSize?.fluid === 'object' &&\n\t\tfontSize?.fluid?.min &&\n\t\tfontSize?.fluid?.max\n\t\t\t? {\n\t\t\t\t\tminimumFontSize: fontSize.fluid.min,\n\t\t\t\t\tmaximumFontSize: fontSize.fluid.max,\n\t\t\t }\n\t\t\t: {\n\t\t\t\t\tfontSize: fontSize.size,\n\t\t\t };\n\n\tconst computedFontSize = getComputedFluidTypographyValue( input );\n\treturn (\n\t\t<div\n\t\t\tclassName=\"global-styles-ui-typography-preview\"\n\t\t\tstyle={ {\n\t\t\t\tfontSize: computedFontSize,\n\t\t\t\tfontFamily: font?.fontFamily ?? 'serif',\n\t\t\t} }\n\t\t>\n\t\t\t{ __( 'Aa' ) }\n\t\t</div>\n\t);\n}\n\nexport default FontSizePreview;\n"],
5
- "mappings": "AAkCE;AA9BF,SAAS,uCAAuC;AAChD,SAAS,UAAU;AAMnB,SAAS,gBAAgB;AAMzB,SAAS,gBAAiB,EAAE,SAAS,GAA0B;AAC9D,QAAM,CAAE,IAAK,IAAI,SAAqC,YAAa;AAEnE,QAAM,QACL,OAAO,UAAU,UAAU,YAC3B,UAAU,OAAO,OACjB,UAAU,OAAO,MACd;AAAA,IACA,iBAAiB,SAAS,MAAM;AAAA,IAChC,iBAAiB,SAAS,MAAM;AAAA,EAChC,IACA;AAAA,IACA,UAAU,SAAS;AAAA,EACnB;AAEJ,QAAM,mBAAmB,gCAAiC,KAAM;AAChE,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAU;AAAA,MACV,OAAQ;AAAA,QACP,UAAU;AAAA,QACV,YAAY,MAAM,cAAc;AAAA,MACjC;AAAA,MAEE,aAAI,IAAK;AAAA;AAAA,EACZ;AAEF;AAEA,IAAO,4BAAQ;",
5
+ "mappings": ";AAIA,SAAS,uCAAuC;AAChD,SAAS,UAAU;AAMnB,SAAS,gBAAgB;AAuBvB;AAjBF,SAAS,gBAAiB,EAAE,SAAS,GAA0B;AAC9D,QAAM,CAAE,IAAK,IAAI,SAAqC,YAAa;AAEnE,QAAM,QACL,OAAO,UAAU,UAAU,YAC3B,UAAU,OAAO,OACjB,UAAU,OAAO,MACd;AAAA,IACA,iBAAiB,SAAS,MAAM;AAAA,IAChC,iBAAiB,SAAS,MAAM;AAAA,EAChC,IACA;AAAA,IACA,UAAU,SAAS;AAAA,EACnB;AAEJ,QAAM,mBAAmB,gCAAiC,KAAM;AAChE,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAU;AAAA,MACV,OAAQ;AAAA,QACP,UAAU;AAAA,QACV,YAAY,MAAM,cAAc;AAAA,MACjC;AAAA,MAEE,aAAI,IAAK;AAAA;AAAA,EACZ;AAEF;AAEA,IAAO,4BAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,4 @@
1
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
1
+ // packages/global-styles-ui/src/font-sizes/font-size.tsx
2
2
  import { __, sprintf } from "@wordpress/i18n";
3
3
  import {
4
4
  __experimentalSpacer as Spacer,
@@ -20,7 +20,8 @@ import RenameFontSizeDialog from "./rename-font-size-dialog";
20
20
  import { SizeControl } from "../size-control";
21
21
  import { useSetting } from "../hooks";
22
22
  import { unlock } from "../lock-unlock";
23
- const { Menu } = unlock(componentsPrivateApis);
23
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
24
+ var { Menu } = unlock(componentsPrivateApis);
24
25
  function FontSize() {
25
26
  const [isDeleteConfirmOpen, setIsDeleteConfirmOpen] = useState(false);
26
27
  const [isRenameDialogOpen, setIsRenameDialogOpen] = useState(false);