@wordpress/block-editor 14.2.1-next.5368f64a9.0 → 14.3.1

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.
Files changed (144) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/background-image-control/index.js +566 -0
  3. package/build/components/background-image-control/index.js.map +1 -0
  4. package/build/components/block-card/index.js +5 -2
  5. package/build/components/block-card/index.js.map +1 -1
  6. package/build/components/block-list/use-block-props/use-zoom-out-mode-exit.js +4 -2
  7. package/build/components/block-list/use-block-props/use-zoom-out-mode-exit.js.map +1 -1
  8. package/build/components/global-styles/background-panel.js +20 -545
  9. package/build/components/global-styles/background-panel.js.map +1 -1
  10. package/build/components/global-styles/dimensions-panel.js +3 -0
  11. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  12. package/build/components/grid/grid-item-resizer.js +2 -2
  13. package/build/components/grid/grid-item-resizer.js.map +1 -1
  14. package/build/components/iframe/index.js +1 -0
  15. package/build/components/iframe/index.js.map +1 -1
  16. package/build/components/image-editor/use-save-image.js +6 -0
  17. package/build/components/image-editor/use-save-image.js.map +1 -1
  18. package/build/components/image-editor/use-transform-image.js +1 -0
  19. package/build/components/image-editor/use-transform-image.js.map +1 -1
  20. package/build/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js +2 -4
  21. package/build/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js.map +1 -1
  22. package/build/components/inserter/block-patterns-tab/index.js +2 -4
  23. package/build/components/inserter/block-patterns-tab/index.js.map +1 -1
  24. package/build/components/inserter/media-tab/media-preview.js +4 -8
  25. package/build/components/inserter/media-tab/media-preview.js.map +1 -1
  26. package/build/components/inserter/media-tab/media-tab.js +2 -4
  27. package/build/components/inserter/media-tab/media-tab.js.map +1 -1
  28. package/build/components/inserter/quick-inserter.js +2 -4
  29. package/build/components/inserter/quick-inserter.js.map +1 -1
  30. package/build/components/inserter-listbox/item.js +2 -4
  31. package/build/components/inserter-listbox/item.js.map +1 -1
  32. package/build/components/link-control/index.js +14 -14
  33. package/build/components/link-control/index.js.map +1 -1
  34. package/build/components/link-control/search-input.js +4 -2
  35. package/build/components/link-control/search-input.js.map +1 -1
  36. package/build/components/rich-text/index.js +10 -4
  37. package/build/components/rich-text/index.js.map +1 -1
  38. package/build/components/spacing-sizes-control/index.js +8 -9
  39. package/build/components/spacing-sizes-control/index.js.map +1 -1
  40. package/build/components/spacing-sizes-control/linked-button.js +35 -0
  41. package/build/components/spacing-sizes-control/linked-button.js.map +1 -0
  42. package/build/components/spacing-sizes-control/utils.js +3 -2
  43. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  44. package/build/components/url-input/index.js +7 -6
  45. package/build/components/url-input/index.js.map +1 -1
  46. package/build/hooks/block-bindings.js +65 -53
  47. package/build/hooks/block-bindings.js.map +1 -1
  48. package/build/hooks/block-hooks.js +1 -8
  49. package/build/hooks/block-hooks.js.map +1 -1
  50. package/build/store/private-selectors.js +10 -0
  51. package/build/store/private-selectors.js.map +1 -1
  52. package/build-module/components/background-image-control/index.js +556 -0
  53. package/build-module/components/background-image-control/index.js.map +1 -0
  54. package/build-module/components/block-card/index.js +6 -3
  55. package/build-module/components/block-card/index.js.map +1 -1
  56. package/build-module/components/block-list/use-block-props/use-zoom-out-mode-exit.js +4 -2
  57. package/build-module/components/block-list/use-block-props/use-zoom-out-mode-exit.js.map +1 -1
  58. package/build-module/components/global-styles/background-panel.js +22 -546
  59. package/build-module/components/global-styles/background-panel.js.map +1 -1
  60. package/build-module/components/global-styles/dimensions-panel.js +3 -0
  61. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  62. package/build-module/components/grid/grid-item-resizer.js +2 -2
  63. package/build-module/components/grid/grid-item-resizer.js.map +1 -1
  64. package/build-module/components/iframe/index.js +1 -0
  65. package/build-module/components/iframe/index.js.map +1 -1
  66. package/build-module/components/image-editor/use-save-image.js +6 -0
  67. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  68. package/build-module/components/image-editor/use-transform-image.js +1 -0
  69. package/build-module/components/image-editor/use-transform-image.js.map +1 -1
  70. package/build-module/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js +2 -4
  71. package/build-module/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js.map +1 -1
  72. package/build-module/components/inserter/block-patterns-tab/index.js +2 -4
  73. package/build-module/components/inserter/block-patterns-tab/index.js.map +1 -1
  74. package/build-module/components/inserter/media-tab/media-preview.js +4 -8
  75. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -1
  76. package/build-module/components/inserter/media-tab/media-tab.js +2 -4
  77. package/build-module/components/inserter/media-tab/media-tab.js.map +1 -1
  78. package/build-module/components/inserter/quick-inserter.js +2 -4
  79. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  80. package/build-module/components/inserter-listbox/item.js +2 -4
  81. package/build-module/components/inserter-listbox/item.js.map +1 -1
  82. package/build-module/components/link-control/index.js +15 -15
  83. package/build-module/components/link-control/index.js.map +1 -1
  84. package/build-module/components/link-control/search-input.js +4 -2
  85. package/build-module/components/link-control/search-input.js.map +1 -1
  86. package/build-module/components/rich-text/index.js +10 -4
  87. package/build-module/components/rich-text/index.js.map +1 -1
  88. package/build-module/components/spacing-sizes-control/index.js +9 -10
  89. package/build-module/components/spacing-sizes-control/index.js.map +1 -1
  90. package/build-module/components/spacing-sizes-control/linked-button.js +28 -0
  91. package/build-module/components/spacing-sizes-control/linked-button.js.map +1 -0
  92. package/build-module/components/spacing-sizes-control/utils.js +3 -2
  93. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  94. package/build-module/components/url-input/index.js +8 -7
  95. package/build-module/components/url-input/index.js.map +1 -1
  96. package/build-module/hooks/block-bindings.js +65 -53
  97. package/build-module/hooks/block-bindings.js.map +1 -1
  98. package/build-module/hooks/block-hooks.js +3 -10
  99. package/build-module/hooks/block-hooks.js.map +1 -1
  100. package/build-module/store/private-selectors.js +10 -0
  101. package/build-module/store/private-selectors.js.map +1 -1
  102. package/build-style/style-rtl.css +152 -285
  103. package/build-style/style.css +152 -285
  104. package/package.json +32 -32
  105. package/src/components/background-image-control/index.js +741 -0
  106. package/src/components/background-image-control/style.scss +170 -0
  107. package/src/components/background-image-control/test/index.js +47 -0
  108. package/src/components/block-card/index.js +12 -3
  109. package/src/components/block-list/use-block-props/use-zoom-out-mode-exit.js +2 -5
  110. package/src/components/global-styles/background-panel.js +19 -730
  111. package/src/components/global-styles/dimensions-panel.js +3 -0
  112. package/src/components/global-styles/style.scss +0 -168
  113. package/src/components/global-styles/test/background-panel.js +1 -47
  114. package/src/components/grid/grid-item-resizer.js +2 -2
  115. package/src/components/image-editor/use-save-image.js +7 -0
  116. package/src/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js +1 -2
  117. package/src/components/inserter/block-patterns-tab/index.js +1 -2
  118. package/src/components/inserter/media-tab/media-preview.js +2 -4
  119. package/src/components/inserter/media-tab/media-tab.js +1 -2
  120. package/src/components/inserter/quick-inserter.js +1 -2
  121. package/src/components/inserter/style.scss +0 -10
  122. package/src/components/inserter-listbox/item.js +1 -5
  123. package/src/components/link-control/index.js +19 -14
  124. package/src/components/link-control/search-input.js +2 -0
  125. package/src/components/link-control/style.scss +0 -22
  126. package/src/components/list-view/style.scss +1 -1
  127. package/src/components/rich-text/index.js +20 -5
  128. package/src/components/spacing-sizes-control/index.js +10 -13
  129. package/src/components/spacing-sizes-control/linked-button.js +32 -0
  130. package/src/components/spacing-sizes-control/test/utils.js +22 -30
  131. package/src/components/spacing-sizes-control/utils.js +6 -2
  132. package/src/components/url-input/index.js +5 -4
  133. package/src/components/url-input/style.scss +3 -26
  134. package/src/hooks/block-bindings.js +64 -50
  135. package/src/hooks/block-hooks.js +3 -14
  136. package/src/hooks/block-hooks.scss +0 -9
  137. package/src/store/private-selectors.js +9 -0
  138. package/src/style.scss +1 -0
  139. package/src/utils/test/transform-styles.js +1 -1
  140. package/build/components/spacing-sizes-control/sides-dropdown/index.js +0 -86
  141. package/build/components/spacing-sizes-control/sides-dropdown/index.js.map +0 -1
  142. package/build-module/components/spacing-sizes-control/sides-dropdown/index.js +0 -81
  143. package/build-module/components/spacing-sizes-control/sides-dropdown/index.js.map +0 -1
  144. package/src/components/spacing-sizes-control/sides-dropdown/index.js +0 -91
