@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
|
@@ -1,56 +1,24 @@
|
|
|
1
1
|
import { createElement } from "react";
|
|
2
|
-
/**
|
|
3
|
-
* External dependencies
|
|
4
|
-
*/
|
|
5
|
-
import classnames from 'classnames';
|
|
6
|
-
|
|
7
2
|
/**
|
|
8
3
|
* WordPress dependencies
|
|
9
4
|
*/
|
|
10
|
-
import { isBlobURL } from '@wordpress/blob';
|
|
11
5
|
import { getBlockSupport } from '@wordpress/blocks';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { useDispatch, useSelect } from '@wordpress/data';
|
|
15
|
-
import { Platform, useCallback, useRef } from '@wordpress/element';
|
|
16
|
-
import { __, sprintf } from '@wordpress/i18n';
|
|
17
|
-
import { store as noticesStore } from '@wordpress/notices';
|
|
18
|
-
import { getFilename } from '@wordpress/url';
|
|
6
|
+
import { useSelect } from '@wordpress/data';
|
|
7
|
+
import { useCallback } from '@wordpress/element';
|
|
19
8
|
|
|
20
9
|
/**
|
|
21
10
|
* Internal dependencies
|
|
22
11
|
*/
|
|
23
12
|
import InspectorControls from '../components/inspector-controls';
|
|
24
|
-
import MediaReplaceFlow from '../components/media-replace-flow';
|
|
25
|
-
import { useSettings } from '../components/use-settings';
|
|
26
13
|
import { cleanEmptyObject } from './utils';
|
|
27
14
|
import { store as blockEditorStore } from '../store';
|
|
15
|
+
import { default as StylesBackgroundPanel, useHasBackgroundPanel, hasBackgroundImageValue } from '../components/global-styles/background-panel';
|
|
28
16
|
export const BACKGROUND_SUPPORT_KEY = 'background';
|
|
29
|
-
export const IMAGE_BACKGROUND_TYPE = 'image';
|
|
30
17
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
* @param {Object} style Style attribute.
|
|
36
|
-
* @return {boolean} Whether or not the block has a background image value set.
|
|
37
|
-
*/
|
|
38
|
-
export function hasBackgroundImageValue(style) {
|
|
39
|
-
const hasValue = !!style?.background?.backgroundImage?.id || !!style?.background?.backgroundImage?.url;
|
|
40
|
-
return hasValue;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Checks if there is a current value in the background size block support
|
|
45
|
-
* attributes. Background size values include background size as well
|
|
46
|
-
* as background position.
|
|
47
|
-
*
|
|
48
|
-
* @param {Object} style Style attribute.
|
|
49
|
-
* @return {boolean} Whether or not the block has a background size value set.
|
|
50
|
-
*/
|
|
51
|
-
export function hasBackgroundSizeValue(style) {
|
|
52
|
-
return style?.background?.backgroundPosition !== undefined || style?.background?.backgroundSize !== undefined;
|
|
53
|
-
}
|
|
18
|
+
// Initial control values where no block style is set.
|
|
19
|
+
const BACKGROUND_BLOCK_DEFAULT_VALUES = {
|
|
20
|
+
backgroundSize: 'cover'
|
|
21
|
+
};
|
|
54
22
|
|
|
55
23
|
/**
|
|
56
24
|
* Determine whether there is block support for background.
|
|
@@ -61,9 +29,6 @@ export function hasBackgroundSizeValue(style) {
|
|
|
61
29
|
* @return {boolean} Whether there is support.
|
|
62
30
|
*/
|
|
63
31
|
export function hasBackgroundSupport(blockName, feature = 'any') {
|
|
64
|
-
if (Platform.OS !== 'web') {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
32
|
const support = getBlockSupport(blockName, BACKGROUND_SUPPORT_KEY);
|
|
68
33
|
if (support === true) {
|
|
69
34
|
return true;
|
|
@@ -73,77 +38,44 @@ export function hasBackgroundSupport(blockName, feature = 'any') {
|
|
|
73
38
|
}
|
|
74
39
|
return !!support?.[feature];
|
|
75
40
|
}
|
|
76
|
-
function
|
|
77
|
-
|
|
78
|
-
style
|
|
79
|
-
}) {
|
|
80
|
-
if (!hasBackgroundSupport(name) || !style?.background?.backgroundImage) {
|
|
41
|
+
export function setBackgroundStyleDefaults(backgroundStyle) {
|
|
42
|
+
if (!backgroundStyle) {
|
|
81
43
|
return;
|
|
82
44
|
}
|
|
83
|
-
const backgroundImage =
|
|
84
|
-
let
|
|
45
|
+
const backgroundImage = backgroundStyle?.backgroundImage;
|
|
46
|
+
let backgroundStylesWithDefaults;
|
|
85
47
|
|
|
86
48
|
// Set block background defaults.
|
|
87
49
|
if (backgroundImage?.source === 'file' && !!backgroundImage?.url) {
|
|
88
|
-
if (!
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
backgroundSize: 'cover'
|
|
92
|
-
}
|
|
50
|
+
if (!backgroundStyle?.backgroundSize) {
|
|
51
|
+
backgroundStylesWithDefaults = {
|
|
52
|
+
backgroundSize: 'cover'
|
|
93
53
|
};
|
|
94
54
|
}
|
|
95
|
-
if ('contain' ===
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
backgroundPosition: 'center'
|
|
99
|
-
}
|
|
55
|
+
if ('contain' === backgroundStyle?.backgroundSize && !backgroundStyle?.backgroundPosition) {
|
|
56
|
+
backgroundStylesWithDefaults = {
|
|
57
|
+
backgroundPosition: 'center'
|
|
100
58
|
};
|
|
101
59
|
}
|
|
102
60
|
}
|
|
103
|
-
|
|
61
|
+
return backgroundStylesWithDefaults;
|
|
62
|
+
}
|
|
63
|
+
function useBlockProps({
|
|
64
|
+
name,
|
|
65
|
+
style
|
|
66
|
+
}) {
|
|
67
|
+
if (!hasBackgroundSupport(name) || !style?.background?.backgroundImage) {
|
|
104
68
|
return;
|
|
105
69
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
*/
|
|
116
|
-
export function resetBackgroundImage(style = {}, setAttributes) {
|
|
117
|
-
setAttributes({
|
|
118
|
-
style: cleanEmptyObject({
|
|
119
|
-
...style,
|
|
120
|
-
background: {
|
|
121
|
-
...style?.background,
|
|
122
|
-
backgroundImage: undefined
|
|
123
|
-
}
|
|
124
|
-
})
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Resets the background size block support attributes. This can be used when disabling
|
|
130
|
-
* the background size controls for a block via a `ToolsPanel`.
|
|
131
|
-
*
|
|
132
|
-
* @param {Object} style Style attribute.
|
|
133
|
-
* @param {Function} setAttributes Function to set block's attributes.
|
|
134
|
-
*/
|
|
135
|
-
function resetBackgroundSize(style = {}, setAttributes) {
|
|
136
|
-
setAttributes({
|
|
137
|
-
style: cleanEmptyObject({
|
|
138
|
-
...style,
|
|
139
|
-
background: {
|
|
140
|
-
...style?.background,
|
|
141
|
-
backgroundPosition: undefined,
|
|
142
|
-
backgroundRepeat: undefined,
|
|
143
|
-
backgroundSize: undefined
|
|
144
|
-
}
|
|
145
|
-
})
|
|
146
|
-
});
|
|
70
|
+
const backgroundStyles = setBackgroundStyleDefaults(style?.background);
|
|
71
|
+
if (!backgroundStyles) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
style: {
|
|
76
|
+
...backgroundStyles
|
|
77
|
+
}
|
|
78
|
+
};
|
|
147
79
|
}
|
|
148
80
|
|
|
149
81
|
/**
|
|
@@ -156,339 +88,55 @@ function resetBackgroundSize(style = {}, setAttributes) {
|
|
|
156
88
|
export function getBackgroundImageClasses(style) {
|
|
157
89
|
return hasBackgroundImageValue(style) ? 'has-background' : '';
|
|
158
90
|
}
|
|
159
|
-
function
|
|
160
|
-
|
|
161
|
-
filename,
|
|
162
|
-
url: imgUrl
|
|
91
|
+
function BackgroundInspectorControl({
|
|
92
|
+
children
|
|
163
93
|
}) {
|
|
164
|
-
const
|
|
165
|
-
return createElement(ItemGroup, {
|
|
166
|
-
as: "span"
|
|
167
|
-
}, createElement(HStack, {
|
|
168
|
-
justify: "flex-start",
|
|
169
|
-
as: "span"
|
|
170
|
-
}, createElement("span", {
|
|
171
|
-
className: classnames('block-editor-hooks__background__inspector-image-indicator-wrapper', {
|
|
172
|
-
'has-image': imgUrl
|
|
173
|
-
}),
|
|
174
|
-
"aria-hidden": true
|
|
175
|
-
}, imgUrl && createElement("span", {
|
|
176
|
-
className: "block-editor-hooks__background__inspector-image-indicator",
|
|
177
|
-
style: {
|
|
178
|
-
backgroundImage: `url(${imgUrl})`
|
|
179
|
-
}
|
|
180
|
-
})), createElement(FlexItem, {
|
|
181
|
-
as: "span"
|
|
182
|
-
}, createElement(Truncate, {
|
|
183
|
-
numberOfLines: 1,
|
|
184
|
-
className: "block-editor-hooks__background__inspector-media-replace-title"
|
|
185
|
-
}, imgLabel), createElement(VisuallyHidden, {
|
|
186
|
-
as: "span"
|
|
187
|
-
}, filename ? sprintf( /* translators: %s: file name */
|
|
188
|
-
__('Selected image: %s'), filename) : __('No image selected')))));
|
|
189
|
-
}
|
|
190
|
-
function BackgroundImagePanelItem({
|
|
191
|
-
clientId,
|
|
192
|
-
isShownByDefault,
|
|
193
|
-
setAttributes
|
|
194
|
-
}) {
|
|
195
|
-
const {
|
|
196
|
-
style,
|
|
197
|
-
mediaUpload
|
|
198
|
-
} = useSelect(select => {
|
|
199
|
-
const {
|
|
200
|
-
getBlockAttributes,
|
|
201
|
-
getSettings
|
|
202
|
-
} = select(blockEditorStore);
|
|
203
|
-
return {
|
|
204
|
-
style: getBlockAttributes(clientId)?.style,
|
|
205
|
-
mediaUpload: getSettings().mediaUpload
|
|
206
|
-
};
|
|
207
|
-
}, [clientId]);
|
|
208
|
-
const {
|
|
209
|
-
id,
|
|
210
|
-
title,
|
|
211
|
-
url
|
|
212
|
-
} = style?.background?.backgroundImage || {};
|
|
213
|
-
const replaceContainerRef = useRef();
|
|
214
|
-
const {
|
|
215
|
-
createErrorNotice
|
|
216
|
-
} = useDispatch(noticesStore);
|
|
217
|
-
const onUploadError = message => {
|
|
218
|
-
createErrorNotice(message, {
|
|
219
|
-
type: 'snackbar'
|
|
220
|
-
});
|
|
221
|
-
};
|
|
222
|
-
const onSelectMedia = media => {
|
|
223
|
-
if (!media || !media.url) {
|
|
224
|
-
const newStyle = {
|
|
225
|
-
...style,
|
|
226
|
-
background: {
|
|
227
|
-
...style?.background,
|
|
228
|
-
backgroundImage: undefined
|
|
229
|
-
}
|
|
230
|
-
};
|
|
231
|
-
const newAttributes = {
|
|
232
|
-
style: cleanEmptyObject(newStyle)
|
|
233
|
-
};
|
|
234
|
-
setAttributes(newAttributes);
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
if (isBlobURL(media.url)) {
|
|
238
|
-
return;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
// For media selections originated from a file upload.
|
|
242
|
-
if (media.media_type && media.media_type !== IMAGE_BACKGROUND_TYPE || !media.media_type && media.type && media.type !== IMAGE_BACKGROUND_TYPE) {
|
|
243
|
-
onUploadError(__('Only images can be used as a background image.'));
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
const newStyle = {
|
|
247
|
-
...style,
|
|
248
|
-
background: {
|
|
249
|
-
...style?.background,
|
|
250
|
-
backgroundImage: {
|
|
251
|
-
url: media.url,
|
|
252
|
-
id: media.id,
|
|
253
|
-
source: 'file',
|
|
254
|
-
title: media.title || undefined
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
};
|
|
258
|
-
const newAttributes = {
|
|
259
|
-
style: cleanEmptyObject(newStyle)
|
|
260
|
-
};
|
|
261
|
-
setAttributes(newAttributes);
|
|
262
|
-
};
|
|
263
|
-
const onFilesDrop = filesList => {
|
|
264
|
-
mediaUpload({
|
|
265
|
-
allowedTypes: ['image'],
|
|
266
|
-
filesList,
|
|
267
|
-
onFileChange([image]) {
|
|
268
|
-
if (isBlobURL(image?.url)) {
|
|
269
|
-
return;
|
|
270
|
-
}
|
|
271
|
-
onSelectMedia(image);
|
|
272
|
-
},
|
|
273
|
-
onError: onUploadError
|
|
274
|
-
});
|
|
275
|
-
};
|
|
276
|
-
const resetAllFilter = useCallback(previousValue => {
|
|
94
|
+
const resetAllFilter = useCallback(attributes => {
|
|
277
95
|
return {
|
|
278
|
-
...
|
|
96
|
+
...attributes,
|
|
279
97
|
style: {
|
|
280
|
-
...
|
|
98
|
+
...attributes.style,
|
|
281
99
|
background: undefined
|
|
282
100
|
}
|
|
283
101
|
};
|
|
284
102
|
}, []);
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
label: __('Background image'),
|
|
290
|
-
onDeselect: () => resetBackgroundImage(style, setAttributes),
|
|
291
|
-
isShownByDefault: isShownByDefault,
|
|
292
|
-
resetAllFilter: resetAllFilter,
|
|
293
|
-
panelId: clientId
|
|
294
|
-
}, createElement("div", {
|
|
295
|
-
className: "block-editor-hooks__background__inspector-media-replace-container",
|
|
296
|
-
ref: replaceContainerRef
|
|
297
|
-
}, createElement(MediaReplaceFlow, {
|
|
298
|
-
mediaId: id,
|
|
299
|
-
mediaURL: url,
|
|
300
|
-
allowedTypes: [IMAGE_BACKGROUND_TYPE],
|
|
301
|
-
accept: "image/*",
|
|
302
|
-
onSelect: onSelectMedia,
|
|
303
|
-
name: createElement(InspectorImagePreview, {
|
|
304
|
-
label: __('Background image'),
|
|
305
|
-
filename: title,
|
|
306
|
-
url: url
|
|
307
|
-
}),
|
|
308
|
-
variant: "secondary"
|
|
309
|
-
}, hasValue && createElement(MenuItem, {
|
|
310
|
-
onClick: () => {
|
|
311
|
-
const [toggleButton] = focus.tabbable.find(replaceContainerRef.current);
|
|
312
|
-
// Focus the toggle button and close the dropdown menu.
|
|
313
|
-
// This ensures similar behaviour as to selecting an image, where the dropdown is
|
|
314
|
-
// closed and focus is redirected to the dropdown toggle button.
|
|
315
|
-
toggleButton?.focus();
|
|
316
|
-
toggleButton?.click();
|
|
317
|
-
resetBackgroundImage(style, setAttributes);
|
|
318
|
-
}
|
|
319
|
-
}, __('Reset '))), createElement(DropZone, {
|
|
320
|
-
onFilesDrop: onFilesDrop,
|
|
321
|
-
label: __('Drop to upload')
|
|
322
|
-
})));
|
|
323
|
-
}
|
|
324
|
-
function backgroundSizeHelpText(value) {
|
|
325
|
-
if (value === 'cover' || value === undefined) {
|
|
326
|
-
return __('Image covers the space evenly.');
|
|
327
|
-
}
|
|
328
|
-
if (value === 'contain') {
|
|
329
|
-
return __('Image is contained without distortion.');
|
|
330
|
-
}
|
|
331
|
-
return __('Specify a fixed width.');
|
|
103
|
+
return createElement(InspectorControls, {
|
|
104
|
+
group: "background",
|
|
105
|
+
resetAllFilter: resetAllFilter
|
|
106
|
+
}, children);
|
|
332
107
|
}
|
|
333
|
-
export
|
|
334
|
-
if (!value || isNaN(value.x) && isNaN(value.y)) {
|
|
335
|
-
return undefined;
|
|
336
|
-
}
|
|
337
|
-
const x = isNaN(value.x) ? 0.5 : value.x;
|
|
338
|
-
const y = isNaN(value.y) ? 0.5 : value.y;
|
|
339
|
-
return `${x * 100}% ${y * 100}%`;
|
|
340
|
-
};
|
|
341
|
-
export const backgroundPositionToCoords = value => {
|
|
342
|
-
if (!value) {
|
|
343
|
-
return {
|
|
344
|
-
x: undefined,
|
|
345
|
-
y: undefined
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
let [x, y] = value.split(' ').map(v => parseFloat(v) / 100);
|
|
349
|
-
x = isNaN(x) ? undefined : x;
|
|
350
|
-
y = isNaN(y) ? x : y;
|
|
351
|
-
return {
|
|
352
|
-
x,
|
|
353
|
-
y
|
|
354
|
-
};
|
|
355
|
-
};
|
|
356
|
-
function BackgroundSizePanelItem({
|
|
108
|
+
export function BackgroundImagePanel({
|
|
357
109
|
clientId,
|
|
358
|
-
|
|
359
|
-
setAttributes
|
|
110
|
+
name,
|
|
111
|
+
setAttributes,
|
|
112
|
+
settings
|
|
360
113
|
}) {
|
|
361
114
|
const style = useSelect(select => select(blockEditorStore).getBlockAttributes(clientId)?.style, [clientId]);
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
// allows a user to select "Size" and then enter a custom value, with an
|
|
368
|
-
// empty value being treated as `auto`.
|
|
369
|
-
const currentValueForToggle = sizeValue !== undefined && sizeValue !== 'cover' && sizeValue !== 'contain' || sizeValue === '' ? 'auto' : sizeValue || 'cover';
|
|
370
|
-
|
|
371
|
-
// If the current value is `cover` and the repeat value is `undefined`, then
|
|
372
|
-
// the toggle should be unchecked as the default state. Otherwise, the toggle
|
|
373
|
-
// should reflect the current repeat value.
|
|
374
|
-
const repeatCheckedValue = !(repeatValue === 'no-repeat' || currentValueForToggle === 'cover' && repeatValue === undefined);
|
|
375
|
-
const hasValue = hasBackgroundSizeValue(style);
|
|
376
|
-
const resetAllFilter = useCallback(previousValue => {
|
|
377
|
-
return {
|
|
378
|
-
...previousValue,
|
|
379
|
-
style: {
|
|
380
|
-
...previousValue.style,
|
|
381
|
-
background: {
|
|
382
|
-
...previousValue.style?.background,
|
|
383
|
-
backgroundRepeat: undefined,
|
|
384
|
-
backgroundSize: undefined
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
};
|
|
388
|
-
}, []);
|
|
389
|
-
const updateBackgroundSize = next => {
|
|
390
|
-
// When switching to 'contain' toggle the repeat off.
|
|
391
|
-
let nextRepeat = repeatValue;
|
|
392
|
-
if (next === 'contain') {
|
|
393
|
-
nextRepeat = 'no-repeat';
|
|
394
|
-
}
|
|
395
|
-
if ((currentValueForToggle === 'cover' || currentValueForToggle === 'contain') && next === 'auto') {
|
|
396
|
-
nextRepeat = undefined;
|
|
397
|
-
}
|
|
398
|
-
setAttributes({
|
|
399
|
-
style: cleanEmptyObject({
|
|
400
|
-
...style,
|
|
401
|
-
background: {
|
|
402
|
-
...style?.background,
|
|
403
|
-
backgroundRepeat: nextRepeat,
|
|
404
|
-
backgroundSize: next
|
|
405
|
-
}
|
|
406
|
-
})
|
|
407
|
-
});
|
|
408
|
-
};
|
|
409
|
-
const updateBackgroundPosition = next => {
|
|
115
|
+
if (!useHasBackgroundPanel(settings) || !hasBackgroundSupport(name, 'backgroundImage')) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
const defaultControls = getBlockSupport(name, [BACKGROUND_SUPPORT_KEY, '__experimentalDefaultControls']);
|
|
119
|
+
const onChange = newStyle => {
|
|
410
120
|
setAttributes({
|
|
411
|
-
style: cleanEmptyObject(
|
|
412
|
-
...style,
|
|
413
|
-
background: {
|
|
414
|
-
...style?.background,
|
|
415
|
-
backgroundPosition: coordsToBackgroundPosition(next)
|
|
416
|
-
}
|
|
417
|
-
})
|
|
121
|
+
style: cleanEmptyObject(newStyle)
|
|
418
122
|
});
|
|
419
123
|
};
|
|
420
|
-
const
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
backgroundRepeat: repeatCheckedValue === true ? 'no-repeat' : undefined
|
|
427
|
-
}
|
|
428
|
-
})
|
|
429
|
-
});
|
|
124
|
+
const updatedSettings = {
|
|
125
|
+
...settings,
|
|
126
|
+
background: {
|
|
127
|
+
...settings.background,
|
|
128
|
+
backgroundSize: settings?.background?.backgroundSize && hasBackgroundSupport(name, 'backgroundSize')
|
|
129
|
+
}
|
|
430
130
|
};
|
|
431
|
-
return createElement(
|
|
432
|
-
as:
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
panelId: clientId
|
|
441
|
-
}, createElement(FocalPointPicker, {
|
|
442
|
-
__next40pxDefaultSize: true,
|
|
443
|
-
label: __('Position'),
|
|
444
|
-
url: style?.background?.backgroundImage?.url,
|
|
445
|
-
value: backgroundPositionToCoords(style?.background?.backgroundPosition),
|
|
446
|
-
onChange: updateBackgroundPosition
|
|
447
|
-
}), createElement(ToggleGroupControl, {
|
|
448
|
-
size: '__unstable-large',
|
|
449
|
-
label: __('Size'),
|
|
450
|
-
value: currentValueForToggle,
|
|
451
|
-
onChange: updateBackgroundSize,
|
|
452
|
-
isBlock: true,
|
|
453
|
-
help: backgroundSizeHelpText(sizeValue)
|
|
454
|
-
}, createElement(ToggleGroupControlOption, {
|
|
455
|
-
key: 'cover',
|
|
456
|
-
value: 'cover',
|
|
457
|
-
label: __('Cover')
|
|
458
|
-
}), createElement(ToggleGroupControlOption, {
|
|
459
|
-
key: 'contain',
|
|
460
|
-
value: 'contain',
|
|
461
|
-
label: __('Contain')
|
|
462
|
-
}), createElement(ToggleGroupControlOption, {
|
|
463
|
-
key: 'fixed',
|
|
464
|
-
value: 'auto',
|
|
465
|
-
label: __('Fixed')
|
|
466
|
-
})), sizeValue !== undefined && sizeValue !== 'cover' && sizeValue !== 'contain' ? createElement(UnitControl, {
|
|
467
|
-
size: '__unstable-large',
|
|
468
|
-
onChange: updateBackgroundSize,
|
|
469
|
-
value: sizeValue
|
|
470
|
-
}) : null, currentValueForToggle !== 'cover' && createElement(ToggleControl, {
|
|
471
|
-
label: __('Repeat'),
|
|
472
|
-
checked: repeatCheckedValue,
|
|
473
|
-
onChange: toggleIsRepeated
|
|
474
|
-
}));
|
|
475
|
-
}
|
|
476
|
-
export function BackgroundImagePanel(props) {
|
|
477
|
-
const [backgroundImage, backgroundSize] = useSettings('background.backgroundImage', 'background.backgroundSize');
|
|
478
|
-
if (!backgroundImage || !hasBackgroundSupport(props.name, 'backgroundImage')) {
|
|
479
|
-
return null;
|
|
480
|
-
}
|
|
481
|
-
const showBackgroundSize = !!(backgroundSize && hasBackgroundSupport(props.name, 'backgroundSize'));
|
|
482
|
-
const defaultControls = getBlockSupport(props.name, [BACKGROUND_SUPPORT_KEY, '__experimentalDefaultControls']);
|
|
483
|
-
return createElement(InspectorControls, {
|
|
484
|
-
group: "background"
|
|
485
|
-
}, createElement(BackgroundImagePanelItem, {
|
|
486
|
-
isShownByDefault: defaultControls?.backgroundImage,
|
|
487
|
-
...props
|
|
488
|
-
}), showBackgroundSize && createElement(BackgroundSizePanelItem, {
|
|
489
|
-
isShownByDefault: defaultControls?.backgroundSize,
|
|
490
|
-
...props
|
|
491
|
-
}));
|
|
131
|
+
return createElement(StylesBackgroundPanel, {
|
|
132
|
+
as: BackgroundInspectorControl,
|
|
133
|
+
panelId: clientId,
|
|
134
|
+
defaultControls: defaultControls,
|
|
135
|
+
defaultValues: BACKGROUND_BLOCK_DEFAULT_VALUES,
|
|
136
|
+
settings: updatedSettings,
|
|
137
|
+
onChange: onChange,
|
|
138
|
+
value: style
|
|
139
|
+
});
|
|
492
140
|
}
|
|
493
141
|
export default {
|
|
494
142
|
useBlockProps,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["classnames","isBlobURL","getBlockSupport","focus","ToggleControl","__experimentalToggleGroupControl","ToggleGroupControl","__experimentalToggleGroupControlOption","ToggleGroupControlOption","__experimentalToolsPanelItem","ToolsPanelItem","__experimentalUnitControl","UnitControl","__experimentalVStack","VStack","DropZone","FlexItem","FocalPointPicker","MenuItem","VisuallyHidden","__experimentalItemGroup","ItemGroup","__experimentalHStack","HStack","__experimentalTruncate","Truncate","useDispatch","useSelect","Platform","useCallback","useRef","__","sprintf","store","noticesStore","getFilename","InspectorControls","MediaReplaceFlow","useSettings","cleanEmptyObject","blockEditorStore","BACKGROUND_SUPPORT_KEY","IMAGE_BACKGROUND_TYPE","hasBackgroundImageValue","style","hasValue","background","backgroundImage","id","url","hasBackgroundSizeValue","backgroundPosition","undefined","backgroundSize","hasBackgroundSupport","blockName","feature","OS","support","backgroundRepeat","useBlockProps","name","props","source","resetBackgroundImage","setAttributes","resetBackgroundSize","getBackgroundImageClasses","InspectorImagePreview","label","filename","imgUrl","imgLabel","createElement","as","justify","className","numberOfLines","BackgroundImagePanelItem","clientId","isShownByDefault","mediaUpload","select","getBlockAttributes","getSettings","title","replaceContainerRef","createErrorNotice","onUploadError","message","type","onSelectMedia","media","newStyle","newAttributes","media_type","onFilesDrop","filesList","allowedTypes","onFileChange","image","onError","resetAllFilter","previousValue","onDeselect","panelId","ref","mediaId","mediaURL","accept","onSelect","variant","onClick","toggleButton","tabbable","find","current","click","backgroundSizeHelpText","value","coordsToBackgroundPosition","isNaN","x","y","backgroundPositionToCoords","split","map","v","parseFloat","BackgroundSizePanelItem","sizeValue","repeatValue","currentValueForToggle","repeatCheckedValue","updateBackgroundSize","next","nextRepeat","updateBackgroundPosition","toggleIsRepeated","spacing","__next40pxDefaultSize","onChange","size","isBlock","help","key","checked","BackgroundImagePanel","showBackgroundSize","defaultControls","group","attributeKeys","hasSupport"],"sources":["@wordpress/block-editor/src/hooks/background.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport { getBlockSupport } from '@wordpress/blocks';\nimport { focus } from '@wordpress/dom';\nimport {\n\tToggleControl,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\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 { useDispatch, useSelect } from '@wordpress/data';\nimport { Platform, useCallback, useRef } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { getFilename } from '@wordpress/url';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport MediaReplaceFlow from '../components/media-replace-flow';\nimport { useSettings } from '../components/use-settings';\nimport { cleanEmptyObject } from './utils';\nimport { store as blockEditorStore } from '../store';\n\nexport const BACKGROUND_SUPPORT_KEY = 'background';\nexport const IMAGE_BACKGROUND_TYPE = 'image';\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 or not the block has a background image value set.\n */\nexport function hasBackgroundImageValue( style ) {\n\tconst hasValue =\n\t\t!! style?.background?.backgroundImage?.id ||\n\t\t!! style?.background?.backgroundImage?.url;\n\n\treturn hasValue;\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 or not 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 * Determine whether there is block support for background.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Background image feature to check for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasBackgroundSupport( blockName, feature = 'any' ) {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\tconst support = getBlockSupport( blockName, BACKGROUND_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn (\n\t\t\t!! support?.backgroundImage ||\n\t\t\t!! support?.backgroundSize ||\n\t\t\t!! support?.backgroundRepeat\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\nfunction useBlockProps( { name, style } ) {\n\tif (\n\t\t! hasBackgroundSupport( name ) ||\n\t\t! style?.background?.backgroundImage\n\t) {\n\t\treturn;\n\t}\n\n\tconst backgroundImage = style?.background?.backgroundImage;\n\tlet props;\n\n\t// Set block background defaults.\n\tif ( backgroundImage?.source === 'file' && !! backgroundImage?.url ) {\n\t\tif ( ! style?.background?.backgroundSize ) {\n\t\t\tprops = {\n\t\t\t\tstyle: {\n\t\t\t\t\tbackgroundSize: 'cover',\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\t'contain' === style?.background?.backgroundSize &&\n\t\t\t! style?.background?.backgroundPosition\n\t\t) {\n\t\t\tprops = {\n\t\t\t\tstyle: {\n\t\t\t\t\tbackgroundPosition: 'center',\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n\n\tif ( ! props ) {\n\t\treturn;\n\t}\n\n\treturn props;\n}\n\n/**\n * Resets the background image block support attributes. This can be used when disabling\n * the background image controls for a block via a `ToolsPanel`.\n *\n * @param {Object} style Style attribute.\n * @param {Function} setAttributes Function to set block's attributes.\n */\nexport function resetBackgroundImage( style = {}, setAttributes ) {\n\tsetAttributes( {\n\t\tstyle: cleanEmptyObject( {\n\t\t\t...style,\n\t\t\tbackground: {\n\t\t\t\t...style?.background,\n\t\t\t\tbackgroundImage: undefined,\n\t\t\t},\n\t\t} ),\n\t} );\n}\n\n/**\n * Resets the background size block support attributes. This can be used when disabling\n * the background size controls for a block via a `ToolsPanel`.\n *\n * @param {Object} style Style attribute.\n * @param {Function} setAttributes Function to set block's attributes.\n */\nfunction resetBackgroundSize( style = {}, setAttributes ) {\n\tsetAttributes( {\n\t\tstyle: cleanEmptyObject( {\n\t\t\t...style,\n\t\t\tbackground: {\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\t} );\n}\n\n/**\n * Generates a CSS class name if an background image is set.\n *\n * @param {Object} style A block's style attribute.\n *\n * @return {string} CSS class name.\n */\nexport function getBackgroundImageClasses( style ) {\n\treturn hasBackgroundImageValue( style ) ? 'has-background' : '';\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-hooks__background__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-hooks__background__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-hooks__background__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 BackgroundImagePanelItem( {\n\tclientId,\n\tisShownByDefault,\n\tsetAttributes,\n} ) {\n\tconst { style, mediaUpload } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes, getSettings } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tstyle: getBlockAttributes( clientId )?.style,\n\t\t\t\tmediaUpload: getSettings().mediaUpload,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { id, title, url } = style?.background?.backgroundImage || {};\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 onSelectMedia = ( media ) => {\n\t\tif ( ! media || ! media.url ) {\n\t\t\tconst newStyle = {\n\t\t\t\t...style,\n\t\t\t\tbackground: {\n\t\t\t\t\t...style?.background,\n\t\t\t\t\tbackgroundImage: undefined,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst newAttributes = {\n\t\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t\t};\n\n\t\t\tsetAttributes( newAttributes );\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\tconst newStyle = {\n\t\t\t...style,\n\t\t\tbackground: {\n\t\t\t\t...style?.background,\n\t\t\t\tbackgroundImage: {\n\t\t\t\t\turl: media.url,\n\t\t\t\t\tid: media.id,\n\t\t\t\t\tsource: 'file',\n\t\t\t\t\ttitle: media.title || undefined,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tconst newAttributes = {\n\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t};\n\n\t\tsetAttributes( newAttributes );\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 = hasBackgroundImageValue( style );\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( style, setAttributes ) }\n\t\t\tisShownByDefault={ isShownByDefault }\n\t\t\tresetAllFilter={ resetAllFilter }\n\t\t\tpanelId={ clientId }\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName=\"block-editor-hooks__background__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 }\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( style, setAttributes );\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 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\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\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 BackgroundSizePanelItem( {\n\tclientId,\n\tisShownByDefault,\n\tsetAttributes,\n} ) {\n\tconst style = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId )?.style,\n\t\t[ clientId ]\n\t);\n\n\tconst sizeValue = style?.background?.backgroundSize;\n\tconst repeatValue = style?.background?.backgroundRepeat;\n\n\t// An `undefined` value is treated as `cover` by the toggle group control.\n\t// An empty string is treated as `auto` by the toggle group control. This\n\t// allows a user to select \"Size\" and then enter a custom value, with an\n\t// empty value being treated as `auto`.\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 || 'cover';\n\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\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 (\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\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( {\n\t\t\t\t...style,\n\t\t\t\tbackground: {\n\t\t\t\t\t...style?.background,\n\t\t\t\t\tbackgroundRepeat: nextRepeat,\n\t\t\t\t\tbackgroundSize: next,\n\t\t\t\t},\n\t\t\t} ),\n\t\t} );\n\t};\n\n\tconst updateBackgroundPosition = ( next ) => {\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( {\n\t\t\t\t...style,\n\t\t\t\tbackground: {\n\t\t\t\t\t...style?.background,\n\t\t\t\t\tbackgroundPosition: coordsToBackgroundPosition( next ),\n\t\t\t\t},\n\t\t\t} ),\n\t\t} );\n\t};\n\n\tconst toggleIsRepeated = () => {\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( {\n\t\t\t\t...style,\n\t\t\t\tbackground: {\n\t\t\t\t\t...style?.background,\n\t\t\t\t\tbackgroundRepeat:\n\t\t\t\t\t\trepeatCheckedValue === true ? 'no-repeat' : undefined,\n\t\t\t\t},\n\t\t\t} ),\n\t\t} );\n\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( style, setAttributes ) }\n\t\t\tisShownByDefault={ isShownByDefault }\n\t\t\tresetAllFilter={ resetAllFilter }\n\t\t\tpanelId={ clientId }\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={ style?.background?.backgroundImage?.url }\n\t\t\t\tvalue={ backgroundPositionToCoords(\n\t\t\t\t\tstyle?.background?.backgroundPosition\n\t\t\t\t) }\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\nexport function BackgroundImagePanel( props ) {\n\tconst [ backgroundImage, backgroundSize ] = useSettings(\n\t\t'background.backgroundImage',\n\t\t'background.backgroundSize'\n\t);\n\n\tif (\n\t\t! backgroundImage ||\n\t\t! hasBackgroundSupport( props.name, 'backgroundImage' )\n\t) {\n\t\treturn null;\n\t}\n\n\tconst showBackgroundSize = !! (\n\t\tbackgroundSize && hasBackgroundSupport( props.name, 'backgroundSize' )\n\t);\n\n\tconst defaultControls = getBlockSupport( props.name, [\n\t\tBACKGROUND_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\treturn (\n\t\t<InspectorControls group=\"background\">\n\t\t\t<BackgroundImagePanelItem\n\t\t\t\tisShownByDefault={ defaultControls?.backgroundImage }\n\t\t\t\t{ ...props }\n\t\t\t/>\n\t\t\t{ showBackgroundSize && (\n\t\t\t\t<BackgroundSizePanelItem\n\t\t\t\t\tisShownByDefault={ defaultControls?.backgroundSize }\n\t\t\t\t\t{ ...props }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</InspectorControls>\n\t);\n}\n\nexport default {\n\tuseBlockProps,\n\tattributeKeys: [ 'style' ],\n\thasSupport: hasBackgroundSupport,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["getBlockSupport","useSelect","useCallback","InspectorControls","cleanEmptyObject","store","blockEditorStore","default","StylesBackgroundPanel","useHasBackgroundPanel","hasBackgroundImageValue","BACKGROUND_SUPPORT_KEY","BACKGROUND_BLOCK_DEFAULT_VALUES","backgroundSize","hasBackgroundSupport","blockName","feature","support","backgroundImage","backgroundRepeat","setBackgroundStyleDefaults","backgroundStyle","backgroundStylesWithDefaults","source","url","backgroundPosition","useBlockProps","name","style","background","backgroundStyles","getBackgroundImageClasses","BackgroundInspectorControl","children","resetAllFilter","attributes","undefined","createElement","group","BackgroundImagePanel","clientId","setAttributes","settings","select","getBlockAttributes","defaultControls","onChange","newStyle","updatedSettings","as","panelId","defaultValues","value","attributeKeys","hasSupport"],"sources":["@wordpress/block-editor/src/hooks/background.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getBlockSupport } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport { cleanEmptyObject } from './utils';\nimport { store as blockEditorStore } from '../store';\nimport {\n\tdefault as StylesBackgroundPanel,\n\tuseHasBackgroundPanel,\n\thasBackgroundImageValue,\n} from '../components/global-styles/background-panel';\n\nexport const BACKGROUND_SUPPORT_KEY = 'background';\n\n// Initial control values where no block style is set.\nconst BACKGROUND_BLOCK_DEFAULT_VALUES = {\n\tbackgroundSize: 'cover',\n};\n\n/**\n * Determine whether there is block support for background.\n *\n * @param {string} blockName Block name.\n * @param {string} feature Background image feature to check for.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasBackgroundSupport( blockName, feature = 'any' ) {\n\tconst support = getBlockSupport( blockName, BACKGROUND_SUPPORT_KEY );\n\n\tif ( support === true ) {\n\t\treturn true;\n\t}\n\n\tif ( feature === 'any' ) {\n\t\treturn (\n\t\t\t!! support?.backgroundImage ||\n\t\t\t!! support?.backgroundSize ||\n\t\t\t!! support?.backgroundRepeat\n\t\t);\n\t}\n\n\treturn !! support?.[ feature ];\n}\n\nexport function setBackgroundStyleDefaults( backgroundStyle ) {\n\tif ( ! backgroundStyle ) {\n\t\treturn;\n\t}\n\n\tconst backgroundImage = backgroundStyle?.backgroundImage;\n\tlet backgroundStylesWithDefaults;\n\n\t// Set block background defaults.\n\tif ( backgroundImage?.source === 'file' && !! backgroundImage?.url ) {\n\t\tif ( ! backgroundStyle?.backgroundSize ) {\n\t\t\tbackgroundStylesWithDefaults = {\n\t\t\t\tbackgroundSize: 'cover',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\t'contain' === backgroundStyle?.backgroundSize &&\n\t\t\t! backgroundStyle?.backgroundPosition\n\t\t) {\n\t\t\tbackgroundStylesWithDefaults = {\n\t\t\t\tbackgroundPosition: 'center',\n\t\t\t};\n\t\t}\n\t}\n\n\treturn backgroundStylesWithDefaults;\n}\n\nfunction useBlockProps( { name, style } ) {\n\tif (\n\t\t! hasBackgroundSupport( name ) ||\n\t\t! style?.background?.backgroundImage\n\t) {\n\t\treturn;\n\t}\n\n\tconst backgroundStyles = setBackgroundStyleDefaults( style?.background );\n\n\tif ( ! backgroundStyles ) {\n\t\treturn;\n\t}\n\n\treturn {\n\t\tstyle: {\n\t\t\t...backgroundStyles,\n\t\t},\n\t};\n}\n\n/**\n * Generates a CSS class name if an background image is set.\n *\n * @param {Object} style A block's style attribute.\n *\n * @return {string} CSS class name.\n */\nexport function getBackgroundImageClasses( style ) {\n\treturn hasBackgroundImageValue( style ) ? 'has-background' : '';\n}\n\nfunction BackgroundInspectorControl( { children } ) {\n\tconst resetAllFilter = useCallback( ( attributes ) => {\n\t\treturn {\n\t\t\t...attributes,\n\t\t\tstyle: {\n\t\t\t\t...attributes.style,\n\t\t\t\tbackground: undefined,\n\t\t\t},\n\t\t};\n\t}, [] );\n\treturn (\n\t\t<InspectorControls group=\"background\" resetAllFilter={ resetAllFilter }>\n\t\t\t{ children }\n\t\t</InspectorControls>\n\t);\n}\n\nexport function BackgroundImagePanel( {\n\tclientId,\n\tname,\n\tsetAttributes,\n\tsettings,\n} ) {\n\tconst style = useSelect(\n\t\t( select ) =>\n\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId )?.style,\n\t\t[ clientId ]\n\t);\n\n\tif (\n\t\t! useHasBackgroundPanel( settings ) ||\n\t\t! hasBackgroundSupport( name, 'backgroundImage' )\n\t) {\n\t\treturn null;\n\t}\n\n\tconst defaultControls = getBlockSupport( name, [\n\t\tBACKGROUND_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t} );\n\t};\n\n\tconst updatedSettings = {\n\t\t...settings,\n\t\tbackground: {\n\t\t\t...settings.background,\n\t\t\tbackgroundSize:\n\t\t\t\tsettings?.background?.backgroundSize &&\n\t\t\t\thasBackgroundSupport( name, 'backgroundSize' ),\n\t\t},\n\t};\n\n\treturn (\n\t\t<StylesBackgroundPanel\n\t\t\tas={ BackgroundInspectorControl }\n\t\t\tpanelId={ clientId }\n\t\t\tdefaultControls={ defaultControls }\n\t\t\tdefaultValues={ BACKGROUND_BLOCK_DEFAULT_VALUES }\n\t\t\tsettings={ updatedSettings }\n\t\t\tonChange={ onChange }\n\t\t\tvalue={ style }\n\t\t/>\n\t);\n}\n\nexport default {\n\tuseBlockProps,\n\tattributeKeys: [ 'style' ],\n\thasSupport: hasBackgroundSupport,\n};\n"],"mappings":"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"}
|
|
@@ -38,4 +38,5 @@ export { getSpacingClassesAndStyles } from './use-spacing-props';
|
|
|
38
38
|
export { getTypographyClassesAndStyles } from './use-typography-props';
|
|
39
39
|
export { getGapCSSValue } from './gap';
|
|
40
40
|
export { useCachedTruthy } from './use-cached-truthy';
|
|
41
|
+
export { useZoomOut } from './use-zoom-out';
|
|
41
42
|
//# sourceMappingURL=index.js.map
|