@wordpress/edit-site 5.28.4 → 5.28.6

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 (49) hide show
  1. package/build/components/block-editor/use-site-editor-settings.js +1 -1
  2. package/build/components/block-editor/use-site-editor-settings.js.map +1 -1
  3. package/build/components/global-styles/font-library-modal/context.js +63 -59
  4. package/build/components/global-styles/font-library-modal/context.js.map +1 -1
  5. package/build/components/global-styles/font-library-modal/font-collection.js +6 -6
  6. package/build/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  7. package/build/components/global-styles/font-library-modal/index.js +17 -4
  8. package/build/components/global-styles/font-library-modal/index.js.map +1 -1
  9. package/build/components/global-styles/font-library-modal/installed-fonts.js +10 -1
  10. package/build/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  11. package/build/components/global-styles/font-library-modal/upload-fonts.js +46 -20
  12. package/build/components/global-styles/font-library-modal/upload-fonts.js.map +1 -1
  13. package/build/components/global-styles/font-library-modal/utils/index.js +39 -5
  14. package/build/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  15. package/build/components/keyboard-shortcuts/global.js +17 -3
  16. package/build/components/keyboard-shortcuts/global.js.map +1 -1
  17. package/build/components/resizable-frame/index.js +2 -1
  18. package/build/components/resizable-frame/index.js.map +1 -1
  19. package/build-module/components/block-editor/use-site-editor-settings.js +1 -1
  20. package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
  21. package/build-module/components/global-styles/font-library-modal/context.js +65 -61
  22. package/build-module/components/global-styles/font-library-modal/context.js.map +1 -1
  23. package/build-module/components/global-styles/font-library-modal/font-collection.js +6 -6
  24. package/build-module/components/global-styles/font-library-modal/font-collection.js.map +1 -1
  25. package/build-module/components/global-styles/font-library-modal/index.js +17 -4
  26. package/build-module/components/global-styles/font-library-modal/index.js.map +1 -1
  27. package/build-module/components/global-styles/font-library-modal/installed-fonts.js +10 -1
  28. package/build-module/components/global-styles/font-library-modal/installed-fonts.js.map +1 -1
  29. package/build-module/components/global-styles/font-library-modal/upload-fonts.js +46 -20
  30. package/build-module/components/global-styles/font-library-modal/upload-fonts.js.map +1 -1
  31. package/build-module/components/global-styles/font-library-modal/utils/index.js +38 -5
  32. package/build-module/components/global-styles/font-library-modal/utils/index.js.map +1 -1
  33. package/build-module/components/keyboard-shortcuts/global.js +17 -3
  34. package/build-module/components/keyboard-shortcuts/global.js.map +1 -1
  35. package/build-module/components/resizable-frame/index.js +2 -1
  36. package/build-module/components/resizable-frame/index.js.map +1 -1
  37. package/build-style/style-rtl.css +20 -11
  38. package/build-style/style.css +20 -11
  39. package/package.json +19 -19
  40. package/src/components/block-editor/use-site-editor-settings.js +0 -2
  41. package/src/components/global-styles/font-library-modal/context.js +122 -107
  42. package/src/components/global-styles/font-library-modal/font-collection.js +10 -8
  43. package/src/components/global-styles/font-library-modal/index.js +21 -14
  44. package/src/components/global-styles/font-library-modal/installed-fonts.js +18 -1
  45. package/src/components/global-styles/font-library-modal/upload-fonts.js +56 -21
  46. package/src/components/global-styles/font-library-modal/utils/index.js +45 -5
  47. package/src/components/global-styles/font-library-modal/utils/test/getDisplaySrcFromFontFace.spec.js +7 -18
  48. package/src/components/keyboard-shortcuts/global.js +16 -4
  49. package/src/components/resizable-frame/index.js +1 -0
