@wordpress/edit-site 5.2.0 → 5.3.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 +6 -0
- package/build/components/add-new-template/add-custom-generic-template-modal.js +8 -10
- package/build/components/add-new-template/add-custom-generic-template-modal.js.map +1 -1
- package/build/components/add-new-template/add-custom-template-modal.js +0 -1
- package/build/components/add-new-template/add-custom-template-modal.js.map +1 -1
- package/build/components/add-new-template/new-template-part.js +5 -29
- package/build/components/add-new-template/new-template-part.js.map +1 -1
- package/build/components/add-new-template/utils.js +1 -9
- 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/index.js +13 -11
- package/build/components/block-editor/index.js.map +1 -1
- package/build/components/block-editor/inserter-media-categories.js +237 -0
- package/build/components/block-editor/inserter-media-categories.js.map +1 -0
- package/build/components/canvas-spinner/index.js +20 -0
- package/build/components/canvas-spinner/index.js.map +1 -0
- package/build/components/create-template-part-modal/index.js +4 -2
- package/build/components/create-template-part-modal/index.js.map +1 -1
- package/build/components/editor/index.js +4 -2
- package/build/components/editor/index.js.map +1 -1
- package/build/components/error-boundary/index.js +2 -12
- package/build/components/error-boundary/index.js.map +1 -1
- package/build/components/error-boundary/warning.js +5 -28
- package/build/components/error-boundary/warning.js.map +1 -1
- package/build/components/global-styles/block-preview-panel.js +2 -2
- package/build/components/global-styles/block-preview-panel.js.map +1 -1
- package/build/components/global-styles/border-panel.js +17 -9
- package/build/components/global-styles/border-panel.js.map +1 -1
- package/build/components/global-styles/color-palette-panel.js +13 -7
- package/build/components/global-styles/color-palette-panel.js.map +1 -1
- package/build/components/global-styles/context-menu.js +39 -4
- package/build/components/global-styles/context-menu.js.map +1 -1
- package/build/components/global-styles/custom-css.js +65 -14
- package/build/components/global-styles/custom-css.js.map +1 -1
- package/build/components/global-styles/dimensions-panel.js +49 -31
- package/build/components/global-styles/dimensions-panel.js.map +1 -1
- package/build/components/global-styles/global-styles-provider.js +13 -3
- package/build/components/global-styles/global-styles-provider.js.map +1 -1
- package/build/components/global-styles/gradients-palette-panel.js +17 -11
- package/build/components/global-styles/gradients-palette-panel.js.map +1 -1
- package/build/components/global-styles/hooks.js +21 -142
- package/build/components/global-styles/hooks.js.map +1 -1
- package/build/components/global-styles/index.js +0 -28
- package/build/components/global-styles/index.js.map +1 -1
- package/build/components/global-styles/palette.js +11 -4
- package/build/components/global-styles/palette.js.map +1 -1
- package/build/components/global-styles/preview.js +18 -15
- package/build/components/global-styles/preview.js.map +1 -1
- package/build/components/global-styles/screen-background-color.js +27 -13
- package/build/components/global-styles/screen-background-color.js.map +1 -1
- package/build/components/global-styles/screen-border.js +10 -4
- package/build/components/global-styles/screen-border.js.map +1 -1
- package/build/components/global-styles/screen-button-color.js +16 -9
- package/build/components/global-styles/screen-button-color.js.map +1 -1
- package/build/components/global-styles/screen-colors.js +43 -34
- package/build/components/global-styles/screen-colors.js.map +1 -1
- package/build/components/global-styles/screen-css.js +20 -8
- package/build/components/global-styles/screen-css.js.map +1 -1
- package/build/components/global-styles/screen-heading-color.js +23 -16
- package/build/components/global-styles/screen-heading-color.js.map +1 -1
- package/build/components/global-styles/screen-layout.js +3 -3
- package/build/components/global-styles/screen-layout.js.map +1 -1
- package/build/components/global-styles/screen-link-color.js +18 -11
- package/build/components/global-styles/screen-link-color.js.map +1 -1
- package/build/components/global-styles/screen-root.js +25 -9
- package/build/components/global-styles/screen-root.js.map +1 -1
- package/build/components/global-styles/screen-style-variations.js +8 -4
- package/build/components/global-styles/screen-style-variations.js.map +1 -1
- package/build/components/global-styles/screen-text-color.js +14 -7
- package/build/components/global-styles/screen-text-color.js.map +1 -1
- package/build/components/global-styles/screen-typography.js +18 -12
- package/build/components/global-styles/screen-typography.js.map +1 -1
- package/build/components/global-styles/shadow-panel.js +196 -0
- package/build/components/global-styles/shadow-panel.js.map +1 -0
- package/build/components/global-styles/typography-panel.js +43 -29
- package/build/components/global-styles/typography-panel.js.map +1 -1
- package/build/components/global-styles/typography-preview.js +19 -9
- package/build/components/global-styles/typography-preview.js.map +1 -1
- package/build/components/global-styles/ui.js +85 -34
- package/build/components/global-styles/ui.js.map +1 -1
- package/build/components/global-styles/utils.js +5 -334
- package/build/components/global-styles/utils.js.map +1 -1
- package/build/components/global-styles-renderer/index.js +7 -5
- package/build/components/global-styles-renderer/index.js.map +1 -1
- package/build/components/header-edit-mode/document-actions/index.js +2 -2
- package/build/components/header-edit-mode/document-actions/index.js.map +1 -1
- package/build/components/keyboard-shortcut-help-modal/index.js +0 -1
- package/build/components/keyboard-shortcut-help-modal/index.js.map +1 -1
- package/build/components/layout/index.js +6 -8
- package/build/components/layout/index.js.map +1 -1
- package/build/components/list/actions/rename-menu-item.js +8 -11
- package/build/components/list/actions/rename-menu-item.js.map +1 -1
- package/build/components/{sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js → navigation-inspector/index.js} +1 -2
- package/build/components/navigation-inspector/index.js.map +1 -0
- package/build/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/navigation-menu.js +13 -15
- package/build/components/navigation-inspector/navigation-menu.js.map +1 -0
- package/build/components/sidebar/index.js +3 -1
- package/build/components/sidebar/index.js.map +1 -1
- package/build/components/sidebar-edit-mode/global-styles-sidebar.js +3 -18
- package/build/components/sidebar-edit-mode/global-styles-sidebar.js.map +1 -1
- package/build/components/sidebar-edit-mode/index.js +1 -14
- package/build/components/sidebar-edit-mode/index.js.map +1 -1
- package/build/components/sidebar-navigation-screen/index.js +3 -2
- package/build/components/sidebar-navigation-screen/index.js.map +1 -1
- package/build/components/sidebar-navigation-screen-main/index.js +23 -1
- package/build/components/sidebar-navigation-screen-main/index.js.map +1 -1
- package/build/components/sidebar-navigation-screen-navigation-menus/index.js +35 -0
- package/build/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -0
- package/build/components/sidebar-navigation-screen-templates/index.js +3 -8
- package/build/components/sidebar-navigation-screen-templates/index.js.map +1 -1
- package/build/components/site-hub/index.js +2 -2
- package/build/components/site-hub/index.js.map +1 -1
- package/build/components/site-icon/index.js +1 -1
- package/build/components/site-icon/index.js.map +1 -1
- package/build/components/style-book/index.js +7 -4
- package/build/components/style-book/index.js.map +1 -1
- package/build/components/template-part-converter/convert-to-template-part.js +5 -9
- package/build/components/template-part-converter/convert-to-template-part.js.map +1 -1
- package/build/experiments.js +19 -0
- package/build/experiments.js.map +1 -0
- package/build/hooks/push-changes-to-global-styles/index.js +65 -6
- package/build/hooks/push-changes-to-global-styles/index.js.map +1 -1
- package/build/index.js +53 -60
- package/build/index.js.map +1 -1
- package/build/store/selectors.js +7 -27
- package/build/store/selectors.js.map +1 -1
- package/build/store/utils.js +77 -0
- package/build/store/utils.js.map +1 -0
- package/build/utils/template-part-create.js +71 -0
- package/build/utils/template-part-create.js.map +1 -0
- package/build-module/components/add-new-template/add-custom-generic-template-modal.js +9 -11
- package/build-module/components/add-new-template/add-custom-generic-template-modal.js.map +1 -1
- package/build-module/components/add-new-template/add-custom-template-modal.js +0 -1
- package/build-module/components/add-new-template/add-custom-template-modal.js.map +1 -1
- package/build-module/components/add-new-template/new-template-part.js +4 -27
- package/build-module/components/add-new-template/new-template-part.js.map +1 -1
- package/build-module/components/add-new-template/utils.js +0 -5
- 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/index.js +14 -12
- package/build-module/components/block-editor/index.js.map +1 -1
- package/build-module/components/block-editor/inserter-media-categories.js +225 -0
- package/build-module/components/block-editor/inserter-media-categories.js.map +1 -0
- package/build-module/components/canvas-spinner/index.js +12 -0
- package/build-module/components/canvas-spinner/index.js.map +1 -0
- package/build-module/components/create-template-part-modal/index.js +5 -3
- package/build-module/components/create-template-part-modal/index.js.map +1 -1
- package/build-module/components/editor/index.js +3 -2
- package/build-module/components/editor/index.js.map +1 -1
- package/build-module/components/error-boundary/index.js +2 -12
- package/build-module/components/error-boundary/index.js.map +1 -1
- package/build-module/components/error-boundary/warning.js +5 -28
- package/build-module/components/error-boundary/warning.js.map +1 -1
- package/build-module/components/global-styles/block-preview-panel.js +2 -2
- package/build-module/components/global-styles/block-preview-panel.js.map +1 -1
- package/build-module/components/global-styles/border-panel.js +17 -11
- package/build-module/components/global-styles/border-panel.js.map +1 -1
- package/build-module/components/global-styles/color-palette-panel.js +11 -7
- package/build-module/components/global-styles/color-palette-panel.js.map +1 -1
- package/build-module/components/global-styles/context-menu.js +40 -8
- package/build-module/components/global-styles/context-menu.js.map +1 -1
- package/build-module/components/global-styles/custom-css.js +61 -15
- package/build-module/components/global-styles/custom-css.js.map +1 -1
- package/build-module/components/global-styles/dimensions-panel.js +49 -32
- package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
- package/build-module/components/global-styles/global-styles-provider.js +7 -2
- package/build-module/components/global-styles/global-styles-provider.js.map +1 -1
- package/build-module/components/global-styles/gradients-palette-panel.js +15 -11
- package/build-module/components/global-styles/gradients-palette-panel.js.map +1 -1
- package/build-module/components/global-styles/hooks.js +23 -134
- package/build-module/components/global-styles/hooks.js.map +1 -1
- package/build-module/components/global-styles/index.js +0 -2
- package/build-module/components/global-styles/index.js.map +1 -1
- package/build-module/components/global-styles/palette.js +10 -5
- package/build-module/components/global-styles/palette.js.map +1 -1
- package/build-module/components/global-styles/preview.js +18 -14
- package/build-module/components/global-styles/preview.js.map +1 -1
- package/build-module/components/global-styles/screen-background-color.js +26 -15
- package/build-module/components/global-styles/screen-background-color.js.map +1 -1
- package/build-module/components/global-styles/screen-border.js +10 -5
- package/build-module/components/global-styles/screen-border.js.map +1 -1
- package/build-module/components/global-styles/screen-button-color.js +16 -11
- package/build-module/components/global-styles/screen-button-color.js.map +1 -1
- package/build-module/components/global-styles/screen-colors.js +43 -37
- package/build-module/components/global-styles/screen-colors.js.map +1 -1
- package/build-module/components/global-styles/screen-css.js +21 -9
- package/build-module/components/global-styles/screen-css.js.map +1 -1
- package/build-module/components/global-styles/screen-heading-color.js +23 -18
- package/build-module/components/global-styles/screen-heading-color.js.map +1 -1
- package/build-module/components/global-styles/screen-layout.js +4 -4
- package/build-module/components/global-styles/screen-layout.js.map +1 -1
- package/build-module/components/global-styles/screen-link-color.js +18 -13
- package/build-module/components/global-styles/screen-link-color.js.map +1 -1
- package/build-module/components/global-styles/screen-root.js +23 -9
- package/build-module/components/global-styles/screen-root.js.map +1 -1
- package/build-module/components/global-styles/screen-style-variations.js +5 -2
- package/build-module/components/global-styles/screen-style-variations.js.map +1 -1
- package/build-module/components/global-styles/screen-text-color.js +14 -9
- package/build-module/components/global-styles/screen-text-color.js.map +1 -1
- package/build-module/components/global-styles/screen-typography.js +16 -12
- package/build-module/components/global-styles/screen-typography.js.map +1 -1
- package/build-module/components/global-styles/shadow-panel.js +177 -0
- package/build-module/components/global-styles/shadow-panel.js.map +1 -0
- package/build-module/components/global-styles/typography-panel.js +43 -31
- package/build-module/components/global-styles/typography-panel.js.map +1 -1
- package/build-module/components/global-styles/typography-preview.js +17 -9
- package/build-module/components/global-styles/typography-preview.js.map +1 -1
- package/build-module/components/global-styles/ui.js +80 -35
- package/build-module/components/global-styles/ui.js.map +1 -1
- package/build-module/components/global-styles/utils.js +4 -319
- package/build-module/components/global-styles/utils.js.map +1 -1
- package/build-module/components/global-styles-renderer/index.js +5 -5
- package/build-module/components/global-styles-renderer/index.js.map +1 -1
- package/build-module/components/header-edit-mode/document-actions/index.js +2 -2
- package/build-module/components/header-edit-mode/document-actions/index.js.map +1 -1
- package/build-module/components/keyboard-shortcut-help-modal/index.js +0 -1
- package/build-module/components/keyboard-shortcut-help-modal/index.js.map +1 -1
- package/build-module/components/layout/index.js +6 -8
- package/build-module/components/layout/index.js.map +1 -1
- package/build-module/components/list/actions/rename-menu-item.js +9 -12
- package/build-module/components/list/actions/rename-menu-item.js.map +1 -1
- package/build-module/components/{sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js → navigation-inspector/index.js} +1 -2
- package/build-module/components/navigation-inspector/index.js.map +1 -0
- package/build-module/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/navigation-menu.js +13 -16
- package/build-module/components/navigation-inspector/navigation-menu.js.map +1 -0
- package/build-module/components/sidebar/index.js +2 -1
- package/build-module/components/sidebar/index.js.map +1 -1
- package/build-module/components/sidebar-edit-mode/global-styles-sidebar.js +6 -21
- package/build-module/components/sidebar-edit-mode/global-styles-sidebar.js.map +1 -1
- package/build-module/components/sidebar-edit-mode/index.js +1 -13
- package/build-module/components/sidebar-edit-mode/index.js.map +1 -1
- package/build-module/components/sidebar-navigation-screen/index.js +3 -2
- package/build-module/components/sidebar-navigation-screen/index.js.map +1 -1
- package/build-module/components/sidebar-navigation-screen-main/index.js +22 -2
- package/build-module/components/sidebar-navigation-screen-main/index.js.map +1 -1
- package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js +23 -0
- package/build-module/components/sidebar-navigation-screen-navigation-menus/index.js.map +1 -0
- package/build-module/components/sidebar-navigation-screen-templates/index.js +4 -9
- package/build-module/components/sidebar-navigation-screen-templates/index.js.map +1 -1
- package/build-module/components/site-hub/index.js +2 -2
- package/build-module/components/site-hub/index.js.map +1 -1
- package/build-module/components/site-icon/index.js +1 -1
- package/build-module/components/site-icon/index.js.map +1 -1
- package/build-module/components/style-book/index.js +8 -5
- package/build-module/components/style-book/index.js.map +1 -1
- package/build-module/components/template-part-converter/convert-to-template-part.js +5 -9
- package/build-module/components/template-part-converter/convert-to-template-part.js.map +1 -1
- package/build-module/experiments.js +9 -0
- package/build-module/experiments.js.map +1 -0
- package/build-module/hooks/push-changes-to-global-styles/index.js +62 -3
- package/build-module/hooks/push-changes-to-global-styles/index.js.map +1 -1
- package/build-module/index.js +52 -60
- package/build-module/index.js.map +1 -1
- package/build-module/store/selectors.js +6 -26
- package/build-module/store/selectors.js.map +1 -1
- package/build-module/store/utils.js +66 -0
- package/build-module/store/utils.js.map +1 -0
- package/build-module/utils/template-part-create.js +53 -0
- package/build-module/utils/template-part-create.js.map +1 -0
- package/build-style/style-rtl.css +314 -216
- package/build-style/style.css +314 -216
- package/package.json +32 -30
- package/src/components/add-new-template/add-custom-generic-template-modal.js +20 -28
- package/src/components/add-new-template/add-custom-template-modal.js +0 -1
- package/src/components/add-new-template/new-template-part.js +11 -32
- package/src/components/add-new-template/style.scss +0 -4
- package/src/components/add-new-template/utils.js +0 -14
- package/src/components/app/index.js +2 -2
- package/src/components/block-editor/index.js +12 -25
- package/src/components/block-editor/inserter-media-categories.js +247 -0
- package/src/components/block-editor/style.scss +19 -7
- package/src/components/canvas-spinner/index.js +12 -0
- package/src/components/canvas-spinner/style.scss +7 -0
- package/src/components/create-template-part-modal/index.js +75 -67
- package/src/components/create-template-part-modal/style.scss +0 -10
- package/src/components/editor/index.js +4 -2
- package/src/components/error-boundary/index.js +2 -10
- package/src/components/error-boundary/warning.js +6 -35
- package/src/components/global-styles/README.md +1 -75
- package/src/components/global-styles/block-preview-panel.js +2 -2
- package/src/components/global-styles/border-panel.js +19 -17
- package/src/components/global-styles/color-palette-panel.js +10 -7
- package/src/components/global-styles/context-menu.js +114 -44
- package/src/components/global-styles/custom-css.js +76 -19
- package/src/components/global-styles/dimensions-panel.js +46 -36
- package/src/components/global-styles/global-styles-provider.js +6 -2
- package/src/components/global-styles/gradients-palette-panel.js +17 -11
- package/src/components/global-styles/hooks.js +31 -155
- package/src/components/global-styles/index.js +0 -2
- package/src/components/global-styles/palette.js +9 -5
- package/src/components/global-styles/preview.js +19 -13
- package/src/components/global-styles/screen-background-color.js +37 -21
- package/src/components/global-styles/screen-border.js +10 -5
- package/src/components/global-styles/screen-button-color.js +21 -19
- package/src/components/global-styles/screen-colors.js +48 -65
- package/src/components/global-styles/screen-css.js +30 -14
- package/src/components/global-styles/screen-heading-color.js +32 -27
- package/src/components/global-styles/screen-layout.js +4 -7
- package/src/components/global-styles/screen-link-color.js +26 -26
- package/src/components/global-styles/screen-root.js +24 -9
- package/src/components/global-styles/screen-style-variations.js +7 -2
- package/src/components/global-styles/screen-text-color.js +15 -19
- package/src/components/global-styles/screen-typography.js +27 -12
- package/src/components/global-styles/shadow-panel.js +174 -0
- package/src/components/global-styles/style.scss +85 -1
- package/src/components/global-styles/typography-panel.js +60 -48
- package/src/components/global-styles/typography-preview.js +28 -9
- package/src/components/global-styles/ui.js +78 -53
- package/src/components/global-styles/utils.js +4 -371
- package/src/components/global-styles-renderer/index.js +3 -4
- package/src/components/header-edit-mode/document-actions/index.js +1 -1
- package/src/components/keyboard-shortcut-help-modal/index.js +0 -1
- package/src/components/layout/index.js +9 -2
- package/src/components/layout/style.scss +4 -5
- package/src/components/list/actions/rename-menu-item.js +14 -23
- package/src/components/list/style.scss +0 -4
- package/src/components/{sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js → navigation-inspector/index.js} +1 -4
- package/src/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/navigation-menu.js +10 -12
- package/src/components/{sidebar-edit-mode/navigation-menu-sidebar → navigation-inspector}/style.scss +0 -17
- package/src/components/sidebar/index.js +2 -0
- package/src/components/sidebar-edit-mode/global-styles-sidebar.js +8 -32
- package/src/components/sidebar-edit-mode/index.js +0 -11
- package/src/components/sidebar-edit-mode/settings-header/style.scss +8 -0
- package/src/components/sidebar-navigation-item/style.scss +28 -3
- package/src/components/sidebar-navigation-screen/index.js +4 -3
- package/src/components/sidebar-navigation-screen/style.scss +2 -0
- package/src/components/sidebar-navigation-screen-main/index.js +23 -1
- package/src/components/sidebar-navigation-screen-navigation-menus/index.js +25 -0
- package/src/components/sidebar-navigation-screen-navigation-menus/style.scss +12 -0
- package/src/components/sidebar-navigation-screen-templates/index.js +12 -19
- package/src/components/site-hub/index.js +1 -1
- package/src/components/site-hub/style.scss +7 -1
- package/src/components/site-icon/index.js +1 -1
- package/src/components/site-icon/style.scss +2 -2
- package/src/components/style-book/index.js +10 -5
- package/src/components/template-part-converter/convert-to-template-part.js +12 -10
- package/src/experiments.js +10 -0
- package/src/hooks/push-changes-to-global-styles/index.js +63 -5
- package/src/index.js +51 -59
- package/src/store/selectors.js +6 -26
- package/src/store/test/utils.js +181 -0
- package/src/store/utils.js +69 -0
- package/src/style.scss +4 -2
- package/src/utils/template-part-create.js +62 -0
- package/src/utils/test/template-part-create.js +63 -0
- package/build/components/global-styles/context.js +0 -22
- package/build/components/global-styles/context.js.map +0 -1
- package/build/components/global-styles/typography-utils.js +0 -92
- package/build/components/global-styles/typography-utils.js.map +0 -1
- package/build/components/global-styles/use-global-styles-output.js +0 -943
- package/build/components/global-styles/use-global-styles-output.js.map +0 -1
- package/build/components/sidebar-edit-mode/navigation-menu-sidebar/index.js +0 -42
- package/build/components/sidebar-edit-mode/navigation-menu-sidebar/index.js.map +0 -1
- package/build/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js.map +0 -1
- package/build/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-menu.js.map +0 -1
- package/build-module/components/global-styles/context.js +0 -12
- package/build-module/components/global-styles/context.js.map +0 -1
- package/build-module/components/global-styles/typography-utils.js +0 -84
- package/build-module/components/global-styles/typography-utils.js.map +0 -1
- package/build-module/components/global-styles/use-global-styles-output.js +0 -901
- package/build-module/components/global-styles/use-global-styles-output.js.map +0 -1
- package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/index.js +0 -28
- package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/index.js.map +0 -1
- package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-inspector.js.map +0 -1
- package/build-module/components/sidebar-edit-mode/navigation-menu-sidebar/navigation-menu.js.map +0 -1
- package/src/components/global-styles/context.js +0 -15
- package/src/components/global-styles/test/typography-utils.js +0 -393
- package/src/components/global-styles/test/use-global-styles-output.js +0 -814
- package/src/components/global-styles/test/utils.js +0 -206
- package/src/components/global-styles/typography-utils.js +0 -87
- package/src/components/global-styles/use-global-styles-output.js +0 -1059
- package/src/components/sidebar-edit-mode/navigation-menu-sidebar/index.js +0 -37
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { kebabCase } from 'lodash';
|
|
5
|
-
|
|
6
1
|
/**
|
|
7
2
|
* WordPress dependencies
|
|
8
3
|
*/
|
|
@@ -24,12 +19,18 @@ import { symbolFilled } from '@wordpress/icons';
|
|
|
24
19
|
*/
|
|
25
20
|
import CreateTemplatePartModal from '../create-template-part-modal';
|
|
26
21
|
import { store as editSiteStore } from '../../store';
|
|
22
|
+
import {
|
|
23
|
+
useExistingTemplateParts,
|
|
24
|
+
getUniqueTemplatePartTitle,
|
|
25
|
+
getCleanTemplatePartSlug,
|
|
26
|
+
} from '../../utils/template-part-create';
|
|
27
27
|
|
|
28
28
|
export default function ConvertToTemplatePart( { clientIds, blocks } ) {
|
|
29
29
|
const [ isModalOpen, setIsModalOpen ] = useState( false );
|
|
30
30
|
const { replaceBlocks } = useDispatch( blockEditorStore );
|
|
31
31
|
const { saveEntityRecord } = useDispatch( coreStore );
|
|
32
32
|
const { createSuccessNotice } = useDispatch( noticesStore );
|
|
33
|
+
const existingTemplateParts = useExistingTemplateParts();
|
|
33
34
|
|
|
34
35
|
const { canCreate } = useSelect( ( select ) => {
|
|
35
36
|
const { supportsTemplatePartsMode } =
|
|
@@ -44,17 +45,18 @@ export default function ConvertToTemplatePart( { clientIds, blocks } ) {
|
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
const onConvert = async ( { title, area } ) => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
const uniqueTitle = getUniqueTemplatePartTitle(
|
|
49
|
+
title,
|
|
50
|
+
existingTemplateParts
|
|
51
|
+
);
|
|
52
|
+
const cleanSlug = getCleanTemplatePartSlug( uniqueTitle );
|
|
51
53
|
|
|
52
54
|
const templatePart = await saveEntityRecord(
|
|
53
55
|
'postType',
|
|
54
56
|
'wp_template_part',
|
|
55
57
|
{
|
|
56
58
|
slug: cleanSlug,
|
|
57
|
-
title,
|
|
59
|
+
title: uniqueTitle,
|
|
58
60
|
content: serialize( blocks ),
|
|
59
61
|
area,
|
|
60
62
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/experiments';
|
|
5
|
+
|
|
6
|
+
export const { lock, unlock } =
|
|
7
|
+
__dangerousOptInToUnstableAPIsOnlyForCoreModules(
|
|
8
|
+
'I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.',
|
|
9
|
+
'@wordpress/edit-site'
|
|
10
|
+
);
|
|
@@ -11,6 +11,7 @@ import { createHigherOrderComponent } from '@wordpress/compose';
|
|
|
11
11
|
import {
|
|
12
12
|
InspectorAdvancedControls,
|
|
13
13
|
store as blockEditorStore,
|
|
14
|
+
experiments as blockEditorExperiments,
|
|
14
15
|
} from '@wordpress/block-editor';
|
|
15
16
|
import { BaseControl, Button } from '@wordpress/components';
|
|
16
17
|
import { __, sprintf } from '@wordpress/i18n';
|
|
@@ -26,11 +27,68 @@ import { store as noticesStore } from '@wordpress/notices';
|
|
|
26
27
|
* Internal dependencies
|
|
27
28
|
*/
|
|
28
29
|
import { getSupportedGlobalStylesPanels } from '../../components/global-styles/hooks';
|
|
29
|
-
import {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
import { unlock } from '../../experiments';
|
|
31
|
+
|
|
32
|
+
const { GlobalStylesContext } = unlock( blockEditorExperiments );
|
|
33
|
+
|
|
34
|
+
// TODO: Temporary duplication of constant in @wordpress/block-editor. Can be
|
|
35
|
+
// removed by moving PushChangesToGlobalStylesControl to
|
|
36
|
+
// @wordpress/block-editor.
|
|
37
|
+
const STYLE_PATH_TO_CSS_VAR_INFIX = {
|
|
38
|
+
'color.background': 'color',
|
|
39
|
+
'color.text': 'color',
|
|
40
|
+
'elements.link.color.text': 'color',
|
|
41
|
+
'elements.link.:hover.color.text': 'color',
|
|
42
|
+
'elements.link.typography.fontFamily': 'font-family',
|
|
43
|
+
'elements.link.typography.fontSize': 'font-size',
|
|
44
|
+
'elements.button.color.text': 'color',
|
|
45
|
+
'elements.button.color.background': 'color',
|
|
46
|
+
'elements.button.typography.fontFamily': 'font-family',
|
|
47
|
+
'elements.button.typography.fontSize': 'font-size',
|
|
48
|
+
'elements.heading.color': 'color',
|
|
49
|
+
'elements.heading.color.background': 'color',
|
|
50
|
+
'elements.heading.typography.fontFamily': 'font-family',
|
|
51
|
+
'elements.heading.gradient': 'gradient',
|
|
52
|
+
'elements.heading.color.gradient': 'gradient',
|
|
53
|
+
'elements.h1.color': 'color',
|
|
54
|
+
'elements.h1.color.background': 'color',
|
|
55
|
+
'elements.h1.typography.fontFamily': 'font-family',
|
|
56
|
+
'elements.h1.color.gradient': 'gradient',
|
|
57
|
+
'elements.h2.color': 'color',
|
|
58
|
+
'elements.h2.color.background': 'color',
|
|
59
|
+
'elements.h2.typography.fontFamily': 'font-family',
|
|
60
|
+
'elements.h2.color.gradient': 'gradient',
|
|
61
|
+
'elements.h3.color': 'color',
|
|
62
|
+
'elements.h3.color.background': 'color',
|
|
63
|
+
'elements.h3.typography.fontFamily': 'font-family',
|
|
64
|
+
'elements.h3.color.gradient': 'gradient',
|
|
65
|
+
'elements.h4.color': 'color',
|
|
66
|
+
'elements.h4.color.background': 'color',
|
|
67
|
+
'elements.h4.typography.fontFamily': 'font-family',
|
|
68
|
+
'elements.h4.color.gradient': 'gradient',
|
|
69
|
+
'elements.h5.color': 'color',
|
|
70
|
+
'elements.h5.color.background': 'color',
|
|
71
|
+
'elements.h5.typography.fontFamily': 'font-family',
|
|
72
|
+
'elements.h5.color.gradient': 'gradient',
|
|
73
|
+
'elements.h6.color': 'color',
|
|
74
|
+
'elements.h6.color.background': 'color',
|
|
75
|
+
'elements.h6.typography.fontFamily': 'font-family',
|
|
76
|
+
'elements.h6.color.gradient': 'gradient',
|
|
77
|
+
'color.gradient': 'gradient',
|
|
78
|
+
'typography.fontSize': 'font-size',
|
|
79
|
+
'typography.fontFamily': 'font-family',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
// TODO: Temporary duplication of constant in @wordpress/block-editor. Can be
|
|
83
|
+
// removed by moving PushChangesToGlobalStylesControl to
|
|
84
|
+
// @wordpress/block-editor.
|
|
85
|
+
const STYLE_PATH_TO_PRESET_BLOCK_ATTRIBUTE = {
|
|
86
|
+
'color.background': 'backgroundColor',
|
|
87
|
+
'color.text': 'textColor',
|
|
88
|
+
'color.gradient': 'gradient',
|
|
89
|
+
'typography.fontSize': 'fontSize',
|
|
90
|
+
'typography.fontFamily': 'fontFamily',
|
|
91
|
+
};
|
|
34
92
|
|
|
35
93
|
function getChangesToPush( name, attributes ) {
|
|
36
94
|
return getSupportedGlobalStylesPanels( name ).flatMap( ( key ) => {
|
package/src/index.js
CHANGED
|
@@ -7,7 +7,8 @@ import {
|
|
|
7
7
|
__experimentalRegisterExperimentalCoreBlocks,
|
|
8
8
|
} from '@wordpress/block-library';
|
|
9
9
|
import { dispatch } from '@wordpress/data';
|
|
10
|
-
import
|
|
10
|
+
import deprecated from '@wordpress/deprecated';
|
|
11
|
+
import { createRoot } from '@wordpress/element';
|
|
11
12
|
import {
|
|
12
13
|
__experimentalFetchLinkSuggestions as fetchLinkSuggestions,
|
|
13
14
|
__experimentalFetchUrlData as fetchUrlData,
|
|
@@ -26,14 +27,27 @@ import { store as editSiteStore } from './store';
|
|
|
26
27
|
import App from './components/app';
|
|
27
28
|
|
|
28
29
|
/**
|
|
29
|
-
*
|
|
30
|
-
* an unhandled error occurs, replacing previously mounted editor element using
|
|
31
|
-
* an initial state from prior to the crash.
|
|
30
|
+
* Initializes the site editor screen.
|
|
32
31
|
*
|
|
33
|
-
* @param {
|
|
34
|
-
* @param {
|
|
32
|
+
* @param {string} id ID of the root element to render the screen in.
|
|
33
|
+
* @param {Object} settings Editor settings.
|
|
35
34
|
*/
|
|
36
|
-
export function
|
|
35
|
+
export function initializeEditor( id, settings ) {
|
|
36
|
+
const target = document.getElementById( id );
|
|
37
|
+
const root = createRoot( target );
|
|
38
|
+
|
|
39
|
+
settings.__experimentalFetchLinkSuggestions = ( search, searchOptions ) =>
|
|
40
|
+
fetchLinkSuggestions( search, searchOptions, settings );
|
|
41
|
+
settings.__experimentalFetchRichUrlData = fetchUrlData;
|
|
42
|
+
|
|
43
|
+
dispatch( blocksStore ).__experimentalReapplyBlockTypeFilters();
|
|
44
|
+
registerCoreBlocks();
|
|
45
|
+
registerLegacyWidgetBlock( { inserter: false } );
|
|
46
|
+
if ( process.env.IS_GUTENBERG_PLUGIN ) {
|
|
47
|
+
__experimentalRegisterExperimentalCoreBlocks( {
|
|
48
|
+
enableFSEBlocks: true,
|
|
49
|
+
} );
|
|
50
|
+
}
|
|
37
51
|
/*
|
|
38
52
|
* Prevent adding the Clasic block in the site editor.
|
|
39
53
|
* Only add the filter when the site editor is initialized, not imported.
|
|
@@ -54,70 +68,48 @@ export function reinitializeEditor( target, settings ) {
|
|
|
54
68
|
}
|
|
55
69
|
);
|
|
56
70
|
|
|
57
|
-
// This will be a no-op if the target doesn't have any React nodes.
|
|
58
|
-
unmountComponentAtNode( target );
|
|
59
|
-
const reboot = reinitializeEditor.bind( null, target, settings );
|
|
60
|
-
|
|
61
71
|
// We dispatch actions and update the store synchronously before rendering
|
|
62
72
|
// so that we won't trigger unnecessary re-renders with useEffect.
|
|
63
|
-
{
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
} );
|
|
73
|
+
dispatch( preferencesStore ).setDefaults( 'core/edit-site', {
|
|
74
|
+
editorMode: 'visual',
|
|
75
|
+
fixedToolbar: false,
|
|
76
|
+
focusMode: false,
|
|
77
|
+
keepCaretInsideBlock: false,
|
|
78
|
+
welcomeGuide: true,
|
|
79
|
+
welcomeGuideStyles: true,
|
|
80
|
+
showListViewByDefault: false,
|
|
81
|
+
} );
|
|
73
82
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
83
|
+
dispatch( interfaceStore ).setDefaultComplementaryArea(
|
|
84
|
+
'core/edit-site',
|
|
85
|
+
'edit-site/template'
|
|
86
|
+
);
|
|
78
87
|
|
|
79
|
-
|
|
88
|
+
dispatch( editSiteStore ).updateSettings( settings );
|
|
80
89
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
+
// Keep the defaultTemplateTypes in the core/editor settings too,
|
|
91
|
+
// so that they can be selected with core/editor selectors in any editor.
|
|
92
|
+
// This is needed because edit-site doesn't initialize with EditorProvider,
|
|
93
|
+
// which internally uses updateEditorSettings as well.
|
|
94
|
+
dispatch( editorStore ).updateEditorSettings( {
|
|
95
|
+
defaultTemplateTypes: settings.defaultTemplateTypes,
|
|
96
|
+
defaultTemplatePartAreas: settings.defaultTemplatePartAreas,
|
|
97
|
+
} );
|
|
90
98
|
|
|
91
99
|
// Prevent the default browser action for files dropped outside of dropzones.
|
|
92
100
|
window.addEventListener( 'dragover', ( e ) => e.preventDefault(), false );
|
|
93
101
|
window.addEventListener( 'drop', ( e ) => e.preventDefault(), false );
|
|
94
102
|
|
|
95
|
-
render( <App
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Initializes the site editor screen.
|
|
100
|
-
*
|
|
101
|
-
* @param {string} id ID of the root element to render the screen in.
|
|
102
|
-
* @param {Object} settings Editor settings.
|
|
103
|
-
*/
|
|
104
|
-
export function initializeEditor( id, settings ) {
|
|
105
|
-
settings.__experimentalFetchLinkSuggestions = ( search, searchOptions ) =>
|
|
106
|
-
fetchLinkSuggestions( search, searchOptions, settings );
|
|
107
|
-
settings.__experimentalFetchRichUrlData = fetchUrlData;
|
|
103
|
+
root.render( <App /> );
|
|
108
104
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
dispatch( blocksStore ).__experimentalReapplyBlockTypeFilters();
|
|
112
|
-
registerCoreBlocks();
|
|
113
|
-
registerLegacyWidgetBlock( { inserter: false } );
|
|
114
|
-
if ( process.env.IS_GUTENBERG_PLUGIN ) {
|
|
115
|
-
__experimentalRegisterExperimentalCoreBlocks( {
|
|
116
|
-
enableFSEBlocks: true,
|
|
117
|
-
} );
|
|
118
|
-
}
|
|
105
|
+
return root;
|
|
106
|
+
}
|
|
119
107
|
|
|
120
|
-
|
|
108
|
+
export function reinitializeEditor() {
|
|
109
|
+
deprecated( 'wp.editSite.reinitializeEditor', {
|
|
110
|
+
since: '6.2',
|
|
111
|
+
version: '6.3',
|
|
112
|
+
} );
|
|
121
113
|
}
|
|
122
114
|
|
|
123
115
|
export { default as PluginSidebar } from './components/sidebar-edit-mode/plugin-sidebar';
|
package/src/store/selectors.js
CHANGED
|
@@ -10,10 +10,14 @@ import { store as coreDataStore } from '@wordpress/core-data';
|
|
|
10
10
|
import { createRegistrySelector } from '@wordpress/data';
|
|
11
11
|
import deprecated from '@wordpress/deprecated';
|
|
12
12
|
import { uploadMedia } from '@wordpress/media-utils';
|
|
13
|
-
import { isTemplatePart } from '@wordpress/blocks';
|
|
14
13
|
import { Platform } from '@wordpress/element';
|
|
15
14
|
import { store as preferencesStore } from '@wordpress/preferences';
|
|
16
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Internal dependencies
|
|
18
|
+
*/
|
|
19
|
+
import { getFilteredTemplatePartBlocks } from './utils';
|
|
20
|
+
|
|
17
21
|
/**
|
|
18
22
|
* @typedef {'template'|'template_type'} TemplateType Template type.
|
|
19
23
|
*/
|
|
@@ -268,32 +272,8 @@ export const getCurrentTemplateTemplateParts = createRegistrySelector(
|
|
|
268
272
|
'wp_template_part',
|
|
269
273
|
{ per_page: -1 }
|
|
270
274
|
);
|
|
271
|
-
const templatePartsById = templateParts
|
|
272
|
-
? // Key template parts by their ID.
|
|
273
|
-
templateParts.reduce(
|
|
274
|
-
( newTemplateParts, part ) => ( {
|
|
275
|
-
...newTemplateParts,
|
|
276
|
-
[ part.id ]: part,
|
|
277
|
-
} ),
|
|
278
|
-
{}
|
|
279
|
-
)
|
|
280
|
-
: {};
|
|
281
|
-
|
|
282
|
-
return ( template.blocks ?? [] )
|
|
283
|
-
.filter( ( block ) => isTemplatePart( block ) )
|
|
284
|
-
.map( ( block ) => {
|
|
285
|
-
const {
|
|
286
|
-
attributes: { theme, slug },
|
|
287
|
-
} = block;
|
|
288
|
-
const templatePartId = `${ theme }//${ slug }`;
|
|
289
|
-
const templatePart = templatePartsById[ templatePartId ];
|
|
290
275
|
|
|
291
|
-
|
|
292
|
-
templatePart,
|
|
293
|
-
block,
|
|
294
|
-
};
|
|
295
|
-
} )
|
|
296
|
-
.filter( ( { templatePart } ) => !! templatePart );
|
|
276
|
+
return getFilteredTemplatePartBlocks( template.blocks, templateParts );
|
|
297
277
|
}
|
|
298
278
|
);
|
|
299
279
|
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { getFilteredTemplatePartBlocks } from '../utils';
|
|
5
|
+
|
|
6
|
+
const NESTED_BLOCKS = [
|
|
7
|
+
{
|
|
8
|
+
clientId: '1',
|
|
9
|
+
name: 'core/group',
|
|
10
|
+
innerBlocks: [
|
|
11
|
+
{
|
|
12
|
+
clientId: '2',
|
|
13
|
+
name: 'core/template-part',
|
|
14
|
+
attributes: {
|
|
15
|
+
slug: 'header',
|
|
16
|
+
theme: 'my-theme',
|
|
17
|
+
},
|
|
18
|
+
innerBlocks: [
|
|
19
|
+
{
|
|
20
|
+
clientId: '3',
|
|
21
|
+
name: 'core/group',
|
|
22
|
+
innerBlocks: [],
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
clientId: '4',
|
|
28
|
+
name: 'core/template-part',
|
|
29
|
+
attributes: {
|
|
30
|
+
slug: 'aside',
|
|
31
|
+
theme: 'my-theme',
|
|
32
|
+
},
|
|
33
|
+
innerBlocks: [],
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
clientId: '5',
|
|
39
|
+
name: 'core/paragraph',
|
|
40
|
+
innerBlocks: [],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
clientId: '6',
|
|
44
|
+
name: 'core/template-part',
|
|
45
|
+
attributes: {
|
|
46
|
+
slug: 'footer',
|
|
47
|
+
theme: 'my-theme',
|
|
48
|
+
},
|
|
49
|
+
innerBlocks: [],
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
const FLATTENED_BLOCKS = [
|
|
54
|
+
{
|
|
55
|
+
block: {
|
|
56
|
+
clientId: '2',
|
|
57
|
+
name: 'core/template-part',
|
|
58
|
+
attributes: {
|
|
59
|
+
slug: 'header',
|
|
60
|
+
theme: 'my-theme',
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
templatePart: {
|
|
64
|
+
id: 'my-theme//header',
|
|
65
|
+
slug: 'header',
|
|
66
|
+
theme: 'my-theme',
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
block: {
|
|
71
|
+
clientId: '4',
|
|
72
|
+
name: 'core/template-part',
|
|
73
|
+
attributes: {
|
|
74
|
+
slug: 'aside',
|
|
75
|
+
theme: 'my-theme',
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
templatePart: {
|
|
79
|
+
id: 'my-theme//aside',
|
|
80
|
+
slug: 'aside',
|
|
81
|
+
theme: 'my-theme',
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
block: {
|
|
86
|
+
clientId: '6',
|
|
87
|
+
name: 'core/template-part',
|
|
88
|
+
attributes: {
|
|
89
|
+
slug: 'footer',
|
|
90
|
+
theme: 'my-theme',
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
templatePart: {
|
|
94
|
+
id: 'my-theme//footer',
|
|
95
|
+
slug: 'footer',
|
|
96
|
+
theme: 'my-theme',
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
];
|
|
100
|
+
|
|
101
|
+
const SINGLE_TEMPLATE_PART_BLOCK = {
|
|
102
|
+
clientId: '1',
|
|
103
|
+
name: 'core/template-part',
|
|
104
|
+
innerBlocks: [],
|
|
105
|
+
attributes: {
|
|
106
|
+
slug: 'aside',
|
|
107
|
+
theme: 'my-theme',
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const TEMPLATE_PARTS = [
|
|
112
|
+
{
|
|
113
|
+
id: 'my-theme//header',
|
|
114
|
+
slug: 'header',
|
|
115
|
+
theme: 'my-theme',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
id: 'my-theme//aside',
|
|
119
|
+
slug: 'aside',
|
|
120
|
+
theme: 'my-theme',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
id: 'my-theme//footer',
|
|
124
|
+
slug: 'footer',
|
|
125
|
+
theme: 'my-theme',
|
|
126
|
+
},
|
|
127
|
+
];
|
|
128
|
+
|
|
129
|
+
describe( 'utils', () => {
|
|
130
|
+
describe( 'getFilteredTemplatePartBlocks', () => {
|
|
131
|
+
it( 'returns a flattened list of filtered template parts preserving a depth-first order', () => {
|
|
132
|
+
const flattenedFilteredTemplateParts =
|
|
133
|
+
getFilteredTemplatePartBlocks( NESTED_BLOCKS, TEMPLATE_PARTS );
|
|
134
|
+
expect( flattenedFilteredTemplateParts ).toEqual(
|
|
135
|
+
FLATTENED_BLOCKS
|
|
136
|
+
);
|
|
137
|
+
} );
|
|
138
|
+
|
|
139
|
+
it( 'returns a cached result when passed the same params', () => {
|
|
140
|
+
// Clear the cache and call the function twice.
|
|
141
|
+
getFilteredTemplatePartBlocks.clear();
|
|
142
|
+
getFilteredTemplatePartBlocks( NESTED_BLOCKS, TEMPLATE_PARTS );
|
|
143
|
+
expect(
|
|
144
|
+
getFilteredTemplatePartBlocks( NESTED_BLOCKS, TEMPLATE_PARTS )
|
|
145
|
+
).toEqual( FLATTENED_BLOCKS );
|
|
146
|
+
|
|
147
|
+
// The function has been called twice with the same params, so the cache size should be 1.
|
|
148
|
+
const [ , , originalSize ] =
|
|
149
|
+
getFilteredTemplatePartBlocks.getCache();
|
|
150
|
+
expect( originalSize ).toBe( 1 );
|
|
151
|
+
|
|
152
|
+
// Call the function again, with different params.
|
|
153
|
+
expect(
|
|
154
|
+
getFilteredTemplatePartBlocks(
|
|
155
|
+
[ SINGLE_TEMPLATE_PART_BLOCK ],
|
|
156
|
+
TEMPLATE_PARTS
|
|
157
|
+
)
|
|
158
|
+
).toEqual( [
|
|
159
|
+
{
|
|
160
|
+
block: {
|
|
161
|
+
clientId: '1',
|
|
162
|
+
name: 'core/template-part',
|
|
163
|
+
attributes: {
|
|
164
|
+
slug: 'aside',
|
|
165
|
+
theme: 'my-theme',
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
templatePart: {
|
|
169
|
+
id: 'my-theme//aside',
|
|
170
|
+
slug: 'aside',
|
|
171
|
+
theme: 'my-theme',
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
] );
|
|
175
|
+
|
|
176
|
+
// The function has been called with different params, so the cache size should now be 2.
|
|
177
|
+
const [ , , finalSize ] = getFilteredTemplatePartBlocks.getCache();
|
|
178
|
+
expect( finalSize ).toBe( 2 );
|
|
179
|
+
} );
|
|
180
|
+
} );
|
|
181
|
+
} );
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import memoize from 'memize';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* WordPress dependencies
|
|
8
|
+
*/
|
|
9
|
+
import { isTemplatePart } from '@wordpress/blocks';
|
|
10
|
+
|
|
11
|
+
const EMPTY_ARRAY = [];
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Get a flattened and filtered list of template parts and the matching block for that template part.
|
|
15
|
+
*
|
|
16
|
+
* Takes a list of blocks defined within a template, and a list of template parts, and returns a
|
|
17
|
+
* flattened list of template parts and the matching block for that template part.
|
|
18
|
+
*
|
|
19
|
+
* @param {Array} blocks Blocks to flatten.
|
|
20
|
+
* @param {?Array} templateParts Available template parts.
|
|
21
|
+
* @return {Array} An array of template parts and their blocks.
|
|
22
|
+
*/
|
|
23
|
+
function getFilteredTemplatePartBlocks( blocks = EMPTY_ARRAY, templateParts ) {
|
|
24
|
+
const templatePartsById = templateParts
|
|
25
|
+
? // Key template parts by their ID.
|
|
26
|
+
templateParts.reduce(
|
|
27
|
+
( newTemplateParts, part ) => ( {
|
|
28
|
+
...newTemplateParts,
|
|
29
|
+
[ part.id ]: part,
|
|
30
|
+
} ),
|
|
31
|
+
{}
|
|
32
|
+
)
|
|
33
|
+
: {};
|
|
34
|
+
|
|
35
|
+
const result = [];
|
|
36
|
+
|
|
37
|
+
// Iterate over all blocks, recursing into inner blocks.
|
|
38
|
+
// Output will be based on a depth-first traversal.
|
|
39
|
+
const stack = [ ...blocks ];
|
|
40
|
+
while ( stack.length ) {
|
|
41
|
+
const { innerBlocks, ...block } = stack.shift();
|
|
42
|
+
// Place inner blocks at the beginning of the stack to preserve order.
|
|
43
|
+
stack.unshift( ...innerBlocks );
|
|
44
|
+
|
|
45
|
+
if ( isTemplatePart( block ) ) {
|
|
46
|
+
const {
|
|
47
|
+
attributes: { theme, slug },
|
|
48
|
+
} = block;
|
|
49
|
+
const templatePartId = `${ theme }//${ slug }`;
|
|
50
|
+
const templatePart = templatePartsById[ templatePartId ];
|
|
51
|
+
|
|
52
|
+
// Only add to output if the found template part block is in the list of available template parts.
|
|
53
|
+
if ( templatePart ) {
|
|
54
|
+
result.push( {
|
|
55
|
+
templatePart,
|
|
56
|
+
block,
|
|
57
|
+
} );
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const memoizedGetFilteredTemplatePartBlocks = memoize(
|
|
66
|
+
getFilteredTemplatePartBlocks
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
export { memoizedGetFilteredTemplatePartBlocks as getFilteredTemplatePartBlocks };
|
package/src/style.scss
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
@import "../../interface/src/style.scss";
|
|
2
2
|
|
|
3
|
+
@import "./components/add-new-template/style.scss";
|
|
3
4
|
@import "./components/block-editor/style.scss";
|
|
5
|
+
@import "./components/canvas-spinner/style.scss";
|
|
4
6
|
@import "./components/code-editor/style.scss";
|
|
5
7
|
@import "./components/global-styles/style.scss";
|
|
6
8
|
@import "./components/header-edit-mode/style.scss";
|
|
7
9
|
@import "./components/header-edit-mode/document-actions/style.scss";
|
|
8
10
|
@import "./components/list/style.scss";
|
|
9
|
-
@import "./components/
|
|
11
|
+
@import "./components/navigation-inspector/style.scss";
|
|
10
12
|
@import "./components/sidebar-edit-mode/style.scss";
|
|
11
13
|
@import "./components/sidebar-edit-mode/settings-header/style.scss";
|
|
12
|
-
@import "./components/sidebar-edit-mode/navigation-menu-sidebar/style.scss";
|
|
13
14
|
@import "./components/sidebar-edit-mode/template-card/style.scss";
|
|
14
15
|
@import "./components/editor/style.scss";
|
|
15
16
|
@import "./components/template-details/style.scss";
|
|
@@ -23,6 +24,7 @@
|
|
|
23
24
|
@import "./components/sidebar-navigation-screen/style.scss";
|
|
24
25
|
@import "./components/sidebar-navigation-screen-templates/style.scss";
|
|
25
26
|
@import "./components/site-hub/style.scss";
|
|
27
|
+
@import "./components/sidebar-navigation-screen-navigation-menus/style.scss";
|
|
26
28
|
@import "./components/site-icon/style.scss";
|
|
27
29
|
@import "./components/style-book/style.scss";
|
|
28
30
|
@import "./hooks/push-changes-to-global-styles/style.scss";
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { kebabCase } from 'lodash';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* WordPress dependencies
|
|
8
|
+
*/
|
|
9
|
+
import { useSelect } from '@wordpress/data';
|
|
10
|
+
import { store as coreStore } from '@wordpress/core-data';
|
|
11
|
+
|
|
12
|
+
export const useExistingTemplateParts = () => {
|
|
13
|
+
return useSelect(
|
|
14
|
+
( select ) =>
|
|
15
|
+
select( coreStore ).getEntityRecords(
|
|
16
|
+
'postType',
|
|
17
|
+
'wp_template_part',
|
|
18
|
+
{
|
|
19
|
+
per_page: -1,
|
|
20
|
+
}
|
|
21
|
+
),
|
|
22
|
+
[]
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Return a unique template part title based on
|
|
28
|
+
* the given title and existing template parts.
|
|
29
|
+
*
|
|
30
|
+
* @param {string} title The original template part title.
|
|
31
|
+
* @param {Object} templateParts The array of template part entities.
|
|
32
|
+
* @return {string} A unique template part title.
|
|
33
|
+
*/
|
|
34
|
+
export const getUniqueTemplatePartTitle = ( title, templateParts ) => {
|
|
35
|
+
const lowercaseTitle = title.toLowerCase();
|
|
36
|
+
const existingTitles = templateParts.map( ( templatePart ) =>
|
|
37
|
+
templatePart.title.rendered.toLowerCase()
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
if ( ! existingTitles.includes( lowercaseTitle ) ) {
|
|
41
|
+
return title;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
let suffix = 2;
|
|
45
|
+
while ( existingTitles.includes( `${ lowercaseTitle } ${ suffix }` ) ) {
|
|
46
|
+
suffix++;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return `${ title } ${ suffix }`;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Get a valid slug for a template part.
|
|
54
|
+
* Currently template parts only allow latin chars.
|
|
55
|
+
* The fallback slug will receive suffix by default.
|
|
56
|
+
*
|
|
57
|
+
* @param {string} title The template part title.
|
|
58
|
+
* @return {string} A valid template part slug.
|
|
59
|
+
*/
|
|
60
|
+
export const getCleanTemplatePartSlug = ( title ) => {
|
|
61
|
+
return kebabCase( title ).replace( /[^\w-]+/g, '' ) || 'wp-custom-part';
|
|
62
|
+
};
|