@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,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __experimentalText as Text } from '@wordpress/components';
|
|
5
|
+
import { useContext, useEffect, useState, useRef } from '@wordpress/element';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Internal dependencies
|
|
9
|
+
*/
|
|
10
|
+
import { FontLibraryContext } from './context';
|
|
11
|
+
|
|
12
|
+
function FontFaceDemo( { fontFace, text, style = {} } ) {
|
|
13
|
+
const ref = useRef( null );
|
|
14
|
+
const [ isIntersecting, setIsIntersecting ] = useState( false );
|
|
15
|
+
const [ isAssetLoaded, setIsAssetLoaded ] = useState( false );
|
|
16
|
+
const { loadFontFaceAsset } = useContext( FontLibraryContext );
|
|
17
|
+
const { fontFamily, fontStyle, fontWeight } = fontFace;
|
|
18
|
+
|
|
19
|
+
const demoStyle = {
|
|
20
|
+
fontWeight,
|
|
21
|
+
fontStyle,
|
|
22
|
+
fontFamily,
|
|
23
|
+
flexShrink: 0,
|
|
24
|
+
fontSize: '18px',
|
|
25
|
+
opacity: isAssetLoaded ? '1' : '0',
|
|
26
|
+
transition: 'opacity 0.3s ease-in-out',
|
|
27
|
+
...style,
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
useEffect( () => {
|
|
31
|
+
const observer = new window.IntersectionObserver( ( [ entry ] ) => {
|
|
32
|
+
setIsIntersecting( entry.isIntersecting );
|
|
33
|
+
}, {} );
|
|
34
|
+
observer.observe( ref.current );
|
|
35
|
+
return () => observer.disconnect();
|
|
36
|
+
}, [ ref ] );
|
|
37
|
+
|
|
38
|
+
useEffect( () => {
|
|
39
|
+
const loadAsset = async () => {
|
|
40
|
+
if ( isIntersecting ) {
|
|
41
|
+
if ( fontFace.src ) {
|
|
42
|
+
await loadFontFaceAsset( fontFace );
|
|
43
|
+
}
|
|
44
|
+
setIsAssetLoaded( true );
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
loadAsset();
|
|
48
|
+
}, [ fontFace, isIntersecting, loadFontFaceAsset ] );
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<Text style={ demoStyle } ref={ ref }>
|
|
52
|
+
{ text }
|
|
53
|
+
</Text>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export default FontFaceDemo;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import {
|
|
5
|
+
__experimentalText as Text,
|
|
6
|
+
__experimentalVStack as VStack,
|
|
7
|
+
__experimentalHStack as HStack,
|
|
8
|
+
CheckboxControl,
|
|
9
|
+
} from '@wordpress/components';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Internal dependencies
|
|
13
|
+
*/
|
|
14
|
+
import FontFaceDemo from './font-demo';
|
|
15
|
+
|
|
16
|
+
function FontVariant( {
|
|
17
|
+
fontFace,
|
|
18
|
+
variantName,
|
|
19
|
+
checked,
|
|
20
|
+
onClick,
|
|
21
|
+
text,
|
|
22
|
+
actionHandler,
|
|
23
|
+
} ) {
|
|
24
|
+
const { fontStyle, fontWeight } = fontFace;
|
|
25
|
+
const displayVariantName = variantName || `${ fontWeight } ${ fontStyle }`;
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<div className="font-library-modal__font-variant">
|
|
29
|
+
<VStack spacing={ 1 }>
|
|
30
|
+
<HStack justify="flex-start" alignment="top">
|
|
31
|
+
{ !! actionHandler ? (
|
|
32
|
+
actionHandler
|
|
33
|
+
) : (
|
|
34
|
+
<CheckboxControl
|
|
35
|
+
checked={ checked }
|
|
36
|
+
onChange={ onClick }
|
|
37
|
+
/>
|
|
38
|
+
) }
|
|
39
|
+
{ typeof displayVariantName === 'string' ? (
|
|
40
|
+
<Text>{ displayVariantName }</Text>
|
|
41
|
+
) : (
|
|
42
|
+
displayVariantName
|
|
43
|
+
) }
|
|
44
|
+
</HStack>
|
|
45
|
+
<div className="font-library-modal__font-variant_demo-wrapper">
|
|
46
|
+
<FontFaceDemo fontFace={ fontFace } text={ text } />
|
|
47
|
+
</div>
|
|
48
|
+
</VStack>
|
|
49
|
+
</div>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export default FontVariant;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import {
|
|
5
|
+
__experimentalVStack as VStack,
|
|
6
|
+
__experimentalText as Text,
|
|
7
|
+
__experimentalSpacer as Spacer,
|
|
8
|
+
} from '@wordpress/components';
|
|
9
|
+
import { useState, useEffect } from '@wordpress/element';
|
|
10
|
+
|
|
11
|
+
function FontsGrid( { title, children, pageSize = 32 } ) {
|
|
12
|
+
const [ lastItem, setLastItem ] = useState( null );
|
|
13
|
+
const [ page, setPage ] = useState( 1 );
|
|
14
|
+
const itemsLimit = page * pageSize;
|
|
15
|
+
const items = children.slice( 0, itemsLimit );
|
|
16
|
+
|
|
17
|
+
useEffect( () => {
|
|
18
|
+
if ( lastItem ) {
|
|
19
|
+
const observer = new window.IntersectionObserver( ( [ entry ] ) => {
|
|
20
|
+
if ( entry.isIntersecting ) {
|
|
21
|
+
setPage( ( prevPage ) => prevPage + 1 );
|
|
22
|
+
}
|
|
23
|
+
} );
|
|
24
|
+
|
|
25
|
+
observer.observe( lastItem );
|
|
26
|
+
|
|
27
|
+
return () => observer.disconnect();
|
|
28
|
+
}
|
|
29
|
+
}, [ lastItem ] );
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<div className="font-library-modal__fonts-grid">
|
|
33
|
+
<VStack spacing={ 0 }>
|
|
34
|
+
{ title && (
|
|
35
|
+
<>
|
|
36
|
+
<Text className="font-library-modal__subtitle">
|
|
37
|
+
{ title }
|
|
38
|
+
</Text>
|
|
39
|
+
<Spacer margin={ 2 } />
|
|
40
|
+
</>
|
|
41
|
+
) }
|
|
42
|
+
<div className="font-library-modal__fonts-grid__main">
|
|
43
|
+
{ items.map( ( child, i ) => {
|
|
44
|
+
if ( i === itemsLimit - 1 ) {
|
|
45
|
+
return <div ref={ setLastItem }>{ child }</div>;
|
|
46
|
+
}
|
|
47
|
+
return child;
|
|
48
|
+
} ) }
|
|
49
|
+
</div>
|
|
50
|
+
</VStack>
|
|
51
|
+
</div>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export default FontsGrid;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __ } from '@wordpress/i18n';
|
|
5
|
+
import { Modal, TabPanel } from '@wordpress/components';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Internal dependencies
|
|
9
|
+
*/
|
|
10
|
+
import InstalledFonts from './installed-fonts';
|
|
11
|
+
import { MODAL_TABS } from './utils/constants';
|
|
12
|
+
|
|
13
|
+
function FontLibraryModal( {
|
|
14
|
+
onRequestClose,
|
|
15
|
+
initialTabName = 'installed-fonts',
|
|
16
|
+
} ) {
|
|
17
|
+
return (
|
|
18
|
+
<Modal
|
|
19
|
+
title={ __( 'Fonts' ) }
|
|
20
|
+
onRequestClose={ onRequestClose }
|
|
21
|
+
isFullScreen={ true }
|
|
22
|
+
className="font-library-modal"
|
|
23
|
+
style={ { width: '65vw' } }
|
|
24
|
+
>
|
|
25
|
+
<TabPanel
|
|
26
|
+
className="font-library-modal__tab-panel"
|
|
27
|
+
initialTabName={ initialTabName }
|
|
28
|
+
tabs={ MODAL_TABS }
|
|
29
|
+
>
|
|
30
|
+
{ ( tab ) => {
|
|
31
|
+
switch ( tab.name ) {
|
|
32
|
+
case 'installed-fonts':
|
|
33
|
+
default:
|
|
34
|
+
return <InstalledFonts />;
|
|
35
|
+
}
|
|
36
|
+
} }
|
|
37
|
+
</TabPanel>
|
|
38
|
+
</Modal>
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export default FontLibraryModal;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __ } from '@wordpress/i18n';
|
|
5
|
+
import { useContext, useEffect, useState } from '@wordpress/element';
|
|
6
|
+
import {
|
|
7
|
+
privateApis as componentsPrivateApis,
|
|
8
|
+
__experimentalHStack as HStack,
|
|
9
|
+
__experimentalSpacer as Spacer,
|
|
10
|
+
Button,
|
|
11
|
+
Spinner,
|
|
12
|
+
} from '@wordpress/components';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Internal dependencies
|
|
16
|
+
*/
|
|
17
|
+
import TabLayout from './tab-layout';
|
|
18
|
+
import { FontLibraryContext } from './context';
|
|
19
|
+
import FontsGrid from './fonts-grid';
|
|
20
|
+
import LibraryFontDetails from './library-font-details';
|
|
21
|
+
import LibraryFontCard from './library-font-card';
|
|
22
|
+
import LocalFonts from './local-fonts';
|
|
23
|
+
import ConfirmDeleteDialog from './confirm-delete-dialog';
|
|
24
|
+
import { unlock } from '../../../lock-unlock';
|
|
25
|
+
const { ProgressBar } = unlock( componentsPrivateApis );
|
|
26
|
+
|
|
27
|
+
function InstalledFonts() {
|
|
28
|
+
const {
|
|
29
|
+
baseCustomFonts,
|
|
30
|
+
libraryFontSelected,
|
|
31
|
+
baseThemeFonts,
|
|
32
|
+
handleSetLibraryFontSelected,
|
|
33
|
+
refreshLibrary,
|
|
34
|
+
uninstallFont,
|
|
35
|
+
isResolvingLibrary,
|
|
36
|
+
} = useContext( FontLibraryContext );
|
|
37
|
+
const [ isConfirmDeleteOpen, setIsConfirmDeleteOpen ] = useState( false );
|
|
38
|
+
|
|
39
|
+
const handleUnselectFont = () => {
|
|
40
|
+
handleSetLibraryFontSelected( null );
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const handleSelectFont = ( font ) => {
|
|
44
|
+
handleSetLibraryFontSelected( font );
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const handleConfirmUninstall = async () => {
|
|
48
|
+
const result = await uninstallFont( libraryFontSelected );
|
|
49
|
+
// If the font was succesfully uninstalled it is unselected
|
|
50
|
+
if ( result ) {
|
|
51
|
+
handleUnselectFont();
|
|
52
|
+
}
|
|
53
|
+
setIsConfirmDeleteOpen( false );
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const handleUninstallClick = async () => {
|
|
57
|
+
setIsConfirmDeleteOpen( true );
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const handleCancelUninstall = () => {
|
|
61
|
+
setIsConfirmDeleteOpen( false );
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const tabDescription = !! libraryFontSelected
|
|
65
|
+
? __(
|
|
66
|
+
'Choose font variants. Keep in mind that too many variants could make your site slower.'
|
|
67
|
+
)
|
|
68
|
+
: null;
|
|
69
|
+
|
|
70
|
+
const shouldDisplayDeleteButton =
|
|
71
|
+
!! libraryFontSelected && libraryFontSelected?.source !== 'theme';
|
|
72
|
+
|
|
73
|
+
useEffect( () => {
|
|
74
|
+
refreshLibrary();
|
|
75
|
+
}, [] );
|
|
76
|
+
|
|
77
|
+
return (
|
|
78
|
+
<TabLayout
|
|
79
|
+
title={ libraryFontSelected?.name || '' }
|
|
80
|
+
description={ tabDescription }
|
|
81
|
+
handleBack={ !! libraryFontSelected && handleUnselectFont }
|
|
82
|
+
footer={
|
|
83
|
+
<Footer
|
|
84
|
+
shouldDisplayDeleteButton={ shouldDisplayDeleteButton }
|
|
85
|
+
handleUninstallClick={ handleUninstallClick }
|
|
86
|
+
/>
|
|
87
|
+
}
|
|
88
|
+
>
|
|
89
|
+
<ConfirmDeleteDialog
|
|
90
|
+
font={ libraryFontSelected }
|
|
91
|
+
isConfirmDeleteOpen={ isConfirmDeleteOpen }
|
|
92
|
+
handleConfirmUninstall={ handleConfirmUninstall }
|
|
93
|
+
handleCancelUninstall={ handleCancelUninstall }
|
|
94
|
+
/>
|
|
95
|
+
|
|
96
|
+
{ ! libraryFontSelected && (
|
|
97
|
+
<>
|
|
98
|
+
{ isResolvingLibrary && <Spinner /> }
|
|
99
|
+
{ baseCustomFonts.length > 0 && (
|
|
100
|
+
<>
|
|
101
|
+
<Spacer margin={ 2 } />
|
|
102
|
+
<FontsGrid>
|
|
103
|
+
{ baseCustomFonts.map( ( font ) => (
|
|
104
|
+
<LibraryFontCard
|
|
105
|
+
font={ font }
|
|
106
|
+
key={ font.slug }
|
|
107
|
+
onClick={ () => {
|
|
108
|
+
handleSelectFont( font );
|
|
109
|
+
} }
|
|
110
|
+
/>
|
|
111
|
+
) ) }
|
|
112
|
+
</FontsGrid>
|
|
113
|
+
</>
|
|
114
|
+
) }
|
|
115
|
+
|
|
116
|
+
{ baseThemeFonts.length > 0 && (
|
|
117
|
+
<>
|
|
118
|
+
<Spacer margin={ 8 } />
|
|
119
|
+
<FontsGrid title={ __( 'Theme Fonts' ) }>
|
|
120
|
+
{ baseThemeFonts.map( ( font ) => (
|
|
121
|
+
<LibraryFontCard
|
|
122
|
+
font={ font }
|
|
123
|
+
key={ font.slug }
|
|
124
|
+
onClick={ () => {
|
|
125
|
+
handleSelectFont( font );
|
|
126
|
+
} }
|
|
127
|
+
/>
|
|
128
|
+
) ) }
|
|
129
|
+
</FontsGrid>
|
|
130
|
+
</>
|
|
131
|
+
) }
|
|
132
|
+
|
|
133
|
+
<Spacer margin={ 8 } />
|
|
134
|
+
<LocalFonts />
|
|
135
|
+
</>
|
|
136
|
+
) }
|
|
137
|
+
|
|
138
|
+
{ libraryFontSelected && (
|
|
139
|
+
<LibraryFontDetails
|
|
140
|
+
font={ libraryFontSelected }
|
|
141
|
+
isConfirmDeleteOpen={ isConfirmDeleteOpen }
|
|
142
|
+
handleConfirmUninstall={ handleConfirmUninstall }
|
|
143
|
+
handleCancelUninstall={ handleCancelUninstall }
|
|
144
|
+
/>
|
|
145
|
+
) }
|
|
146
|
+
</TabLayout>
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function Footer( { shouldDisplayDeleteButton, handleUninstallClick } ) {
|
|
151
|
+
const { saveFontFamilies, fontFamiliesHasChanges, isInstalling } =
|
|
152
|
+
useContext( FontLibraryContext );
|
|
153
|
+
return (
|
|
154
|
+
<HStack justify="space-between">
|
|
155
|
+
{ isInstalling && <ProgressBar /> }
|
|
156
|
+
<div>
|
|
157
|
+
{ shouldDisplayDeleteButton && (
|
|
158
|
+
<Button variant="tertiary" onClick={ handleUninstallClick }>
|
|
159
|
+
{ __( 'Delete' ) }
|
|
160
|
+
</Button>
|
|
161
|
+
) }
|
|
162
|
+
</div>
|
|
163
|
+
<Button
|
|
164
|
+
disabled={ ! fontFamiliesHasChanges }
|
|
165
|
+
variant="primary"
|
|
166
|
+
onClick={ saveFontFamilies }
|
|
167
|
+
>
|
|
168
|
+
{ __( 'Update' ) }
|
|
169
|
+
</Button>
|
|
170
|
+
</HStack>
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export default InstalledFonts;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __, sprintf } from '@wordpress/i18n';
|
|
5
|
+
import { useContext } from '@wordpress/element';
|
|
6
|
+
import { Icon } from '@wordpress/components';
|
|
7
|
+
import { chevronRight } from '@wordpress/icons';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Internal dependencies
|
|
11
|
+
*/
|
|
12
|
+
import FontCard from './font-card';
|
|
13
|
+
import { FontLibraryContext } from './context';
|
|
14
|
+
|
|
15
|
+
function LibraryFontCard( { font, ...props } ) {
|
|
16
|
+
const { getFontFacesActivated } = useContext( FontLibraryContext );
|
|
17
|
+
|
|
18
|
+
const variantsInstalled = font.fontFace?.length || 1;
|
|
19
|
+
const variantsActive = getFontFacesActivated(
|
|
20
|
+
font.slug,
|
|
21
|
+
font.source
|
|
22
|
+
).length;
|
|
23
|
+
const variantsText = sprintf(
|
|
24
|
+
/* translators: %1$d: Active font variants, %2$d: Total font variants */
|
|
25
|
+
__( '%1$s/%2$s variants active' ),
|
|
26
|
+
variantsActive,
|
|
27
|
+
variantsInstalled
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<FontCard
|
|
32
|
+
font={ font }
|
|
33
|
+
variantsText={ variantsText }
|
|
34
|
+
actionHandler={ <Icon icon={ chevronRight } /> }
|
|
35
|
+
{ ...props }
|
|
36
|
+
/>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default LibraryFontCard;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import {
|
|
5
|
+
__experimentalVStack as VStack,
|
|
6
|
+
__experimentalSpacer as Spacer,
|
|
7
|
+
} from '@wordpress/components';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Internal dependencies
|
|
11
|
+
*/
|
|
12
|
+
import LibraryFontVariant from './library-font-variant';
|
|
13
|
+
|
|
14
|
+
function LibraryFontDetails( { font } ) {
|
|
15
|
+
const fontFaces =
|
|
16
|
+
font.fontFace && font.fontFace.length
|
|
17
|
+
? font.fontFace.sort( ( a, b ) =>
|
|
18
|
+
a.fontWeight > b.fontWeight ? 1 : -1
|
|
19
|
+
)
|
|
20
|
+
: [
|
|
21
|
+
{
|
|
22
|
+
fontFamily: font.fontFamily,
|
|
23
|
+
fontStyle: 'normal',
|
|
24
|
+
fontWeight: '400',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<>
|
|
30
|
+
<Spacer margin={ 4 } />
|
|
31
|
+
<VStack spacing={ 0 }>
|
|
32
|
+
<Spacer margin={ 8 } />
|
|
33
|
+
{ fontFaces.map( ( face, i ) => (
|
|
34
|
+
<LibraryFontVariant
|
|
35
|
+
font={ font }
|
|
36
|
+
face={ face }
|
|
37
|
+
key={ `face${ i }` }
|
|
38
|
+
/>
|
|
39
|
+
) ) }
|
|
40
|
+
</VStack>
|
|
41
|
+
<Spacer margin={ 8 } />
|
|
42
|
+
</>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export default LibraryFontDetails;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useContext } from '@wordpress/element';
|
|
5
|
+
import { CheckboxControl, Flex } from '@wordpress/components';
|
|
6
|
+
/**
|
|
7
|
+
* Internal dependencies
|
|
8
|
+
*/
|
|
9
|
+
import { getFontFaceVariantName } from './utils';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Internal dependencies
|
|
13
|
+
*/
|
|
14
|
+
import { FontLibraryContext } from './context';
|
|
15
|
+
import FontFaceDemo from './font-demo';
|
|
16
|
+
|
|
17
|
+
function LibraryFontVariant( { face, font } ) {
|
|
18
|
+
const { isFontActivated, toggleActivateFont } =
|
|
19
|
+
useContext( FontLibraryContext );
|
|
20
|
+
|
|
21
|
+
const isIstalled = font?.fontFace
|
|
22
|
+
? isFontActivated(
|
|
23
|
+
font.slug,
|
|
24
|
+
face.fontStyle,
|
|
25
|
+
face.fontWeight,
|
|
26
|
+
font.source
|
|
27
|
+
)
|
|
28
|
+
: isFontActivated( font.slug, null, null, font.source );
|
|
29
|
+
|
|
30
|
+
const handleToggleActivation = () => {
|
|
31
|
+
if ( font?.fontFace ) {
|
|
32
|
+
toggleActivateFont( font, face );
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
toggleActivateFont( font );
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const displayName = font.name + ' ' + getFontFaceVariantName( face );
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<div className="font-library-modal__library-font-variant">
|
|
42
|
+
<Flex justify="space-between" align="center" gap="1rem">
|
|
43
|
+
<FontFaceDemo fontFace={ face } text={ displayName } />
|
|
44
|
+
<CheckboxControl
|
|
45
|
+
checked={ isIstalled }
|
|
46
|
+
onChange={ handleToggleActivation }
|
|
47
|
+
__nextHasNoMarginBottom={ true }
|
|
48
|
+
/>
|
|
49
|
+
</Flex>
|
|
50
|
+
</div>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export default LibraryFontVariant;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __ } from '@wordpress/i18n';
|
|
5
|
+
import {
|
|
6
|
+
Button,
|
|
7
|
+
DropZone,
|
|
8
|
+
__experimentalSpacer as Spacer,
|
|
9
|
+
__experimentalText as Text,
|
|
10
|
+
FormFileUpload,
|
|
11
|
+
} from '@wordpress/components';
|
|
12
|
+
import { useContext } from '@wordpress/element';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Internal dependencies
|
|
16
|
+
*/
|
|
17
|
+
import { ALLOWED_FILE_EXTENSIONS } from './utils/constants';
|
|
18
|
+
import { FontLibraryContext } from './context';
|
|
19
|
+
import { Font } from '../../../../lib/lib-font.browser';
|
|
20
|
+
import makeFamiliesFromFaces from './utils/make-families-from-faces';
|
|
21
|
+
import { loadFontFaceInBrowser } from './utils';
|
|
22
|
+
|
|
23
|
+
function LocalFonts() {
|
|
24
|
+
const { installFonts } = useContext( FontLibraryContext );
|
|
25
|
+
|
|
26
|
+
const handleDropZone = ( files ) => {
|
|
27
|
+
handleFilesUpload( files );
|
|
28
|
+
};
|
|
29
|
+
const onFilesUpload = ( event ) => {
|
|
30
|
+
handleFilesUpload( event.target.files );
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Filters the selected files to only allow the ones with the allowed extensions
|
|
35
|
+
*
|
|
36
|
+
* @param {Array} files The files to be filtered
|
|
37
|
+
* @return {void}
|
|
38
|
+
*/
|
|
39
|
+
const handleFilesUpload = ( files ) => {
|
|
40
|
+
const uniqueFilenames = new Set();
|
|
41
|
+
const selectedFiles = [ ...files ];
|
|
42
|
+
const allowedFiles = selectedFiles.filter( ( file ) => {
|
|
43
|
+
if ( uniqueFilenames.has( file.name ) ) {
|
|
44
|
+
return false; // Discard duplicates
|
|
45
|
+
}
|
|
46
|
+
// Eliminates files that are not allowed
|
|
47
|
+
const fileExtension = file.name.split( '.' ).pop().toLowerCase();
|
|
48
|
+
if ( ALLOWED_FILE_EXTENSIONS.includes( fileExtension ) ) {
|
|
49
|
+
uniqueFilenames.add( file.name );
|
|
50
|
+
return true; // Keep file if the extension is allowed
|
|
51
|
+
}
|
|
52
|
+
return false; // Discard file extension not allowed
|
|
53
|
+
} );
|
|
54
|
+
if ( allowedFiles.length > 0 ) {
|
|
55
|
+
loadFiles( allowedFiles );
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Loads the selected files and reads the font metadata
|
|
61
|
+
*
|
|
62
|
+
* @param {Array} files The files to be loaded
|
|
63
|
+
* @return {void}
|
|
64
|
+
*/
|
|
65
|
+
const loadFiles = async ( files ) => {
|
|
66
|
+
const fontFacesLoaded = await Promise.all(
|
|
67
|
+
files.map( async ( fontFile ) => {
|
|
68
|
+
const fontFaceData = await getFontFaceMetadata( fontFile );
|
|
69
|
+
await loadFontFaceInBrowser(
|
|
70
|
+
fontFaceData,
|
|
71
|
+
fontFaceData.file,
|
|
72
|
+
'all'
|
|
73
|
+
);
|
|
74
|
+
return fontFaceData;
|
|
75
|
+
} )
|
|
76
|
+
);
|
|
77
|
+
await handleInstall( fontFacesLoaded );
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
// Create a function to read the file as array buffer
|
|
81
|
+
async function readFileAsArrayBuffer( file ) {
|
|
82
|
+
return new Promise( ( resolve, reject ) => {
|
|
83
|
+
const reader = new window.FileReader();
|
|
84
|
+
reader.readAsArrayBuffer( file );
|
|
85
|
+
reader.onload = () => resolve( reader.result );
|
|
86
|
+
reader.onerror = reject;
|
|
87
|
+
} );
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const getFontFaceMetadata = async ( fontFile ) => {
|
|
91
|
+
const buffer = await readFileAsArrayBuffer( fontFile );
|
|
92
|
+
const fontObj = new Font( 'Uploaded Font' );
|
|
93
|
+
fontObj.fromDataBuffer( buffer, fontFile.name );
|
|
94
|
+
// Assuming that fromDataBuffer triggers onload event and returning a Promise
|
|
95
|
+
const onloadEvent = await new Promise(
|
|
96
|
+
( resolve ) => ( fontObj.onload = resolve )
|
|
97
|
+
);
|
|
98
|
+
const font = onloadEvent.detail.font;
|
|
99
|
+
const { name } = font.opentype.tables;
|
|
100
|
+
const fontName = name.get( 16 ) || name.get( 1 );
|
|
101
|
+
const isItalic = name.get( 2 ).toLowerCase().includes( 'italic' );
|
|
102
|
+
const fontWeight =
|
|
103
|
+
font.opentype.tables[ 'OS/2' ].usWeightClass || 'normal';
|
|
104
|
+
const isVariable = !! font.opentype.tables.fvar;
|
|
105
|
+
const weightAxis =
|
|
106
|
+
isVariable &&
|
|
107
|
+
font.opentype.tables.fvar.axes.find(
|
|
108
|
+
( { tag } ) => tag === 'wght'
|
|
109
|
+
);
|
|
110
|
+
const weightRange = weightAxis
|
|
111
|
+
? `${ weightAxis.minValue } ${ weightAxis.maxValue }`
|
|
112
|
+
: null;
|
|
113
|
+
return {
|
|
114
|
+
file: fontFile,
|
|
115
|
+
fontFamily: fontName,
|
|
116
|
+
fontStyle: isItalic ? 'italic' : 'normal',
|
|
117
|
+
fontWeight: weightRange || fontWeight,
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Creates the font family definition and sends it to the server
|
|
123
|
+
*
|
|
124
|
+
* @param {Array} fontFaces The font faces to be installed
|
|
125
|
+
* @return {void}
|
|
126
|
+
*/
|
|
127
|
+
const handleInstall = async ( fontFaces ) => {
|
|
128
|
+
const fontFamilies = makeFamiliesFromFaces( fontFaces );
|
|
129
|
+
await installFonts( fontFamilies );
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
return (
|
|
133
|
+
<>
|
|
134
|
+
<Text className="font-library-modal__subtitle">
|
|
135
|
+
{ __( 'Upload Fonts' ) }
|
|
136
|
+
</Text>
|
|
137
|
+
<Spacer margin={ 2 } />
|
|
138
|
+
<DropZone onFilesDrop={ handleDropZone } />
|
|
139
|
+
<FormFileUpload
|
|
140
|
+
accept={ ALLOWED_FILE_EXTENSIONS.map(
|
|
141
|
+
( ext ) => `.${ ext }`
|
|
142
|
+
).join( ',' ) }
|
|
143
|
+
multiple={ true }
|
|
144
|
+
onChange={ onFilesUpload }
|
|
145
|
+
render={ ( { openFileDialog } ) => (
|
|
146
|
+
<Button
|
|
147
|
+
className="font-library-modal__upload-area"
|
|
148
|
+
onClick={ openFileDialog }
|
|
149
|
+
>
|
|
150
|
+
<span>
|
|
151
|
+
{ __( 'Drag and drop your font files here.' ) }
|
|
152
|
+
</span>
|
|
153
|
+
</Button>
|
|
154
|
+
) }
|
|
155
|
+
/>
|
|
156
|
+
</>
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export default LocalFonts;
|