@wordpress/edit-site 5.18.1-next.5a1d1283.0 → 5.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/build/components/add-new-pattern/index.js +62 -1
- package/build/components/add-new-pattern/index.js.map +1 -1
- package/build/components/add-new-template/index.js +3 -2
- package/build/components/add-new-template/index.js.map +1 -1
- package/build/components/add-new-template/new-template.js +6 -1
- package/build/components/add-new-template/new-template.js.map +1 -1
- package/build/components/add-new-template/utils.js +6 -1
- package/build/components/add-new-template/utils.js.map +1 -1
- package/build/components/app/index.js +2 -7
- package/build/components/app/index.js.map +1 -1
- package/build/components/block-editor/back-button.js +3 -2
- package/build/components/block-editor/back-button.js.map +1 -1
- package/build/components/block-editor/editor-canvas.js +20 -16
- package/build/components/block-editor/editor-canvas.js.map +1 -1
- package/build/components/block-editor/site-editor-canvas.js +1 -3
- package/build/components/block-editor/site-editor-canvas.js.map +1 -1
- package/build/components/block-editor/use-site-editor-settings.js +8 -4
- package/build/components/block-editor/use-site-editor-settings.js.map +1 -1
- package/build/components/canvas-loader/index.js +18 -1
- package/build/components/canvas-loader/index.js.map +1 -1
- package/build/components/editor/index.js +3 -8
- package/build/components/editor/index.js.map +1 -1
- package/build/components/global-styles/dimensions-panel.js +5 -4
- package/build/components/global-styles/dimensions-panel.js.map +1 -1
- package/build/components/global-styles/font-families.js +68 -0
- package/build/components/global-styles/font-families.js.map +1 -0
- package/build/components/global-styles/font-family-item.js +47 -0
- package/build/components/global-styles/font-family-item.js.map +1 -0
- package/build/components/global-styles/font-library-modal/confirm-delete-dialog.js +31 -0
- package/build/components/global-styles/font-library-modal/confirm-delete-dialog.js.map +1 -0
- package/build/components/global-styles/font-library-modal/context.js +285 -0
- package/build/components/global-styles/font-library-modal/context.js.map +1 -0
- package/build/components/global-styles/font-library-modal/font-card.js +58 -0
- package/build/components/global-styles/font-library-modal/font-card.js.map +1 -0
- package/build/components/global-styles/font-library-modal/font-demo.js +69 -0
- package/build/components/global-styles/font-library-modal/font-demo.js.map +1 -0
- package/build/components/global-styles/font-library-modal/font-variant.js +51 -0
- package/build/components/global-styles/font-library-modal/font-variant.js.map +1 -0
- package/build/components/global-styles/font-library-modal/fonts-grid.js +54 -0
- package/build/components/global-styles/font-library-modal/fonts-grid.js.map +1 -0
- package/build/components/global-styles/font-library-modal/index.js +47 -0
- package/build/components/global-styles/font-library-modal/index.js.map +1 -0
- package/build/components/global-styles/font-library-modal/installed-fonts.js +128 -0
- package/build/components/global-styles/font-library-modal/installed-fonts.js.map +1 -0
- package/build/components/global-styles/font-library-modal/library-font-card.js +44 -0
- package/build/components/global-styles/font-library-modal/library-font-card.js.map +1 -0
- package/build/components/global-styles/font-library-modal/library-font-details.js +43 -0
- package/build/components/global-styles/font-library-modal/library-font-details.js.map +1 -0
- package/build/components/global-styles/font-library-modal/library-font-variant.js +59 -0
- package/build/components/global-styles/font-library-modal/library-font-variant.js.map +1 -0
- package/build/components/global-styles/font-library-modal/local-fonts.js +143 -0
- package/build/components/global-styles/font-library-modal/local-fonts.js.map +1 -0
- package/build/components/global-styles/font-library-modal/resolvers.js +37 -0
- package/build/components/global-styles/font-library-modal/resolvers.js.map +1 -0
- package/build/components/global-styles/font-library-modal/tab-layout.js +45 -0
- package/build/components/global-styles/font-library-modal/tab-layout.js.map +1 -0
- package/build/components/global-styles/font-library-modal/utils/constants.js +37 -0
- package/build/components/global-styles/font-library-modal/utils/constants.js.map +1 -0
- package/build/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +58 -0
- package/build/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js.map +1 -0
- package/build/components/global-styles/font-library-modal/utils/index.js +205 -0
- package/build/components/global-styles/font-library-modal/utils/index.js.map +1 -0
- package/build/components/global-styles/font-library-modal/utils/make-families-from-faces.js +22 -0
- package/build/components/global-styles/font-library-modal/utils/make-families-from-faces.js.map +1 -0
- package/build/components/global-styles/font-library-modal/utils/toggleFont.js +92 -0
- package/build/components/global-styles/font-library-modal/utils/toggleFont.js.map +1 -0
- package/build/components/global-styles/global-styles-provider.js +7 -12
- package/build/components/global-styles/global-styles-provider.js.map +1 -1
- package/build/components/global-styles/screen-block.js +34 -21
- package/build/components/global-styles/screen-block.js.map +1 -1
- package/build/components/global-styles/screen-revisions/index.js +1 -3
- package/build/components/global-styles/screen-revisions/index.js.map +1 -1
- package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js +0 -1
- package/build/components/global-styles/screen-revisions/use-global-styles-revisions.js.map +1 -1
- package/build/components/global-styles/screen-typography.js +4 -72
- package/build/components/global-styles/screen-typography.js.map +1 -1
- package/build/components/global-styles/style-variations-container.js +3 -5
- package/build/components/global-styles/style-variations-container.js.map +1 -1
- package/build/components/global-styles/typogrphy-elements.js +96 -0
- package/build/components/global-styles/typogrphy-elements.js.map +1 -0
- package/build/components/page-patterns/duplicate-menu-item.js +52 -16
- package/build/components/page-patterns/duplicate-menu-item.js.map +1 -1
- package/build/components/page-patterns/grid-item.js +46 -20
- package/build/components/page-patterns/grid-item.js.map +1 -1
- package/build/components/page-patterns/header.js +3 -7
- package/build/components/page-patterns/header.js.map +1 -1
- package/build/components/page-patterns/index.js +3 -3
- package/build/components/page-patterns/index.js.map +1 -1
- package/build/components/page-patterns/patterns-list.js +7 -7
- package/build/components/page-patterns/patterns-list.js.map +1 -1
- package/build/components/page-patterns/rename-menu-item.js +6 -5
- package/build/components/page-patterns/rename-menu-item.js.map +1 -1
- package/build/components/page-patterns/search-items.js +8 -2
- package/build/components/page-patterns/search-items.js.map +1 -1
- package/build/components/page-patterns/use-patterns.js +53 -27
- package/build/components/page-patterns/use-patterns.js.map +1 -1
- package/build/components/page-patterns/utils.js +1 -20
- package/build/components/page-patterns/utils.js.map +1 -1
- package/build/components/sidebar-edit-mode/page-panels/edit-template.js +33 -24
- package/build/components/sidebar-edit-mode/page-panels/edit-template.js.map +1 -1
- package/build/components/sidebar-edit-mode/page-panels/hooks.js +64 -0
- package/build/components/sidebar-edit-mode/page-panels/hooks.js.map +1 -0
- package/build/components/sidebar-edit-mode/page-panels/index.js +1 -4
- package/build/components/sidebar-edit-mode/page-panels/index.js.map +1 -1
- package/build/components/sidebar-edit-mode/page-panels/page-summary.js +2 -1
- package/build/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
- package/build/components/sidebar-edit-mode/page-panels/reset-default-template.js +56 -0
- package/build/components/sidebar-edit-mode/page-panels/reset-default-template.js.map +1 -0
- package/build/components/sidebar-edit-mode/page-panels/swap-template-button.js +91 -0
- package/build/components/sidebar-edit-mode/page-panels/swap-template-button.js.map +1 -0
- package/build/components/sidebar-edit-mode/template-panel/index.js +11 -9
- package/build/components/sidebar-edit-mode/template-panel/index.js.map +1 -1
- package/build/components/sidebar-edit-mode/template-panel/last-revision.js +6 -4
- package/build/components/sidebar-edit-mode/template-panel/last-revision.js.map +1 -1
- package/build/components/sidebar-edit-mode/template-panel/pattern-categories.js +211 -0
- package/build/components/sidebar-edit-mode/template-panel/pattern-categories.js.map +1 -0
- package/build/components/sidebar-navigation-screen/index.js +6 -4
- package/build/components/sidebar-navigation-screen/index.js.map +1 -1
- package/build/components/sidebar-navigation-screen-details-footer/index.js +32 -4
- package/build/components/sidebar-navigation-screen-details-footer/index.js.map +1 -1
- package/build/components/sidebar-navigation-screen-details-panel/sidebar-navigation-screen-details-panel-row.js +4 -2
- package/build/components/sidebar-navigation-screen-details-panel/sidebar-navigation-screen-details-panel-row.js.map +1 -1
- package/build/components/sidebar-navigation-screen-global-styles/index.js +4 -31
- package/build/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
- package/build/components/sidebar-navigation-screen-page/index.js +3 -3
- package/build/components/sidebar-navigation-screen-page/index.js.map +1 -1
- package/build/components/sidebar-navigation-screen-pattern/index.js +18 -8
- package/build/components/sidebar-navigation-screen-pattern/index.js.map +1 -1
- package/build/components/sidebar-navigation-screen-pattern/use-pattern-details.js +34 -5
- package/build/components/sidebar-navigation-screen-pattern/use-pattern-details.js.map +1 -1
- package/build/components/sidebar-navigation-screen-patterns/index.js +7 -35
- package/build/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
- package/build/components/sidebar-navigation-screen-patterns/use-pattern-categories.js +38 -4
- package/build/components/sidebar-navigation-screen-patterns/use-pattern-categories.js.map +1 -1
- package/build/components/sidebar-navigation-screen-patterns/use-theme-patterns.js +2 -1
- package/build/components/sidebar-navigation-screen-patterns/use-theme-patterns.js.map +1 -1
- package/build/components/sidebar-navigation-screen-template/index.js +2 -2
- package/build/components/sidebar-navigation-screen-template/index.js.map +1 -1
- package/build/components/sidebar-navigation-screen-templates/index.js +1 -1
- package/build/components/sidebar-navigation-screen-templates/index.js.map +1 -1
- package/build/components/template-actions/index.js +7 -4
- package/build/components/template-actions/index.js.map +1 -1
- package/build/components/template-actions/rename-menu-item.js +3 -2
- package/build/components/template-actions/rename-menu-item.js.map +1 -1
- package/build/components/welcome-guide/styles.js +2 -2
- package/build/components/welcome-guide/styles.js.map +1 -1
- package/build/hooks/push-changes-to-global-styles/index.js +5 -37
- package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
- package/build/store/actions.js +29 -6
- package/build/store/actions.js.map +1 -1
- package/build/utils/constants.js +45 -2
- package/build/utils/constants.js.map +1 -1
- package/build/utils/is-template-removable.js +6 -1
- package/build/utils/is-template-removable.js.map +1 -1
- package/build/utils/is-template-revertable.js +6 -1
- package/build/utils/is-template-revertable.js.map +1 -1
- package/build-module/components/add-new-pattern/index.js +66 -5
- package/build-module/components/add-new-pattern/index.js.map +1 -1
- package/build-module/components/add-new-template/index.js +3 -2
- package/build-module/components/add-new-template/index.js.map +1 -1
- package/build-module/components/add-new-template/new-template.js +6 -1
- package/build-module/components/add-new-template/new-template.js.map +1 -1
- package/build-module/components/add-new-template/utils.js +6 -1
- package/build-module/components/add-new-template/utils.js.map +1 -1
- package/build-module/components/app/index.js +2 -7
- package/build-module/components/app/index.js.map +1 -1
- package/build-module/components/block-editor/back-button.js +3 -2
- package/build-module/components/block-editor/back-button.js.map +1 -1
- package/build-module/components/block-editor/editor-canvas.js +21 -17
- package/build-module/components/block-editor/editor-canvas.js.map +1 -1
- package/build-module/components/block-editor/site-editor-canvas.js +3 -5
- package/build-module/components/block-editor/site-editor-canvas.js.map +1 -1
- package/build-module/components/block-editor/use-site-editor-settings.js +8 -4
- package/build-module/components/block-editor/use-site-editor-settings.js.map +1 -1
- package/build-module/components/canvas-loader/index.js +18 -1
- package/build-module/components/canvas-loader/index.js.map +1 -1
- package/build-module/components/editor/index.js +3 -8
- package/build-module/components/editor/index.js.map +1 -1
- package/build-module/components/global-styles/dimensions-panel.js +5 -4
- package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
- package/build-module/components/global-styles/font-families.js +58 -0
- package/build-module/components/global-styles/font-families.js.map +1 -0
- package/build-module/components/global-styles/font-family-item.js +40 -0
- package/build-module/components/global-styles/font-family-item.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/confirm-delete-dialog.js +23 -0
- package/build-module/components/global-styles/font-library-modal/confirm-delete-dialog.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/context.js +276 -0
- package/build-module/components/global-styles/font-library-modal/context.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/font-card.js +49 -0
- package/build-module/components/global-styles/font-library-modal/font-card.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/font-demo.js +62 -0
- package/build-module/components/global-styles/font-library-modal/font-demo.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/font-variant.js +42 -0
- package/build-module/components/global-styles/font-library-modal/font-variant.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/fonts-grid.js +47 -0
- package/build-module/components/global-styles/font-library-modal/fonts-grid.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/index.js +38 -0
- package/build-module/components/global-styles/font-library-modal/index.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/installed-fonts.js +120 -0
- package/build-module/components/global-styles/font-library-modal/installed-fonts.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/library-font-card.js +36 -0
- package/build-module/components/global-styles/font-library-modal/library-font-card.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/library-font-details.js +34 -0
- package/build-module/components/global-styles/font-library-modal/library-font-details.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/library-font-variant.js +50 -0
- package/build-module/components/global-styles/font-library-modal/library-font-variant.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/local-fonts.js +135 -0
- package/build-module/components/global-styles/font-library-modal/local-fonts.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/resolvers.js +28 -0
- package/build-module/components/global-styles/font-library-modal/resolvers.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/tab-layout.js +37 -0
- package/build-module/components/global-styles/font-library-modal/tab-layout.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/utils/constants.js +26 -0
- package/build-module/components/global-styles/font-library-modal/utils/constants.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +52 -0
- package/build-module/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/utils/index.js +190 -0
- package/build-module/components/global-styles/font-library-modal/utils/index.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/utils/make-families-from-faces.js +16 -0
- package/build-module/components/global-styles/font-library-modal/utils/make-families-from-faces.js.map +1 -0
- package/build-module/components/global-styles/font-library-modal/utils/toggleFont.js +86 -0
- package/build-module/components/global-styles/font-library-modal/utils/toggleFont.js.map +1 -0
- package/build-module/components/global-styles/global-styles-provider.js +7 -12
- package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
- package/build-module/components/global-styles/screen-block.js +34 -21
- package/build-module/components/global-styles/screen-block.js.map +1 -1
- package/build-module/components/global-styles/screen-revisions/index.js +1 -3
- package/build-module/components/global-styles/screen-revisions/index.js.map +1 -1
- package/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js +0 -1
- package/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js.map +1 -1
- package/build-module/components/global-styles/screen-typography.js +6 -74
- package/build-module/components/global-styles/screen-typography.js.map +1 -1
- package/build-module/components/global-styles/style-variations-container.js +3 -5
- package/build-module/components/global-styles/style-variations-container.js.map +1 -1
- package/build-module/components/global-styles/typogrphy-elements.js +87 -0
- package/build-module/components/global-styles/typogrphy-elements.js.map +1 -0
- package/build-module/components/page-patterns/duplicate-menu-item.js +51 -16
- package/build-module/components/page-patterns/duplicate-menu-item.js.map +1 -1
- package/build-module/components/page-patterns/grid-item.js +47 -21
- package/build-module/components/page-patterns/grid-item.js.map +1 -1
- package/build-module/components/page-patterns/header.js +3 -7
- package/build-module/components/page-patterns/header.js.map +1 -1
- package/build-module/components/page-patterns/index.js +3 -3
- package/build-module/components/page-patterns/index.js.map +1 -1
- package/build-module/components/page-patterns/patterns-list.js +7 -7
- package/build-module/components/page-patterns/patterns-list.js.map +1 -1
- package/build-module/components/page-patterns/rename-menu-item.js +6 -5
- package/build-module/components/page-patterns/rename-menu-item.js.map +1 -1
- package/build-module/components/page-patterns/search-items.js +8 -2
- package/build-module/components/page-patterns/search-items.js.map +1 -1
- package/build-module/components/page-patterns/use-patterns.js +54 -28
- package/build-module/components/page-patterns/use-patterns.js.map +1 -1
- package/build-module/components/page-patterns/utils.js +0 -11
- package/build-module/components/page-patterns/utils.js.map +1 -1
- package/build-module/components/sidebar-edit-mode/page-panels/edit-template.js +34 -27
- package/build-module/components/sidebar-edit-mode/page-panels/edit-template.js.map +1 -1
- package/build-module/components/sidebar-edit-mode/page-panels/hooks.js +54 -0
- package/build-module/components/sidebar-edit-mode/page-panels/hooks.js.map +1 -0
- package/build-module/components/sidebar-edit-mode/page-panels/index.js +1 -4
- package/build-module/components/sidebar-edit-mode/page-panels/index.js.map +1 -1
- package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js +2 -1
- package/build-module/components/sidebar-edit-mode/page-panels/page-summary.js.map +1 -1
- package/build-module/components/sidebar-edit-mode/page-panels/reset-default-template.js +49 -0
- package/build-module/components/sidebar-edit-mode/page-panels/reset-default-template.js.map +1 -0
- package/build-module/components/sidebar-edit-mode/page-panels/swap-template-button.js +85 -0
- package/build-module/components/sidebar-edit-mode/page-panels/swap-template-button.js.map +1 -0
- package/build-module/components/sidebar-edit-mode/template-panel/index.js +12 -10
- package/build-module/components/sidebar-edit-mode/template-panel/index.js.map +1 -1
- package/build-module/components/sidebar-edit-mode/template-panel/last-revision.js +8 -6
- package/build-module/components/sidebar-edit-mode/template-panel/last-revision.js.map +1 -1
- package/build-module/components/sidebar-edit-mode/template-panel/pattern-categories.js +202 -0
- package/build-module/components/sidebar-edit-mode/template-panel/pattern-categories.js.map +1 -0
- package/build-module/components/sidebar-navigation-screen/index.js +6 -4
- package/build-module/components/sidebar-navigation-screen/index.js.map +1 -1
- package/build-module/components/sidebar-navigation-screen-details-footer/index.js +32 -5
- package/build-module/components/sidebar-navigation-screen-details-footer/index.js.map +1 -1
- package/build-module/components/sidebar-navigation-screen-details-panel/sidebar-navigation-screen-details-panel-row.js +4 -2
- package/build-module/components/sidebar-navigation-screen-details-panel/sidebar-navigation-screen-details-panel-row.js.map +1 -1
- package/build-module/components/sidebar-navigation-screen-global-styles/index.js +6 -33
- package/build-module/components/sidebar-navigation-screen-global-styles/index.js.map +1 -1
- package/build-module/components/sidebar-navigation-screen-page/index.js +3 -3
- package/build-module/components/sidebar-navigation-screen-page/index.js.map +1 -1
- package/build-module/components/sidebar-navigation-screen-pattern/index.js +19 -9
- package/build-module/components/sidebar-navigation-screen-pattern/index.js.map +1 -1
- package/build-module/components/sidebar-navigation-screen-pattern/use-pattern-details.js +34 -5
- package/build-module/components/sidebar-navigation-screen-pattern/use-pattern-details.js.map +1 -1
- package/build-module/components/sidebar-navigation-screen-patterns/index.js +10 -38
- package/build-module/components/sidebar-navigation-screen-patterns/index.js.map +1 -1
- package/build-module/components/sidebar-navigation-screen-patterns/use-pattern-categories.js +38 -4
- package/build-module/components/sidebar-navigation-screen-patterns/use-pattern-categories.js.map +1 -1
- package/build-module/components/sidebar-navigation-screen-patterns/use-theme-patterns.js +3 -2
- package/build-module/components/sidebar-navigation-screen-patterns/use-theme-patterns.js.map +1 -1
- package/build-module/components/sidebar-navigation-screen-template/index.js +2 -2
- package/build-module/components/sidebar-navigation-screen-template/index.js.map +1 -1
- package/build-module/components/sidebar-navigation-screen-templates/index.js +1 -1
- package/build-module/components/sidebar-navigation-screen-templates/index.js.map +1 -1
- package/build-module/components/template-actions/index.js +7 -4
- package/build-module/components/template-actions/index.js.map +1 -1
- package/build-module/components/template-actions/rename-menu-item.js +3 -2
- package/build-module/components/template-actions/rename-menu-item.js.map +1 -1
- package/build-module/components/welcome-guide/styles.js +2 -2
- package/build-module/components/welcome-guide/styles.js.map +1 -1
- package/build-module/hooks/push-changes-to-global-styles/index.js +5 -37
- package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
- package/build-module/store/actions.js +30 -7
- package/build-module/store/actions.js.map +1 -1
- package/build-module/utils/constants.js +35 -1
- package/build-module/utils/constants.js.map +1 -1
- package/build-module/utils/is-template-removable.js +6 -1
- package/build-module/utils/is-template-removable.js.map +1 -1
- package/build-module/utils/is-template-revertable.js +6 -1
- package/build-module/utils/is-template-revertable.js.map +1 -1
- package/build-style/style-rtl.css +244 -37
- package/build-style/style.css +244 -37
- package/lib/inflate.js +4082 -0
- package/lib/lib-font.browser.js +3831 -0
- package/lib/unbrotli.js +2679 -0
- package/package.json +40 -40
- package/src/components/add-new-pattern/index.js +83 -5
- package/src/components/add-new-template/index.js +3 -2
- package/src/components/add-new-template/new-template.js +6 -1
- package/src/components/add-new-template/utils.js +12 -3
- package/src/components/app/index.js +9 -12
- package/src/components/block-editor/back-button.js +6 -2
- package/src/components/block-editor/editor-canvas.js +31 -19
- package/src/components/block-editor/site-editor-canvas.js +2 -10
- package/src/components/block-editor/style.scss +88 -1
- package/src/components/block-editor/use-site-editor-settings.js +26 -19
- package/src/components/canvas-loader/index.js +12 -1
- package/src/components/canvas-loader/style.scss +1 -1
- package/src/components/editor/index.js +3 -8
- package/src/components/global-styles/dimensions-panel.js +8 -4
- package/src/components/global-styles/font-families.js +71 -0
- package/src/components/global-styles/font-family-item.js +44 -0
- package/src/components/global-styles/font-library-modal/confirm-delete-dialog.js +33 -0
- package/src/components/global-styles/font-library-modal/context.js +347 -0
- package/src/components/global-styles/font-library-modal/font-card.js +70 -0
- package/src/components/global-styles/font-library-modal/font-demo.js +57 -0
- package/src/components/global-styles/font-library-modal/font-variant.js +53 -0
- package/src/components/global-styles/font-library-modal/fonts-grid.js +55 -0
- package/src/components/global-styles/font-library-modal/index.js +42 -0
- package/src/components/global-styles/font-library-modal/installed-fonts.js +174 -0
- package/src/components/global-styles/font-library-modal/library-font-card.js +40 -0
- package/src/components/global-styles/font-library-modal/library-font-details.js +46 -0
- package/src/components/global-styles/font-library-modal/library-font-variant.js +54 -0
- package/src/components/global-styles/font-library-modal/local-fonts.js +160 -0
- package/src/components/global-styles/font-library-modal/resolvers.js +29 -0
- package/src/components/global-styles/font-library-modal/style.scss +113 -0
- package/src/components/global-styles/font-library-modal/tab-layout.js +50 -0
- package/src/components/global-styles/font-library-modal/utils/constants.js +31 -0
- package/src/components/global-styles/font-library-modal/utils/get-intersecting-font-faces.js +58 -0
- package/src/components/global-styles/font-library-modal/utils/index.js +213 -0
- package/src/components/global-styles/font-library-modal/utils/make-families-from-faces.js +15 -0
- package/src/components/global-styles/font-library-modal/utils/test/getDisplaySrcFromFontFace.spec.js +53 -0
- package/src/components/global-styles/font-library-modal/utils/test/getFontFaceVariantName.spec.js +30 -0
- package/src/components/global-styles/font-library-modal/utils/test/getIntersectingFontFaces.spec.js +240 -0
- package/src/components/global-styles/font-library-modal/utils/test/getPreviewStyle.spec.js +121 -0
- package/src/components/global-styles/font-library-modal/utils/test/isUrlEncoded.spec.js +31 -0
- package/src/components/global-styles/font-library-modal/utils/test/makeFamiliesFromFaces.spec.js +57 -0
- package/src/components/global-styles/font-library-modal/utils/test/makeFormDataFromFontFamilies.spec.js +62 -0
- package/src/components/global-styles/font-library-modal/utils/test/mergeFontFaces.spec.js +56 -0
- package/src/components/global-styles/font-library-modal/utils/test/mergeFontFamilies.spec.js +108 -0
- package/src/components/global-styles/font-library-modal/utils/test/setUIValuesNeeded.spec.js +41 -0
- package/src/components/global-styles/font-library-modal/utils/test/toggleFont.spec.js +141 -0
- package/src/components/global-styles/font-library-modal/utils/toggleFont.js +90 -0
- package/src/components/global-styles/global-styles-provider.js +2 -7
- package/src/components/global-styles/screen-block.js +42 -20
- package/src/components/global-styles/screen-revisions/index.js +0 -2
- package/src/components/global-styles/screen-revisions/use-global-styles-revisions.js +0 -1
- package/src/components/global-styles/screen-typography.js +7 -95
- package/src/components/global-styles/style-variations-container.js +0 -2
- package/src/components/global-styles/typogrphy-elements.js +110 -0
- package/src/components/list/style.scss +2 -0
- package/src/components/page-patterns/duplicate-menu-item.js +63 -20
- package/src/components/page-patterns/grid-item.js +77 -30
- package/src/components/page-patterns/header.js +3 -12
- package/src/components/page-patterns/index.js +3 -3
- package/src/components/page-patterns/patterns-list.js +7 -7
- package/src/components/page-patterns/rename-menu-item.js +18 -7
- package/src/components/page-patterns/search-items.js +14 -2
- package/src/components/page-patterns/style.scss +1 -5
- package/src/components/page-patterns/use-patterns.js +67 -33
- package/src/components/page-patterns/utils.js +0 -19
- package/src/components/sidebar-edit-mode/page-panels/edit-template.js +47 -33
- package/src/components/sidebar-edit-mode/page-panels/hooks.js +83 -0
- package/src/components/sidebar-edit-mode/page-panels/index.js +0 -4
- package/src/components/sidebar-edit-mode/page-panels/page-summary.js +2 -0
- package/src/components/sidebar-edit-mode/page-panels/reset-default-template.js +44 -0
- package/src/components/sidebar-edit-mode/page-panels/style.scss +41 -10
- package/src/components/sidebar-edit-mode/page-panels/swap-template-button.js +82 -0
- package/src/components/sidebar-edit-mode/template-panel/index.js +28 -24
- package/src/components/sidebar-edit-mode/template-panel/last-revision.js +19 -15
- package/src/components/sidebar-edit-mode/template-panel/pattern-categories.js +270 -0
- package/src/components/sidebar-navigation-screen/index.js +4 -9
- package/src/components/sidebar-navigation-screen/style.scss +7 -1
- package/src/components/sidebar-navigation-screen-details-footer/index.js +38 -10
- package/src/components/sidebar-navigation-screen-details-footer/style.scss +10 -3
- package/src/components/sidebar-navigation-screen-details-panel/sidebar-navigation-screen-details-panel-row.js +2 -0
- package/src/components/sidebar-navigation-screen-global-styles/index.js +6 -44
- package/src/components/sidebar-navigation-screen-navigation-menus/style.scss +0 -4
- package/src/components/sidebar-navigation-screen-page/index.js +3 -3
- package/src/components/sidebar-navigation-screen-pattern/index.js +20 -7
- package/src/components/sidebar-navigation-screen-pattern/style.scss +0 -3
- package/src/components/sidebar-navigation-screen-pattern/use-pattern-details.js +46 -13
- package/src/components/sidebar-navigation-screen-patterns/index.js +14 -49
- package/src/components/sidebar-navigation-screen-patterns/use-pattern-categories.js +48 -6
- package/src/components/sidebar-navigation-screen-patterns/use-theme-patterns.js +3 -5
- package/src/components/sidebar-navigation-screen-template/index.js +2 -4
- package/src/components/sidebar-navigation-screen-templates/index.js +1 -1
- package/src/components/template-actions/index.js +14 -8
- package/src/components/template-actions/rename-menu-item.js +15 -4
- package/src/components/welcome-guide/styles.js +2 -2
- package/src/hooks/push-changes-to-global-styles/index.js +6 -49
- package/src/store/actions.js +39 -13
- package/src/style.scss +1 -1
- package/src/utils/constants.js +38 -3
- package/src/utils/is-template-removable.js +8 -1
- package/src/utils/is-template-revertable.js +8 -1
- package/build/components/sidebar-navigation-screen-patterns/use-my-patterns.js +0 -30
- package/build/components/sidebar-navigation-screen-patterns/use-my-patterns.js.map +0 -1
- package/build-module/components/sidebar-navigation-screen-patterns/use-my-patterns.js +0 -23
- package/build-module/components/sidebar-navigation-screen-patterns/use-my-patterns.js.map +0 -1
- package/src/components/sidebar-navigation-screen-global-styles/style.scss +0 -12
- package/src/components/sidebar-navigation-screen-patterns/use-my-patterns.js +0 -24
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* WordPress dependencies
|
|
7
|
+
*/
|
|
8
|
+
import apiFetch from '@wordpress/api-fetch';
|
|
9
|
+
|
|
10
|
+
export async function fetchInstallFonts( data ) {
|
|
11
|
+
const config = {
|
|
12
|
+
path: '/wp/v2/fonts',
|
|
13
|
+
method: 'POST',
|
|
14
|
+
body: data,
|
|
15
|
+
};
|
|
16
|
+
return apiFetch( config );
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export async function fetchUninstallFonts( fonts ) {
|
|
20
|
+
const data = {
|
|
21
|
+
fontFamilies: fonts,
|
|
22
|
+
};
|
|
23
|
+
const config = {
|
|
24
|
+
path: '/wp/v2/fonts',
|
|
25
|
+
method: 'DELETE',
|
|
26
|
+
data,
|
|
27
|
+
};
|
|
28
|
+
return apiFetch( config );
|
|
29
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
.font-library-modal {
|
|
2
|
+
.components-modal__header {
|
|
3
|
+
border-bottom: none;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.components-modal__content {
|
|
7
|
+
padding-top: 0;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.font-library-modal__subtitle {
|
|
11
|
+
text-transform: uppercase;
|
|
12
|
+
font-weight: 500;
|
|
13
|
+
font-size: 11px;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.font-library-modal__tab-layout {
|
|
18
|
+
|
|
19
|
+
main {
|
|
20
|
+
padding-bottom: 4rem;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
footer {
|
|
24
|
+
border-top: 1px solid #e5e5e5;
|
|
25
|
+
margin: 0 -32px -32px;
|
|
26
|
+
padding: 16px 32px;
|
|
27
|
+
position: absolute;
|
|
28
|
+
bottom: 32px;
|
|
29
|
+
width: 100%;
|
|
30
|
+
background-color: #fff;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.font-library-modal__fonts-grid {
|
|
36
|
+
.font-library-modal__fonts-grid__main {
|
|
37
|
+
display: flex;
|
|
38
|
+
flex-direction: column;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.font-library-modal__font-card {
|
|
43
|
+
border: 1px solid #e5e5e5;
|
|
44
|
+
height: auto;
|
|
45
|
+
padding: 1rem;
|
|
46
|
+
margin-top: -1px; /* To collapse the margin with the previous element */
|
|
47
|
+
|
|
48
|
+
.font-library-modal__font-card__name {
|
|
49
|
+
font-weight: bold;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.font-library-modal__font-card__count {
|
|
53
|
+
color: #6e6e6e;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.font-library-modal__library-font-variant {
|
|
58
|
+
border: 1px solid #e5e5e5;
|
|
59
|
+
padding: 1rem;
|
|
60
|
+
margin-top: -1px; /* To collapse the margin with the previous element */
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.font-library-modal__font-variant {
|
|
64
|
+
border-bottom: 1px solid #e5e5e5;
|
|
65
|
+
padding-bottom: 1rem;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.font-library-modal__tab-panel {
|
|
69
|
+
[role="tablist"] {
|
|
70
|
+
position: sticky;
|
|
71
|
+
top: 0;
|
|
72
|
+
width: calc(100% + 64px);
|
|
73
|
+
border-bottom: 1px solid #e6e6e6;
|
|
74
|
+
background: #fff;
|
|
75
|
+
margin: 0 -32px;
|
|
76
|
+
padding: 0 16px;
|
|
77
|
+
z-index: 1;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.font-library-modal__upload-area {
|
|
82
|
+
align-items: center;
|
|
83
|
+
display: flex;
|
|
84
|
+
justify-content: center;
|
|
85
|
+
height: 100px;
|
|
86
|
+
width: 100%;
|
|
87
|
+
background-color: #f0f0f0;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.font-library-modal__font-name {
|
|
91
|
+
font-weight: bold;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.font-library-modal__font-filename {
|
|
95
|
+
color: #6e6e6e;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.font-library-modal__font-variant_demo-wrapper {
|
|
99
|
+
white-space: nowrap;
|
|
100
|
+
overflow: hidden;
|
|
101
|
+
width: 100%;
|
|
102
|
+
position: relative;
|
|
103
|
+
|
|
104
|
+
&::after {
|
|
105
|
+
content: "";
|
|
106
|
+
position: absolute;
|
|
107
|
+
bottom: 0;
|
|
108
|
+
right: 0;
|
|
109
|
+
width: 30vw;
|
|
110
|
+
height: 100%;
|
|
111
|
+
background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import {
|
|
5
|
+
__experimentalText as Text,
|
|
6
|
+
__experimentalHeading as Heading,
|
|
7
|
+
__experimentalVStack as VStack,
|
|
8
|
+
__experimentalSpacer as Spacer,
|
|
9
|
+
__experimentalHStack as HStack,
|
|
10
|
+
Button,
|
|
11
|
+
} from '@wordpress/components';
|
|
12
|
+
import { chevronLeft } from '@wordpress/icons';
|
|
13
|
+
|
|
14
|
+
function TabLayout( { title, description, handleBack, children, footer } ) {
|
|
15
|
+
return (
|
|
16
|
+
<div className="font-library-modal__tab-layout">
|
|
17
|
+
<Spacer margin={ 4 } />
|
|
18
|
+
<VStack spacing={ 4 } justify="space-between">
|
|
19
|
+
<header>
|
|
20
|
+
<VStack spacing={ 2 }>
|
|
21
|
+
<HStack justify="flex-start">
|
|
22
|
+
{ !! handleBack && (
|
|
23
|
+
<Button
|
|
24
|
+
variant="tertiary"
|
|
25
|
+
onClick={ handleBack }
|
|
26
|
+
icon={ chevronLeft }
|
|
27
|
+
isSmall
|
|
28
|
+
/>
|
|
29
|
+
) }
|
|
30
|
+
{ title && (
|
|
31
|
+
<Heading
|
|
32
|
+
level={ 2 }
|
|
33
|
+
size={ 13 }
|
|
34
|
+
className="edit-site-global-styles-header"
|
|
35
|
+
>
|
|
36
|
+
{ title }
|
|
37
|
+
</Heading>
|
|
38
|
+
) }
|
|
39
|
+
</HStack>
|
|
40
|
+
{ description && <Text>{ description }</Text> }
|
|
41
|
+
</VStack>
|
|
42
|
+
</header>
|
|
43
|
+
<main>{ children }</main>
|
|
44
|
+
<footer>{ footer }</footer>
|
|
45
|
+
</VStack>
|
|
46
|
+
</div>
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export default TabLayout;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __, _x } from '@wordpress/i18n';
|
|
5
|
+
|
|
6
|
+
export const MODAL_TABS = [
|
|
7
|
+
{
|
|
8
|
+
name: 'installed-fonts',
|
|
9
|
+
title: __( 'Library' ),
|
|
10
|
+
className: 'installed-fonts',
|
|
11
|
+
},
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
export const ALLOWED_FILE_EXTENSIONS = [ 'otf', 'ttf', 'woff', 'woff2' ];
|
|
15
|
+
|
|
16
|
+
export const FONT_WEIGHTS = {
|
|
17
|
+
100: _x( 'Thin', 'font weight' ),
|
|
18
|
+
200: _x( 'Extra-light', 'font weight' ),
|
|
19
|
+
300: _x( 'Light', 'font weight' ),
|
|
20
|
+
400: _x( 'Normal', 'font weight' ),
|
|
21
|
+
500: _x( 'Medium', 'font weight' ),
|
|
22
|
+
600: _x( 'Semi-bold', 'font weight' ),
|
|
23
|
+
700: _x( 'Bold', 'font weight' ),
|
|
24
|
+
800: _x( 'Extra-bold', 'font weight' ),
|
|
25
|
+
900: _x( 'Black', 'font weight' ),
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export const FONT_STYLES = {
|
|
29
|
+
normal: _x( 'Normal', 'font style' ),
|
|
30
|
+
italic: _x( 'Italic', 'font style' ),
|
|
31
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retrieves intersecting font faces between two sets of fonts.
|
|
3
|
+
*
|
|
4
|
+
* For each font in the `incoming` list, the function checks for a corresponding match
|
|
5
|
+
* in the `existing` list based on the `slug` property. If a match is found and both
|
|
6
|
+
* have `fontFace` properties, it further narrows down to matching font faces based on
|
|
7
|
+
* the `fontWeight` and `fontStyle`. The result includes the properties of the matched
|
|
8
|
+
* existing font but only with intersecting font faces.
|
|
9
|
+
*
|
|
10
|
+
* @param {Array.<{ slug: string, fontFace?: Array.<{ fontWeight: string, fontStyle: string }> }>} incoming - The list of fonts to compare.
|
|
11
|
+
* @param {Array.<{ slug: string, fontFace?: Array.<{ fontWeight: string, fontStyle: string }> }>} existing - The reference list of fonts.
|
|
12
|
+
*
|
|
13
|
+
* @return {Array.<{ slug: string, fontFace?: Array.<{ fontWeight: string, fontStyle: string }> }>} An array of fonts from the `existing` list with intersecting font faces.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* const incomingFonts = [
|
|
17
|
+
* { slug: 'arial', fontFace: [{ fontWeight: '400', fontStyle: 'normal' }] },
|
|
18
|
+
* { slug: 'times-new', fontFace: [{ fontWeight: '700', fontStyle: 'italic' }] }
|
|
19
|
+
* ];
|
|
20
|
+
*
|
|
21
|
+
* const existingFonts = [
|
|
22
|
+
* { slug: 'arial', fontFace: [{ fontWeight: '400', fontStyle: 'normal' }, { fontWeight: '700', fontStyle: 'italic' }] },
|
|
23
|
+
* { slug: 'helvetica', fontFace: [{ fontWeight: '400', fontStyle: 'normal' }] }
|
|
24
|
+
* ];
|
|
25
|
+
*
|
|
26
|
+
* getIntersectingFontFaces(incomingFonts, existingFonts);
|
|
27
|
+
* // Returns:
|
|
28
|
+
* // [{ slug: 'arial', fontFace: [{ fontWeight: '400', fontStyle: 'normal' }] }]
|
|
29
|
+
*/
|
|
30
|
+
export default function getIntersectingFontFaces( incoming, existing ) {
|
|
31
|
+
const matches = [];
|
|
32
|
+
|
|
33
|
+
for ( const incomingFont of incoming ) {
|
|
34
|
+
const existingFont = existing.find(
|
|
35
|
+
( f ) => f.slug === incomingFont.slug
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
if ( existingFont ) {
|
|
39
|
+
if ( incomingFont?.fontFace ) {
|
|
40
|
+
const matchingFaces = incomingFont.fontFace.filter(
|
|
41
|
+
( face ) => {
|
|
42
|
+
return ( existingFont?.fontFace || [] ).find( ( f ) => {
|
|
43
|
+
return (
|
|
44
|
+
f.fontWeight === face.fontWeight &&
|
|
45
|
+
f.fontStyle === face.fontStyle
|
|
46
|
+
);
|
|
47
|
+
} );
|
|
48
|
+
}
|
|
49
|
+
);
|
|
50
|
+
matches.push( { ...existingFont, fontFace: matchingFaces } );
|
|
51
|
+
} else {
|
|
52
|
+
matches.push( incomingFont );
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return matches;
|
|
58
|
+
}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { FONT_WEIGHTS, FONT_STYLES } from './constants';
|
|
5
|
+
|
|
6
|
+
export function setUIValuesNeeded( font, extraValues = {} ) {
|
|
7
|
+
if ( ! font.name && ( font.fontFamily || font.slug ) ) {
|
|
8
|
+
font.name = font.fontFamily || font.slug;
|
|
9
|
+
}
|
|
10
|
+
return {
|
|
11
|
+
...font,
|
|
12
|
+
...extraValues,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function isUrlEncoded( url ) {
|
|
17
|
+
if ( typeof url !== 'string' ) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
return url !== decodeURIComponent( url );
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function getFontFaceVariantName( face ) {
|
|
24
|
+
const weightName = FONT_WEIGHTS[ face.fontWeight ] || face.fontWeight;
|
|
25
|
+
const styleName =
|
|
26
|
+
face.fontStyle === 'normal'
|
|
27
|
+
? ''
|
|
28
|
+
: FONT_STYLES[ face.fontStyle ] || face.fontStyle;
|
|
29
|
+
return `${ weightName } ${ styleName }`;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function mergeFontFaces( existing = [], incoming = [] ) {
|
|
33
|
+
const map = new Map();
|
|
34
|
+
for ( const face of existing ) {
|
|
35
|
+
map.set( `${ face.fontWeight }${ face.fontStyle }`, face );
|
|
36
|
+
}
|
|
37
|
+
for ( const face of incoming ) {
|
|
38
|
+
// This will overwrite if the src already exists, keeping it unique.
|
|
39
|
+
map.set( `${ face.fontWeight }${ face.fontStyle }`, face );
|
|
40
|
+
}
|
|
41
|
+
return Array.from( map.values() );
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function mergeFontFamilies( existing = [], incoming = [] ) {
|
|
45
|
+
const map = new Map();
|
|
46
|
+
// Add the existing array to the map.
|
|
47
|
+
for ( const font of existing ) {
|
|
48
|
+
map.set( font.slug, { ...font } );
|
|
49
|
+
}
|
|
50
|
+
// Add the incoming array to the map, overwriting existing values excepting fontFace that need to be merged.
|
|
51
|
+
for ( const font of incoming ) {
|
|
52
|
+
if ( map.has( font.slug ) ) {
|
|
53
|
+
const { fontFace: incomingFontFaces, ...restIncoming } = font;
|
|
54
|
+
const existingFont = map.get( font.slug );
|
|
55
|
+
// Merge the fontFaces existing with the incoming fontFaces.
|
|
56
|
+
const mergedFontFaces = mergeFontFaces(
|
|
57
|
+
existingFont.fontFace,
|
|
58
|
+
incomingFontFaces
|
|
59
|
+
);
|
|
60
|
+
// Except for the fontFace key all the other keys are overwritten with the incoming values.
|
|
61
|
+
map.set( font.slug, {
|
|
62
|
+
...restIncoming,
|
|
63
|
+
fontFace: mergedFontFaces,
|
|
64
|
+
} );
|
|
65
|
+
} else {
|
|
66
|
+
map.set( font.slug, { ...font } );
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return Array.from( map.values() );
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/*
|
|
73
|
+
* Loads the font face from a URL and adds it to the browser.
|
|
74
|
+
* It also adds it to the iframe document.
|
|
75
|
+
*/
|
|
76
|
+
export async function loadFontFaceInBrowser( fontFace, source, addTo = 'all' ) {
|
|
77
|
+
let dataSource;
|
|
78
|
+
|
|
79
|
+
if ( typeof source === 'string' ) {
|
|
80
|
+
dataSource = `url(${ source })`;
|
|
81
|
+
// eslint-disable-next-line no-undef
|
|
82
|
+
} else if ( source instanceof File ) {
|
|
83
|
+
dataSource = await source.arrayBuffer();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// eslint-disable-next-line no-undef
|
|
87
|
+
const newFont = new FontFace( fontFace.fontFamily, dataSource, {
|
|
88
|
+
style: fontFace.fontStyle,
|
|
89
|
+
weight: fontFace.fontWeight,
|
|
90
|
+
} );
|
|
91
|
+
|
|
92
|
+
const loadedFace = await newFont.load();
|
|
93
|
+
|
|
94
|
+
if ( addTo === 'document' || addTo === 'all' ) {
|
|
95
|
+
document.fonts.add( loadedFace );
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if ( addTo === 'iframe' || addTo === 'all' ) {
|
|
99
|
+
const iframeDocument = document.querySelector(
|
|
100
|
+
'iframe[name="editor-canvas"]'
|
|
101
|
+
).contentDocument;
|
|
102
|
+
iframeDocument.fonts.add( loadedFace );
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function getDisplaySrcFromFontFace( input, urlPrefix ) {
|
|
107
|
+
let src;
|
|
108
|
+
if ( Array.isArray( input ) ) {
|
|
109
|
+
src = input[ 0 ];
|
|
110
|
+
} else {
|
|
111
|
+
src = input;
|
|
112
|
+
}
|
|
113
|
+
// If it is a theme font, we need to make the url absolute
|
|
114
|
+
if ( src.startsWith( 'file:.' ) && urlPrefix ) {
|
|
115
|
+
src = src.replace( 'file:.', urlPrefix );
|
|
116
|
+
}
|
|
117
|
+
if ( ! isUrlEncoded( src ) ) {
|
|
118
|
+
src = encodeURI( src );
|
|
119
|
+
}
|
|
120
|
+
return src;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function findNearest( input, numbers ) {
|
|
124
|
+
// If the numbers array is empty, return null
|
|
125
|
+
if ( numbers.length === 0 ) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
// Sort the array based on the absolute difference with the input
|
|
129
|
+
numbers.sort( ( a, b ) => Math.abs( input - a ) - Math.abs( input - b ) );
|
|
130
|
+
// Return the first element (which will be the nearest) from the sorted array
|
|
131
|
+
return numbers[ 0 ];
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function extractFontWeights( fontFaces ) {
|
|
135
|
+
const result = [];
|
|
136
|
+
|
|
137
|
+
fontFaces.forEach( ( face ) => {
|
|
138
|
+
const weights = String( face.fontWeight ).split( ' ' );
|
|
139
|
+
|
|
140
|
+
if ( weights.length === 2 ) {
|
|
141
|
+
const start = parseInt( weights[ 0 ] );
|
|
142
|
+
const end = parseInt( weights[ 1 ] );
|
|
143
|
+
|
|
144
|
+
for ( let i = start; i <= end; i += 100 ) {
|
|
145
|
+
result.push( i );
|
|
146
|
+
}
|
|
147
|
+
} else if ( weights.length === 1 ) {
|
|
148
|
+
result.push( parseInt( weights[ 0 ] ) );
|
|
149
|
+
}
|
|
150
|
+
} );
|
|
151
|
+
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export function getPreviewStyle( family ) {
|
|
156
|
+
const style = { fontFamily: family.fontFamily };
|
|
157
|
+
|
|
158
|
+
if ( ! Array.isArray( family.fontFace ) ) {
|
|
159
|
+
style.fontWeight = '400';
|
|
160
|
+
style.fontStyle = 'normal';
|
|
161
|
+
return style;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if ( family.fontFace ) {
|
|
165
|
+
//get all the font faces with normal style
|
|
166
|
+
const normalFaces = family.fontFace.filter(
|
|
167
|
+
( face ) => face.fontStyle.toLowerCase() === 'normal'
|
|
168
|
+
);
|
|
169
|
+
if ( normalFaces.length > 0 ) {
|
|
170
|
+
style.fontStyle = 'normal';
|
|
171
|
+
const normalWeights = extractFontWeights( normalFaces );
|
|
172
|
+
const nearestWeight = findNearest( 400, normalWeights );
|
|
173
|
+
style.fontWeight = String( nearestWeight ) || '400';
|
|
174
|
+
} else {
|
|
175
|
+
style.fontStyle =
|
|
176
|
+
( family.fontFace.length && family.fontFace[ 0 ].fontStyle ) ||
|
|
177
|
+
'normal';
|
|
178
|
+
style.fontWeight =
|
|
179
|
+
( family.fontFace.length &&
|
|
180
|
+
String( family.fontFace[ 0 ].fontWeight ) ) ||
|
|
181
|
+
'400';
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return style;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export function makeFormDataFromFontFamilies( fontFamilies ) {
|
|
189
|
+
const formData = new FormData();
|
|
190
|
+
const newFontFamilies = fontFamilies.map( ( family, familyIndex ) => {
|
|
191
|
+
if ( family?.fontFace ) {
|
|
192
|
+
family.fontFace = family.fontFace.map( ( face, faceIndex ) => {
|
|
193
|
+
if ( face.file ) {
|
|
194
|
+
// Slugified file name because the it might contain spaces or characters treated differently on the server.
|
|
195
|
+
const fileId = `file-${ familyIndex }-${ faceIndex }`;
|
|
196
|
+
// Add the files to the formData
|
|
197
|
+
formData.append( fileId, face.file, face.file.name );
|
|
198
|
+
// remove the file object from the face object the file is referenced by the uploadedFile key
|
|
199
|
+
const { file, ...faceWithoutFileProperty } = face;
|
|
200
|
+
const newFace = {
|
|
201
|
+
...faceWithoutFileProperty,
|
|
202
|
+
uploadedFile: fileId,
|
|
203
|
+
};
|
|
204
|
+
return newFace;
|
|
205
|
+
}
|
|
206
|
+
return face;
|
|
207
|
+
} );
|
|
208
|
+
}
|
|
209
|
+
return family;
|
|
210
|
+
} );
|
|
211
|
+
formData.append( 'fontFamilies', JSON.stringify( newFontFamilies ) );
|
|
212
|
+
return formData;
|
|
213
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export default function makeFamiliesFromFaces( fontFaces ) {
|
|
2
|
+
const fontFamiliesObject = fontFaces.reduce( ( acc, item ) => {
|
|
3
|
+
if ( ! acc[ item.fontFamily ] ) {
|
|
4
|
+
acc[ item.fontFamily ] = {
|
|
5
|
+
name: item.fontFamily,
|
|
6
|
+
fontFamily: item.fontFamily,
|
|
7
|
+
slug: item.fontFamily.replace( /\s+/g, '-' ).toLowerCase(),
|
|
8
|
+
fontFace: [],
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
acc[ item.fontFamily ].fontFace.push( item );
|
|
12
|
+
return acc;
|
|
13
|
+
}, {} );
|
|
14
|
+
return Object.values( fontFamiliesObject );
|
|
15
|
+
}
|
package/src/components/global-styles/font-library-modal/utils/test/getDisplaySrcFromFontFace.spec.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { getDisplaySrcFromFontFace } from '../index';
|
|
5
|
+
|
|
6
|
+
describe( 'getDisplaySrcFromFontFace', () => {
|
|
7
|
+
it( 'returns the first item when input is an array', () => {
|
|
8
|
+
const input = [
|
|
9
|
+
'http://example.com/font-asset-1.ttf',
|
|
10
|
+
'http://example.com/font-asset-2.ttf',
|
|
11
|
+
];
|
|
12
|
+
expect( getDisplaySrcFromFontFace( input ) ).toBe(
|
|
13
|
+
'http://example.com/font-asset-1.ttf'
|
|
14
|
+
);
|
|
15
|
+
} );
|
|
16
|
+
|
|
17
|
+
it( 'returns the input when it is a string', () => {
|
|
18
|
+
const input = 'http://example.com/font-asset-1.ttf';
|
|
19
|
+
expect( getDisplaySrcFromFontFace( input ) ).toBe(
|
|
20
|
+
'http://example.com/font-asset-1.ttf'
|
|
21
|
+
);
|
|
22
|
+
} );
|
|
23
|
+
|
|
24
|
+
it( 'makes URL absolute when it starts with file:. and urlPrefix is given', () => {
|
|
25
|
+
const input = 'file:./font1';
|
|
26
|
+
const urlPrefix = 'http://example.com';
|
|
27
|
+
expect( getDisplaySrcFromFontFace( input, urlPrefix ) ).toBe(
|
|
28
|
+
'http://example.com/font1'
|
|
29
|
+
);
|
|
30
|
+
} );
|
|
31
|
+
|
|
32
|
+
it( 'does not modify URL if it does not start with file:.', () => {
|
|
33
|
+
const input = [ 'http://some-other-place.com/font1' ];
|
|
34
|
+
const urlPrefix = 'http://example.com';
|
|
35
|
+
expect( getDisplaySrcFromFontFace( input, urlPrefix ) ).toBe(
|
|
36
|
+
'http://some-other-place.com/font1'
|
|
37
|
+
);
|
|
38
|
+
} );
|
|
39
|
+
|
|
40
|
+
it( 'encodes the URL if it is not encoded', () => {
|
|
41
|
+
const input = 'file:./assets/font one with spaces.ttf';
|
|
42
|
+
expect( getDisplaySrcFromFontFace( input ) ).toBe(
|
|
43
|
+
'file:./assets/font%20one%20with%20spaces.ttf'
|
|
44
|
+
);
|
|
45
|
+
} );
|
|
46
|
+
|
|
47
|
+
it( 'does not encode the URL if it is already encoded', () => {
|
|
48
|
+
const input = 'file:./font%20one';
|
|
49
|
+
expect( getDisplaySrcFromFontFace( input ) ).toBe(
|
|
50
|
+
'file:./font%20one'
|
|
51
|
+
);
|
|
52
|
+
} );
|
|
53
|
+
} );
|
package/src/components/global-styles/font-library-modal/utils/test/getFontFaceVariantName.spec.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { getFontFaceVariantName } from '../index';
|
|
5
|
+
|
|
6
|
+
describe( 'getFontFaceVariantName', () => {
|
|
7
|
+
it( 'should return "Normal" for fontWeight 400 and fontStyle "normal"', () => {
|
|
8
|
+
const face = { fontWeight: 400, fontStyle: 'normal' };
|
|
9
|
+
const result = getFontFaceVariantName( face );
|
|
10
|
+
expect( result ).toBe( 'Normal ' );
|
|
11
|
+
} );
|
|
12
|
+
|
|
13
|
+
it( 'should return "Bold Italic" for fontWeight 700 and fontStyle "italic"', () => {
|
|
14
|
+
const face = { fontWeight: 700, fontStyle: 'italic' };
|
|
15
|
+
const result = getFontFaceVariantName( face );
|
|
16
|
+
expect( result ).toBe( 'Bold Italic' );
|
|
17
|
+
} );
|
|
18
|
+
|
|
19
|
+
it( 'should return the numerical weight when fontWeight is not recognized', () => {
|
|
20
|
+
const face = { fontWeight: 150, fontStyle: 'normal' };
|
|
21
|
+
const result = getFontFaceVariantName( face );
|
|
22
|
+
expect( result ).toBe( '150 ' );
|
|
23
|
+
} );
|
|
24
|
+
|
|
25
|
+
it( 'should return the raw style when fontStyle is not recognized', () => {
|
|
26
|
+
const face = { fontWeight: 400, fontStyle: 'oblique' };
|
|
27
|
+
const result = getFontFaceVariantName( face );
|
|
28
|
+
expect( result ).toBe( 'Normal oblique' );
|
|
29
|
+
} );
|
|
30
|
+
} );
|