@@ -103,7 +103,7 @@ function useNavigateToPreviousEntityRecord() {
103
103
  const history = useHistory();
104
104
  const goBack = (0, _element.useMemo)(() => {
105
105
  const isFocusMode = location.params.focusMode || location.params.postId && _constants.FOCUSABLE_ENTITIES.includes(location.params.postType);
106
- const didComeFromEditorCanvas = previousLocation?.params.postId && previousLocation?.params.postType && previousLocation?.params.canvas === 'edit';
106
+ const didComeFromEditorCanvas = previousLocation?.params.canvas === 'edit';
107
107
  const showBackButton = isFocusMode && didComeFromEditorCanvas;
108
108
  return showBackButton ? () => history.back() : undefined;
109
109
  // Disable reason: previousLocation changes when the component updates for any reason, not
@@ -1 +1 @@
1
- {"version":3,"names":["_data","require","_element","_coreData","_editor","_router","_compose","_store","_lockUnlock","_useNavigateToEntityRecord","_interopRequireDefault","_constants","useBlockEditorSettings","unlock","editorPrivateApis","useLocation","useHistory","routerPrivateApis","useArchiveLabel","templateSlug","taxonomyMatches","match","taxonomy","term","isAuthor","authorSlug","authorMatches","useSelect","select","getEntityRecords","getTaxonomy","getAuthors","coreStore","archiveTypeLabel","archiveNameLabel","labels","singular_name","records","slug","per_page","name","authorRecords","useNavigateToPreviousEntityRecord","location","previousLocation","usePrevious","history","goBack","useMemo","isFocusMode","params","focusMode","postId","FOCUSABLE_ENTITIES","includes","postType","didComeFromEditorCanvas","canvas","showBackButton","back","undefined","useSpecificEditorSettings","onNavigateToEntityRecord","useNavigateToEntityRecord","canvasMode","settings","postWithTemplate","getEditedPostType","getEditedPostId","getEditedPostContext","getCanvasMode","getSettings","editSiteStore","getEditedEntityRecord","usedPostType","usedPostId","_record","_context","archiveLabels","defaultRenderingMode","onNavigateToPreviousEntityRecord","defaultEditorSettings","richEditingEnabled","supportsTemplateMode","__experimentalArchiveTitleTypeLabel","__experimentalArchiveTitleNameLabel","useSiteEditorSettings"],"sources":["@wordpress/edit-site/src/components/block-editor/use-site-editor-settings.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { privateApis as editorPrivateApis } from '@wordpress/editor';\nimport { privateApis as routerPrivateApis } from '@wordpress/router';\nimport { usePrevious } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as editSiteStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\nimport useNavigateToEntityRecord from './use-navigate-to-entity-record';\nimport { FOCUSABLE_ENTITIES } from '../../utils/constants';\n\nconst { useBlockEditorSettings } = unlock( editorPrivateApis );\nconst { useLocation, useHistory } = unlock( routerPrivateApis );\n\nfunction useArchiveLabel( templateSlug ) {\n\tconst taxonomyMatches = templateSlug?.match(\n\t\t/^(category|tag|taxonomy-([^-]+))$|^(((category|tag)|taxonomy-([^-]+))-(.+))$/\n\t);\n\tlet taxonomy;\n\tlet term;\n\tlet isAuthor = false;\n\tlet authorSlug;\n\tif ( taxonomyMatches ) {\n\t\t// If is for a all taxonomies of a type\n\t\tif ( taxonomyMatches[ 1 ] ) {\n\t\t\ttaxonomy = taxonomyMatches[ 2 ]\n\t\t\t\t? taxonomyMatches[ 2 ]\n\t\t\t\t: taxonomyMatches[ 1 ];\n\t\t}\n\t\t// If is for a all taxonomies of a type\n\t\telse if ( taxonomyMatches[ 3 ] ) {\n\t\t\ttaxonomy = taxonomyMatches[ 6 ]\n\t\t\t\t? taxonomyMatches[ 6 ]\n\t\t\t\t: taxonomyMatches[ 4 ];\n\t\t\tterm = taxonomyMatches[ 7 ];\n\t\t}\n\t\ttaxonomy = taxonomy === 'tag' ? 'post_tag' : taxonomy;\n\n\t\t//getTaxonomy( 'category' );\n\t\t//wp.data.select('core').getEntityRecords( 'taxonomy', 'category', {slug: 'newcat'} );\n\t} else {\n\t\tconst authorMatches = templateSlug?.match( /^(author)$|^author-(.+)$/ );\n\t\tif ( authorMatches ) {\n\t\t\tisAuthor = true;\n\t\t\tif ( authorMatches[ 2 ] ) {\n\t\t\t\tauthorSlug = authorMatches[ 2 ];\n\t\t\t}\n\t\t}\n\t}\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityRecords, getTaxonomy, getAuthors } =\n\t\t\t\tselect( coreStore );\n\t\t\tlet archiveTypeLabel;\n\t\t\tlet archiveNameLabel;\n\t\t\tif ( taxonomy ) {\n\t\t\t\tarchiveTypeLabel =\n\t\t\t\t\tgetTaxonomy( taxonomy )?.labels?.singular_name;\n\t\t\t}\n\t\t\tif ( term ) {\n\t\t\t\tconst records = getEntityRecords( 'taxonomy', taxonomy, {\n\t\t\t\t\tslug: term,\n\t\t\t\t\tper_page: 1,\n\t\t\t\t} );\n\t\t\t\tif ( records && records[ 0 ] ) {\n\t\t\t\t\tarchiveNameLabel = records[ 0 ].name;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( isAuthor ) {\n\t\t\t\tarchiveTypeLabel = 'Author';\n\t\t\t\tif ( authorSlug ) {\n\t\t\t\t\tconst authorRecords = getAuthors( { slug: authorSlug } );\n\t\t\t\t\tif ( authorRecords && authorRecords[ 0 ] ) {\n\t\t\t\t\t\tarchiveNameLabel = authorRecords[ 0 ].name;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tarchiveTypeLabel,\n\t\t\t\tarchiveNameLabel,\n\t\t\t};\n\t\t},\n\t\t[ authorSlug, isAuthor, taxonomy, term ]\n\t);\n}\n\nfunction useNavigateToPreviousEntityRecord() {\n\tconst location = useLocation();\n\tconst previousLocation = usePrevious( location );\n\tconst history = useHistory();\n\tconst goBack = useMemo( () => {\n\t\tconst isFocusMode =\n\t\t\tlocation.params.focusMode ||\n\t\t\t( location.params.postId &&\n\t\t\t\tFOCUSABLE_ENTITIES.includes( location.params.postType ) );\n\t\tconst didComeFromEditorCanvas =\n\t\t\tpreviousLocation?.params.postId &&\n\t\t\tpreviousLocation?.params.postType &&\n\t\t\tpreviousLocation?.params.canvas === 'edit';\n\t\tconst showBackButton = isFocusMode && didComeFromEditorCanvas;\n\t\treturn showBackButton ? () => history.back() : undefined;\n\t\t// Disable reason: previousLocation changes when the component updates for any reason, not\n\t\t// just when location changes. Until this is fixed we can't add it to deps. See\n\t\t// https://github.com/WordPress/gutenberg/pull/58710#discussion_r1479219465.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [ location, history ] );\n\treturn goBack;\n}\n\nexport function useSpecificEditorSettings() {\n\tconst onNavigateToEntityRecord = useNavigateToEntityRecord();\n\tconst { templateSlug, canvasMode, settings, postWithTemplate } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetEditedPostType,\n\t\t\t\tgetEditedPostId,\n\t\t\t\tgetEditedPostContext,\n\t\t\t\tgetCanvasMode,\n\t\t\t\tgetSettings,\n\t\t\t} = unlock( select( editSiteStore ) );\n\t\t\tconst { getEditedEntityRecord } = select( coreStore );\n\t\t\tconst usedPostType = getEditedPostType();\n\t\t\tconst usedPostId = getEditedPostId();\n\t\t\tconst _record = getEditedEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tusedPostType,\n\t\t\t\tusedPostId\n\t\t\t);\n\t\t\tconst _context = getEditedPostContext();\n\t\t\treturn {\n\t\t\t\ttemplateSlug: _record.slug,\n\t\t\t\tcanvasMode: getCanvasMode(),\n\t\t\t\tsettings: getSettings(),\n\t\t\t\tpostWithTemplate: _context?.postId,\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\tconst archiveLabels = useArchiveLabel( templateSlug );\n\tconst defaultRenderingMode = postWithTemplate\n\t\t? 'template-locked'\n\t\t: 'post-only';\n\tconst onNavigateToPreviousEntityRecord =\n\t\tuseNavigateToPreviousEntityRecord();\n\tconst defaultEditorSettings = useMemo( () => {\n\t\treturn {\n\t\t\t...settings,\n\n\t\t\trichEditingEnabled: true,\n\t\t\tsupportsTemplateMode: true,\n\t\t\tfocusMode: canvasMode !== 'view',\n\t\t\tdefaultRenderingMode,\n\t\t\tonNavigateToEntityRecord,\n\t\t\tonNavigateToPreviousEntityRecord,\n\t\t\t// I wonder if they should be set in the post editor too\n\t\t\t__experimentalArchiveTitleTypeLabel: archiveLabels.archiveTypeLabel,\n\t\t\t__experimentalArchiveTitleNameLabel: archiveLabels.archiveNameLabel,\n\t\t};\n\t}, [\n\t\tsettings,\n\t\tcanvasMode,\n\t\tdefaultRenderingMode,\n\t\tonNavigateToEntityRecord,\n\t\tonNavigateToPreviousEntityRecord,\n\t\tarchiveLabels.archiveTypeLabel,\n\t\tarchiveLabels.archiveNameLabel,\n\t] );\n\n\treturn defaultEditorSettings;\n}\n\nexport default function useSiteEditorSettings() {\n\tconst defaultEditorSettings = useSpecificEditorSettings();\n\tconst { postType, postId } = useSelect( ( select ) => {\n\t\tconst { getEditedPostType, getEditedPostId } = unlock(\n\t\t\tselect( editSiteStore )\n\t\t);\n\t\tconst usedPostType = getEditedPostType();\n\t\tconst usedPostId = getEditedPostId();\n\t\treturn {\n\t\t\tpostType: usedPostType,\n\t\t\tpostId: usedPostId,\n\t\t};\n\t}, [] );\n\treturn useBlockEditorSettings( defaultEditorSettings, postType, postId );\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_data","require","_element","_coreData","_editor","_router","_compose","_store","_lockUnlock","_useNavigateToEntityRecord","_interopRequireDefault","_constants","useBlockEditorSettings","unlock","editorPrivateApis","useLocation","useHistory","routerPrivateApis","useArchiveLabel","templateSlug","taxonomyMatches","match","taxonomy","term","isAuthor","authorSlug","authorMatches","useSelect","select","getEntityRecords","getTaxonomy","getAuthors","coreStore","archiveTypeLabel","archiveNameLabel","labels","singular_name","records","slug","per_page","name","authorRecords","useNavigateToPreviousEntityRecord","location","previousLocation","usePrevious","history","goBack","useMemo","isFocusMode","params","focusMode","postId","FOCUSABLE_ENTITIES","includes","postType","didComeFromEditorCanvas","canvas","showBackButton","back","undefined","useSpecificEditorSettings","onNavigateToEntityRecord","useNavigateToEntityRecord","canvasMode","settings","postWithTemplate","getEditedPostType","getEditedPostId","getEditedPostContext","getCanvasMode","getSettings","editSiteStore","getEditedEntityRecord","usedPostType","usedPostId","_record","_context","archiveLabels","defaultRenderingMode","onNavigateToPreviousEntityRecord","defaultEditorSettings","richEditingEnabled","supportsTemplateMode","__experimentalArchiveTitleTypeLabel","__experimentalArchiveTitleNameLabel","useSiteEditorSettings"],"sources":["@wordpress/edit-site/src/components/block-editor/use-site-editor-settings.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { privateApis as editorPrivateApis } from '@wordpress/editor';\nimport { privateApis as routerPrivateApis } from '@wordpress/router';\nimport { usePrevious } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as editSiteStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\nimport useNavigateToEntityRecord from './use-navigate-to-entity-record';\nimport { FOCUSABLE_ENTITIES } from '../../utils/constants';\n\nconst { useBlockEditorSettings } = unlock( editorPrivateApis );\nconst { useLocation, useHistory } = unlock( routerPrivateApis );\n\nfunction useArchiveLabel( templateSlug ) {\n\tconst taxonomyMatches = templateSlug?.match(\n\t\t/^(category|tag|taxonomy-([^-]+))$|^(((category|tag)|taxonomy-([^-]+))-(.+))$/\n\t);\n\tlet taxonomy;\n\tlet term;\n\tlet isAuthor = false;\n\tlet authorSlug;\n\tif ( taxonomyMatches ) {\n\t\t// If is for a all taxonomies of a type\n\t\tif ( taxonomyMatches[ 1 ] ) {\n\t\t\ttaxonomy = taxonomyMatches[ 2 ]\n\t\t\t\t? taxonomyMatches[ 2 ]\n\t\t\t\t: taxonomyMatches[ 1 ];\n\t\t}\n\t\t// If is for a all taxonomies of a type\n\t\telse if ( taxonomyMatches[ 3 ] ) {\n\t\t\ttaxonomy = taxonomyMatches[ 6 ]\n\t\t\t\t? taxonomyMatches[ 6 ]\n\t\t\t\t: taxonomyMatches[ 4 ];\n\t\t\tterm = taxonomyMatches[ 7 ];\n\t\t}\n\t\ttaxonomy = taxonomy === 'tag' ? 'post_tag' : taxonomy;\n\n\t\t//getTaxonomy( 'category' );\n\t\t//wp.data.select('core').getEntityRecords( 'taxonomy', 'category', {slug: 'newcat'} );\n\t} else {\n\t\tconst authorMatches = templateSlug?.match( /^(author)$|^author-(.+)$/ );\n\t\tif ( authorMatches ) {\n\t\t\tisAuthor = true;\n\t\t\tif ( authorMatches[ 2 ] ) {\n\t\t\t\tauthorSlug = authorMatches[ 2 ];\n\t\t\t}\n\t\t}\n\t}\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityRecords, getTaxonomy, getAuthors } =\n\t\t\t\tselect( coreStore );\n\t\t\tlet archiveTypeLabel;\n\t\t\tlet archiveNameLabel;\n\t\t\tif ( taxonomy ) {\n\t\t\t\tarchiveTypeLabel =\n\t\t\t\t\tgetTaxonomy( taxonomy )?.labels?.singular_name;\n\t\t\t}\n\t\t\tif ( term ) {\n\t\t\t\tconst records = getEntityRecords( 'taxonomy', taxonomy, {\n\t\t\t\t\tslug: term,\n\t\t\t\t\tper_page: 1,\n\t\t\t\t} );\n\t\t\t\tif ( records && records[ 0 ] ) {\n\t\t\t\t\tarchiveNameLabel = records[ 0 ].name;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( isAuthor ) {\n\t\t\t\tarchiveTypeLabel = 'Author';\n\t\t\t\tif ( authorSlug ) {\n\t\t\t\t\tconst authorRecords = getAuthors( { slug: authorSlug } );\n\t\t\t\t\tif ( authorRecords && authorRecords[ 0 ] ) {\n\t\t\t\t\t\tarchiveNameLabel = authorRecords[ 0 ].name;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tarchiveTypeLabel,\n\t\t\t\tarchiveNameLabel,\n\t\t\t};\n\t\t},\n\t\t[ authorSlug, isAuthor, taxonomy, term ]\n\t);\n}\n\nfunction useNavigateToPreviousEntityRecord() {\n\tconst location = useLocation();\n\tconst previousLocation = usePrevious( location );\n\tconst history = useHistory();\n\tconst goBack = useMemo( () => {\n\t\tconst isFocusMode =\n\t\t\tlocation.params.focusMode ||\n\t\t\t( location.params.postId &&\n\t\t\t\tFOCUSABLE_ENTITIES.includes( location.params.postType ) );\n\t\tconst didComeFromEditorCanvas =\n\t\t\tpreviousLocation?.params.canvas === 'edit';\n\t\tconst showBackButton = isFocusMode && didComeFromEditorCanvas;\n\t\treturn showBackButton ? () => history.back() : undefined;\n\t\t// Disable reason: previousLocation changes when the component updates for any reason, not\n\t\t// just when location changes. Until this is fixed we can't add it to deps. See\n\t\t// https://github.com/WordPress/gutenberg/pull/58710#discussion_r1479219465.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [ location, history ] );\n\treturn goBack;\n}\n\nexport function useSpecificEditorSettings() {\n\tconst onNavigateToEntityRecord = useNavigateToEntityRecord();\n\tconst { templateSlug, canvasMode, settings, postWithTemplate } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetEditedPostType,\n\t\t\t\tgetEditedPostId,\n\t\t\t\tgetEditedPostContext,\n\t\t\t\tgetCanvasMode,\n\t\t\t\tgetSettings,\n\t\t\t} = unlock( select( editSiteStore ) );\n\t\t\tconst { getEditedEntityRecord } = select( coreStore );\n\t\t\tconst usedPostType = getEditedPostType();\n\t\t\tconst usedPostId = getEditedPostId();\n\t\t\tconst _record = getEditedEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tusedPostType,\n\t\t\t\tusedPostId\n\t\t\t);\n\t\t\tconst _context = getEditedPostContext();\n\t\t\treturn {\n\t\t\t\ttemplateSlug: _record.slug,\n\t\t\t\tcanvasMode: getCanvasMode(),\n\t\t\t\tsettings: getSettings(),\n\t\t\t\tpostWithTemplate: _context?.postId,\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\tconst archiveLabels = useArchiveLabel( templateSlug );\n\tconst defaultRenderingMode = postWithTemplate\n\t\t? 'template-locked'\n\t\t: 'post-only';\n\tconst onNavigateToPreviousEntityRecord =\n\t\tuseNavigateToPreviousEntityRecord();\n\tconst defaultEditorSettings = useMemo( () => {\n\t\treturn {\n\t\t\t...settings,\n\n\t\t\trichEditingEnabled: true,\n\t\t\tsupportsTemplateMode: true,\n\t\t\tfocusMode: canvasMode !== 'view',\n\t\t\tdefaultRenderingMode,\n\t\t\tonNavigateToEntityRecord,\n\t\t\tonNavigateToPreviousEntityRecord,\n\t\t\t// I wonder if they should be set in the post editor too\n\t\t\t__experimentalArchiveTitleTypeLabel: archiveLabels.archiveTypeLabel,\n\t\t\t__experimentalArchiveTitleNameLabel: archiveLabels.archiveNameLabel,\n\t\t};\n\t}, [\n\t\tsettings,\n\t\tcanvasMode,\n\t\tdefaultRenderingMode,\n\t\tonNavigateToEntityRecord,\n\t\tonNavigateToPreviousEntityRecord,\n\t\tarchiveLabels.archiveTypeLabel,\n\t\tarchiveLabels.archiveNameLabel,\n\t] );\n\n\treturn defaultEditorSettings;\n}\n\nexport default function useSiteEditorSettings() {\n\tconst defaultEditorSettings = useSpecificEditorSettings();\n\tconst { postType, postId } = useSelect( ( select ) => {\n\t\tconst { getEditedPostType, getEditedPostId } = unlock(\n\t\t\tselect( editSiteStore )\n\t\t);\n\t\tconst usedPostType = getEditedPostType();\n\t\tconst usedPostId = getEditedPostId();\n\t\treturn {\n\t\t\tpostType: usedPostType,\n\t\t\tpostId: usedPostId,\n\t\t};\n\t}, [] );\n\treturn useBlockEditorSettings( defaultEditorSettings, postType, postId );\n}\n"],"mappings":"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"}
@@ -120,18 +120,6 @@ function FontLibraryProvider({
120
120
 
121
121
  // Demo
122
122
  const [loadedFontUrls] = (0, _element.useState)(new Set());
123
-
124
- // Theme data
125
- const {
126
- site,
127
- currentTheme
128
- } = (0, _data.useSelect)(select => {
129
- return {
130
- site: select(_coreData.store).getSite(),
131
- currentTheme: select(_coreData.store).getCurrentTheme()
132
- };
133
- });
134
- const themeUrl = site?.url + '/wp-content/themes/' + currentTheme?.stylesheet;
135
123
  const getAvailableFontsOutline = availableFontFamilies => {
136
124
  const outline = availableFontFamilies.reduce((acc, font) => {
137
125
  const availableFontFaces = font?.fontFace && font.fontFace?.length > 0 ? font?.fontFace.map(face => `${face.fontStyle + face.fontWeight}`) : ['normal400']; // If the font doesn't have fontFace, we assume it is a system font and we add the defaults: normal 400
@@ -159,59 +147,65 @@ function FontLibraryProvider({
159
147
  const getFontFacesActivated = (slug, source) => {
160
148
  return getActivatedFontsOutline(source)[slug] || [];
161
149
  };
162
- async function installFont(fontFamilyToInstall) {
150
+ async function installFonts(fontFamiliesToInstall) {
163
151
  setIsInstalling(true);
164
152
  try {
165
- // Get the font family if it already exists.
166
- let installedFontFamily = await (0, _resolvers.fetchGetFontFamilyBySlug)(fontFamilyToInstall.slug);
153
+ const fontFamiliesToActivate = [];
154
+ let installationErrors = [];
155
+ for (const fontFamilyToInstall of fontFamiliesToInstall) {
156
+ let isANewFontFamily = false;
167
157
 
168
- // Otherwise create it.
169
- if (!installedFontFamily) {
170
- // Prepare font family form data to install.
171
- installedFontFamily = await (0, _resolvers.fetchInstallFontFamily)((0, _utils.makeFontFamilyFormData)(fontFamilyToInstall));
172
- }
158
+ // Get the font family if it already exists.
159
+ let installedFontFamily = await (0, _resolvers.fetchGetFontFamilyBySlug)(fontFamilyToInstall.slug);
173
160
 
174
- // Collect font faces that have already been installed (to be activated later)
175
- const alreadyInstalledFontFaces = installedFontFamily.fontFace && fontFamilyToInstall.fontFace ? installedFontFamily.fontFace.filter(fontFaceToInstall => (0, _utils.checkFontFaceInstalled)(fontFaceToInstall, fontFamilyToInstall.fontFace)) : [];
161
+ // Otherwise create it.
162
+ if (!installedFontFamily) {
163
+ isANewFontFamily = true;
164
+ // Prepare font family form data to install.
165
+ installedFontFamily = await (0, _resolvers.fetchInstallFontFamily)((0, _utils.makeFontFamilyFormData)(fontFamilyToInstall));
166
+ }
176
167
 
177
- // Filter out Font Faces that have already been installed (so that they are not re-installed)
178
- if (installedFontFamily.fontFace && fontFamilyToInstall.fontFace) {
179
- fontFamilyToInstall.fontFace = fontFamilyToInstall.fontFace.filter(fontFaceToInstall => !(0, _utils.checkFontFaceInstalled)(fontFaceToInstall, installedFontFamily.fontFace));
180
- }
168
+ // Collect font faces that have already been installed (to be activated later)
169
+ const alreadyInstalledFontFaces = installedFontFamily.fontFace && fontFamilyToInstall.fontFace ? installedFontFamily.fontFace.filter(fontFaceToInstall => (0, _utils.checkFontFaceInstalled)(fontFaceToInstall, fontFamilyToInstall.fontFace)) : [];
181
170
 
182
- // Install the fonts (upload the font files to the server and create the post in the database).
183
- let sucessfullyInstalledFontFaces = [];
184
- let unsucessfullyInstalledFontFaces = [];
185
- if (fontFamilyToInstall?.fontFace?.length > 0) {
186
- const response = await (0, _utils.batchInstallFontFaces)(installedFontFamily.id, (0, _utils.makeFontFacesFormData)(fontFamilyToInstall));
187
- sucessfullyInstalledFontFaces = response?.successes;
188
- unsucessfullyInstalledFontFaces = response?.errors;
189
- }
190
- const detailedErrorMessage = unsucessfullyInstalledFontFaces.reduce((errorMessageCollection, error) => {
191
- return `${errorMessageCollection} ${error.message}`;
192
- }, '');
171
+ // Filter out Font Faces that have already been installed (so that they are not re-installed)
172
+ if (installedFontFamily.fontFace && fontFamilyToInstall.fontFace) {
173
+ fontFamilyToInstall.fontFace = fontFamilyToInstall.fontFace.filter(fontFaceToInstall => !(0, _utils.checkFontFaceInstalled)(fontFaceToInstall, installedFontFamily.fontFace));
174
+ }
193
175
 
194
- // If there were no successes and nothing already installed then we don't need to activate anything and can bounce now.
195
- if (fontFamilyToInstall?.fontFace?.length > 0 && sucessfullyInstalledFontFaces.length === 0 && alreadyInstalledFontFaces.length === 0) {
196
- throw new Error((0, _i18n.sprintf)( /* translators: %s: Specific error message returned from server. */
197
- (0, _i18n.__)('No font faces were installed. %s'), detailedErrorMessage));
198
- }
176
+ // Install the fonts (upload the font files to the server and create the post in the database).
177
+ let sucessfullyInstalledFontFaces = [];
178
+ let unsucessfullyInstalledFontFaces = [];
179
+ if (fontFamilyToInstall?.fontFace?.length > 0) {
180
+ const response = await (0, _utils.batchInstallFontFaces)(installedFontFamily.id, (0, _utils.makeFontFacesFormData)(fontFamilyToInstall));
181
+ sucessfullyInstalledFontFaces = response?.successes;
182
+ unsucessfullyInstalledFontFaces = response?.errors;
183
+ }
199
184
 
200
- // Use the sucessfully installed font faces
201
- // As well as any font faces that were already installed (those will be activated)
202
- if (sucessfullyInstalledFontFaces?.length > 0 || alreadyInstalledFontFaces?.length > 0) {
203
- fontFamilyToInstall.fontFace = [...sucessfullyInstalledFontFaces, ...alreadyInstalledFontFaces];
185
+ // Use the sucessfully installed font faces
186
+ // As well as any font faces that were already installed (those will be activated)
187
+ if (sucessfullyInstalledFontFaces?.length > 0 || alreadyInstalledFontFaces?.length > 0) {
188
+ fontFamilyToInstall.fontFace = [...sucessfullyInstalledFontFaces, ...alreadyInstalledFontFaces];
189
+ fontFamiliesToActivate.push(fontFamilyToInstall);
190
+ } else if (isANewFontFamily) {
191
+ // If the font family is new, delete it to avoid having font families without font faces.
192
+ await (0, _resolvers.fetchUninstallFontFamily)(installedFontFamily.id);
193
+ }
194
+ installationErrors = installationErrors.concat(unsucessfullyInstalledFontFaces);
204
195
  }
196
+ installationErrors = installationErrors.reduce((unique, item) => unique.includes(item.message) ? unique : [...unique, item.message], []);
197
+ if (fontFamiliesToActivate.length > 0) {
198
+ // Activate the font family (add the font family to the global styles).
199
+ activateCustomFontFamilies(fontFamiliesToActivate);
205
200
 
206
- // Activate the font family (add the font family to the global styles).
207
- activateCustomFontFamilies([fontFamilyToInstall]);
208
-
209
- // Save the global styles to the database.
210
- saveSpecifiedEntityEdits('root', 'globalStyles', globalStylesId, ['settings.typography.fontFamilies']);
211
- refreshLibrary();
212
- if (unsucessfullyInstalledFontFaces.length > 0) {
213
- throw new Error((0, _i18n.sprintf)( /* translators: %s: Specific error message returned from server. */
214
- (0, _i18n.__)('Some font faces were installed. There were some errors. %s'), detailedErrorMessage));
201
+ // Save the global styles to the database.
202
+ await saveSpecifiedEntityEdits('root', 'globalStyles', globalStylesId, ['settings.typography.fontFamilies']);
203
+ refreshLibrary();
204
+ }
205
+ if (installationErrors.length > 0) {
206
+ const installError = new Error((0, _i18n.__)('There was an error installing fonts.'));
207
+ installError.installationErrors = installationErrors;
208
+ throw installError;
215
209
  }
216
210
  } finally {
217
211
  setIsInstalling(false);
@@ -250,14 +244,18 @@ function FontLibraryProvider({
250
244
  ...fontFamilies,
251
245
  [font.source]: newCustomFonts
252
246
  });
247
+ if (font.fontFace) {
248
+ font.fontFace.forEach(face => {
249
+ (0, _utils.unloadFontFaceInBrowser)(face, 'all');
250
+ });
251
+ }
253
252
  };
254
253
  const activateCustomFontFamilies = fontsToAdd => {
255
254
  // Merge the existing custom fonts with the new fonts.
256
- const newCustomFonts = (0, _utils.mergeFontFamilies)(fontFamilies?.custom, fontsToAdd);
257
255
  // Activate the fonts by set the new custom fonts array.
258
256
  setFontFamilies({
259
257
  ...fontFamilies,
260
- custom: newCustomFonts
258
+ custom: (0, _utils.mergeFontFamilies)(fontFamilies?.custom, fontsToAdd)
261
259
  });
262
260
  // Add custom fonts to the browser.
263
261
  fontsToAdd.forEach(font => {
@@ -281,12 +279,18 @@ function FontLibraryProvider({
281
279
  ...fontFamilies,
282
280
  [font.source]: newFonts
283
281
  });
282
+ const isFaceActivated = isFontActivated(font.slug, face.fontStyle, face.fontWeight, font.source);
283
+ if (isFaceActivated) {
284
+ (0, _utils.loadFontFaceInBrowser)(face, (0, _utils.getDisplaySrcFromFontFace)(face.src), 'all');
285
+ } else {
286
+ (0, _utils.unloadFontFaceInBrowser)(face, 'all');
287
+ }
284
288
  };
285
289
  const loadFontFaceAsset = async fontFace => {
286
290
  // If the font doesn't have a src, don't load it.
287
291
  if (!fontFace.src) return;
288
292
  // Get the src of the font.
289
- const src = (0, _utils.getDisplaySrcFromFontFace)(fontFace.src, themeUrl);
293
+ const src = (0, _utils.getDisplaySrcFromFontFace)(fontFace.src);
290
294
  // If the font is already loaded, don't load it again.
291
295
  if (!src || loadedFontUrls.has(src)) return;
292
296
  // Load the font in the browser.
@@ -331,7 +335,7 @@ function FontLibraryProvider({
331
335
  isFontActivated,
332
336
  getFontFacesActivated,
333
337
  loadFontFaceAsset,
334
- installFont,
338
+ installFonts,
335
339
  uninstallFontFamily,
336
340
  toggleActivateFont,
337
341
  getAvailableFontsOutline,
@@ -1 +1 @@
1
- {"version":3,"names":["_element","require","_blockEditor","_data","_coreData","_i18n","_resolvers","_lockUnlock","_utils","_toggleFont","useGlobalSetting","unlock","blockEditorPrivateApis","FontLibraryContext","exports","createContext","FontLibraryProvider","children","__experimentalSaveSpecifiedEntityEdits","saveSpecifiedEntityEdits","useDispatch","coreStore","globalStylesId","useSelect","select","__experimentalGetCurrentGlobalStylesId","globalStyles","useEntityRecord","fontFamiliesHasChanges","edits","settings","typography","fontFamilies","isInstalling","setIsInstalling","useState","refreshKey","setRefreshKey","notice","setNotice","refreshLibrary","Date","now","records","libraryPosts","isResolving","isResolvingLibrary","hasResolved","hasResolvedLibrary","useEntityRecords","_embed","libraryFonts","map","fontFamilyPost","id","font_family_settings","fontFace","_embedded","font_faces","face","font_face_settings","setFontFamilies","baseFontFamilies","undefined","saveFontFamilies","modalTabOpen","setModalTabOpen","libraryFontSelected","setLibraryFontSelected","baseThemeFonts","theme","f","setUIValuesNeeded","source","sort","a","b","name","localeCompare","themeFonts","customFonts","custom","baseCustomFonts","useEffect","handleSetLibraryFontSelected","font","fonts","fontSelected","find","slug","toggleModal","tabName","loadedFontUrls","Set","site","currentTheme","getSite","getCurrentTheme","themeUrl","url","stylesheet","getAvailableFontsOutline","availableFontFamilies","outline","reduce","acc","availableFontFaces","length","fontStyle","fontWeight","getActivatedFontsOutline","isFontActivated","style","weight","includes","getFontFacesActivated","installFont","fontFamilyToInstall","installedFontFamily","fetchGetFontFamilyBySlug","fetchInstallFontFamily","makeFontFamilyFormData","alreadyInstalledFontFaces","filter","fontFaceToInstall","checkFontFaceInstalled","sucessfullyInstalledFontFaces","unsucessfullyInstalledFontFaces","response","batchInstallFontFaces","makeFontFacesFormData","successes","errors","detailedErrorMessage","errorMessageCollection","error","message","Error","sprintf","__","activateCustomFontFamilies","uninstallFontFamily","fontFamilyToUninstall","uninstalledFontFamily","fetchUninstallFontFamily","deleted","deactivateFontFamily","console","_fontFamilies$font$so","initialCustomFonts","newCustomFonts","fontsToAdd","mergeFontFamilies","forEach","loadFontFaceInBrowser","getDisplaySrcFromFontFace","src","toggleActivateFont","_fontFamilies$font$so2","initialFonts","newFonts","toggleFont","loadFontFaceAsset","has","add","collections","setFontCollections","getFontCollections","fetchFontCollections","getFontCollection","hasData","collection","font_families","fetchFontCollection","updatedCollections","e","_react","createElement","Provider","value","_default","default"],"sources":["@wordpress/edit-site/src/components/global-styles/font-library-modal/context.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createContext, useState, useEffect } from '@wordpress/element';\nimport { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tuseEntityRecord,\n\tuseEntityRecords,\n\tstore as coreStore,\n} from '@wordpress/core-data';\nimport { __, sprintf } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tfetchGetFontFamilyBySlug,\n\tfetchInstallFontFamily,\n\tfetchUninstallFontFamily,\n\tfetchFontCollections,\n\tfetchFontCollection,\n} from './resolvers';\nimport { unlock } from '../../../lock-unlock';\nconst { useGlobalSetting } = unlock( blockEditorPrivateApis );\nimport {\n\tsetUIValuesNeeded,\n\tmergeFontFamilies,\n\tloadFontFaceInBrowser,\n\tgetDisplaySrcFromFontFace,\n\tmakeFontFacesFormData,\n\tmakeFontFamilyFormData,\n\tbatchInstallFontFaces,\n\tcheckFontFaceInstalled,\n} from './utils';\nimport { toggleFont } from './utils/toggleFont';\n\nexport const FontLibraryContext = createContext( {} );\n\nfunction FontLibraryProvider( { children } ) {\n\tconst { __experimentalSaveSpecifiedEntityEdits: saveSpecifiedEntityEdits } =\n\t\tuseDispatch( coreStore );\n\tconst { globalStylesId } = useSelect( ( select ) => {\n\t\tconst { __experimentalGetCurrentGlobalStylesId } = select( coreStore );\n\t\treturn { globalStylesId: __experimentalGetCurrentGlobalStylesId() };\n\t} );\n\n\tconst globalStyles = useEntityRecord(\n\t\t'root',\n\t\t'globalStyles',\n\t\tglobalStylesId\n\t);\n\tconst fontFamiliesHasChanges =\n\t\t!! globalStyles?.edits?.settings?.typography?.fontFamilies;\n\n\tconst [ isInstalling, setIsInstalling ] = useState( false );\n\tconst [ refreshKey, setRefreshKey ] = useState( 0 );\n\tconst [ notice, setNotice ] = useState( null );\n\n\tconst refreshLibrary = () => {\n\t\tsetRefreshKey( Date.now() );\n\t};\n\n\tconst {\n\t\trecords: libraryPosts = [],\n\t\tisResolving: isResolvingLibrary,\n\t\thasResolved: hasResolvedLibrary,\n\t} = useEntityRecords( 'postType', 'wp_font_family', {\n\t\trefreshKey,\n\t\t_embed: true,\n\t} );\n\n\tconst libraryFonts =\n\t\t( libraryPosts || [] ).map( ( fontFamilyPost ) => {\n\t\t\treturn {\n\t\t\t\tid: fontFamilyPost.id,\n\t\t\t\t...fontFamilyPost.font_family_settings,\n\t\t\t\tfontFace:\n\t\t\t\t\tfontFamilyPost?._embedded?.font_faces.map(\n\t\t\t\t\t\t( face ) => face.font_face_settings\n\t\t\t\t\t) || [],\n\t\t\t};\n\t\t} ) || [];\n\n\t// Global Styles (settings) font families\n\tconst [ fontFamilies, setFontFamilies ] = useGlobalSetting(\n\t\t'typography.fontFamilies'\n\t);\n\t// theme.json file font families\n\tconst [ baseFontFamilies ] = useGlobalSetting(\n\t\t'typography.fontFamilies',\n\t\tundefined,\n\t\t'base'\n\t);\n\n\t// Save font families to the global styles post in the database.\n\tconst saveFontFamilies = () => {\n\t\tsaveSpecifiedEntityEdits( 'root', 'globalStyles', globalStylesId, [\n\t\t\t'settings.typography.fontFamilies',\n\t\t] );\n\t};\n\n\t// Library Fonts\n\tconst [ modalTabOpen, setModalTabOpen ] = useState( false );\n\tconst [ libraryFontSelected, setLibraryFontSelected ] = useState( null );\n\n\tconst baseThemeFonts = baseFontFamilies?.theme\n\t\t? baseFontFamilies.theme\n\t\t\t\t.map( ( f ) => setUIValuesNeeded( f, { source: 'theme' } ) )\n\t\t\t\t.sort( ( a, b ) => a.name.localeCompare( b.name ) )\n\t\t: [];\n\n\tconst themeFonts = fontFamilies?.theme\n\t\t? fontFamilies.theme\n\t\t\t\t.map( ( f ) => setUIValuesNeeded( f, { source: 'theme' } ) )\n\t\t\t\t.sort( ( a, b ) => a.name.localeCompare( b.name ) )\n\t\t: [];\n\n\tconst customFonts = fontFamilies?.custom\n\t\t? fontFamilies.custom\n\t\t\t\t.map( ( f ) => setUIValuesNeeded( f, { source: 'custom' } ) )\n\t\t\t\t.sort( ( a, b ) => a.name.localeCompare( b.name ) )\n\t\t: [];\n\n\tconst baseCustomFonts = libraryFonts\n\t\t? libraryFonts\n\t\t\t\t.map( ( f ) => setUIValuesNeeded( f, { source: 'custom' } ) )\n\t\t\t\t.sort( ( a, b ) => a.name.localeCompare( b.name ) )\n\t\t: [];\n\n\tuseEffect( () => {\n\t\tif ( ! modalTabOpen ) {\n\t\t\tsetLibraryFontSelected( null );\n\t\t}\n\t}, [ modalTabOpen ] );\n\n\tconst handleSetLibraryFontSelected = ( font ) => {\n\t\tsetNotice( null );\n\n\t\t// If font is null, reset the selected font\n\t\tif ( ! font ) {\n\t\t\tsetLibraryFontSelected( null );\n\t\t\treturn;\n\t\t}\n\n\t\tconst fonts =\n\t\t\tfont.source === 'theme' ? baseThemeFonts : baseCustomFonts;\n\n\t\t// Tries to find the font in the installed fonts\n\t\tconst fontSelected = fonts.find( ( f ) => f.slug === font.slug );\n\t\t// If the font is not found (it is only defined in custom styles), use the font from custom styles\n\t\tsetLibraryFontSelected( {\n\t\t\t...( fontSelected || font ),\n\t\t\tsource: font.source,\n\t\t} );\n\t};\n\n\tconst toggleModal = ( tabName ) => {\n\t\tsetModalTabOpen( tabName || null );\n\t};\n\n\t// Demo\n\tconst [ loadedFontUrls ] = useState( new Set() );\n\n\t// Theme data\n\tconst { site, currentTheme } = useSelect( ( select ) => {\n\t\treturn {\n\t\t\tsite: select( coreStore ).getSite(),\n\t\t\tcurrentTheme: select( coreStore ).getCurrentTheme(),\n\t\t};\n\t} );\n\tconst themeUrl =\n\t\tsite?.url + '/wp-content/themes/' + currentTheme?.stylesheet;\n\n\tconst getAvailableFontsOutline = ( availableFontFamilies ) => {\n\t\tconst outline = availableFontFamilies.reduce( ( acc, font ) => {\n\t\t\tconst availableFontFaces =\n\t\t\t\tfont?.fontFace && font.fontFace?.length > 0\n\t\t\t\t\t? font?.fontFace.map(\n\t\t\t\t\t\t\t( face ) => `${ face.fontStyle + face.fontWeight }`\n\t\t\t\t\t )\n\t\t\t\t\t: [ 'normal400' ]; // If the font doesn't have fontFace, we assume it is a system font and we add the defaults: normal 400\n\n\t\t\tacc[ font.slug ] = availableFontFaces;\n\t\t\treturn acc;\n\t\t}, {} );\n\t\treturn outline;\n\t};\n\n\tconst getActivatedFontsOutline = ( source ) => {\n\t\tswitch ( source ) {\n\t\t\tcase 'theme':\n\t\t\t\treturn getAvailableFontsOutline( themeFonts );\n\t\t\tcase 'custom':\n\t\t\tdefault:\n\t\t\t\treturn getAvailableFontsOutline( customFonts );\n\t\t}\n\t};\n\n\tconst isFontActivated = ( slug, style, weight, source ) => {\n\t\tif ( ! style && ! weight ) {\n\t\t\treturn !! getActivatedFontsOutline( source )[ slug ];\n\t\t}\n\t\treturn !! getActivatedFontsOutline( source )[ slug ]?.includes(\n\t\t\tstyle + weight\n\t\t);\n\t};\n\n\tconst getFontFacesActivated = ( slug, source ) => {\n\t\treturn getActivatedFontsOutline( source )[ slug ] || [];\n\t};\n\n\tasync function installFont( fontFamilyToInstall ) {\n\t\tsetIsInstalling( true );\n\t\ttry {\n\t\t\t// Get the font family if it already exists.\n\t\t\tlet installedFontFamily = await fetchGetFontFamilyBySlug(\n\t\t\t\tfontFamilyToInstall.slug\n\t\t\t);\n\n\t\t\t// Otherwise create it.\n\t\t\tif ( ! installedFontFamily ) {\n\t\t\t\t// Prepare font family form data to install.\n\t\t\t\tinstalledFontFamily = await fetchInstallFontFamily(\n\t\t\t\t\tmakeFontFamilyFormData( fontFamilyToInstall )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Collect font faces that have already been installed (to be activated later)\n\t\t\tconst alreadyInstalledFontFaces =\n\t\t\t\tinstalledFontFamily.fontFace && fontFamilyToInstall.fontFace\n\t\t\t\t\t? installedFontFamily.fontFace.filter(\n\t\t\t\t\t\t\t( fontFaceToInstall ) =>\n\t\t\t\t\t\t\t\tcheckFontFaceInstalled(\n\t\t\t\t\t\t\t\t\tfontFaceToInstall,\n\t\t\t\t\t\t\t\t\tfontFamilyToInstall.fontFace\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t )\n\t\t\t\t\t: [];\n\n\t\t\t// Filter out Font Faces that have already been installed (so that they are not re-installed)\n\t\t\tif (\n\t\t\t\tinstalledFontFamily.fontFace &&\n\t\t\t\tfontFamilyToInstall.fontFace\n\t\t\t) {\n\t\t\t\tfontFamilyToInstall.fontFace =\n\t\t\t\t\tfontFamilyToInstall.fontFace.filter(\n\t\t\t\t\t\t( fontFaceToInstall ) =>\n\t\t\t\t\t\t\t! checkFontFaceInstalled(\n\t\t\t\t\t\t\t\tfontFaceToInstall,\n\t\t\t\t\t\t\t\tinstalledFontFamily.fontFace\n\t\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Install the fonts (upload the font files to the server and create the post in the database).\n\t\t\tlet sucessfullyInstalledFontFaces = [];\n\t\t\tlet unsucessfullyInstalledFontFaces = [];\n\t\t\tif ( fontFamilyToInstall?.fontFace?.length > 0 ) {\n\t\t\t\tconst response = await batchInstallFontFaces(\n\t\t\t\t\tinstalledFontFamily.id,\n\t\t\t\t\tmakeFontFacesFormData( fontFamilyToInstall )\n\t\t\t\t);\n\t\t\t\tsucessfullyInstalledFontFaces = response?.successes;\n\t\t\t\tunsucessfullyInstalledFontFaces = response?.errors;\n\t\t\t}\n\n\t\t\tconst detailedErrorMessage = unsucessfullyInstalledFontFaces.reduce(\n\t\t\t\t( errorMessageCollection, error ) => {\n\t\t\t\t\treturn `${ errorMessageCollection } ${ error.message }`;\n\t\t\t\t},\n\t\t\t\t''\n\t\t\t);\n\n\t\t\t// If there were no successes and nothing already installed then we don't need to activate anything and can bounce now.\n\t\t\tif (\n\t\t\t\tfontFamilyToInstall?.fontFace?.length > 0 &&\n\t\t\t\tsucessfullyInstalledFontFaces.length === 0 &&\n\t\t\t\talreadyInstalledFontFaces.length === 0\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tsprintf(\n\t\t\t\t\t\t/* translators: %s: Specific error message returned from server. */\n\t\t\t\t\t\t__( 'No font faces were installed. %s' ),\n\t\t\t\t\t\tdetailedErrorMessage\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Use the sucessfully installed font faces\n\t\t\t// As well as any font faces that were already installed (those will be activated)\n\t\t\tif (\n\t\t\t\tsucessfullyInstalledFontFaces?.length > 0 ||\n\t\t\t\talreadyInstalledFontFaces?.length > 0\n\t\t\t) {\n\t\t\t\tfontFamilyToInstall.fontFace = [\n\t\t\t\t\t...sucessfullyInstalledFontFaces,\n\t\t\t\t\t...alreadyInstalledFontFaces,\n\t\t\t\t];\n\t\t\t}\n\n\t\t\t// Activate the font family (add the font family to the global styles).\n\t\t\tactivateCustomFontFamilies( [ fontFamilyToInstall ] );\n\n\t\t\t// Save the global styles to the database.\n\t\t\tsaveSpecifiedEntityEdits( 'root', 'globalStyles', globalStylesId, [\n\t\t\t\t'settings.typography.fontFamilies',\n\t\t\t] );\n\n\t\t\trefreshLibrary();\n\n\t\t\tif ( unsucessfullyInstalledFontFaces.length > 0 ) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tsprintf(\n\t\t\t\t\t\t/* translators: %s: Specific error message returned from server. */\n\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t'Some font faces were installed. There were some errors. %s'\n\t\t\t\t\t\t),\n\t\t\t\t\t\tdetailedErrorMessage\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t} finally {\n\t\t\tsetIsInstalling( false );\n\t\t}\n\t}\n\n\tasync function uninstallFontFamily( fontFamilyToUninstall ) {\n\t\ttry {\n\t\t\t// Uninstall the font family.\n\t\t\t// (Removes the font files from the server and the posts from the database).\n\t\t\tconst uninstalledFontFamily = await fetchUninstallFontFamily(\n\t\t\t\tfontFamilyToUninstall.id\n\t\t\t);\n\n\t\t\t// Deactivate the font family if delete request is successful\n\t\t\t// (Removes the font family from the global styles).\n\t\t\tif ( uninstalledFontFamily.deleted ) {\n\t\t\t\tdeactivateFontFamily( fontFamilyToUninstall );\n\t\t\t\t// Save the global styles to the database.\n\t\t\t\tawait saveSpecifiedEntityEdits(\n\t\t\t\t\t'root',\n\t\t\t\t\t'globalStyles',\n\t\t\t\t\tglobalStylesId,\n\t\t\t\t\t[ 'settings.typography.fontFamilies' ]\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Refresh the library (the library font families from database).\n\t\t\trefreshLibrary();\n\n\t\t\treturn uninstalledFontFamily;\n\t\t} catch ( error ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(\n\t\t\t\t`There was an error uninstalling the font family:`,\n\t\t\t\terror\n\t\t\t);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tconst deactivateFontFamily = ( font ) => {\n\t\t// If the user doesn't have custom fonts defined, include as custom fonts all the theme fonts\n\t\t// We want to save as active all the theme fonts at the beginning\n\t\tconst initialCustomFonts = fontFamilies?.[ font.source ] ?? [];\n\t\tconst newCustomFonts = initialCustomFonts.filter(\n\t\t\t( f ) => f.slug !== font.slug\n\t\t);\n\t\tsetFontFamilies( {\n\t\t\t...fontFamilies,\n\t\t\t[ font.source ]: newCustomFonts,\n\t\t} );\n\t};\n\n\tconst activateCustomFontFamilies = ( fontsToAdd ) => {\n\t\t// Merge the existing custom fonts with the new fonts.\n\t\tconst newCustomFonts = mergeFontFamilies(\n\t\t\tfontFamilies?.custom,\n\t\t\tfontsToAdd\n\t\t);\n\t\t// Activate the fonts by set the new custom fonts array.\n\t\tsetFontFamilies( {\n\t\t\t...fontFamilies,\n\t\t\tcustom: newCustomFonts,\n\t\t} );\n\t\t// Add custom fonts to the browser.\n\t\tfontsToAdd.forEach( ( font ) => {\n\t\t\tif ( font.fontFace ) {\n\t\t\t\tfont.fontFace.forEach( ( face ) => {\n\t\t\t\t\t// Load font faces just in the iframe because they already are in the document.\n\t\t\t\t\tloadFontFaceInBrowser(\n\t\t\t\t\t\tface,\n\t\t\t\t\t\tgetDisplaySrcFromFontFace( face.src ),\n\t\t\t\t\t\t'all'\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t};\n\n\tconst toggleActivateFont = ( font, face ) => {\n\t\t// If the user doesn't have custom fonts defined, include as custom fonts all the theme fonts\n\t\t// We want to save as active all the theme fonts at the beginning\n\t\tconst initialFonts = fontFamilies?.[ font.source ] ?? [];\n\t\t// Toggles the received font family or font face\n\t\tconst newFonts = toggleFont( font, face, initialFonts );\n\t\t// Updates the font families activated in global settings:\n\t\tsetFontFamilies( {\n\t\t\t...fontFamilies,\n\t\t\t[ font.source ]: newFonts,\n\t\t} );\n\t};\n\n\tconst loadFontFaceAsset = async ( fontFace ) => {\n\t\t// If the font doesn't have a src, don't load it.\n\t\tif ( ! fontFace.src ) return;\n\t\t// Get the src of the font.\n\t\tconst src = getDisplaySrcFromFontFace( fontFace.src, themeUrl );\n\t\t// If the font is already loaded, don't load it again.\n\t\tif ( ! src || loadedFontUrls.has( src ) ) return;\n\t\t// Load the font in the browser.\n\t\tloadFontFaceInBrowser( fontFace, src, 'document' );\n\t\t// Add the font to the loaded fonts list.\n\t\tloadedFontUrls.add( src );\n\t};\n\n\t// Font Collections\n\tconst [ collections, setFontCollections ] = useState( [] );\n\tconst getFontCollections = async () => {\n\t\tconst response = await fetchFontCollections();\n\t\tsetFontCollections( response );\n\t};\n\tconst getFontCollection = async ( slug ) => {\n\t\ttry {\n\t\t\tconst hasData = !! collections.find(\n\t\t\t\t( collection ) => collection.slug === slug\n\t\t\t)?.font_families;\n\t\t\tif ( hasData ) return;\n\t\t\tconst response = await fetchFontCollection( slug );\n\t\t\tconst updatedCollections = collections.map( ( collection ) =>\n\t\t\t\tcollection.slug === slug\n\t\t\t\t\t? { ...collection, ...response }\n\t\t\t\t\t: collection\n\t\t\t);\n\t\t\tsetFontCollections( updatedCollections );\n\t\t} catch ( e ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( e );\n\t\t\tthrow e;\n\t\t}\n\t};\n\n\tuseEffect( () => {\n\t\tgetFontCollections();\n\t}, [] );\n\n\treturn (\n\t\t<FontLibraryContext.Provider\n\t\t\tvalue={ {\n\t\t\t\tlibraryFontSelected,\n\t\t\t\thandleSetLibraryFontSelected,\n\t\t\t\tthemeFonts,\n\t\t\t\tbaseThemeFonts,\n\t\t\t\tcustomFonts,\n\t\t\t\tbaseCustomFonts,\n\t\t\t\tisFontActivated,\n\t\t\t\tgetFontFacesActivated,\n\t\t\t\tloadFontFaceAsset,\n\t\t\t\tinstallFont,\n\t\t\t\tuninstallFontFamily,\n\t\t\t\ttoggleActivateFont,\n\t\t\t\tgetAvailableFontsOutline,\n\t\t\t\tmodalTabOpen,\n\t\t\t\ttoggleModal,\n\t\t\t\trefreshLibrary,\n\t\t\t\tnotice,\n\t\t\t\tsetNotice,\n\t\t\t\tsaveFontFamilies,\n\t\t\t\tfontFamiliesHasChanges,\n\t\t\t\tisResolvingLibrary,\n\t\t\t\thasResolvedLibrary,\n\t\t\t\tisInstalling,\n\t\t\t\tcollections,\n\t\t\t\tgetFontCollection,\n\t\t\t} }\n\t\t>\n\t\t\t{ children }\n\t\t</FontLibraryContext.Provider>\n\t);\n}\n\nexport default FontLibraryProvider;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_element","require","_blockEditor","_data","_coreData","_i18n","_resolvers","_lockUnlock","_utils","_toggleFont","useGlobalSetting","unlock","blockEditorPrivateApis","FontLibraryContext","exports","createContext","FontLibraryProvider","children","__experimentalSaveSpecifiedEntityEdits","saveSpecifiedEntityEdits","useDispatch","coreStore","globalStylesId","useSelect","select","__experimentalGetCurrentGlobalStylesId","globalStyles","useEntityRecord","fontFamiliesHasChanges","edits","settings","typography","fontFamilies","isInstalling","setIsInstalling","useState","refreshKey","setRefreshKey","notice","setNotice","refreshLibrary","Date","now","records","libraryPosts","isResolving","isResolvingLibrary","hasResolved","hasResolvedLibrary","useEntityRecords","_embed","libraryFonts","map","fontFamilyPost","id","font_family_settings","fontFace","_embedded","font_faces","face","font_face_settings","setFontFamilies","baseFontFamilies","undefined","saveFontFamilies","modalTabOpen","setModalTabOpen","libraryFontSelected","setLibraryFontSelected","baseThemeFonts","theme","f","setUIValuesNeeded","source","sort","a","b","name","localeCompare","themeFonts","customFonts","custom","baseCustomFonts","useEffect","handleSetLibraryFontSelected","font","fonts","fontSelected","find","slug","toggleModal","tabName","loadedFontUrls","Set","getAvailableFontsOutline","availableFontFamilies","outline","reduce","acc","availableFontFaces","length","fontStyle","fontWeight","getActivatedFontsOutline","isFontActivated","style","weight","includes","getFontFacesActivated","installFonts","fontFamiliesToInstall","fontFamiliesToActivate","installationErrors","fontFamilyToInstall","isANewFontFamily","installedFontFamily","fetchGetFontFamilyBySlug","fetchInstallFontFamily","makeFontFamilyFormData","alreadyInstalledFontFaces","filter","fontFaceToInstall","checkFontFaceInstalled","sucessfullyInstalledFontFaces","unsucessfullyInstalledFontFaces","response","batchInstallFontFaces","makeFontFacesFormData","successes","errors","push","fetchUninstallFontFamily","concat","unique","item","message","activateCustomFontFamilies","installError","Error","__","uninstallFontFamily","fontFamilyToUninstall","uninstalledFontFamily","deleted","deactivateFontFamily","error","console","_fontFamilies$font$so","initialCustomFonts","newCustomFonts","forEach","unloadFontFaceInBrowser","fontsToAdd","mergeFontFamilies","loadFontFaceInBrowser","getDisplaySrcFromFontFace","src","toggleActivateFont","_fontFamilies$font$so2","initialFonts","newFonts","toggleFont","isFaceActivated","loadFontFaceAsset","has","add","collections","setFontCollections","getFontCollections","fetchFontCollections","getFontCollection","hasData","collection","font_families","fetchFontCollection","updatedCollections","e","_react","createElement","Provider","value","_default","default"],"sources":["@wordpress/edit-site/src/components/global-styles/font-library-modal/context.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createContext, useState, useEffect } from '@wordpress/element';\nimport { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tuseEntityRecord,\n\tuseEntityRecords,\n\tstore as coreStore,\n} from '@wordpress/core-data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport {\n\tfetchGetFontFamilyBySlug,\n\tfetchInstallFontFamily,\n\tfetchUninstallFontFamily,\n\tfetchFontCollections,\n\tfetchFontCollection,\n} from './resolvers';\nimport { unlock } from '../../../lock-unlock';\nconst { useGlobalSetting } = unlock( blockEditorPrivateApis );\nimport {\n\tsetUIValuesNeeded,\n\tmergeFontFamilies,\n\tloadFontFaceInBrowser,\n\tunloadFontFaceInBrowser,\n\tgetDisplaySrcFromFontFace,\n\tmakeFontFacesFormData,\n\tmakeFontFamilyFormData,\n\tbatchInstallFontFaces,\n\tcheckFontFaceInstalled,\n} from './utils';\nimport { toggleFont } from './utils/toggleFont';\n\nexport const FontLibraryContext = createContext( {} );\n\nfunction FontLibraryProvider( { children } ) {\n\tconst { __experimentalSaveSpecifiedEntityEdits: saveSpecifiedEntityEdits } =\n\t\tuseDispatch( coreStore );\n\tconst { globalStylesId } = useSelect( ( select ) => {\n\t\tconst { __experimentalGetCurrentGlobalStylesId } = select( coreStore );\n\t\treturn { globalStylesId: __experimentalGetCurrentGlobalStylesId() };\n\t} );\n\n\tconst globalStyles = useEntityRecord(\n\t\t'root',\n\t\t'globalStyles',\n\t\tglobalStylesId\n\t);\n\tconst fontFamiliesHasChanges =\n\t\t!! globalStyles?.edits?.settings?.typography?.fontFamilies;\n\n\tconst [ isInstalling, setIsInstalling ] = useState( false );\n\tconst [ refreshKey, setRefreshKey ] = useState( 0 );\n\tconst [ notice, setNotice ] = useState( null );\n\n\tconst refreshLibrary = () => {\n\t\tsetRefreshKey( Date.now() );\n\t};\n\n\tconst {\n\t\trecords: libraryPosts = [],\n\t\tisResolving: isResolvingLibrary,\n\t\thasResolved: hasResolvedLibrary,\n\t} = useEntityRecords( 'postType', 'wp_font_family', {\n\t\trefreshKey,\n\t\t_embed: true,\n\t} );\n\n\tconst libraryFonts =\n\t\t( libraryPosts || [] ).map( ( fontFamilyPost ) => {\n\t\t\treturn {\n\t\t\t\tid: fontFamilyPost.id,\n\t\t\t\t...fontFamilyPost.font_family_settings,\n\t\t\t\tfontFace:\n\t\t\t\t\tfontFamilyPost?._embedded?.font_faces.map(\n\t\t\t\t\t\t( face ) => face.font_face_settings\n\t\t\t\t\t) || [],\n\t\t\t};\n\t\t} ) || [];\n\n\t// Global Styles (settings) font families\n\tconst [ fontFamilies, setFontFamilies ] = useGlobalSetting(\n\t\t'typography.fontFamilies'\n\t);\n\t// theme.json file font families\n\tconst [ baseFontFamilies ] = useGlobalSetting(\n\t\t'typography.fontFamilies',\n\t\tundefined,\n\t\t'base'\n\t);\n\n\t// Save font families to the global styles post in the database.\n\tconst saveFontFamilies = () => {\n\t\tsaveSpecifiedEntityEdits( 'root', 'globalStyles', globalStylesId, [\n\t\t\t'settings.typography.fontFamilies',\n\t\t] );\n\t};\n\n\t// Library Fonts\n\tconst [ modalTabOpen, setModalTabOpen ] = useState( false );\n\tconst [ libraryFontSelected, setLibraryFontSelected ] = useState( null );\n\n\tconst baseThemeFonts = baseFontFamilies?.theme\n\t\t? baseFontFamilies.theme\n\t\t\t\t.map( ( f ) => setUIValuesNeeded( f, { source: 'theme' } ) )\n\t\t\t\t.sort( ( a, b ) => a.name.localeCompare( b.name ) )\n\t\t: [];\n\n\tconst themeFonts = fontFamilies?.theme\n\t\t? fontFamilies.theme\n\t\t\t\t.map( ( f ) => setUIValuesNeeded( f, { source: 'theme' } ) )\n\t\t\t\t.sort( ( a, b ) => a.name.localeCompare( b.name ) )\n\t\t: [];\n\n\tconst customFonts = fontFamilies?.custom\n\t\t? fontFamilies.custom\n\t\t\t\t.map( ( f ) => setUIValuesNeeded( f, { source: 'custom' } ) )\n\t\t\t\t.sort( ( a, b ) => a.name.localeCompare( b.name ) )\n\t\t: [];\n\n\tconst baseCustomFonts = libraryFonts\n\t\t? libraryFonts\n\t\t\t\t.map( ( f ) => setUIValuesNeeded( f, { source: 'custom' } ) )\n\t\t\t\t.sort( ( a, b ) => a.name.localeCompare( b.name ) )\n\t\t: [];\n\n\tuseEffect( () => {\n\t\tif ( ! modalTabOpen ) {\n\t\t\tsetLibraryFontSelected( null );\n\t\t}\n\t}, [ modalTabOpen ] );\n\n\tconst handleSetLibraryFontSelected = ( font ) => {\n\t\tsetNotice( null );\n\n\t\t// If font is null, reset the selected font\n\t\tif ( ! font ) {\n\t\t\tsetLibraryFontSelected( null );\n\t\t\treturn;\n\t\t}\n\n\t\tconst fonts =\n\t\t\tfont.source === 'theme' ? baseThemeFonts : baseCustomFonts;\n\n\t\t// Tries to find the font in the installed fonts\n\t\tconst fontSelected = fonts.find( ( f ) => f.slug === font.slug );\n\t\t// If the font is not found (it is only defined in custom styles), use the font from custom styles\n\t\tsetLibraryFontSelected( {\n\t\t\t...( fontSelected || font ),\n\t\t\tsource: font.source,\n\t\t} );\n\t};\n\n\tconst toggleModal = ( tabName ) => {\n\t\tsetModalTabOpen( tabName || null );\n\t};\n\n\t// Demo\n\tconst [ loadedFontUrls ] = useState( new Set() );\n\n\tconst getAvailableFontsOutline = ( availableFontFamilies ) => {\n\t\tconst outline = availableFontFamilies.reduce( ( acc, font ) => {\n\t\t\tconst availableFontFaces =\n\t\t\t\tfont?.fontFace && font.fontFace?.length > 0\n\t\t\t\t\t? font?.fontFace.map(\n\t\t\t\t\t\t\t( face ) => `${ face.fontStyle + face.fontWeight }`\n\t\t\t\t\t )\n\t\t\t\t\t: [ 'normal400' ]; // If the font doesn't have fontFace, we assume it is a system font and we add the defaults: normal 400\n\n\t\t\tacc[ font.slug ] = availableFontFaces;\n\t\t\treturn acc;\n\t\t}, {} );\n\t\treturn outline;\n\t};\n\n\tconst getActivatedFontsOutline = ( source ) => {\n\t\tswitch ( source ) {\n\t\t\tcase 'theme':\n\t\t\t\treturn getAvailableFontsOutline( themeFonts );\n\t\t\tcase 'custom':\n\t\t\tdefault:\n\t\t\t\treturn getAvailableFontsOutline( customFonts );\n\t\t}\n\t};\n\n\tconst isFontActivated = ( slug, style, weight, source ) => {\n\t\tif ( ! style && ! weight ) {\n\t\t\treturn !! getActivatedFontsOutline( source )[ slug ];\n\t\t}\n\t\treturn !! getActivatedFontsOutline( source )[ slug ]?.includes(\n\t\t\tstyle + weight\n\t\t);\n\t};\n\n\tconst getFontFacesActivated = ( slug, source ) => {\n\t\treturn getActivatedFontsOutline( source )[ slug ] || [];\n\t};\n\n\tasync function installFonts( fontFamiliesToInstall ) {\n\t\tsetIsInstalling( true );\n\t\ttry {\n\t\t\tconst fontFamiliesToActivate = [];\n\t\t\tlet installationErrors = [];\n\n\t\t\tfor ( const fontFamilyToInstall of fontFamiliesToInstall ) {\n\t\t\t\tlet isANewFontFamily = false;\n\n\t\t\t\t// Get the font family if it already exists.\n\t\t\t\tlet installedFontFamily = await fetchGetFontFamilyBySlug(\n\t\t\t\t\tfontFamilyToInstall.slug\n\t\t\t\t);\n\n\t\t\t\t// Otherwise create it.\n\t\t\t\tif ( ! installedFontFamily ) {\n\t\t\t\t\tisANewFontFamily = true;\n\t\t\t\t\t// Prepare font family form data to install.\n\t\t\t\t\tinstalledFontFamily = await fetchInstallFontFamily(\n\t\t\t\t\t\tmakeFontFamilyFormData( fontFamilyToInstall )\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Collect font faces that have already been installed (to be activated later)\n\t\t\t\tconst alreadyInstalledFontFaces =\n\t\t\t\t\tinstalledFontFamily.fontFace && fontFamilyToInstall.fontFace\n\t\t\t\t\t\t? installedFontFamily.fontFace.filter(\n\t\t\t\t\t\t\t\t( fontFaceToInstall ) =>\n\t\t\t\t\t\t\t\t\tcheckFontFaceInstalled(\n\t\t\t\t\t\t\t\t\t\tfontFaceToInstall,\n\t\t\t\t\t\t\t\t\t\tfontFamilyToInstall.fontFace\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: [];\n\n\t\t\t\t// Filter out Font Faces that have already been installed (so that they are not re-installed)\n\t\t\t\tif (\n\t\t\t\t\tinstalledFontFamily.fontFace &&\n\t\t\t\t\tfontFamilyToInstall.fontFace\n\t\t\t\t) {\n\t\t\t\t\tfontFamilyToInstall.fontFace =\n\t\t\t\t\t\tfontFamilyToInstall.fontFace.filter(\n\t\t\t\t\t\t\t( fontFaceToInstall ) =>\n\t\t\t\t\t\t\t\t! checkFontFaceInstalled(\n\t\t\t\t\t\t\t\t\tfontFaceToInstall,\n\t\t\t\t\t\t\t\t\tinstalledFontFamily.fontFace\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Install the fonts (upload the font files to the server and create the post in the database).\n\t\t\t\tlet sucessfullyInstalledFontFaces = [];\n\t\t\t\tlet unsucessfullyInstalledFontFaces = [];\n\t\t\t\tif ( fontFamilyToInstall?.fontFace?.length > 0 ) {\n\t\t\t\t\tconst response = await batchInstallFontFaces(\n\t\t\t\t\t\tinstalledFontFamily.id,\n\t\t\t\t\t\tmakeFontFacesFormData( fontFamilyToInstall )\n\t\t\t\t\t);\n\t\t\t\t\tsucessfullyInstalledFontFaces = response?.successes;\n\t\t\t\t\tunsucessfullyInstalledFontFaces = response?.errors;\n\t\t\t\t}\n\n\t\t\t\t// Use the sucessfully installed font faces\n\t\t\t\t// As well as any font faces that were already installed (those will be activated)\n\t\t\t\tif (\n\t\t\t\t\tsucessfullyInstalledFontFaces?.length > 0 ||\n\t\t\t\t\talreadyInstalledFontFaces?.length > 0\n\t\t\t\t) {\n\t\t\t\t\tfontFamilyToInstall.fontFace = [\n\t\t\t\t\t\t...sucessfullyInstalledFontFaces,\n\t\t\t\t\t\t...alreadyInstalledFontFaces,\n\t\t\t\t\t];\n\t\t\t\t\tfontFamiliesToActivate.push( fontFamilyToInstall );\n\t\t\t\t} else if ( isANewFontFamily ) {\n\t\t\t\t\t// If the font family is new, delete it to avoid having font families without font faces.\n\t\t\t\t\tawait fetchUninstallFontFamily( installedFontFamily.id );\n\t\t\t\t}\n\n\t\t\t\tinstallationErrors = installationErrors.concat(\n\t\t\t\t\tunsucessfullyInstalledFontFaces\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tinstallationErrors = installationErrors.reduce(\n\t\t\t\t( unique, item ) =>\n\t\t\t\t\tunique.includes( item.message )\n\t\t\t\t\t\t? unique\n\t\t\t\t\t\t: [ ...unique, item.message ],\n\t\t\t\t[]\n\t\t\t);\n\n\t\t\tif ( fontFamiliesToActivate.length > 0 ) {\n\t\t\t\t// Activate the font family (add the font family to the global styles).\n\t\t\t\tactivateCustomFontFamilies( fontFamiliesToActivate );\n\n\t\t\t\t// Save the global styles to the database.\n\t\t\t\tawait saveSpecifiedEntityEdits(\n\t\t\t\t\t'root',\n\t\t\t\t\t'globalStyles',\n\t\t\t\t\tglobalStylesId,\n\t\t\t\t\t[ 'settings.typography.fontFamilies' ]\n\t\t\t\t);\n\n\t\t\t\trefreshLibrary();\n\t\t\t}\n\n\t\t\tif ( installationErrors.length > 0 ) {\n\t\t\t\tconst installError = new Error(\n\t\t\t\t\t__( 'There was an error installing fonts.' )\n\t\t\t\t);\n\n\t\t\t\tinstallError.installationErrors = installationErrors;\n\n\t\t\t\tthrow installError;\n\t\t\t}\n\t\t} finally {\n\t\t\tsetIsInstalling( false );\n\t\t}\n\t}\n\n\tasync function uninstallFontFamily( fontFamilyToUninstall ) {\n\t\ttry {\n\t\t\t// Uninstall the font family.\n\t\t\t// (Removes the font files from the server and the posts from the database).\n\t\t\tconst uninstalledFontFamily = await fetchUninstallFontFamily(\n\t\t\t\tfontFamilyToUninstall.id\n\t\t\t);\n\n\t\t\t// Deactivate the font family if delete request is successful\n\t\t\t// (Removes the font family from the global styles).\n\t\t\tif ( uninstalledFontFamily.deleted ) {\n\t\t\t\tdeactivateFontFamily( fontFamilyToUninstall );\n\t\t\t\t// Save the global styles to the database.\n\t\t\t\tawait saveSpecifiedEntityEdits(\n\t\t\t\t\t'root',\n\t\t\t\t\t'globalStyles',\n\t\t\t\t\tglobalStylesId,\n\t\t\t\t\t[ 'settings.typography.fontFamilies' ]\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Refresh the library (the library font families from database).\n\t\t\trefreshLibrary();\n\n\t\t\treturn uninstalledFontFamily;\n\t\t} catch ( error ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(\n\t\t\t\t`There was an error uninstalling the font family:`,\n\t\t\t\terror\n\t\t\t);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tconst deactivateFontFamily = ( font ) => {\n\t\t// If the user doesn't have custom fonts defined, include as custom fonts all the theme fonts\n\t\t// We want to save as active all the theme fonts at the beginning\n\t\tconst initialCustomFonts = fontFamilies?.[ font.source ] ?? [];\n\t\tconst newCustomFonts = initialCustomFonts.filter(\n\t\t\t( f ) => f.slug !== font.slug\n\t\t);\n\t\tsetFontFamilies( {\n\t\t\t...fontFamilies,\n\t\t\t[ font.source ]: newCustomFonts,\n\t\t} );\n\n\t\tif ( font.fontFace ) {\n\t\t\tfont.fontFace.forEach( ( face ) => {\n\t\t\t\tunloadFontFaceInBrowser( face, 'all' );\n\t\t\t} );\n\t\t}\n\t};\n\n\tconst activateCustomFontFamilies = ( fontsToAdd ) => {\n\t\t// Merge the existing custom fonts with the new fonts.\n\t\t// Activate the fonts by set the new custom fonts array.\n\t\tsetFontFamilies( {\n\t\t\t...fontFamilies,\n\t\t\tcustom: mergeFontFamilies( fontFamilies?.custom, fontsToAdd ),\n\t\t} );\n\t\t// Add custom fonts to the browser.\n\t\tfontsToAdd.forEach( ( font ) => {\n\t\t\tif ( font.fontFace ) {\n\t\t\t\tfont.fontFace.forEach( ( face ) => {\n\t\t\t\t\t// Load font faces just in the iframe because they already are in the document.\n\t\t\t\t\tloadFontFaceInBrowser(\n\t\t\t\t\t\tface,\n\t\t\t\t\t\tgetDisplaySrcFromFontFace( face.src ),\n\t\t\t\t\t\t'all'\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t};\n\n\tconst toggleActivateFont = ( font, face ) => {\n\t\t// If the user doesn't have custom fonts defined, include as custom fonts all the theme fonts\n\t\t// We want to save as active all the theme fonts at the beginning\n\t\tconst initialFonts = fontFamilies?.[ font.source ] ?? [];\n\t\t// Toggles the received font family or font face\n\t\tconst newFonts = toggleFont( font, face, initialFonts );\n\t\t// Updates the font families activated in global settings:\n\t\tsetFontFamilies( {\n\t\t\t...fontFamilies,\n\t\t\t[ font.source ]: newFonts,\n\t\t} );\n\n\t\tconst isFaceActivated = isFontActivated(\n\t\t\tfont.slug,\n\t\t\tface.fontStyle,\n\t\t\tface.fontWeight,\n\t\t\tfont.source\n\t\t);\n\n\t\tif ( isFaceActivated ) {\n\t\t\tloadFontFaceInBrowser(\n\t\t\t\tface,\n\t\t\t\tgetDisplaySrcFromFontFace( face.src ),\n\t\t\t\t'all'\n\t\t\t);\n\t\t} else {\n\t\t\tunloadFontFaceInBrowser( face, 'all' );\n\t\t}\n\t};\n\n\tconst loadFontFaceAsset = async ( fontFace ) => {\n\t\t// If the font doesn't have a src, don't load it.\n\t\tif ( ! fontFace.src ) return;\n\t\t// Get the src of the font.\n\t\tconst src = getDisplaySrcFromFontFace( fontFace.src );\n\t\t// If the font is already loaded, don't load it again.\n\t\tif ( ! src || loadedFontUrls.has( src ) ) return;\n\t\t// Load the font in the browser.\n\t\tloadFontFaceInBrowser( fontFace, src, 'document' );\n\t\t// Add the font to the loaded fonts list.\n\t\tloadedFontUrls.add( src );\n\t};\n\n\t// Font Collections\n\tconst [ collections, setFontCollections ] = useState( [] );\n\tconst getFontCollections = async () => {\n\t\tconst response = await fetchFontCollections();\n\t\tsetFontCollections( response );\n\t};\n\tconst getFontCollection = async ( slug ) => {\n\t\ttry {\n\t\t\tconst hasData = !! collections.find(\n\t\t\t\t( collection ) => collection.slug === slug\n\t\t\t)?.font_families;\n\t\t\tif ( hasData ) return;\n\t\t\tconst response = await fetchFontCollection( slug );\n\t\t\tconst updatedCollections = collections.map( ( collection ) =>\n\t\t\t\tcollection.slug === slug\n\t\t\t\t\t? { ...collection, ...response }\n\t\t\t\t\t: collection\n\t\t\t);\n\t\t\tsetFontCollections( updatedCollections );\n\t\t} catch ( e ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( e );\n\t\t\tthrow e;\n\t\t}\n\t};\n\n\tuseEffect( () => {\n\t\tgetFontCollections();\n\t}, [] );\n\n\treturn (\n\t\t<FontLibraryContext.Provider\n\t\t\tvalue={ {\n\t\t\t\tlibraryFontSelected,\n\t\t\t\thandleSetLibraryFontSelected,\n\t\t\t\tthemeFonts,\n\t\t\t\tbaseThemeFonts,\n\t\t\t\tcustomFonts,\n\t\t\t\tbaseCustomFonts,\n\t\t\t\tisFontActivated,\n\t\t\t\tgetFontFacesActivated,\n\t\t\t\tloadFontFaceAsset,\n\t\t\t\tinstallFonts,\n\t\t\t\tuninstallFontFamily,\n\t\t\t\ttoggleActivateFont,\n\t\t\t\tgetAvailableFontsOutline,\n\t\t\t\tmodalTabOpen,\n\t\t\t\ttoggleModal,\n\t\t\t\trefreshLibrary,\n\t\t\t\tnotice,\n\t\t\t\tsetNotice,\n\t\t\t\tsaveFontFamilies,\n\t\t\t\tfontFamiliesHasChanges,\n\t\t\t\tisResolvingLibrary,\n\t\t\t\thasResolvedLibrary,\n\t\t\t\tisInstalling,\n\t\t\t\tcollections,\n\t\t\t\tgetFontCollection,\n\t\t\t} }\n\t\t>\n\t\t\t{ children }\n\t\t</FontLibraryContext.Provider>\n\t);\n}\n\nexport default FontLibraryProvider;\n"],"mappings":"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"}
@@ -50,7 +50,7 @@ function FontCollection({
50
50
  const {
51
51
  collections,
52
52
  getFontCollection,
53
- installFont,
53
+ installFonts,
54
54
  isInstalling,
55
55
  notice,
56
56
  setNotice
@@ -163,7 +163,7 @@ function FontCollection({
163
163
  return;
164
164
  }
165
165
  try {
166
- await installFont(fontFamily);
166
+ await installFonts([fontFamily]);
167
167
  setNotice({
168
168
  type: 'success',
169
169
  message: (0, _i18n.__)('Fonts were installed successfully.')
@@ -217,10 +217,10 @@ function FontCollection({
217
217
  path: "/"
218
218
  }, (0, _react.createElement)(_components.__experimentalHStack, {
219
219
  justify: "space-between"
220
- }, (0, _react.createElement)(_components.__experimentalHeading, {
220
+ }, (0, _react.createElement)(_components.__experimentalVStack, null, (0, _react.createElement)(_components.__experimentalHeading, {
221
221
  level: 2,
222
222
  size: 13
223
- }, selectedCollection.name), (0, _react.createElement)(ActionsComponent, null)), (0, _react.createElement)(_components.__experimentalText, null, selectedCollection.description), (0, _react.createElement)(_components.__experimentalSpacer, {
223
+ }, selectedCollection.name), (0, _react.createElement)(_components.__experimentalText, null, selectedCollection.description)), (0, _react.createElement)(ActionsComponent, null)), (0, _react.createElement)(_components.__experimentalSpacer, {
224
224
  margin: 4
225
225
  }), (0, _react.createElement)(_components.Flex, null, (0, _react.createElement)(_components.FlexItem, null, (0, _react.createElement)(_components.__experimentalInputControl, {
226
226
  value: filters.search,
@@ -322,8 +322,8 @@ function FontCollection({
322
322
  spacing: 2
323
323
  }, (0, _element.createInterpolateElement)((0, _i18n.sprintf)(
324
324
  // translators: %s: Total number of pages.
325
- (0, _i18n._x)('Page <CurrenPageControl /> of %s', 'paging'), totalPages), {
326
- CurrenPageControl: (0, _react.createElement)(_components.SelectControl, {
325
+ (0, _i18n._x)('Page <CurrentPageControl /> of %s', 'paging'), totalPages), {
326
+ CurrentPageControl: (0, _react.createElement)(_components.SelectControl, {
327
327
  "aria-label": (0, _i18n.__)('Current page'),
328
328
  value: page,
329
329
  options: [...Array(totalPages)].map((e, i) => {