@@ -0,0 +1,556 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import clsx from 'clsx';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { 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, Dropdown, Placeholder, Spinner, __experimentalDropdownContentWrapper as DropdownContentWrapper } from '@wordpress/components';
10
+ import { __, _x, sprintf } from '@wordpress/i18n';
11
+ import { store as noticesStore } from '@wordpress/notices';
12
+ import { getFilename } from '@wordpress/url';
13
+ import { useRef, useState, useEffect, useMemo } from '@wordpress/element';
14
+ import { useDispatch, useSelect } from '@wordpress/data';
15
+ import { focus } from '@wordpress/dom';
16
+ import { isBlobURL } from '@wordpress/blob';
17
+
18
+ /**
19
+ * Internal dependencies
20
+ */
21
+ import { getResolvedValue } from '../global-styles/utils';
22
+ import { hasBackgroundImageValue } from '../global-styles/background-panel';
23
+ import { setImmutably } from '../../utils/object';
24
+ import MediaReplaceFlow from '../media-replace-flow';
25
+ import { store as blockEditorStore } from '../../store';
26
+ import { globalStylesDataKey, globalStylesLinksDataKey } from '../../store/private-keys';
27
+ import { jsx as _jsx } from "react/jsx-runtime";
28
+ import { jsxs as _jsxs } from "react/jsx-runtime";
29
+ const IMAGE_BACKGROUND_TYPE = 'image';
30
+ const BACKGROUND_POPOVER_PROPS = {
31
+ placement: 'left-start',
32
+ offset: 36,
33
+ shift: true,
34
+ className: 'block-editor-global-styles-background-panel__popover'
35
+ };
36
+ const noop = () => {};
37
+
38
+ /**
39
+ * Get the help text for the background size control.
40
+ *
41
+ * @param {string} value backgroundSize value.
42
+ * @return {string} Translated help text.
43
+ */
44
+ function backgroundSizeHelpText(value) {
45
+ if (value === 'cover' || value === undefined) {
46
+ return __('Image covers the space evenly.');
47
+ }
48
+ if (value === 'contain') {
49
+ return __('Image is contained without distortion.');
50
+ }
51
+ return __('Image has a fixed width.');
52
+ }
53
+
54
+ /**
55
+ * Converts decimal x and y coords from FocalPointPicker to percentage-based values
56
+ * to use as backgroundPosition value.
57
+ *
58
+ * @param {{x?:number, y?:number}} value FocalPointPicker coords.
59
+ * @return {string} backgroundPosition value.
60
+ */
61
+ export const coordsToBackgroundPosition = value => {
62
+ if (!value || isNaN(value.x) && isNaN(value.y)) {
63
+ return undefined;
64
+ }
65
+ const x = isNaN(value.x) ? 0.5 : value.x;
66
+ const y = isNaN(value.y) ? 0.5 : value.y;
67
+ return `${x * 100}% ${y * 100}%`;
68
+ };
69
+
70
+ /**
71
+ * Converts backgroundPosition value to x and y coords for FocalPointPicker.
72
+ *
73
+ * @param {string} value backgroundPosition value.
74
+ * @return {{x?:number, y?:number}} FocalPointPicker coords.
75
+ */
76
+ export const backgroundPositionToCoords = value => {
77
+ if (!value) {
78
+ return {
79
+ x: undefined,
80
+ y: undefined
81
+ };
82
+ }
83
+ let [x, y] = value.split(' ').map(v => parseFloat(v) / 100);
84
+ x = isNaN(x) ? undefined : x;
85
+ y = isNaN(y) ? x : y;
86
+ return {
87
+ x,
88
+ y
89
+ };
90
+ };
91
+ function InspectorImagePreviewItem({
92
+ as = 'span',
93
+ imgUrl,
94
+ toggleProps = {},
95
+ filename,
96
+ label,
97
+ className,
98
+ onToggleCallback = noop
99
+ }) {
100
+ useEffect(() => {
101
+ if (typeof toggleProps?.isOpen !== 'undefined') {
102
+ onToggleCallback(toggleProps?.isOpen);
103
+ }
104
+ }, [toggleProps?.isOpen, onToggleCallback]);
105
+ return /*#__PURE__*/_jsx(ItemGroup, {
106
+ as: as,
107
+ className: className,
108
+ ...toggleProps,
109
+ children: /*#__PURE__*/_jsxs(HStack, {
110
+ justify: "flex-start",
111
+ as: "span",
112
+ className: "block-editor-global-styles-background-panel__inspector-preview-inner",
113
+ children: [imgUrl && /*#__PURE__*/_jsx("span", {
114
+ className: "block-editor-global-styles-background-panel__inspector-image-indicator-wrapper",
115
+ "aria-hidden": true,
116
+ children: /*#__PURE__*/_jsx("span", {
117
+ className: "block-editor-global-styles-background-panel__inspector-image-indicator",
118
+ style: {
119
+ backgroundImage: `url(${imgUrl})`
120
+ }
121
+ })
122
+ }), /*#__PURE__*/_jsxs(FlexItem, {
123
+ as: "span",
124
+ style: imgUrl ? {} : {
125
+ flexGrow: 1
126
+ },
127
+ children: [/*#__PURE__*/_jsx(Truncate, {
128
+ numberOfLines: 1,
129
+ className: "block-editor-global-styles-background-panel__inspector-media-replace-title",
130
+ children: label
131
+ }), /*#__PURE__*/_jsx(VisuallyHidden, {
132
+ as: "span",
133
+ children: imgUrl ? sprintf( /* translators: %s: file name */
134
+ __('Background image: %s'), filename || label) : __('No background image selected')
135
+ })]
136
+ })]
137
+ })
138
+ });
139
+ }
140
+ function BackgroundControlsPanel({
141
+ label,
142
+ filename,
143
+ url: imgUrl,
144
+ children,
145
+ onToggle: onToggleCallback = noop,
146
+ hasImageValue
147
+ }) {
148
+ if (!hasImageValue) {
149
+ return;
150
+ }
151
+ const imgLabel = label || getFilename(imgUrl) || __('Add background image');
152
+ return /*#__PURE__*/_jsx(Dropdown, {
153
+ popoverProps: BACKGROUND_POPOVER_PROPS,
154
+ renderToggle: ({
155
+ onToggle,
156
+ isOpen
157
+ }) => {
158
+ const toggleProps = {
159
+ onClick: onToggle,
160
+ className: 'block-editor-global-styles-background-panel__dropdown-toggle',
161
+ 'aria-expanded': isOpen,
162
+ 'aria-label': __('Background size, position and repeat options.'),
163
+ isOpen
164
+ };
165
+ return /*#__PURE__*/_jsx(InspectorImagePreviewItem, {
166
+ imgUrl: imgUrl,
167
+ filename: filename,
168
+ label: imgLabel,
169
+ toggleProps: toggleProps,
170
+ as: "button",
171
+ onToggleCallback: onToggleCallback
172
+ });
173
+ },
174
+ renderContent: () => /*#__PURE__*/_jsx(DropdownContentWrapper, {
175
+ className: "block-editor-global-styles-background-panel__dropdown-content-wrapper",
176
+ paddingSize: "medium",
177
+ children: children
178
+ })
179
+ });
180
+ }
181
+ function LoadingSpinner() {
182
+ return /*#__PURE__*/_jsx(Placeholder, {
183
+ className: "block-editor-global-styles-background-panel__loading",
184
+ children: /*#__PURE__*/_jsx(Spinner, {})
185
+ });
186
+ }
187
+ function BackgroundImageControls({
188
+ onChange,
189
+ style,
190
+ inheritedValue,
191
+ onRemoveImage = noop,
192
+ onResetImage = noop,
193
+ displayInPanel,
194
+ defaultValues
195
+ }) {
196
+ const [isUploading, setIsUploading] = useState(false);
197
+ const {
198
+ getSettings
199
+ } = useSelect(blockEditorStore);
200
+ const {
201
+ id,
202
+ title,
203
+ url
204
+ } = style?.background?.backgroundImage || {
205
+ ...inheritedValue?.background?.backgroundImage
206
+ };
207
+ const replaceContainerRef = useRef();
208
+ const {
209
+ createErrorNotice
210
+ } = useDispatch(noticesStore);
211
+ const onUploadError = message => {
212
+ createErrorNotice(message, {
213
+ type: 'snackbar'
214
+ });
215
+ setIsUploading(false);
216
+ };
217
+ const resetBackgroundImage = () => onChange(setImmutably(style, ['background', 'backgroundImage'], undefined));
218
+ const onSelectMedia = media => {
219
+ if (!media || !media.url) {
220
+ resetBackgroundImage();
221
+ setIsUploading(false);
222
+ return;
223
+ }
224
+ if (isBlobURL(media.url)) {
225
+ setIsUploading(true);
226
+ return;
227
+ }
228
+
229
+ // For media selections originated from a file upload.
230
+ if (media.media_type && media.media_type !== IMAGE_BACKGROUND_TYPE || !media.media_type && media.type && media.type !== IMAGE_BACKGROUND_TYPE) {
231
+ onUploadError(__('Only images can be used as a background image.'));
232
+ return;
233
+ }
234
+ const sizeValue = style?.background?.backgroundSize || defaultValues?.backgroundSize;
235
+ const positionValue = style?.background?.backgroundPosition;
236
+ onChange(setImmutably(style, ['background'], {
237
+ ...style?.background,
238
+ backgroundImage: {
239
+ url: media.url,
240
+ id: media.id,
241
+ source: 'file',
242
+ title: media.title || undefined
243
+ },
244
+ backgroundPosition:
245
+ /*
246
+ * A background image uploaded and set in the editor receives a default background position of '50% 0',
247
+ * when the background image size is the equivalent of "Tile".
248
+ * This is to increase the chance that the image's focus point is visible.
249
+ * This is in-editor only to assist with the user experience.
250
+ */
251
+ !positionValue && ('auto' === sizeValue || !sizeValue) ? '50% 0' : positionValue,
252
+ backgroundSize: sizeValue
253
+ }));
254
+ setIsUploading(false);
255
+ };
256
+
257
+ // Drag and drop callback, restricting image to one.
258
+ const onFilesDrop = filesList => {
259
+ if (filesList?.length > 1) {
260
+ onUploadError(__('Only one image can be used as a background image.'));
261
+ return;
262
+ }
263
+ getSettings().mediaUpload({
264
+ allowedTypes: [IMAGE_BACKGROUND_TYPE],
265
+ filesList,
266
+ onFileChange([image]) {
267
+ onSelectMedia(image);
268
+ },
269
+ onError: onUploadError
270
+ });
271
+ };
272
+ const hasValue = hasBackgroundImageValue(style);
273
+ const closeAndFocus = () => {
274
+ const [toggleButton] = focus.tabbable.find(replaceContainerRef.current);
275
+ // Focus the toggle button and close the dropdown menu.
276
+ // This ensures similar behaviour as to selecting an image, where the dropdown is
277
+ // closed and focus is redirected to the dropdown toggle button.
278
+ toggleButton?.focus();
279
+ toggleButton?.click();
280
+ };
281
+ const onRemove = () => onChange(setImmutably(style, ['background'], {
282
+ backgroundImage: 'none'
283
+ }));
284
+ const canRemove = !hasValue && hasBackgroundImageValue(inheritedValue);
285
+ const imgLabel = title || getFilename(url) || __('Add background image');
286
+ return /*#__PURE__*/_jsxs("div", {
287
+ ref: replaceContainerRef,
288
+ className: "block-editor-global-styles-background-panel__image-tools-panel-item",
289
+ children: [isUploading && /*#__PURE__*/_jsx(LoadingSpinner, {}), /*#__PURE__*/_jsx(MediaReplaceFlow, {
290
+ mediaId: id,
291
+ mediaURL: url,
292
+ allowedTypes: [IMAGE_BACKGROUND_TYPE],
293
+ accept: "image/*",
294
+ onSelect: onSelectMedia,
295
+ popoverProps: {
296
+ className: clsx({
297
+ 'block-editor-global-styles-background-panel__media-replace-popover': displayInPanel
298
+ })
299
+ },
300
+ name: /*#__PURE__*/_jsx(InspectorImagePreviewItem, {
301
+ className: "block-editor-global-styles-background-panel__image-preview",
302
+ imgUrl: url,
303
+ filename: title,
304
+ label: imgLabel
305
+ }),
306
+ variant: "secondary",
307
+ onError: onUploadError,
308
+ onReset: () => {
309
+ closeAndFocus();
310
+ onResetImage();
311
+ },
312
+ children: canRemove && /*#__PURE__*/_jsx(MenuItem, {
313
+ onClick: () => {
314
+ closeAndFocus();
315
+ onRemove();
316
+ onRemoveImage();
317
+ },
318
+ children: __('Remove')
319
+ })
320
+ }), /*#__PURE__*/_jsx(DropZone, {
321
+ onFilesDrop: onFilesDrop,
322
+ label: __('Drop to upload')
323
+ })]
324
+ });
325
+ }
326
+ function BackgroundSizeControls({
327
+ onChange,
328
+ style,
329
+ inheritedValue,
330
+ defaultValues
331
+ }) {
332
+ const sizeValue = style?.background?.backgroundSize || inheritedValue?.background?.backgroundSize;
333
+ const repeatValue = style?.background?.backgroundRepeat || inheritedValue?.background?.backgroundRepeat;
334
+ const imageValue = style?.background?.backgroundImage?.url || inheritedValue?.background?.backgroundImage?.url;
335
+ const isUploadedImage = style?.background?.backgroundImage?.id;
336
+ const positionValue = style?.background?.backgroundPosition || inheritedValue?.background?.backgroundPosition;
337
+ const attachmentValue = style?.background?.backgroundAttachment || inheritedValue?.background?.backgroundAttachment;
338
+
339
+ /*
340
+ * Set default values for uploaded images.
341
+ * The default values are passed by the consumer.
342
+ * Block-level controls may have different defaults to root-level controls.
343
+ * A falsy value is treated by default as `auto` (Tile).
344
+ */
345
+ let currentValueForToggle = !sizeValue && isUploadedImage ? defaultValues?.backgroundSize : sizeValue || 'auto';
346
+ /*
347
+ * The incoming value could be a value + unit, e.g. '20px'.
348
+ * In this case set the value to 'tile'.
349
+ */
350
+ currentValueForToggle = !['cover', 'contain', 'auto'].includes(currentValueForToggle) ? 'auto' : currentValueForToggle;
351
+ /*
352
+ * If the current value is `cover` and the repeat value is `undefined`, then
353
+ * the toggle should be unchecked as the default state. Otherwise, the toggle
354
+ * should reflect the current repeat value.
355
+ */
356
+ const repeatCheckedValue = !(repeatValue === 'no-repeat' || currentValueForToggle === 'cover' && repeatValue === undefined);
357
+ const updateBackgroundSize = next => {
358
+ // When switching to 'contain' toggle the repeat off.
359
+ let nextRepeat = repeatValue;
360
+ let nextPosition = positionValue;
361
+ if (next === 'contain') {
362
+ nextRepeat = 'no-repeat';
363
+ nextPosition = undefined;
364
+ }
365
+ if (next === 'cover') {
366
+ nextRepeat = undefined;
367
+ nextPosition = undefined;
368
+ }
369
+ if ((currentValueForToggle === 'cover' || currentValueForToggle === 'contain') && next === 'auto') {
370
+ nextRepeat = undefined;
371
+ /*
372
+ * A background image uploaded and set in the editor (an image with a record id),
373
+ * receives a default background position of '50% 0',
374
+ * when the toggle switches to "Tile". This is to increase the chance that
375
+ * the image's focus point is visible.
376
+ * This is in-editor only to assist with the user experience.
377
+ */
378
+ if (!!style?.background?.backgroundImage?.id) {
379
+ nextPosition = '50% 0';
380
+ }
381
+ }
382
+
383
+ /*
384
+ * Next will be null when the input is cleared,
385
+ * in which case the value should be 'auto'.
386
+ */
387
+ if (!next && currentValueForToggle === 'auto') {
388
+ next = 'auto';
389
+ }
390
+ onChange(setImmutably(style, ['background'], {
391
+ ...style?.background,
392
+ backgroundPosition: nextPosition,
393
+ backgroundRepeat: nextRepeat,
394
+ backgroundSize: next
395
+ }));
396
+ };
397
+ const updateBackgroundPosition = next => {
398
+ onChange(setImmutably(style, ['background', 'backgroundPosition'], coordsToBackgroundPosition(next)));
399
+ };
400
+ const toggleIsRepeated = () => onChange(setImmutably(style, ['background', 'backgroundRepeat'], repeatCheckedValue === true ? 'no-repeat' : 'repeat'));
401
+ const toggleScrollWithPage = () => onChange(setImmutably(style, ['background', 'backgroundAttachment'], attachmentValue === 'fixed' ? 'scroll' : 'fixed'));
402
+
403
+ // Set a default background position for non-site-wide, uploaded images with a size of 'contain'.
404
+ const backgroundPositionValue = !positionValue && isUploadedImage && 'contain' === sizeValue ? defaultValues?.backgroundPosition : positionValue;
405
+ return /*#__PURE__*/_jsxs(VStack, {
406
+ spacing: 3,
407
+ className: "single-column",
408
+ children: [/*#__PURE__*/_jsx(FocalPointPicker, {
409
+ __nextHasNoMarginBottom: true,
410
+ label: __('Focal point'),
411
+ url: imageValue,
412
+ value: backgroundPositionToCoords(backgroundPositionValue),
413
+ onChange: updateBackgroundPosition
414
+ }), /*#__PURE__*/_jsx(ToggleControl, {
415
+ __nextHasNoMarginBottom: true,
416
+ label: __('Fixed background'),
417
+ checked: attachmentValue === 'fixed',
418
+ onChange: toggleScrollWithPage
419
+ }), /*#__PURE__*/_jsxs(ToggleGroupControl, {
420
+ __nextHasNoMarginBottom: true,
421
+ size: "__unstable-large",
422
+ label: __('Size'),
423
+ value: currentValueForToggle,
424
+ onChange: updateBackgroundSize,
425
+ isBlock: true,
426
+ help: backgroundSizeHelpText(sizeValue || defaultValues?.backgroundSize),
427
+ children: [/*#__PURE__*/_jsx(ToggleGroupControlOption, {
428
+ value: "cover",
429
+ label: _x('Cover', 'Size option for background image control')
430
+ }, "cover"), /*#__PURE__*/_jsx(ToggleGroupControlOption, {
431
+ value: "contain",
432
+ label: _x('Contain', 'Size option for background image control')
433
+ }, "contain"), /*#__PURE__*/_jsx(ToggleGroupControlOption, {
434
+ value: "auto",
435
+ label: _x('Tile', 'Size option for background image control')
436
+ }, "tile")]
437
+ }), /*#__PURE__*/_jsxs(HStack, {
438
+ justify: "flex-start",
439
+ spacing: 2,
440
+ as: "span",
441
+ children: [/*#__PURE__*/_jsx(UnitControl, {
442
+ "aria-label": __('Background image width'),
443
+ onChange: updateBackgroundSize,
444
+ value: sizeValue,
445
+ size: "__unstable-large",
446
+ __unstableInputWidth: "100px",
447
+ min: 0,
448
+ placeholder: __('Auto'),
449
+ disabled: currentValueForToggle !== 'auto' || currentValueForToggle === undefined
450
+ }), /*#__PURE__*/_jsx(ToggleControl, {
451
+ __nextHasNoMarginBottom: true,
452
+ label: __('Repeat'),
453
+ checked: repeatCheckedValue,
454
+ onChange: toggleIsRepeated,
455
+ disabled: currentValueForToggle === 'cover'
456
+ })]
457
+ })]
458
+ });
459
+ }
460
+ export default function BackgroundImagePanel({
461
+ value,
462
+ onChange,
463
+ inheritedValue = value,
464
+ settings,
465
+ defaultValues = {}
466
+ }) {
467
+ /*
468
+ * Resolve any inherited "ref" pointers.
469
+ * Should the block editor need resolved, inherited values
470
+ * across all controls, this could be abstracted into a hook,
471
+ * e.g., useResolveGlobalStyle
472
+ */
473
+ const {
474
+ globalStyles,
475
+ _links
476
+ } = useSelect(select => {
477
+ const {
478
+ getSettings
479
+ } = select(blockEditorStore);
480
+ const _settings = getSettings();
481
+ return {
482
+ globalStyles: _settings[globalStylesDataKey],
483
+ _links: _settings[globalStylesLinksDataKey]
484
+ };
485
+ }, []);
486
+ const resolvedInheritedValue = useMemo(() => {
487
+ const resolvedValues = {
488
+ background: {}
489
+ };
490
+ if (!inheritedValue?.background) {
491
+ return inheritedValue;
492
+ }
493
+ Object.entries(inheritedValue?.background).forEach(([key, backgroundValue]) => {
494
+ resolvedValues.background[key] = getResolvedValue(backgroundValue, {
495
+ styles: globalStyles,
496
+ _links
497
+ });
498
+ });
499
+ return resolvedValues;
500
+ }, [globalStyles, _links, inheritedValue]);
501
+ const resetBackground = () => onChange(setImmutably(value, ['background'], {}));
502
+ const {
503
+ title,
504
+ url
505
+ } = value?.background?.backgroundImage || {
506
+ ...resolvedInheritedValue?.background?.backgroundImage
507
+ };
508
+ const hasImageValue = hasBackgroundImageValue(value) || hasBackgroundImageValue(resolvedInheritedValue);
509
+ const imageValue = value?.background?.backgroundImage || inheritedValue?.background?.backgroundImage;
510
+ const shouldShowBackgroundImageControls = hasImageValue && 'none' !== imageValue && (settings?.background?.backgroundSize || settings?.background?.backgroundPosition || settings?.background?.backgroundRepeat);
511
+ const [isDropDownOpen, setIsDropDownOpen] = useState(false);
512
+ return /*#__PURE__*/_jsx("div", {
513
+ className: clsx('block-editor-global-styles-background-panel__inspector-media-replace-container', {
514
+ 'is-open': isDropDownOpen
515
+ }),
516
+ children: shouldShowBackgroundImageControls ? /*#__PURE__*/_jsx(BackgroundControlsPanel, {
517
+ label: title,
518
+ filename: title,
519
+ url: url,
520
+ onToggle: setIsDropDownOpen,
521
+ hasImageValue: hasImageValue,
522
+ children: /*#__PURE__*/_jsxs(VStack, {
523
+ spacing: 3,
524
+ className: "single-column",
525
+ children: [/*#__PURE__*/_jsx(BackgroundImageControls, {
526
+ onChange: onChange,
527
+ style: value,
528
+ inheritedValue: resolvedInheritedValue,
529
+ displayInPanel: true,
530
+ onResetImage: () => {
531
+ setIsDropDownOpen(false);
532
+ resetBackground();
533
+ },
534
+ onRemoveImage: () => setIsDropDownOpen(false),
535
+ defaultValues: defaultValues
536
+ }), /*#__PURE__*/_jsx(BackgroundSizeControls, {
537
+ onChange: onChange,
538
+ style: value,
539
+ defaultValues: defaultValues,
540
+ inheritedValue: resolvedInheritedValue
541
+ })]
542
+ })
543
+ }) : /*#__PURE__*/_jsx(BackgroundImageControls, {
544
+ onChange: onChange,
545
+ style: value,
546
+ inheritedValue: resolvedInheritedValue,
547
+ defaultValues: defaultValues,
548
+ onResetImage: () => {
549
+ setIsDropDownOpen(false);
550
+ resetBackground();
551
+ },
552
+ onRemoveImage: () => setIsDropDownOpen(false)
553
+ })
554
+ });
555
+ }
556
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["clsx","ToggleControl","__experimentalToggleGroupControl","ToggleGroupControl","__experimentalToggleGroupControlOption","ToggleGroupControlOption","__experimentalUnitControl","UnitControl","__experimentalVStack","VStack","DropZone","FlexItem","FocalPointPicker","MenuItem","VisuallyHidden","__experimentalItemGroup","ItemGroup","__experimentalHStack","HStack","__experimentalTruncate","Truncate","Dropdown","Placeholder","Spinner","__experimentalDropdownContentWrapper","DropdownContentWrapper","__","_x","sprintf","store","noticesStore","getFilename","useRef","useState","useEffect","useMemo","useDispatch","useSelect","focus","isBlobURL","getResolvedValue","hasBackgroundImageValue","setImmutably","MediaReplaceFlow","blockEditorStore","globalStylesDataKey","globalStylesLinksDataKey","jsx","_jsx","jsxs","_jsxs","IMAGE_BACKGROUND_TYPE","BACKGROUND_POPOVER_PROPS","placement","offset","shift","className","noop","backgroundSizeHelpText","value","undefined","coordsToBackgroundPosition","isNaN","x","y","backgroundPositionToCoords","split","map","v","parseFloat","InspectorImagePreviewItem","as","imgUrl","toggleProps","filename","label","onToggleCallback","isOpen","children","justify","style","backgroundImage","flexGrow","numberOfLines","BackgroundControlsPanel","url","onToggle","hasImageValue","imgLabel","popoverProps","renderToggle","onClick","renderContent","paddingSize","LoadingSpinner","BackgroundImageControls","onChange","inheritedValue","onRemoveImage","onResetImage","displayInPanel","defaultValues","isUploading","setIsUploading","getSettings","id","title","background","replaceContainerRef","createErrorNotice","onUploadError","message","type","resetBackgroundImage","onSelectMedia","media","media_type","sizeValue","backgroundSize","positionValue","backgroundPosition","source","onFilesDrop","filesList","length","mediaUpload","allowedTypes","onFileChange","image","onError","hasValue","closeAndFocus","toggleButton","tabbable","find","current","click","onRemove","canRemove","ref","mediaId","mediaURL","accept","onSelect","name","variant","onReset","BackgroundSizeControls","repeatValue","backgroundRepeat","imageValue","isUploadedImage","attachmentValue","backgroundAttachment","currentValueForToggle","includes","repeatCheckedValue","updateBackgroundSize","next","nextRepeat","nextPosition","updateBackgroundPosition","toggleIsRepeated","toggleScrollWithPage","backgroundPositionValue","spacing","__nextHasNoMarginBottom","checked","size","isBlock","help","__unstableInputWidth","min","placeholder","disabled","BackgroundImagePanel","settings","globalStyles","_links","select","_settings","resolvedInheritedValue","resolvedValues","Object","entries","forEach","key","backgroundValue","styles","resetBackground","shouldShowBackgroundImageControls","isDropDownOpen","setIsDropDownOpen"],"sources":["@wordpress/block-editor/src/components/background-image-control/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\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\tDropdown,\n\tPlaceholder,\n\tSpinner,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n} from '@wordpress/components';\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { getFilename } from '@wordpress/url';\nimport { useRef, useState, useEffect, useMemo } 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 { getResolvedValue } from '../global-styles/utils';\nimport { hasBackgroundImageValue } from '../global-styles/background-panel';\nimport { setImmutably } from '../../utils/object';\nimport MediaReplaceFlow from '../media-replace-flow';\nimport { store as blockEditorStore } from '../../store';\n\nimport {\n\tglobalStylesDataKey,\n\tglobalStylesLinksDataKey,\n} from '../../store/private-keys';\n\nconst IMAGE_BACKGROUND_TYPE = 'image';\n\nconst BACKGROUND_POPOVER_PROPS = {\n\tplacement: 'left-start',\n\toffset: 36,\n\tshift: true,\n\tclassName: 'block-editor-global-styles-background-panel__popover',\n};\nconst noop = () => {};\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 __( 'Image has 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 InspectorImagePreviewItem( {\n\tas = 'span',\n\timgUrl,\n\ttoggleProps = {},\n\tfilename,\n\tlabel,\n\tclassName,\n\tonToggleCallback = noop,\n} ) {\n\tuseEffect( () => {\n\t\tif ( typeof toggleProps?.isOpen !== 'undefined' ) {\n\t\t\tonToggleCallback( toggleProps?.isOpen );\n\t\t}\n\t}, [ toggleProps?.isOpen, onToggleCallback ] );\n\treturn (\n\t\t<ItemGroup as={ as } className={ className } { ...toggleProps }>\n\t\t\t<HStack\n\t\t\t\tjustify=\"flex-start\"\n\t\t\t\tas=\"span\"\n\t\t\t\tclassName=\"block-editor-global-styles-background-panel__inspector-preview-inner\"\n\t\t\t>\n\t\t\t\t{ imgUrl && (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"block-editor-global-styles-background-panel__inspector-image-indicator-wrapper\"\n\t\t\t\t\t\taria-hidden\n\t\t\t\t\t>\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</span>\n\t\t\t\t) }\n\t\t\t\t<FlexItem as=\"span\" style={ imgUrl ? {} : { flexGrow: 1 } }>\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{ label }\n\t\t\t\t\t</Truncate>\n\t\t\t\t\t<VisuallyHidden as=\"span\">\n\t\t\t\t\t\t{ imgUrl\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__( 'Background image: %s' ),\n\t\t\t\t\t\t\t\t\tfilename || label\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t: __( 'No background 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 BackgroundControlsPanel( {\n\tlabel,\n\tfilename,\n\turl: imgUrl,\n\tchildren,\n\tonToggle: onToggleCallback = noop,\n\thasImageValue,\n} ) {\n\tif ( ! hasImageValue ) {\n\t\treturn;\n\t}\n\n\tconst imgLabel =\n\t\tlabel || getFilename( imgUrl ) || __( 'Add background image' );\n\n\treturn (\n\t\t<Dropdown\n\t\t\tpopoverProps={ BACKGROUND_POPOVER_PROPS }\n\t\t\trenderToggle={ ( { onToggle, isOpen } ) => {\n\t\t\t\tconst toggleProps = {\n\t\t\t\t\tonClick: onToggle,\n\t\t\t\t\tclassName:\n\t\t\t\t\t\t'block-editor-global-styles-background-panel__dropdown-toggle',\n\t\t\t\t\t'aria-expanded': isOpen,\n\t\t\t\t\t'aria-label': __(\n\t\t\t\t\t\t'Background size, position and repeat options.'\n\t\t\t\t\t),\n\t\t\t\t\tisOpen,\n\t\t\t\t};\n\t\t\t\treturn (\n\t\t\t\t\t<InspectorImagePreviewItem\n\t\t\t\t\t\timgUrl={ imgUrl }\n\t\t\t\t\t\tfilename={ filename }\n\t\t\t\t\t\tlabel={ imgLabel }\n\t\t\t\t\t\ttoggleProps={ toggleProps }\n\t\t\t\t\t\tas=\"button\"\n\t\t\t\t\t\tonToggleCallback={ onToggleCallback }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} }\n\t\t\trenderContent={ () => (\n\t\t\t\t<DropdownContentWrapper\n\t\t\t\t\tclassName=\"block-editor-global-styles-background-panel__dropdown-content-wrapper\"\n\t\t\t\t\tpaddingSize=\"medium\"\n\t\t\t\t>\n\t\t\t\t\t{ children }\n\t\t\t\t</DropdownContentWrapper>\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nfunction LoadingSpinner() {\n\treturn (\n\t\t<Placeholder className=\"block-editor-global-styles-background-panel__loading\">\n\t\t\t<Spinner />\n\t\t</Placeholder>\n\t);\n}\n\nfunction BackgroundImageControls( {\n\tonChange,\n\tstyle,\n\tinheritedValue,\n\tonRemoveImage = noop,\n\tonResetImage = noop,\n\tdisplayInPanel,\n\tdefaultValues,\n} ) {\n\tconst [ isUploading, setIsUploading ] = useState( false );\n\tconst { getSettings } = useSelect( blockEditorStore );\n\n\tconst { id, title, url } = style?.background?.backgroundImage || {\n\t\t...inheritedValue?.background?.backgroundImage,\n\t};\n\tconst replaceContainerRef = useRef();\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst onUploadError = ( message ) => {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\tsetIsUploading( false );\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\tsetIsUploading( false );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isBlobURL( media.url ) ) {\n\t\t\tsetIsUploading( true );\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 sizeValue =\n\t\t\tstyle?.background?.backgroundSize || defaultValues?.backgroundSize;\n\t\tconst positionValue = style?.background?.backgroundPosition;\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\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\tbackgroundPosition:\n\t\t\t\t\t/*\n\t\t\t\t\t * A background image uploaded and set in the editor receives a default background position of '50% 0',\n\t\t\t\t\t * when the background image size is the equivalent of \"Tile\".\n\t\t\t\t\t * This is to increase the chance that the image's focus point is visible.\n\t\t\t\t\t * This is in-editor only to assist with the user experience.\n\t\t\t\t\t */\n\t\t\t\t\t! positionValue && ( 'auto' === sizeValue || ! sizeValue )\n\t\t\t\t\t\t? '50% 0'\n\t\t\t\t\t\t: positionValue,\n\t\t\t\tbackgroundSize: sizeValue,\n\t\t\t} )\n\t\t);\n\t\tsetIsUploading( false );\n\t};\n\n\t// Drag and drop callback, restricting image to one.\n\tconst onFilesDrop = ( filesList ) => {\n\t\tif ( filesList?.length > 1 ) {\n\t\t\tonUploadError(\n\t\t\t\t__( 'Only one image can be used as a background image.' )\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tgetSettings().mediaUpload( {\n\t\t\tallowedTypes: [ IMAGE_BACKGROUND_TYPE ],\n\t\t\tfilesList,\n\t\t\tonFileChange( [ image ] ) {\n\t\t\t\tonSelectMedia( image );\n\t\t\t},\n\t\t\tonError: onUploadError,\n\t\t} );\n\t};\n\n\tconst hasValue = hasBackgroundImageValue( style );\n\n\tconst closeAndFocus = () => {\n\t\tconst [ toggleButton ] = focus.tabbable.find(\n\t\t\treplaceContainerRef.current\n\t\t);\n\t\t// Focus the toggle button and close the dropdown menu.\n\t\t// This ensures similar behaviour as to selecting an image, where the dropdown is\n\t\t// closed and focus is redirected to the dropdown toggle button.\n\t\ttoggleButton?.focus();\n\t\ttoggleButton?.click();\n\t};\n\n\tconst onRemove = () =>\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\tbackgroundImage: 'none',\n\t\t\t} )\n\t\t);\n\tconst canRemove = ! hasValue && hasBackgroundImageValue( inheritedValue );\n\tconst imgLabel =\n\t\ttitle || getFilename( url ) || __( 'Add background image' );\n\n\treturn (\n\t\t<div\n\t\t\tref={ replaceContainerRef }\n\t\t\tclassName=\"block-editor-global-styles-background-panel__image-tools-panel-item\"\n\t\t>\n\t\t\t{ isUploading && <LoadingSpinner /> }\n\t\t\t<MediaReplaceFlow\n\t\t\t\tmediaId={ id }\n\t\t\t\tmediaURL={ url }\n\t\t\t\tallowedTypes={ [ IMAGE_BACKGROUND_TYPE ] }\n\t\t\t\taccept=\"image/*\"\n\t\t\t\tonSelect={ onSelectMedia }\n\t\t\t\tpopoverProps={ {\n\t\t\t\t\tclassName: clsx( {\n\t\t\t\t\t\t'block-editor-global-styles-background-panel__media-replace-popover':\n\t\t\t\t\t\t\tdisplayInPanel,\n\t\t\t\t\t} ),\n\t\t\t\t} }\n\t\t\t\tname={\n\t\t\t\t\t<InspectorImagePreviewItem\n\t\t\t\t\t\tclassName=\"block-editor-global-styles-background-panel__image-preview\"\n\t\t\t\t\t\timgUrl={ url }\n\t\t\t\t\t\tfilename={ title }\n\t\t\t\t\t\tlabel={ imgLabel }\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tonError={ onUploadError }\n\t\t\t\tonReset={ () => {\n\t\t\t\t\tcloseAndFocus();\n\t\t\t\t\tonResetImage();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ canRemove && (\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tcloseAndFocus();\n\t\t\t\t\t\t\tonRemove();\n\t\t\t\t\t\t\tonRemoveImage();\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Remove' ) }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t) }\n\t\t\t</MediaReplaceFlow>\n\t\t\t<DropZone\n\t\t\t\tonFilesDrop={ onFilesDrop }\n\t\t\t\tlabel={ __( 'Drop to upload' ) }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction BackgroundSizeControls( {\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 isUploadedImage = style?.background?.backgroundImage?.id;\n\tconst positionValue =\n\t\tstyle?.background?.backgroundPosition ||\n\t\tinheritedValue?.background?.backgroundPosition;\n\tconst attachmentValue =\n\t\tstyle?.background?.backgroundAttachment ||\n\t\tinheritedValue?.background?.backgroundAttachment;\n\n\t/*\n\t * Set default values for uploaded images.\n\t * The default values are passed by the consumer.\n\t * Block-level controls may have different defaults to root-level controls.\n\t * A falsy value is treated by default as `auto` (Tile).\n\t */\n\tlet currentValueForToggle =\n\t\t! sizeValue && isUploadedImage\n\t\t\t? defaultValues?.backgroundSize\n\t\t\t: sizeValue || 'auto';\n\t/*\n\t * The incoming value could be a value + unit, e.g. '20px'.\n\t * In this case set the value to 'tile'.\n\t */\n\tcurrentValueForToggle = ! [ 'cover', 'contain', 'auto' ].includes(\n\t\tcurrentValueForToggle\n\t)\n\t\t? 'auto'\n\t\t: currentValueForToggle;\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 updateBackgroundSize = ( next ) => {\n\t\t// When switching to 'contain' toggle the repeat off.\n\t\tlet nextRepeat = repeatValue;\n\t\tlet nextPosition = positionValue;\n\n\t\tif ( next === 'contain' ) {\n\t\t\tnextRepeat = 'no-repeat';\n\t\t\tnextPosition = undefined;\n\t\t}\n\n\t\tif ( next === 'cover' ) {\n\t\t\tnextRepeat = undefined;\n\t\t\tnextPosition = 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\t/*\n\t\t\t * A background image uploaded and set in the editor (an image with a record id),\n\t\t\t * receives a default background position of '50% 0',\n\t\t\t * when the toggle switches to \"Tile\". This is to increase the chance that\n\t\t\t * the image's focus point is visible.\n\t\t\t * This is in-editor only to assist with the user experience.\n\t\t\t */\n\t\t\tif ( !! style?.background?.backgroundImage?.id ) {\n\t\t\t\tnextPosition = '50% 0';\n\t\t\t}\n\t\t}\n\n\t\t/*\n\t\t * Next will be null when the input is cleared,\n\t\t * in which case the value should be 'auto'.\n\t\t */\n\t\tif ( ! next && currentValueForToggle === 'auto' ) {\n\t\t\tnext = 'auto';\n\t\t}\n\n\t\tonChange(\n\t\t\tsetImmutably( style, [ 'background' ], {\n\t\t\t\t...style?.background,\n\t\t\t\tbackgroundPosition: nextPosition,\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' : 'repeat'\n\t\t\t)\n\t\t);\n\n\tconst toggleScrollWithPage = () =>\n\t\tonChange(\n\t\t\tsetImmutably(\n\t\t\t\tstyle,\n\t\t\t\t[ 'background', 'backgroundAttachment' ],\n\t\t\t\tattachmentValue === 'fixed' ? 'scroll' : 'fixed'\n\t\t\t)\n\t\t);\n\n\t// Set a default background position for non-site-wide, uploaded images with a size of 'contain'.\n\tconst backgroundPositionValue =\n\t\t! positionValue && isUploadedImage && 'contain' === sizeValue\n\t\t\t? defaultValues?.backgroundPosition\n\t\t\t: positionValue;\n\n\treturn (\n\t\t<VStack spacing={ 3 } className=\"single-column\">\n\t\t\t<FocalPointPicker\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\tlabel={ __( 'Focal point' ) }\n\t\t\t\turl={ imageValue }\n\t\t\t\tvalue={ backgroundPositionToCoords( backgroundPositionValue ) }\n\t\t\t\tonChange={ updateBackgroundPosition }\n\t\t\t/>\n\t\t\t<ToggleControl\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\tlabel={ __( 'Fixed background' ) }\n\t\t\t\tchecked={ attachmentValue === 'fixed' }\n\t\t\t\tonChange={ toggleScrollWithPage }\n\t\t\t/>\n\t\t\t<ToggleGroupControl\n\t\t\t\t__nextHasNoMarginBottom\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(\n\t\t\t\t\tsizeValue || defaultValues?.backgroundSize\n\t\t\t\t) }\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={ _x(\n\t\t\t\t\t\t'Cover',\n\t\t\t\t\t\t'Size option for background image control'\n\t\t\t\t\t) }\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={ _x(\n\t\t\t\t\t\t'Contain',\n\t\t\t\t\t\t'Size option for background image control'\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t\t<ToggleGroupControlOption\n\t\t\t\t\tkey=\"tile\"\n\t\t\t\t\tvalue=\"auto\"\n\t\t\t\t\tlabel={ _x(\n\t\t\t\t\t\t'Tile',\n\t\t\t\t\t\t'Size option for background image control'\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t</ToggleGroupControl>\n\t\t\t<HStack justify=\"flex-start\" spacing={ 2 } as=\"span\">\n\t\t\t\t<UnitControl\n\t\t\t\t\taria-label={ __( 'Background image width' ) }\n\t\t\t\t\tonChange={ updateBackgroundSize }\n\t\t\t\t\tvalue={ sizeValue }\n\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\t__unstableInputWidth=\"100px\"\n\t\t\t\t\tmin={ 0 }\n\t\t\t\t\tplaceholder={ __( 'Auto' ) }\n\t\t\t\t\tdisabled={\n\t\t\t\t\t\tcurrentValueForToggle !== 'auto' ||\n\t\t\t\t\t\tcurrentValueForToggle === undefined\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<ToggleControl\n\t\t\t\t\t__nextHasNoMarginBottom\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\tdisabled={ currentValueForToggle === 'cover' }\n\t\t\t\t/>\n\t\t\t</HStack>\n\t\t</VStack>\n\t);\n}\n\nexport default function BackgroundImagePanel( {\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tdefaultValues = {},\n} ) {\n\t/*\n\t * Resolve any inherited \"ref\" pointers.\n\t * Should the block editor need resolved, inherited values\n\t * across all controls, this could be abstracted into a hook,\n\t * e.g., useResolveGlobalStyle\n\t */\n\tconst { globalStyles, _links } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst _settings = getSettings();\n\t\treturn {\n\t\t\tglobalStyles: _settings[ globalStylesDataKey ],\n\t\t\t_links: _settings[ globalStylesLinksDataKey ],\n\t\t};\n\t}, [] );\n\tconst resolvedInheritedValue = useMemo( () => {\n\t\tconst resolvedValues = {\n\t\t\tbackground: {},\n\t\t};\n\n\t\tif ( ! inheritedValue?.background ) {\n\t\t\treturn inheritedValue;\n\t\t}\n\n\t\tObject.entries( inheritedValue?.background ).forEach(\n\t\t\t( [ key, backgroundValue ] ) => {\n\t\t\t\tresolvedValues.background[ key ] = getResolvedValue(\n\t\t\t\t\tbackgroundValue,\n\t\t\t\t\t{\n\t\t\t\t\t\tstyles: globalStyles,\n\t\t\t\t\t\t_links,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t\treturn resolvedValues;\n\t}, [ globalStyles, _links, inheritedValue ] );\n\n\tconst resetBackground = () =>\n\t\tonChange( setImmutably( value, [ 'background' ], {} ) );\n\n\tconst { title, url } = value?.background?.backgroundImage || {\n\t\t...resolvedInheritedValue?.background?.backgroundImage,\n\t};\n\tconst hasImageValue =\n\t\thasBackgroundImageValue( value ) ||\n\t\thasBackgroundImageValue( resolvedInheritedValue );\n\n\tconst imageValue =\n\t\tvalue?.background?.backgroundImage ||\n\t\tinheritedValue?.background?.backgroundImage;\n\n\tconst shouldShowBackgroundImageControls =\n\t\thasImageValue &&\n\t\t'none' !== imageValue &&\n\t\t( settings?.background?.backgroundSize ||\n\t\t\tsettings?.background?.backgroundPosition ||\n\t\t\tsettings?.background?.backgroundRepeat );\n\n\tconst [ isDropDownOpen, setIsDropDownOpen ] = useState( false );\n\n\treturn (\n\t\t<div\n\t\t\tclassName={ clsx(\n\t\t\t\t'block-editor-global-styles-background-panel__inspector-media-replace-container',\n\t\t\t\t{\n\t\t\t\t\t'is-open': isDropDownOpen,\n\t\t\t\t}\n\t\t\t) }\n\t\t>\n\t\t\t{ shouldShowBackgroundImageControls ? (\n\t\t\t\t<BackgroundControlsPanel\n\t\t\t\t\tlabel={ title }\n\t\t\t\t\tfilename={ title }\n\t\t\t\t\turl={ url }\n\t\t\t\t\tonToggle={ setIsDropDownOpen }\n\t\t\t\t\thasImageValue={ hasImageValue }\n\t\t\t\t>\n\t\t\t\t\t<VStack spacing={ 3 } className=\"single-column\">\n\t\t\t\t\t\t<BackgroundImageControls\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\tstyle={ value }\n\t\t\t\t\t\t\tinheritedValue={ resolvedInheritedValue }\n\t\t\t\t\t\t\tdisplayInPanel\n\t\t\t\t\t\t\tonResetImage={ () => {\n\t\t\t\t\t\t\t\tsetIsDropDownOpen( false );\n\t\t\t\t\t\t\t\tresetBackground();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonRemoveImage={ () => setIsDropDownOpen( false ) }\n\t\t\t\t\t\t\tdefaultValues={ defaultValues }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BackgroundSizeControls\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\tstyle={ value }\n\t\t\t\t\t\t\tdefaultValues={ defaultValues }\n\t\t\t\t\t\t\tinheritedValue={ resolvedInheritedValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</VStack>\n\t\t\t\t</BackgroundControlsPanel>\n\t\t\t) : (\n\t\t\t\t<BackgroundImageControls\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tstyle={ value }\n\t\t\t\t\tinheritedValue={ resolvedInheritedValue }\n\t\t\t\t\tdefaultValues={ defaultValues }\n\t\t\t\t\tonResetImage={ () => {\n\t\t\t\t\t\tsetIsDropDownOpen( false );\n\t\t\t\t\t\tresetBackground();\n\t\t\t\t\t} }\n\t\t\t\t\tonRemoveImage={ () => setIsDropDownOpen( false ) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}