@wordpress/block-editor 12.22.0 → 12.23.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/README.md +4 -0
- package/build/components/block-list/block.js +11 -3
- package/build/components/block-list/block.js.map +1 -1
- package/build/components/block-mover/button.js +4 -1
- package/build/components/block-mover/button.js.map +1 -1
- package/build/components/block-mover/index.js +5 -1
- package/build/components/block-mover/index.js.map +1 -1
- package/build/components/block-patterns-list/index.js +4 -1
- package/build/components/block-patterns-list/index.js.map +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js +7 -3
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/block-switcher/index.js +4 -3
- package/build/components/block-switcher/index.js.map +1 -1
- package/build/components/block-toolbar/index.js +5 -4
- package/build/components/block-toolbar/index.js.map +1 -1
- package/build/components/block-toolbar/shuffle.js +18 -9
- package/build/components/block-toolbar/shuffle.js.map +1 -1
- package/build/components/block-tools/block-selection-button.js +48 -8
- package/build/components/block-tools/block-selection-button.js.map +1 -1
- package/build/components/block-tools/index.js +14 -2
- package/build/components/block-tools/index.js.map +1 -1
- package/build/components/global-styles/advanced-panel.js +9 -2
- package/build/components/global-styles/advanced-panel.js.map +1 -1
- package/build/components/global-styles/background-panel.js +444 -0
- package/build/components/global-styles/background-panel.js.map +1 -0
- package/build/components/global-styles/color-panel.js +2 -1
- package/build/components/global-styles/color-panel.js.map +1 -1
- package/build/components/global-styles/get-global-styles-changes.js +3 -0
- package/build/components/global-styles/get-global-styles-changes.js.map +1 -1
- package/build/components/global-styles/hooks.js +1 -1
- package/build/components/global-styles/hooks.js.map +1 -1
- package/build/components/global-styles/index.js +13 -0
- package/build/components/global-styles/index.js.map +1 -1
- package/build/components/global-styles/use-global-styles-output.js +15 -14
- package/build/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build/components/global-styles/utils.js +2 -1
- package/build/components/global-styles/utils.js.map +1 -1
- package/build/components/iframe/index.js +9 -4
- package/build/components/iframe/index.js.map +1 -1
- package/build/components/inserter/block-patterns-tab/index.js.map +1 -1
- package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +5 -0
- package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -1
- package/build/components/inserter/library.js +2 -0
- package/build/components/inserter/library.js.map +1 -1
- package/build/components/inserter/menu.js +8 -2
- package/build/components/inserter/menu.js.map +1 -1
- package/build/components/inserter/search-items.js +36 -15
- package/build/components/inserter/search-items.js.map +1 -1
- package/build/components/keyboard-shortcuts/index.js +11 -0
- package/build/components/keyboard-shortcuts/index.js.map +1 -1
- package/build/components/list-view/block-select-button.js +16 -0
- package/build/components/list-view/block-select-button.js.map +1 -1
- package/build/components/list-view/block.js +1 -1
- package/build/components/list-view/block.js.map +1 -1
- package/build/components/list-view/index.js +17 -2
- package/build/components/list-view/index.js.map +1 -1
- package/build/components/list-view/use-list-view-collapse-items.js +47 -0
- package/build/components/list-view/use-list-view-collapse-items.js.map +1 -0
- package/build/components/rich-text/index.js +14 -11
- package/build/components/rich-text/index.js.map +1 -1
- package/build/components/rich-text/index.native.js +17 -11
- package/build/components/rich-text/index.native.js.map +1 -1
- package/build/components/rich-text/native/get-format-colors.native.js +1 -1
- package/build/components/rich-text/native/get-format-colors.native.js.map +1 -1
- package/build/components/rich-text/native/index.native.js +2 -2
- package/build/components/rich-text/native/index.native.js.map +1 -1
- package/build/components/rich-text/with-deprecations.js +0 -3
- package/build/components/rich-text/with-deprecations.js.map +1 -1
- package/build/components/url-popover/image-url-input-ui.js +50 -36
- package/build/components/url-popover/image-url-input-ui.js.map +1 -1
- package/build/components/use-block-display-information/index.js +4 -6
- package/build/components/use-block-display-information/index.js.map +1 -1
- package/build/hooks/anchor.js +2 -2
- package/build/hooks/anchor.js.map +1 -1
- package/build/hooks/background.js +70 -424
- package/build/hooks/background.js.map +1 -1
- package/build/hooks/index.js +7 -0
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/use-zoom-out.js +47 -0
- package/build/hooks/use-zoom-out.js.map +1 -0
- package/build/index.js +7 -0
- package/build/index.js.map +1 -1
- package/build/private-apis.js +6 -1
- package/build/private-apis.js.map +1 -1
- package/build/private-apis.native.js +3 -1
- package/build/private-apis.native.js.map +1 -1
- package/build/store/private-actions.js +13 -0
- package/build/store/private-actions.js.map +1 -1
- package/build/store/private-keys.js +2 -1
- package/build/store/private-keys.js.map +1 -1
- package/build/store/private-selectors.js +24 -3
- package/build/store/private-selectors.js.map +1 -1
- package/build/store/reducer.js +22 -0
- package/build/store/reducer.js.map +1 -1
- package/build/store/selectors.js +34 -32
- package/build/store/selectors.js.map +1 -1
- package/build/store/utils.js +7 -1
- package/build/store/utils.js.map +1 -1
- package/build/utils/transform-styles/index.js +2 -1
- package/build/utils/transform-styles/index.js.map +1 -1
- package/build-module/components/block-list/block.js +11 -3
- package/build-module/components/block-list/block.js.map +1 -1
- package/build-module/components/block-mover/button.js +4 -1
- package/build-module/components/block-mover/button.js.map +1 -1
- package/build-module/components/block-mover/index.js +5 -1
- package/build-module/components/block-mover/index.js.map +1 -1
- package/build-module/components/block-patterns-list/index.js +4 -1
- package/build-module/components/block-patterns-list/index.js.map +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js +7 -3
- package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build-module/components/block-switcher/index.js +4 -3
- package/build-module/components/block-switcher/index.js.map +1 -1
- package/build-module/components/block-toolbar/index.js +5 -4
- package/build-module/components/block-toolbar/index.js.map +1 -1
- package/build-module/components/block-toolbar/shuffle.js +18 -9
- package/build-module/components/block-toolbar/shuffle.js.map +1 -1
- package/build-module/components/block-tools/block-selection-button.js +50 -10
- package/build-module/components/block-tools/block-selection-button.js.map +1 -1
- package/build-module/components/block-tools/index.js +14 -2
- package/build-module/components/block-tools/index.js.map +1 -1
- package/build-module/components/global-styles/advanced-panel.js +9 -2
- package/build-module/components/global-styles/advanced-panel.js.map +1 -1
- package/build-module/components/global-styles/background-panel.js +430 -0
- package/build-module/components/global-styles/background-panel.js.map +1 -0
- package/build-module/components/global-styles/color-panel.js +2 -1
- package/build-module/components/global-styles/color-panel.js.map +1 -1
- package/build-module/components/global-styles/get-global-styles-changes.js +3 -0
- package/build-module/components/global-styles/get-global-styles-changes.js.map +1 -1
- package/build-module/components/global-styles/hooks.js +1 -1
- package/build-module/components/global-styles/hooks.js.map +1 -1
- package/build-module/components/global-styles/index.js +1 -0
- package/build-module/components/global-styles/index.js.map +1 -1
- package/build-module/components/global-styles/use-global-styles-output.js +16 -15
- package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build-module/components/global-styles/utils.js +1 -0
- package/build-module/components/global-styles/utils.js.map +1 -1
- package/build-module/components/iframe/index.js +9 -4
- package/build-module/components/iframe/index.js.map +1 -1
- package/build-module/components/inserter/block-patterns-tab/index.js.map +1 -1
- package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +5 -0
- package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -1
- package/build-module/components/inserter/library.js +2 -0
- package/build-module/components/inserter/library.js.map +1 -1
- package/build-module/components/inserter/menu.js +8 -2
- package/build-module/components/inserter/menu.js.map +1 -1
- package/build-module/components/inserter/search-items.js +33 -15
- package/build-module/components/inserter/search-items.js.map +1 -1
- package/build-module/components/keyboard-shortcuts/index.js +11 -0
- package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
- package/build-module/components/list-view/block-select-button.js +16 -0
- package/build-module/components/list-view/block-select-button.js.map +1 -1
- package/build-module/components/list-view/block.js +1 -1
- package/build-module/components/list-view/block.js.map +1 -1
- package/build-module/components/list-view/index.js +17 -2
- package/build-module/components/list-view/index.js.map +1 -1
- package/build-module/components/list-view/use-list-view-collapse-items.js +40 -0
- package/build-module/components/list-view/use-list-view-collapse-items.js.map +1 -0
- package/build-module/components/rich-text/index.js +15 -12
- package/build-module/components/rich-text/index.js.map +1 -1
- package/build-module/components/rich-text/index.native.js +16 -11
- package/build-module/components/rich-text/index.native.js.map +1 -1
- package/build-module/components/rich-text/native/get-format-colors.native.js +1 -1
- package/build-module/components/rich-text/native/get-format-colors.native.js.map +1 -1
- package/build-module/components/rich-text/native/index.native.js +2 -2
- package/build-module/components/rich-text/native/index.native.js.map +1 -1
- package/build-module/components/rich-text/with-deprecations.js +0 -3
- package/build-module/components/rich-text/with-deprecations.js.map +1 -1
- package/build-module/components/url-popover/image-url-input-ui.js +50 -36
- package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
- package/build-module/components/use-block-display-information/index.js +5 -7
- package/build-module/components/use-block-display-information/index.js.map +1 -1
- package/build-module/hooks/anchor.js +2 -2
- package/build-module/hooks/anchor.js.map +1 -1
- package/build-module/hooks/background.js +67 -419
- package/build-module/hooks/background.js.map +1 -1
- package/build-module/hooks/index.js +1 -0
- package/build-module/hooks/index.js.map +1 -1
- package/build-module/hooks/use-zoom-out.js +41 -0
- package/build-module/hooks/use-zoom-out.js.map +1 -0
- package/build-module/index.js +1 -1
- package/build-module/index.js.map +1 -1
- package/build-module/private-apis.js +7 -2
- package/build-module/private-apis.js.map +1 -1
- package/build-module/private-apis.native.js +3 -1
- package/build-module/private-apis.native.js.map +1 -1
- package/build-module/store/private-actions.js +12 -0
- package/build-module/store/private-actions.js.map +1 -1
- package/build-module/store/private-keys.js +1 -0
- package/build-module/store/private-keys.js.map +1 -1
- package/build-module/store/private-selectors.js +22 -4
- package/build-module/store/private-selectors.js.map +1 -1
- package/build-module/store/reducer.js +21 -0
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/store/selectors.js +35 -33
- package/build-module/store/selectors.js.map +1 -1
- package/build-module/store/utils.js +6 -1
- package/build-module/store/utils.js.map +1 -1
- package/build-module/utils/transform-styles/index.js +2 -1
- package/build-module/utils/transform-styles/index.js.map +1 -1
- package/build-style/content-rtl.css +4 -1
- package/build-style/content.css +4 -1
- package/build-style/style-rtl.css +84 -79
- package/build-style/style.css +84 -79
- package/package.json +31 -31
- package/src/components/block-list/block.js +19 -3
- package/src/components/block-mover/button.js +4 -1
- package/src/components/block-mover/index.js +8 -1
- package/src/components/block-patterns-list/index.js +22 -17
- package/src/components/block-preview/style.scss +28 -0
- package/src/components/block-settings-menu/block-settings-dropdown.js +8 -2
- package/src/components/block-switcher/index.js +5 -3
- package/src/components/block-switcher/style.scss +1 -1
- package/src/components/block-toolbar/index.js +22 -19
- package/src/components/block-toolbar/shuffle.js +19 -13
- package/src/components/block-toolbar/style.scss +1 -1
- package/src/components/block-tools/block-selection-button.js +66 -9
- package/src/components/block-tools/index.js +18 -1
- package/src/components/button-block-appender/content.scss +5 -1
- package/src/components/default-block-appender/content.scss +2 -2
- package/src/components/global-styles/advanced-panel.js +8 -2
- package/src/components/global-styles/background-panel.js +591 -0
- package/src/components/global-styles/color-panel.js +2 -1
- package/src/components/global-styles/get-global-styles-changes.js +3 -0
- package/src/components/global-styles/hooks.js +1 -0
- package/src/components/global-styles/index.js +4 -0
- package/src/components/global-styles/style.scss +78 -1
- package/src/{hooks/test/background.js → components/global-styles/test/background-panel.js} +36 -1
- package/src/components/global-styles/test/get-global-styles-changes.js +22 -3
- package/src/components/global-styles/test/use-global-styles-output.js +9 -9
- package/src/components/global-styles/use-global-styles-output.js +27 -16
- package/src/components/global-styles/utils.js +1 -0
- package/src/components/iframe/index.js +19 -9
- package/src/components/inserter/block-patterns-tab/index.js +1 -0
- package/src/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +5 -0
- package/src/components/inserter/library.js +4 -0
- package/src/components/inserter/menu.js +8 -1
- package/src/components/inserter/search-items.js +37 -15
- package/src/components/inserter/style.scss +6 -12
- package/src/components/keyboard-shortcuts/index.js +11 -0
- package/src/components/list-view/block-select-button.js +13 -1
- package/src/components/list-view/block.js +1 -1
- package/src/components/list-view/index.js +18 -1
- package/src/components/list-view/style.scss +4 -4
- package/src/components/list-view/use-list-view-collapse-items.js +33 -0
- package/src/components/rich-text/index.js +30 -13
- package/src/components/rich-text/index.native.js +14 -11
- package/src/components/rich-text/native/get-format-colors.native.js +1 -1
- package/src/components/rich-text/native/index.native.js +2 -2
- package/src/components/rich-text/with-deprecations.js +0 -3
- package/src/components/url-popover/image-url-input-ui.js +68 -51
- package/src/components/use-block-display-information/index.js +8 -10
- package/src/hooks/anchor.js +11 -9
- package/src/hooks/background.js +77 -538
- package/src/hooks/index.js +1 -0
- package/src/hooks/use-zoom-out.js +36 -0
- package/src/index.js +1 -0
- package/src/private-apis.js +13 -1
- package/src/private-apis.native.js +2 -0
- package/src/store/private-actions.js +12 -0
- package/src/store/private-keys.js +1 -0
- package/src/store/private-selectors.js +54 -27
- package/src/store/reducer.js +22 -0
- package/src/store/selectors.js +195 -180
- package/src/store/test/private-actions.js +10 -0
- package/src/store/test/private-selectors.js +13 -0
- package/src/store/test/reducer.js +26 -0
- package/src/store/test/selectors.js +90 -199
- package/src/store/utils.js +13 -0
- package/src/style.scss +0 -2
- package/src/utils/transform-styles/index.js +2 -1
- package/src/hooks/anchor.scss +0 -4
- package/src/hooks/background.scss +0 -75
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
import { createElement } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* External dependencies
|
|
4
|
+
*/
|
|
5
|
+
import classnames from 'classnames';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* WordPress dependencies
|
|
9
|
+
*/
|
|
10
|
+
import { __experimentalToolsPanel as ToolsPanel, __experimentalToolsPanelItem as ToolsPanelItem, ToggleControl, __experimentalToggleGroupControl as ToggleGroupControl, __experimentalToggleGroupControlOption as ToggleGroupControlOption, __experimentalUnitControl as UnitControl, __experimentalVStack as VStack, DropZone, FlexItem, FocalPointPicker, MenuItem, VisuallyHidden, __experimentalItemGroup as ItemGroup, __experimentalHStack as HStack, __experimentalTruncate as Truncate } from '@wordpress/components';
|
|
11
|
+
import { __, sprintf } from '@wordpress/i18n';
|
|
12
|
+
import { store as noticesStore } from '@wordpress/notices';
|
|
13
|
+
import { getFilename } from '@wordpress/url';
|
|
14
|
+
import { useCallback, Platform, useRef } from '@wordpress/element';
|
|
15
|
+
import { useDispatch, useSelect } from '@wordpress/data';
|
|
16
|
+
import { focus } from '@wordpress/dom';
|
|
17
|
+
import { isBlobURL } from '@wordpress/blob';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Internal dependencies
|
|
21
|
+
*/
|
|
22
|
+
import { TOOLSPANEL_DROPDOWNMENU_PROPS } from './utils';
|
|
23
|
+
import { setImmutably } from '../../utils/object';
|
|
24
|
+
import MediaReplaceFlow from '../media-replace-flow';
|
|
25
|
+
import { store as blockEditorStore } from '../../store';
|
|
26
|
+
const IMAGE_BACKGROUND_TYPE = 'image';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Checks site settings to see if the background panel may be used.
|
|
30
|
+
* `settings.background.backgroundSize` exists also,
|
|
31
|
+
* but can only be used if settings?.background?.backgroundImage is `true`.
|
|
32
|
+
*
|
|
33
|
+
* @param {Object} settings Site settings
|
|
34
|
+
* @return {boolean} Whether site settings has activated background panel.
|
|
35
|
+
*/
|
|
36
|
+
export function useHasBackgroundPanel(settings) {
|
|
37
|
+
return Platform.OS === 'web' && settings?.background?.backgroundImage;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Checks if there is a current value in the background size block support
|
|
42
|
+
* attributes. Background size values include background size as well
|
|
43
|
+
* as background position.
|
|
44
|
+
*
|
|
45
|
+
* @param {Object} style Style attribute.
|
|
46
|
+
* @return {boolean} Whether the block has a background size value set.
|
|
47
|
+
*/
|
|
48
|
+
export function hasBackgroundSizeValue(style) {
|
|
49
|
+
return style?.background?.backgroundPosition !== undefined || style?.background?.backgroundSize !== undefined;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Checks if there is a current value in the background image block support
|
|
54
|
+
* attributes.
|
|
55
|
+
*
|
|
56
|
+
* @param {Object} style Style attribute.
|
|
57
|
+
* @return {boolean} Whether the block has a background image value set.
|
|
58
|
+
*/
|
|
59
|
+
export function hasBackgroundImageValue(style) {
|
|
60
|
+
return !!style?.background?.backgroundImage?.id || !!style?.background?.backgroundImage?.url;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Get the help text for the background size control.
|
|
65
|
+
*
|
|
66
|
+
* @param {string} value backgroundSize value.
|
|
67
|
+
* @return {string} Translated help text.
|
|
68
|
+
*/
|
|
69
|
+
function backgroundSizeHelpText(value) {
|
|
70
|
+
if (value === 'cover' || value === undefined) {
|
|
71
|
+
return __('Image covers the space evenly.');
|
|
72
|
+
}
|
|
73
|
+
if (value === 'contain') {
|
|
74
|
+
return __('Image is contained without distortion.');
|
|
75
|
+
}
|
|
76
|
+
return __('Specify a fixed width.');
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Converts decimal x and y coords from FocalPointPicker to percentage-based values
|
|
81
|
+
* to use as backgroundPosition value.
|
|
82
|
+
*
|
|
83
|
+
* @param {{x?:number, y?:number}} value FocalPointPicker coords.
|
|
84
|
+
* @return {string} backgroundPosition value.
|
|
85
|
+
*/
|
|
86
|
+
export const coordsToBackgroundPosition = value => {
|
|
87
|
+
if (!value || isNaN(value.x) && isNaN(value.y)) {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
const x = isNaN(value.x) ? 0.5 : value.x;
|
|
91
|
+
const y = isNaN(value.y) ? 0.5 : value.y;
|
|
92
|
+
return `${x * 100}% ${y * 100}%`;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Converts backgroundPosition value to x and y coords for FocalPointPicker.
|
|
97
|
+
*
|
|
98
|
+
* @param {string} value backgroundPosition value.
|
|
99
|
+
* @return {{x?:number, y?:number}} FocalPointPicker coords.
|
|
100
|
+
*/
|
|
101
|
+
export const backgroundPositionToCoords = value => {
|
|
102
|
+
if (!value) {
|
|
103
|
+
return {
|
|
104
|
+
x: undefined,
|
|
105
|
+
y: undefined
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
let [x, y] = value.split(' ').map(v => parseFloat(v) / 100);
|
|
109
|
+
x = isNaN(x) ? undefined : x;
|
|
110
|
+
y = isNaN(y) ? x : y;
|
|
111
|
+
return {
|
|
112
|
+
x,
|
|
113
|
+
y
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
function InspectorImagePreview({
|
|
117
|
+
label,
|
|
118
|
+
filename,
|
|
119
|
+
url: imgUrl
|
|
120
|
+
}) {
|
|
121
|
+
const imgLabel = label || getFilename(imgUrl);
|
|
122
|
+
return createElement(ItemGroup, {
|
|
123
|
+
as: "span"
|
|
124
|
+
}, createElement(HStack, {
|
|
125
|
+
justify: "flex-start",
|
|
126
|
+
as: "span"
|
|
127
|
+
}, createElement("span", {
|
|
128
|
+
className: classnames('block-editor-global-styles-background-panel__inspector-image-indicator-wrapper', {
|
|
129
|
+
'has-image': imgUrl
|
|
130
|
+
}),
|
|
131
|
+
"aria-hidden": true
|
|
132
|
+
}, imgUrl && createElement("span", {
|
|
133
|
+
className: "block-editor-global-styles-background-panel__inspector-image-indicator",
|
|
134
|
+
style: {
|
|
135
|
+
backgroundImage: `url(${imgUrl})`
|
|
136
|
+
}
|
|
137
|
+
})), createElement(FlexItem, {
|
|
138
|
+
as: "span"
|
|
139
|
+
}, createElement(Truncate, {
|
|
140
|
+
numberOfLines: 1,
|
|
141
|
+
className: "block-editor-global-styles-background-panel__inspector-media-replace-title"
|
|
142
|
+
}, imgLabel), createElement(VisuallyHidden, {
|
|
143
|
+
as: "span"
|
|
144
|
+
}, filename ? sprintf( /* translators: %s: file name */
|
|
145
|
+
__('Selected image: %s'), filename) : __('No image selected')))));
|
|
146
|
+
}
|
|
147
|
+
function BackgroundImageToolsPanelItem({
|
|
148
|
+
panelId,
|
|
149
|
+
isShownByDefault,
|
|
150
|
+
onChange,
|
|
151
|
+
style,
|
|
152
|
+
inheritedValue
|
|
153
|
+
}) {
|
|
154
|
+
const mediaUpload = useSelect(select => select(blockEditorStore).getSettings().mediaUpload, []);
|
|
155
|
+
const {
|
|
156
|
+
id,
|
|
157
|
+
title,
|
|
158
|
+
url
|
|
159
|
+
} = style?.background?.backgroundImage || {
|
|
160
|
+
...inheritedValue?.background?.backgroundImage
|
|
161
|
+
};
|
|
162
|
+
const replaceContainerRef = useRef();
|
|
163
|
+
const {
|
|
164
|
+
createErrorNotice
|
|
165
|
+
} = useDispatch(noticesStore);
|
|
166
|
+
const onUploadError = message => {
|
|
167
|
+
createErrorNotice(message, {
|
|
168
|
+
type: 'snackbar'
|
|
169
|
+
});
|
|
170
|
+
};
|
|
171
|
+
const resetBackgroundImage = () => onChange(setImmutably(style, ['background', 'backgroundImage'], undefined));
|
|
172
|
+
const onSelectMedia = media => {
|
|
173
|
+
if (!media || !media.url) {
|
|
174
|
+
resetBackgroundImage();
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (isBlobURL(media.url)) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// For media selections originated from a file upload.
|
|
182
|
+
if (media.media_type && media.media_type !== IMAGE_BACKGROUND_TYPE || !media.media_type && media.type && media.type !== IMAGE_BACKGROUND_TYPE) {
|
|
183
|
+
onUploadError(__('Only images can be used as a background image.'));
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
onChange(setImmutably(style, ['background', 'backgroundImage'], {
|
|
187
|
+
url: media.url,
|
|
188
|
+
id: media.id,
|
|
189
|
+
source: 'file',
|
|
190
|
+
title: media.title || undefined
|
|
191
|
+
}));
|
|
192
|
+
};
|
|
193
|
+
const onFilesDrop = filesList => {
|
|
194
|
+
mediaUpload({
|
|
195
|
+
allowedTypes: ['image'],
|
|
196
|
+
filesList,
|
|
197
|
+
onFileChange([image]) {
|
|
198
|
+
if (isBlobURL(image?.url)) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
onSelectMedia(image);
|
|
202
|
+
},
|
|
203
|
+
onError: onUploadError
|
|
204
|
+
});
|
|
205
|
+
};
|
|
206
|
+
const resetAllFilter = useCallback(previousValue => {
|
|
207
|
+
return {
|
|
208
|
+
...previousValue,
|
|
209
|
+
style: {
|
|
210
|
+
...previousValue.style,
|
|
211
|
+
background: undefined
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
}, []);
|
|
215
|
+
const hasValue = hasBackgroundImageValue(style) || hasBackgroundImageValue(inheritedValue);
|
|
216
|
+
return createElement(ToolsPanelItem, {
|
|
217
|
+
className: "single-column",
|
|
218
|
+
hasValue: () => hasValue,
|
|
219
|
+
label: __('Background image'),
|
|
220
|
+
onDeselect: resetBackgroundImage,
|
|
221
|
+
isShownByDefault: isShownByDefault,
|
|
222
|
+
resetAllFilter: resetAllFilter,
|
|
223
|
+
panelId: panelId
|
|
224
|
+
}, createElement("div", {
|
|
225
|
+
className: "block-editor-global-styles-background-panel__inspector-media-replace-container",
|
|
226
|
+
ref: replaceContainerRef
|
|
227
|
+
}, createElement(MediaReplaceFlow, {
|
|
228
|
+
mediaId: id,
|
|
229
|
+
mediaURL: url,
|
|
230
|
+
allowedTypes: [IMAGE_BACKGROUND_TYPE],
|
|
231
|
+
accept: "image/*",
|
|
232
|
+
onSelect: onSelectMedia,
|
|
233
|
+
name: createElement(InspectorImagePreview, {
|
|
234
|
+
label: __('Background image'),
|
|
235
|
+
filename: title || __('Untitled'),
|
|
236
|
+
url: url
|
|
237
|
+
}),
|
|
238
|
+
variant: "secondary"
|
|
239
|
+
}, hasValue && createElement(MenuItem, {
|
|
240
|
+
onClick: () => {
|
|
241
|
+
const [toggleButton] = focus.tabbable.find(replaceContainerRef.current);
|
|
242
|
+
// Focus the toggle button and close the dropdown menu.
|
|
243
|
+
// This ensures similar behaviour as to selecting an image, where the dropdown is
|
|
244
|
+
// closed and focus is redirected to the dropdown toggle button.
|
|
245
|
+
toggleButton?.focus();
|
|
246
|
+
toggleButton?.click();
|
|
247
|
+
resetBackgroundImage();
|
|
248
|
+
}
|
|
249
|
+
}, __('Reset '))), createElement(DropZone, {
|
|
250
|
+
onFilesDrop: onFilesDrop,
|
|
251
|
+
label: __('Drop to upload')
|
|
252
|
+
})));
|
|
253
|
+
}
|
|
254
|
+
function BackgroundSizeToolsPanelItem({
|
|
255
|
+
panelId,
|
|
256
|
+
isShownByDefault,
|
|
257
|
+
onChange,
|
|
258
|
+
style,
|
|
259
|
+
inheritedValue,
|
|
260
|
+
defaultValues
|
|
261
|
+
}) {
|
|
262
|
+
const sizeValue = style?.background?.backgroundSize || inheritedValue?.background?.backgroundSize;
|
|
263
|
+
const repeatValue = style?.background?.backgroundRepeat || inheritedValue?.background?.backgroundRepeat;
|
|
264
|
+
const imageValue = style?.background?.backgroundImage?.url || inheritedValue?.background?.backgroundImage?.url;
|
|
265
|
+
const positionValue = style?.background?.backgroundPosition || inheritedValue?.background?.backgroundPosition;
|
|
266
|
+
|
|
267
|
+
/*
|
|
268
|
+
* An `undefined` value is replaced with any supplied
|
|
269
|
+
* default control value for the toggle group control.
|
|
270
|
+
* An empty string is treated as `auto` - this allows a user
|
|
271
|
+
* to select "Size" and then enter a custom value, with an
|
|
272
|
+
* empty value being treated as `auto`.
|
|
273
|
+
*/
|
|
274
|
+
const currentValueForToggle = sizeValue !== undefined && sizeValue !== 'cover' && sizeValue !== 'contain' || sizeValue === '' ? 'auto' : sizeValue || defaultValues?.backgroundSize;
|
|
275
|
+
|
|
276
|
+
/*
|
|
277
|
+
* If the current value is `cover` and the repeat value is `undefined`, then
|
|
278
|
+
* the toggle should be unchecked as the default state. Otherwise, the toggle
|
|
279
|
+
* should reflect the current repeat value.
|
|
280
|
+
*/
|
|
281
|
+
const repeatCheckedValue = !(repeatValue === 'no-repeat' || currentValueForToggle === 'cover' && repeatValue === undefined);
|
|
282
|
+
const hasValue = hasBackgroundSizeValue(style);
|
|
283
|
+
const resetAllFilter = useCallback(previousValue => {
|
|
284
|
+
return {
|
|
285
|
+
...previousValue,
|
|
286
|
+
style: {
|
|
287
|
+
...previousValue.style,
|
|
288
|
+
background: {
|
|
289
|
+
...previousValue.style?.background,
|
|
290
|
+
backgroundRepeat: undefined,
|
|
291
|
+
backgroundSize: undefined
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
}, []);
|
|
296
|
+
const updateBackgroundSize = next => {
|
|
297
|
+
// When switching to 'contain' toggle the repeat off.
|
|
298
|
+
let nextRepeat = repeatValue;
|
|
299
|
+
if (next === 'contain') {
|
|
300
|
+
nextRepeat = 'no-repeat';
|
|
301
|
+
}
|
|
302
|
+
if (next === 'cover') {
|
|
303
|
+
nextRepeat = undefined;
|
|
304
|
+
}
|
|
305
|
+
if ((currentValueForToggle === 'cover' || currentValueForToggle === 'contain') && next === 'auto') {
|
|
306
|
+
nextRepeat = undefined;
|
|
307
|
+
}
|
|
308
|
+
onChange(setImmutably(style, ['background'], {
|
|
309
|
+
...style?.background,
|
|
310
|
+
backgroundRepeat: nextRepeat,
|
|
311
|
+
backgroundSize: next
|
|
312
|
+
}));
|
|
313
|
+
};
|
|
314
|
+
const updateBackgroundPosition = next => {
|
|
315
|
+
onChange(setImmutably(style, ['background', 'backgroundPosition'], coordsToBackgroundPosition(next)));
|
|
316
|
+
};
|
|
317
|
+
const toggleIsRepeated = () => onChange(setImmutably(style, ['background', 'backgroundRepeat'], repeatCheckedValue === true ? 'no-repeat' : undefined));
|
|
318
|
+
const resetBackgroundSize = () => onChange(setImmutably(style, ['background'], {
|
|
319
|
+
...style?.background,
|
|
320
|
+
backgroundPosition: undefined,
|
|
321
|
+
backgroundRepeat: undefined,
|
|
322
|
+
backgroundSize: undefined
|
|
323
|
+
}));
|
|
324
|
+
return createElement(VStack, {
|
|
325
|
+
as: ToolsPanelItem,
|
|
326
|
+
spacing: 2,
|
|
327
|
+
className: "single-column",
|
|
328
|
+
hasValue: () => hasValue,
|
|
329
|
+
label: __('Size'),
|
|
330
|
+
onDeselect: resetBackgroundSize,
|
|
331
|
+
isShownByDefault: isShownByDefault,
|
|
332
|
+
resetAllFilter: resetAllFilter,
|
|
333
|
+
panelId: panelId
|
|
334
|
+
}, createElement(FocalPointPicker, {
|
|
335
|
+
__next40pxDefaultSize: true,
|
|
336
|
+
label: __('Position'),
|
|
337
|
+
url: imageValue,
|
|
338
|
+
value: backgroundPositionToCoords(positionValue),
|
|
339
|
+
onChange: updateBackgroundPosition
|
|
340
|
+
}), createElement(ToggleGroupControl, {
|
|
341
|
+
size: '__unstable-large',
|
|
342
|
+
label: __('Size'),
|
|
343
|
+
value: currentValueForToggle,
|
|
344
|
+
onChange: updateBackgroundSize,
|
|
345
|
+
isBlock: true,
|
|
346
|
+
help: backgroundSizeHelpText(sizeValue)
|
|
347
|
+
}, createElement(ToggleGroupControlOption, {
|
|
348
|
+
key: 'cover',
|
|
349
|
+
value: 'cover',
|
|
350
|
+
label: __('Cover')
|
|
351
|
+
}), createElement(ToggleGroupControlOption, {
|
|
352
|
+
key: 'contain',
|
|
353
|
+
value: 'contain',
|
|
354
|
+
label: __('Contain')
|
|
355
|
+
}), createElement(ToggleGroupControlOption, {
|
|
356
|
+
key: 'fixed',
|
|
357
|
+
value: 'auto',
|
|
358
|
+
label: __('Fixed')
|
|
359
|
+
})), sizeValue !== undefined && sizeValue !== 'cover' && sizeValue !== 'contain' ? createElement(UnitControl, {
|
|
360
|
+
size: '__unstable-large',
|
|
361
|
+
onChange: updateBackgroundSize,
|
|
362
|
+
value: sizeValue
|
|
363
|
+
}) : null, currentValueForToggle !== 'cover' && createElement(ToggleControl, {
|
|
364
|
+
label: __('Repeat'),
|
|
365
|
+
checked: repeatCheckedValue,
|
|
366
|
+
onChange: toggleIsRepeated
|
|
367
|
+
}));
|
|
368
|
+
}
|
|
369
|
+
function BackgroundToolsPanel({
|
|
370
|
+
resetAllFilter,
|
|
371
|
+
onChange,
|
|
372
|
+
value,
|
|
373
|
+
panelId,
|
|
374
|
+
children
|
|
375
|
+
}) {
|
|
376
|
+
const resetAll = () => {
|
|
377
|
+
const updatedValue = resetAllFilter(value);
|
|
378
|
+
onChange(updatedValue);
|
|
379
|
+
};
|
|
380
|
+
return createElement(VStack, {
|
|
381
|
+
as: ToolsPanel,
|
|
382
|
+
spacing: 6,
|
|
383
|
+
label: __('Background'),
|
|
384
|
+
resetAll: resetAll,
|
|
385
|
+
panelId: panelId,
|
|
386
|
+
dropdownMenuProps: TOOLSPANEL_DROPDOWNMENU_PROPS
|
|
387
|
+
}, children);
|
|
388
|
+
}
|
|
389
|
+
const DEFAULT_CONTROLS = {
|
|
390
|
+
backgroundImage: true,
|
|
391
|
+
backgroundSize: true
|
|
392
|
+
};
|
|
393
|
+
export default function BackgroundPanel({
|
|
394
|
+
as: Wrapper = BackgroundToolsPanel,
|
|
395
|
+
value,
|
|
396
|
+
onChange,
|
|
397
|
+
inheritedValue = value,
|
|
398
|
+
settings,
|
|
399
|
+
panelId,
|
|
400
|
+
defaultControls = DEFAULT_CONTROLS,
|
|
401
|
+
defaultValues = {}
|
|
402
|
+
}) {
|
|
403
|
+
const resetAllFilter = useCallback(previousValue => {
|
|
404
|
+
return {
|
|
405
|
+
...previousValue,
|
|
406
|
+
background: {}
|
|
407
|
+
};
|
|
408
|
+
}, []);
|
|
409
|
+
const shouldShowBackgroundSizeControls = settings?.background?.backgroundSize;
|
|
410
|
+
return createElement(Wrapper, {
|
|
411
|
+
resetAllFilter: resetAllFilter,
|
|
412
|
+
value: value,
|
|
413
|
+
onChange: onChange,
|
|
414
|
+
panelId: panelId
|
|
415
|
+
}, createElement(BackgroundImageToolsPanelItem, {
|
|
416
|
+
onChange: onChange,
|
|
417
|
+
panelId: panelId,
|
|
418
|
+
isShownByDefault: defaultControls.backgroundImage,
|
|
419
|
+
style: value,
|
|
420
|
+
inheritedValue: inheritedValue
|
|
421
|
+
}), shouldShowBackgroundSizeControls && createElement(BackgroundSizeToolsPanelItem, {
|
|
422
|
+
onChange: onChange,
|
|
423
|
+
panelId: panelId,
|
|
424
|
+
isShownByDefault: defaultControls.backgroundSize,
|
|
425
|
+
style: value,
|
|
426
|
+
inheritedValue: inheritedValue,
|
|
427
|
+
defaultValues: defaultValues
|
|
428
|
+
}));
|
|
429
|
+
}
|
|
430
|
+
//# sourceMappingURL=background-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["classnames","__experimentalToolsPanel","ToolsPanel","__experimentalToolsPanelItem","ToolsPanelItem","ToggleControl","__experimentalToggleGroupControl","ToggleGroupControl","__experimentalToggleGroupControlOption","ToggleGroupControlOption","__experimentalUnitControl","UnitControl","__experimentalVStack","VStack","DropZone","FlexItem","FocalPointPicker","MenuItem","VisuallyHidden","__experimentalItemGroup","ItemGroup","__experimentalHStack","HStack","__experimentalTruncate","Truncate","__","sprintf","store","noticesStore","getFilename","useCallback","Platform","useRef","useDispatch","useSelect","focus","isBlobURL","TOOLSPANEL_DROPDOWNMENU_PROPS","setImmutably","MediaReplaceFlow","blockEditorStore","IMAGE_BACKGROUND_TYPE","useHasBackgroundPanel","settings","OS","background","backgroundImage","hasBackgroundSizeValue","style","backgroundPosition","undefined","backgroundSize","hasBackgroundImageValue","id","url","backgroundSizeHelpText","value","coordsToBackgroundPosition","isNaN","x","y","backgroundPositionToCoords","split","map","v","parseFloat","InspectorImagePreview","label","filename","imgUrl","imgLabel","createElement","as","justify","className","numberOfLines","BackgroundImageToolsPanelItem","panelId","isShownByDefault","onChange","inheritedValue","mediaUpload","select","getSettings","title","replaceContainerRef","createErrorNotice","onUploadError","message","type","resetBackgroundImage","onSelectMedia","media","media_type","source","onFilesDrop","filesList","allowedTypes","onFileChange","image","onError","resetAllFilter","previousValue","hasValue","onDeselect","ref","mediaId","mediaURL","accept","onSelect","name","variant","onClick","toggleButton","tabbable","find","current","click","BackgroundSizeToolsPanelItem","defaultValues","sizeValue","repeatValue","backgroundRepeat","imageValue","positionValue","currentValueForToggle","repeatCheckedValue","updateBackgroundSize","next","nextRepeat","updateBackgroundPosition","toggleIsRepeated","resetBackgroundSize","spacing","__next40pxDefaultSize","size","isBlock","help","key","checked","BackgroundToolsPanel","children","resetAll","updatedValue","dropdownMenuProps","DEFAULT_CONTROLS","BackgroundPanel","Wrapper","defaultControls","shouldShowBackgroundSizeControls"],"sources":["@wordpress/block-editor/src/components/global-styles/background-panel.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\tToggleControl,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalVStack as VStack,\n\tDropZone,\n\tFlexItem,\n\tFocalPointPicker,\n\tMenuItem,\n\tVisuallyHidden,\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalHStack as HStack,\n\t__experimentalTruncate as Truncate,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { getFilename } from '@wordpress/url';\nimport { useCallback, Platform, useRef } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { focus } from '@wordpress/dom';\nimport { isBlobURL } from '@wordpress/blob';\n\n/**\n * Internal dependencies\n */\nimport { TOOLSPANEL_DROPDOWNMENU_PROPS } from './utils';\nimport { setImmutably } from '../../utils/object';\nimport MediaReplaceFlow from '../media-replace-flow';\nimport { store as blockEditorStore } from '../../store';\n\nconst IMAGE_BACKGROUND_TYPE = 'image';\n\n/**\n * Checks site settings to see if the background panel may be used.\n * `settings.background.backgroundSize` exists also,\n * but can only be used if settings?.background?.backgroundImage is `true`.\n *\n * @param {Object} settings Site settings\n * @return {boolean} Whether site settings has activated background panel.\n */\nexport function useHasBackgroundPanel( settings ) {\n\treturn Platform.OS === 'web' && settings?.background?.backgroundImage;\n}\n\n/**\n * Checks if there is a current value in the background size block support\n * attributes. Background size values include background size as well\n * as background position.\n *\n * @param {Object} style Style attribute.\n * @return {boolean} Whether the block has a background size value set.\n */\nexport function hasBackgroundSizeValue( style ) {\n\treturn (\n\t\tstyle?.background?.backgroundPosition !== undefined ||\n\t\tstyle?.background?.backgroundSize !== undefined\n\t);\n}\n\n/**\n * Checks if there is a current value in the background image block support\n * attributes.\n *\n * @param {Object} style Style attribute.\n * @return {boolean} Whether the block has a background image value set.\n */\nexport function hasBackgroundImageValue( style ) {\n\treturn (\n\t\t!! style?.background?.backgroundImage?.id ||\n\t\t!! style?.background?.backgroundImage?.url\n\t);\n}\n\n/**\n * Get the help text for the background size control.\n *\n * @param {string} value backgroundSize value.\n * @return {string} Translated help text.\n */\nfunction backgroundSizeHelpText( value ) {\n\tif ( value === 'cover' || value === undefined ) {\n\t\treturn __( 'Image covers the space evenly.' );\n\t}\n\tif ( value === 'contain' ) {\n\t\treturn __( 'Image is contained without distortion.' );\n\t}\n\treturn __( 'Specify a fixed width.' );\n}\n\n/**\n * Converts decimal x and y coords from FocalPointPicker to percentage-based values\n * to use as backgroundPosition value.\n *\n * @param {{x?:number, y?:number}} value FocalPointPicker coords.\n * @return {string} \t\t\t\t backgroundPosition value.\n */\nexport const coordsToBackgroundPosition = ( value ) => {\n\tif ( ! value || ( isNaN( value.x ) && isNaN( value.y ) ) ) {\n\t\treturn undefined;\n\t}\n\n\tconst x = isNaN( value.x ) ? 0.5 : value.x;\n\tconst y = isNaN( value.y ) ? 0.5 : value.y;\n\n\treturn `${ x * 100 }% ${ y * 100 }%`;\n};\n\n/**\n * Converts backgroundPosition value to x and y coords for FocalPointPicker.\n *\n * @param {string} value backgroundPosition value.\n * @return {{x?:number, y?:number}} FocalPointPicker coords.\n */\nexport const backgroundPositionToCoords = ( value ) => {\n\tif ( ! value ) {\n\t\treturn { x: undefined, y: undefined };\n\t}\n\n\tlet [ x, y ] = value.split( ' ' ).map( ( v ) => parseFloat( v ) / 100 );\n\tx = isNaN( x ) ? undefined : x;\n\ty = isNaN( y ) ? x : y;\n\n\treturn { x, y };\n};\n\nfunction InspectorImagePreview( { label, filename, url: imgUrl } ) {\n\tconst imgLabel = label || getFilename( imgUrl );\n\treturn (\n\t\t<ItemGroup as=\"span\">\n\t\t\t<HStack justify=\"flex-start\" as=\"span\">\n\t\t\t\t<span\n\t\t\t\t\tclassName={ classnames(\n\t\t\t\t\t\t'block-editor-global-styles-background-panel__inspector-image-indicator-wrapper',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'has-image': imgUrl,\n\t\t\t\t\t\t}\n\t\t\t\t\t) }\n\t\t\t\t\taria-hidden\n\t\t\t\t>\n\t\t\t\t\t{ imgUrl && (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName=\"block-editor-global-styles-background-panel__inspector-image-indicator\"\n\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\tbackgroundImage: `url(${ imgUrl })`,\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</span>\n\t\t\t\t<FlexItem as=\"span\">\n\t\t\t\t\t<Truncate\n\t\t\t\t\t\tnumberOfLines={ 1 }\n\t\t\t\t\t\tclassName=\"block-editor-global-styles-background-panel__inspector-media-replace-title\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ imgLabel }\n\t\t\t\t\t</Truncate>\n\t\t\t\t\t<VisuallyHidden as=\"span\">\n\t\t\t\t\t\t{ filename\n\t\t\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t\t\t/* translators: %s: file name */\n\t\t\t\t\t\t\t\t\t__( 'Selected image: %s' ),\n\t\t\t\t\t\t\t\t\tfilename\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t: __( 'No image selected' ) }\n\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t</FlexItem>\n\t\t\t</HStack>\n\t\t</ItemGroup>\n\t);\n}\n\nfunction BackgroundImageToolsPanelItem( {\n\tpanelId,\n\tisShownByDefault,\n\tonChange,\n\tstyle,\n\tinheritedValue,\n} ) {\n\tconst mediaUpload = useSelect(\n\t\t( select ) => select( blockEditorStore ).getSettings().mediaUpload,\n\t\t[]\n\t);\n\n\tconst { id, title, url } = style?.background?.backgroundImage || {\n\t\t...inheritedValue?.background?.backgroundImage,\n\t};\n\n\tconst replaceContainerRef = useRef();\n\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst onUploadError = ( message ) => {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t};\n\n\tconst resetBackgroundImage = () =>\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundImage' ],\n\t\t\t\tundefined\n\t\t\t)\n\t\t);\n\n\tconst onSelectMedia = ( media ) => {\n\t\tif ( ! media || ! media.url ) {\n\t\t\tresetBackgroundImage();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// For media selections originated from a file upload.\n\t\tif (\n\t\t\t( media.media_type &&\n\t\t\t\tmedia.media_type !== IMAGE_BACKGROUND_TYPE ) ||\n\t\t\t( ! media.media_type &&\n\t\t\t\tmedia.type &&\n\t\t\t\tmedia.type !== IMAGE_BACKGROUND_TYPE )\n\t\t) {\n\t\t\tonUploadError(\n\t\t\t\t__( 'Only images can be used as a background image.' )\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background', 'backgroundImage' ], {\n\t\t\t\turl: media.url,\n\t\t\t\tid: media.id,\n\t\t\t\tsource: 'file',\n\t\t\t\ttitle: media.title || undefined,\n\t\t\t} )\n\t\t);\n\t};\n\n\tconst onFilesDrop = ( filesList ) => {\n\t\tmediaUpload( {\n\t\t\tallowedTypes: [ 'image' ],\n\t\t\tfilesList,\n\t\t\tonFileChange( [ image ] ) {\n\t\t\t\tif ( isBlobURL( image?.url ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonSelectMedia( image );\n\t\t\t},\n\t\t\tonError: onUploadError,\n\t\t} );\n\t};\n\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\tstyle: {\n\t\t\t\t...previousValue.style,\n\t\t\t\tbackground: undefined,\n\t\t\t},\n\t\t};\n\t}, [] );\n\n\tconst hasValue =\n\t\thasBackgroundImageValue( style ) ||\n\t\thasBackgroundImageValue( inheritedValue );\n\n\treturn (\n\t\t<ToolsPanelItem\n\t\t\tclassName=\"single-column\"\n\t\t\thasValue={ () => hasValue }\n\t\t\tlabel={ __( 'Background image' ) }\n\t\t\tonDeselect={ resetBackgroundImage }\n\t\t\tisShownByDefault={ isShownByDefault }\n\t\t\tresetAllFilter={ resetAllFilter }\n\t\t\tpanelId={ panelId }\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName=\"block-editor-global-styles-background-panel__inspector-media-replace-container\"\n\t\t\t\tref={ replaceContainerRef }\n\t\t\t>\n\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\tmediaId={ id }\n\t\t\t\t\tmediaURL={ url }\n\t\t\t\t\tallowedTypes={ [ IMAGE_BACKGROUND_TYPE ] }\n\t\t\t\t\taccept=\"image/*\"\n\t\t\t\t\tonSelect={ onSelectMedia }\n\t\t\t\t\tname={\n\t\t\t\t\t\t<InspectorImagePreview\n\t\t\t\t\t\t\tlabel={ __( 'Background image' ) }\n\t\t\t\t\t\t\tfilename={ title || __( 'Untitled' ) }\n\t\t\t\t\t\t\turl={ url }\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t>\n\t\t\t\t\t{ hasValue && (\n\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\tconst [ toggleButton ] = focus.tabbable.find(\n\t\t\t\t\t\t\t\t\treplaceContainerRef.current\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t// Focus the toggle button and close the dropdown menu.\n\t\t\t\t\t\t\t\t// This ensures similar behaviour as to selecting an image, where the dropdown is\n\t\t\t\t\t\t\t\t// closed and focus is redirected to the dropdown toggle button.\n\t\t\t\t\t\t\t\ttoggleButton?.focus();\n\t\t\t\t\t\t\t\ttoggleButton?.click();\n\t\t\t\t\t\t\t\tresetBackgroundImage();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Reset ' ) }\n\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t) }\n\t\t\t\t</MediaReplaceFlow>\n\t\t\t\t<DropZone\n\t\t\t\t\tonFilesDrop={ onFilesDrop }\n\t\t\t\t\tlabel={ __( 'Drop to upload' ) }\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</ToolsPanelItem>\n\t);\n}\n\nfunction BackgroundSizeToolsPanelItem( {\n\tpanelId,\n\tisShownByDefault,\n\tonChange,\n\tstyle,\n\tinheritedValue,\n\tdefaultValues,\n} ) {\n\tconst sizeValue =\n\t\tstyle?.background?.backgroundSize ||\n\t\tinheritedValue?.background?.backgroundSize;\n\tconst repeatValue =\n\t\tstyle?.background?.backgroundRepeat ||\n\t\tinheritedValue?.background?.backgroundRepeat;\n\tconst imageValue =\n\t\tstyle?.background?.backgroundImage?.url ||\n\t\tinheritedValue?.background?.backgroundImage?.url;\n\tconst positionValue =\n\t\tstyle?.background?.backgroundPosition ||\n\t\tinheritedValue?.background?.backgroundPosition;\n\n\t/*\n\t * An `undefined` value is replaced with any supplied\n\t * default control value for the toggle group control.\n\t * An empty string is treated as `auto` - this allows a user\n\t * to select \"Size\" and then enter a custom value, with an\n\t * empty value being treated as `auto`.\n\t */\n\tconst currentValueForToggle =\n\t\t( sizeValue !== undefined &&\n\t\t\tsizeValue !== 'cover' &&\n\t\t\tsizeValue !== 'contain' ) ||\n\t\tsizeValue === ''\n\t\t\t? 'auto'\n\t\t\t: sizeValue || defaultValues?.backgroundSize;\n\n\t/*\n\t * If the current value is `cover` and the repeat value is `undefined`, then\n\t * the toggle should be unchecked as the default state. Otherwise, the toggle\n\t * should reflect the current repeat value.\n\t */\n\tconst repeatCheckedValue = ! (\n\t\trepeatValue === 'no-repeat' ||\n\t\t( currentValueForToggle === 'cover' && repeatValue === undefined )\n\t);\n\n\tconst hasValue = hasBackgroundSizeValue( style );\n\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\tstyle: {\n\t\t\t\t...previousValue.style,\n\t\t\t\tbackground: {\n\t\t\t\t\t...previousValue.style?.background,\n\t\t\t\t\tbackgroundRepeat: undefined,\n\t\t\t\t\tbackgroundSize: undefined,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}, [] );\n\n\tconst updateBackgroundSize = ( next ) => {\n\t\t// When switching to 'contain' toggle the repeat off.\n\t\tlet nextRepeat = repeatValue;\n\n\t\tif ( next === 'contain' ) {\n\t\t\tnextRepeat = 'no-repeat';\n\t\t}\n\n\t\tif ( next === 'cover' ) {\n\t\t\tnextRepeat = undefined;\n\t\t}\n\n\t\tif (\n\t\t\t( currentValueForToggle === 'cover' ||\n\t\t\t\tcurrentValueForToggle === 'contain' ) &&\n\t\t\tnext === 'auto'\n\t\t) {\n\t\t\tnextRepeat = undefined;\n\t\t}\n\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\t...style?.background,\n\t\t\t\tbackgroundRepeat: nextRepeat,\n\t\t\t\tbackgroundSize: next,\n\t\t\t} )\n\t\t);\n\t};\n\n\tconst updateBackgroundPosition = ( next ) => {\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundPosition' ],\n\t\t\t\tcoordsToBackgroundPosition( next )\n\t\t\t)\n\t\t);\n\t};\n\n\tconst toggleIsRepeated = () =>\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundRepeat' ],\n\t\t\t\trepeatCheckedValue === true ? 'no-repeat' : undefined\n\t\t\t)\n\t\t);\n\n\tconst resetBackgroundSize = () =>\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\t...style?.background,\n\t\t\t\tbackgroundPosition: undefined,\n\t\t\t\tbackgroundRepeat: undefined,\n\t\t\t\tbackgroundSize: undefined,\n\t\t\t} )\n\t\t);\n\n\treturn (\n\t\t<VStack\n\t\t\tas={ ToolsPanelItem }\n\t\t\tspacing={ 2 }\n\t\t\tclassName=\"single-column\"\n\t\t\thasValue={ () => hasValue }\n\t\t\tlabel={ __( 'Size' ) }\n\t\t\tonDeselect={ resetBackgroundSize }\n\t\t\tisShownByDefault={ isShownByDefault }\n\t\t\tresetAllFilter={ resetAllFilter }\n\t\t\tpanelId={ panelId }\n\t\t>\n\t\t\t<FocalPointPicker\n\t\t\t\t__next40pxDefaultSize\n\t\t\t\tlabel={ __( 'Position' ) }\n\t\t\t\turl={ imageValue }\n\t\t\t\tvalue={ backgroundPositionToCoords( positionValue ) }\n\t\t\t\tonChange={ updateBackgroundPosition }\n\t\t\t/>\n\t\t\t<ToggleGroupControl\n\t\t\t\tsize={ '__unstable-large' }\n\t\t\t\tlabel={ __( 'Size' ) }\n\t\t\t\tvalue={ currentValueForToggle }\n\t\t\t\tonChange={ updateBackgroundSize }\n\t\t\t\tisBlock\n\t\t\t\thelp={ backgroundSizeHelpText( sizeValue ) }\n\t\t\t>\n\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\tkey={ 'cover' }\n\t\t\t\t\tvalue={ 'cover' }\n\t\t\t\t\tlabel={ __( 'Cover' ) }\n\t\t\t\t/>\n\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\tkey={ 'contain' }\n\t\t\t\t\tvalue={ 'contain' }\n\t\t\t\t\tlabel={ __( 'Contain' ) }\n\t\t\t\t/>\n\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\tkey={ 'fixed' }\n\t\t\t\t\tvalue={ 'auto' }\n\t\t\t\t\tlabel={ __( 'Fixed' ) }\n\t\t\t\t/>\n\t\t\t</ToggleGroupControl>\n\t\t\t{ sizeValue !== undefined &&\n\t\t\tsizeValue !== 'cover' &&\n\t\t\tsizeValue !== 'contain' ? (\n\t\t\t\t<UnitControl\n\t\t\t\t\tsize={ '__unstable-large' }\n\t\t\t\t\tonChange={ updateBackgroundSize }\n\t\t\t\t\tvalue={ sizeValue }\n\t\t\t\t/>\n\t\t\t) : null }\n\t\t\t{ currentValueForToggle !== 'cover' && (\n\t\t\t\t<ToggleControl\n\t\t\t\t\tlabel={ __( 'Repeat' ) }\n\t\t\t\t\tchecked={ repeatCheckedValue }\n\t\t\t\t\tonChange={ toggleIsRepeated }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</VStack>\n\t);\n}\n\nfunction BackgroundToolsPanel( {\n\tresetAllFilter,\n\tonChange,\n\tvalue,\n\tpanelId,\n\tchildren,\n} ) {\n\tconst resetAll = () => {\n\t\tconst updatedValue = resetAllFilter( value );\n\t\tonChange( updatedValue );\n\t};\n\n\treturn (\n\t\t<VStack\n\t\t\tas={ ToolsPanel }\n\t\t\tspacing={ 6 }\n\t\t\tlabel={ __( 'Background' ) }\n\t\t\tresetAll={ resetAll }\n\t\t\tpanelId={ panelId }\n\t\t\tdropdownMenuProps={ TOOLSPANEL_DROPDOWNMENU_PROPS }\n\t\t>\n\t\t\t{ children }\n\t\t</VStack>\n\t);\n}\n\nconst DEFAULT_CONTROLS = {\n\tbackgroundImage: true,\n\tbackgroundSize: true,\n};\n\nexport default function BackgroundPanel( {\n\tas: Wrapper = BackgroundToolsPanel,\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tpanelId,\n\tdefaultControls = DEFAULT_CONTROLS,\n\tdefaultValues = {},\n} ) {\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\tbackground: {},\n\t\t};\n\t}, [] );\n\tconst shouldShowBackgroundSizeControls =\n\t\tsettings?.background?.backgroundSize;\n\n\treturn (\n\t\t<Wrapper\n\t\t\tresetAllFilter={ resetAllFilter }\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChange }\n\t\t\tpanelId={ panelId }\n\t\t>\n\t\t\t<BackgroundImageToolsPanelItem\n\t\t\t\tonChange={ onChange }\n\t\t\t\tpanelId={ panelId }\n\t\t\t\tisShownByDefault={ defaultControls.backgroundImage }\n\t\t\t\tstyle={ value }\n\t\t\t\tinheritedValue={ inheritedValue }\n\t\t\t/>\n\t\t\t{ shouldShowBackgroundSizeControls && (\n\t\t\t\t<BackgroundSizeToolsPanelItem\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tpanelId={ panelId }\n\t\t\t\t\tisShownByDefault={ defaultControls.backgroundSize }\n\t\t\t\t\tstyle={ value }\n\t\t\t\t\tinheritedValue={ inheritedValue }\n\t\t\t\t\tdefaultValues={ defaultValues }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</Wrapper>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -67,10 +67,11 @@ function ColorToolsPanel({
|
|
|
67
67
|
onChange(updatedValue);
|
|
68
68
|
};
|
|
69
69
|
return createElement(ToolsPanel, {
|
|
70
|
-
label: __('
|
|
70
|
+
label: __('Elements'),
|
|
71
71
|
resetAll: resetAll,
|
|
72
72
|
panelId: panelId,
|
|
73
73
|
hasInnerWrapper: true,
|
|
74
|
+
headingLevel: 3,
|
|
74
75
|
className: "color-block-support-panel",
|
|
75
76
|
__experimentalFirstVisibleItemClass: "first",
|
|
76
77
|
__experimentalLastVisibleItemClass: "last",
|