@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.
Files changed (273) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +4 -0
  3. package/build/components/block-list/block.js +11 -3
  4. package/build/components/block-list/block.js.map +1 -1
  5. package/build/components/block-mover/button.js +4 -1
  6. package/build/components/block-mover/button.js.map +1 -1
  7. package/build/components/block-mover/index.js +5 -1
  8. package/build/components/block-mover/index.js.map +1 -1
  9. package/build/components/block-patterns-list/index.js +4 -1
  10. package/build/components/block-patterns-list/index.js.map +1 -1
  11. package/build/components/block-settings-menu/block-settings-dropdown.js +7 -3
  12. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  13. package/build/components/block-switcher/index.js +4 -3
  14. package/build/components/block-switcher/index.js.map +1 -1
  15. package/build/components/block-toolbar/index.js +5 -4
  16. package/build/components/block-toolbar/index.js.map +1 -1
  17. package/build/components/block-toolbar/shuffle.js +18 -9
  18. package/build/components/block-toolbar/shuffle.js.map +1 -1
  19. package/build/components/block-tools/block-selection-button.js +48 -8
  20. package/build/components/block-tools/block-selection-button.js.map +1 -1
  21. package/build/components/block-tools/index.js +14 -2
  22. package/build/components/block-tools/index.js.map +1 -1
  23. package/build/components/global-styles/advanced-panel.js +9 -2
  24. package/build/components/global-styles/advanced-panel.js.map +1 -1
  25. package/build/components/global-styles/background-panel.js +444 -0
  26. package/build/components/global-styles/background-panel.js.map +1 -0
  27. package/build/components/global-styles/color-panel.js +2 -1
  28. package/build/components/global-styles/color-panel.js.map +1 -1
  29. package/build/components/global-styles/get-global-styles-changes.js +3 -0
  30. package/build/components/global-styles/get-global-styles-changes.js.map +1 -1
  31. package/build/components/global-styles/hooks.js +1 -1
  32. package/build/components/global-styles/hooks.js.map +1 -1
  33. package/build/components/global-styles/index.js +13 -0
  34. package/build/components/global-styles/index.js.map +1 -1
  35. package/build/components/global-styles/use-global-styles-output.js +15 -14
  36. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  37. package/build/components/global-styles/utils.js +2 -1
  38. package/build/components/global-styles/utils.js.map +1 -1
  39. package/build/components/iframe/index.js +9 -4
  40. package/build/components/iframe/index.js.map +1 -1
  41. package/build/components/inserter/block-patterns-tab/index.js.map +1 -1
  42. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +5 -0
  43. package/build/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -1
  44. package/build/components/inserter/library.js +2 -0
  45. package/build/components/inserter/library.js.map +1 -1
  46. package/build/components/inserter/menu.js +8 -2
  47. package/build/components/inserter/menu.js.map +1 -1
  48. package/build/components/inserter/search-items.js +36 -15
  49. package/build/components/inserter/search-items.js.map +1 -1
  50. package/build/components/keyboard-shortcuts/index.js +11 -0
  51. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  52. package/build/components/list-view/block-select-button.js +16 -0
  53. package/build/components/list-view/block-select-button.js.map +1 -1
  54. package/build/components/list-view/block.js +1 -1
  55. package/build/components/list-view/block.js.map +1 -1
  56. package/build/components/list-view/index.js +17 -2
  57. package/build/components/list-view/index.js.map +1 -1
  58. package/build/components/list-view/use-list-view-collapse-items.js +47 -0
  59. package/build/components/list-view/use-list-view-collapse-items.js.map +1 -0
  60. package/build/components/rich-text/index.js +14 -11
  61. package/build/components/rich-text/index.js.map +1 -1
  62. package/build/components/rich-text/index.native.js +17 -11
  63. package/build/components/rich-text/index.native.js.map +1 -1
  64. package/build/components/rich-text/native/get-format-colors.native.js +1 -1
  65. package/build/components/rich-text/native/get-format-colors.native.js.map +1 -1
  66. package/build/components/rich-text/native/index.native.js +2 -2
  67. package/build/components/rich-text/native/index.native.js.map +1 -1
  68. package/build/components/rich-text/with-deprecations.js +0 -3
  69. package/build/components/rich-text/with-deprecations.js.map +1 -1
  70. package/build/components/url-popover/image-url-input-ui.js +50 -36
  71. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  72. package/build/components/use-block-display-information/index.js +4 -6
  73. package/build/components/use-block-display-information/index.js.map +1 -1
  74. package/build/hooks/anchor.js +2 -2
  75. package/build/hooks/anchor.js.map +1 -1
  76. package/build/hooks/background.js +70 -424
  77. package/build/hooks/background.js.map +1 -1
  78. package/build/hooks/index.js +7 -0
  79. package/build/hooks/index.js.map +1 -1
  80. package/build/hooks/use-zoom-out.js +47 -0
  81. package/build/hooks/use-zoom-out.js.map +1 -0
  82. package/build/index.js +7 -0
  83. package/build/index.js.map +1 -1
  84. package/build/private-apis.js +6 -1
  85. package/build/private-apis.js.map +1 -1
  86. package/build/private-apis.native.js +3 -1
  87. package/build/private-apis.native.js.map +1 -1
  88. package/build/store/private-actions.js +13 -0
  89. package/build/store/private-actions.js.map +1 -1
  90. package/build/store/private-keys.js +2 -1
  91. package/build/store/private-keys.js.map +1 -1
  92. package/build/store/private-selectors.js +24 -3
  93. package/build/store/private-selectors.js.map +1 -1
  94. package/build/store/reducer.js +22 -0
  95. package/build/store/reducer.js.map +1 -1
  96. package/build/store/selectors.js +34 -32
  97. package/build/store/selectors.js.map +1 -1
  98. package/build/store/utils.js +7 -1
  99. package/build/store/utils.js.map +1 -1
  100. package/build/utils/transform-styles/index.js +2 -1
  101. package/build/utils/transform-styles/index.js.map +1 -1
  102. package/build-module/components/block-list/block.js +11 -3
  103. package/build-module/components/block-list/block.js.map +1 -1
  104. package/build-module/components/block-mover/button.js +4 -1
  105. package/build-module/components/block-mover/button.js.map +1 -1
  106. package/build-module/components/block-mover/index.js +5 -1
  107. package/build-module/components/block-mover/index.js.map +1 -1
  108. package/build-module/components/block-patterns-list/index.js +4 -1
  109. package/build-module/components/block-patterns-list/index.js.map +1 -1
  110. package/build-module/components/block-settings-menu/block-settings-dropdown.js +7 -3
  111. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  112. package/build-module/components/block-switcher/index.js +4 -3
  113. package/build-module/components/block-switcher/index.js.map +1 -1
  114. package/build-module/components/block-toolbar/index.js +5 -4
  115. package/build-module/components/block-toolbar/index.js.map +1 -1
  116. package/build-module/components/block-toolbar/shuffle.js +18 -9
  117. package/build-module/components/block-toolbar/shuffle.js.map +1 -1
  118. package/build-module/components/block-tools/block-selection-button.js +50 -10
  119. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  120. package/build-module/components/block-tools/index.js +14 -2
  121. package/build-module/components/block-tools/index.js.map +1 -1
  122. package/build-module/components/global-styles/advanced-panel.js +9 -2
  123. package/build-module/components/global-styles/advanced-panel.js.map +1 -1
  124. package/build-module/components/global-styles/background-panel.js +430 -0
  125. package/build-module/components/global-styles/background-panel.js.map +1 -0
  126. package/build-module/components/global-styles/color-panel.js +2 -1
  127. package/build-module/components/global-styles/color-panel.js.map +1 -1
  128. package/build-module/components/global-styles/get-global-styles-changes.js +3 -0
  129. package/build-module/components/global-styles/get-global-styles-changes.js.map +1 -1
  130. package/build-module/components/global-styles/hooks.js +1 -1
  131. package/build-module/components/global-styles/hooks.js.map +1 -1
  132. package/build-module/components/global-styles/index.js +1 -0
  133. package/build-module/components/global-styles/index.js.map +1 -1
  134. package/build-module/components/global-styles/use-global-styles-output.js +16 -15
  135. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  136. package/build-module/components/global-styles/utils.js +1 -0
  137. package/build-module/components/global-styles/utils.js.map +1 -1
  138. package/build-module/components/iframe/index.js +9 -4
  139. package/build-module/components/iframe/index.js.map +1 -1
  140. package/build-module/components/inserter/block-patterns-tab/index.js.map +1 -1
  141. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +5 -0
  142. package/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js.map +1 -1
  143. package/build-module/components/inserter/library.js +2 -0
  144. package/build-module/components/inserter/library.js.map +1 -1
  145. package/build-module/components/inserter/menu.js +8 -2
  146. package/build-module/components/inserter/menu.js.map +1 -1
  147. package/build-module/components/inserter/search-items.js +33 -15
  148. package/build-module/components/inserter/search-items.js.map +1 -1
  149. package/build-module/components/keyboard-shortcuts/index.js +11 -0
  150. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  151. package/build-module/components/list-view/block-select-button.js +16 -0
  152. package/build-module/components/list-view/block-select-button.js.map +1 -1
  153. package/build-module/components/list-view/block.js +1 -1
  154. package/build-module/components/list-view/block.js.map +1 -1
  155. package/build-module/components/list-view/index.js +17 -2
  156. package/build-module/components/list-view/index.js.map +1 -1
  157. package/build-module/components/list-view/use-list-view-collapse-items.js +40 -0
  158. package/build-module/components/list-view/use-list-view-collapse-items.js.map +1 -0
  159. package/build-module/components/rich-text/index.js +15 -12
  160. package/build-module/components/rich-text/index.js.map +1 -1
  161. package/build-module/components/rich-text/index.native.js +16 -11
  162. package/build-module/components/rich-text/index.native.js.map +1 -1
  163. package/build-module/components/rich-text/native/get-format-colors.native.js +1 -1
  164. package/build-module/components/rich-text/native/get-format-colors.native.js.map +1 -1
  165. package/build-module/components/rich-text/native/index.native.js +2 -2
  166. package/build-module/components/rich-text/native/index.native.js.map +1 -1
  167. package/build-module/components/rich-text/with-deprecations.js +0 -3
  168. package/build-module/components/rich-text/with-deprecations.js.map +1 -1
  169. package/build-module/components/url-popover/image-url-input-ui.js +50 -36
  170. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  171. package/build-module/components/use-block-display-information/index.js +5 -7
  172. package/build-module/components/use-block-display-information/index.js.map +1 -1
  173. package/build-module/hooks/anchor.js +2 -2
  174. package/build-module/hooks/anchor.js.map +1 -1
  175. package/build-module/hooks/background.js +67 -419
  176. package/build-module/hooks/background.js.map +1 -1
  177. package/build-module/hooks/index.js +1 -0
  178. package/build-module/hooks/index.js.map +1 -1
  179. package/build-module/hooks/use-zoom-out.js +41 -0
  180. package/build-module/hooks/use-zoom-out.js.map +1 -0
  181. package/build-module/index.js +1 -1
  182. package/build-module/index.js.map +1 -1
  183. package/build-module/private-apis.js +7 -2
  184. package/build-module/private-apis.js.map +1 -1
  185. package/build-module/private-apis.native.js +3 -1
  186. package/build-module/private-apis.native.js.map +1 -1
  187. package/build-module/store/private-actions.js +12 -0
  188. package/build-module/store/private-actions.js.map +1 -1
  189. package/build-module/store/private-keys.js +1 -0
  190. package/build-module/store/private-keys.js.map +1 -1
  191. package/build-module/store/private-selectors.js +22 -4
  192. package/build-module/store/private-selectors.js.map +1 -1
  193. package/build-module/store/reducer.js +21 -0
  194. package/build-module/store/reducer.js.map +1 -1
  195. package/build-module/store/selectors.js +35 -33
  196. package/build-module/store/selectors.js.map +1 -1
  197. package/build-module/store/utils.js +6 -1
  198. package/build-module/store/utils.js.map +1 -1
  199. package/build-module/utils/transform-styles/index.js +2 -1
  200. package/build-module/utils/transform-styles/index.js.map +1 -1
  201. package/build-style/content-rtl.css +4 -1
  202. package/build-style/content.css +4 -1
  203. package/build-style/style-rtl.css +84 -79
  204. package/build-style/style.css +84 -79
  205. package/package.json +31 -31
  206. package/src/components/block-list/block.js +19 -3
  207. package/src/components/block-mover/button.js +4 -1
  208. package/src/components/block-mover/index.js +8 -1
  209. package/src/components/block-patterns-list/index.js +22 -17
  210. package/src/components/block-preview/style.scss +28 -0
  211. package/src/components/block-settings-menu/block-settings-dropdown.js +8 -2
  212. package/src/components/block-switcher/index.js +5 -3
  213. package/src/components/block-switcher/style.scss +1 -1
  214. package/src/components/block-toolbar/index.js +22 -19
  215. package/src/components/block-toolbar/shuffle.js +19 -13
  216. package/src/components/block-toolbar/style.scss +1 -1
  217. package/src/components/block-tools/block-selection-button.js +66 -9
  218. package/src/components/block-tools/index.js +18 -1
  219. package/src/components/button-block-appender/content.scss +5 -1
  220. package/src/components/default-block-appender/content.scss +2 -2
  221. package/src/components/global-styles/advanced-panel.js +8 -2
  222. package/src/components/global-styles/background-panel.js +591 -0
  223. package/src/components/global-styles/color-panel.js +2 -1
  224. package/src/components/global-styles/get-global-styles-changes.js +3 -0
  225. package/src/components/global-styles/hooks.js +1 -0
  226. package/src/components/global-styles/index.js +4 -0
  227. package/src/components/global-styles/style.scss +78 -1
  228. package/src/{hooks/test/background.js → components/global-styles/test/background-panel.js} +36 -1
  229. package/src/components/global-styles/test/get-global-styles-changes.js +22 -3
  230. package/src/components/global-styles/test/use-global-styles-output.js +9 -9
  231. package/src/components/global-styles/use-global-styles-output.js +27 -16
  232. package/src/components/global-styles/utils.js +1 -0
  233. package/src/components/iframe/index.js +19 -9
  234. package/src/components/inserter/block-patterns-tab/index.js +1 -0
  235. package/src/components/inserter/block-patterns-tab/pattern-category-preview-panel.js +5 -0
  236. package/src/components/inserter/library.js +4 -0
  237. package/src/components/inserter/menu.js +8 -1
  238. package/src/components/inserter/search-items.js +37 -15
  239. package/src/components/inserter/style.scss +6 -12
  240. package/src/components/keyboard-shortcuts/index.js +11 -0
  241. package/src/components/list-view/block-select-button.js +13 -1
  242. package/src/components/list-view/block.js +1 -1
  243. package/src/components/list-view/index.js +18 -1
  244. package/src/components/list-view/style.scss +4 -4
  245. package/src/components/list-view/use-list-view-collapse-items.js +33 -0
  246. package/src/components/rich-text/index.js +30 -13
  247. package/src/components/rich-text/index.native.js +14 -11
  248. package/src/components/rich-text/native/get-format-colors.native.js +1 -1
  249. package/src/components/rich-text/native/index.native.js +2 -2
  250. package/src/components/rich-text/with-deprecations.js +0 -3
  251. package/src/components/url-popover/image-url-input-ui.js +68 -51
  252. package/src/components/use-block-display-information/index.js +8 -10
  253. package/src/hooks/anchor.js +11 -9
  254. package/src/hooks/background.js +77 -538
  255. package/src/hooks/index.js +1 -0
  256. package/src/hooks/use-zoom-out.js +36 -0
  257. package/src/index.js +1 -0
  258. package/src/private-apis.js +13 -1
  259. package/src/private-apis.native.js +2 -0
  260. package/src/store/private-actions.js +12 -0
  261. package/src/store/private-keys.js +1 -0
  262. package/src/store/private-selectors.js +54 -27
  263. package/src/store/reducer.js +22 -0
  264. package/src/store/selectors.js +195 -180
  265. package/src/store/test/private-actions.js +10 -0
  266. package/src/store/test/private-selectors.js +13 -0
  267. package/src/store/test/reducer.js +26 -0
  268. package/src/store/test/selectors.js +90 -199
  269. package/src/store/utils.js +13 -0
  270. package/src/style.scss +0 -2
  271. package/src/utils/transform-styles/index.js +2 -1
  272. package/src/hooks/anchor.scss +0 -4
  273. 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 { focus } from '@wordpress/dom';
13
- import { ToggleControl, __experimentalToggleGroupControl as ToggleGroupControl, __experimentalToggleGroupControlOption as ToggleGroupControlOption, __experimentalToolsPanelItem as ToolsPanelItem, __experimentalUnitControl as UnitControl, __experimentalVStack as VStack, DropZone, FlexItem, FocalPointPicker, MenuItem, VisuallyHidden, __experimentalItemGroup as ItemGroup, __experimentalHStack as HStack, __experimentalTruncate as Truncate } from '@wordpress/components';
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
- * Checks if there is a current value in the background image block support
33
- * attributes.
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 useBlockProps({
77
- name,
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 = style?.background?.backgroundImage;
84
- let props;
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 (!style?.background?.backgroundSize) {
89
- props = {
90
- style: {
91
- backgroundSize: 'cover'
92
- }
50
+ if (!backgroundStyle?.backgroundSize) {
51
+ backgroundStylesWithDefaults = {
52
+ backgroundSize: 'cover'
93
53
  };
94
54
  }
95
- if ('contain' === style?.background?.backgroundSize && !style?.background?.backgroundPosition) {
96
- props = {
97
- style: {
98
- backgroundPosition: 'center'
99
- }
55
+ if ('contain' === backgroundStyle?.backgroundSize && !backgroundStyle?.backgroundPosition) {
56
+ backgroundStylesWithDefaults = {
57
+ backgroundPosition: 'center'
100
58
  };
101
59
  }
102
60
  }
103
- if (!props) {
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
- return props;
107
- }
108
-
109
- /**
110
- * Resets the background image block support attributes. This can be used when disabling
111
- * the background image controls for a block via a `ToolsPanel`.
112
- *
113
- * @param {Object} style Style attribute.
114
- * @param {Function} setAttributes Function to set block's attributes.
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 InspectorImagePreview({
160
- label,
161
- filename,
162
- url: imgUrl
91
+ function BackgroundInspectorControl({
92
+ children
163
93
  }) {
164
- const imgLabel = label || getFilename(imgUrl);
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
- ...previousValue,
96
+ ...attributes,
279
97
  style: {
280
- ...previousValue.style,
98
+ ...attributes.style,
281
99
  background: undefined
282
100
  }
283
101
  };
284
102
  }, []);
285
- const hasValue = hasBackgroundImageValue(style);
286
- return createElement(ToolsPanelItem, {
287
- className: "single-column",
288
- hasValue: () => hasValue,
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 const coordsToBackgroundPosition = value => {
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
- isShownByDefault,
359
- setAttributes
110
+ name,
111
+ setAttributes,
112
+ settings
360
113
  }) {
361
114
  const style = useSelect(select => select(blockEditorStore).getBlockAttributes(clientId)?.style, [clientId]);
362
- const sizeValue = style?.background?.backgroundSize;
363
- const repeatValue = style?.background?.backgroundRepeat;
364
-
365
- // An `undefined` value is treated as `cover` by the toggle group control.
366
- // An empty string is treated as `auto` by the toggle group control. This
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 toggleIsRepeated = () => {
421
- setAttributes({
422
- style: cleanEmptyObject({
423
- ...style,
424
- background: {
425
- ...style?.background,
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(VStack, {
432
- as: ToolsPanelItem,
433
- spacing: 2,
434
- className: "single-column",
435
- hasValue: () => hasValue,
436
- label: __('Size'),
437
- onDeselect: () => resetBackgroundSize(style, setAttributes),
438
- isShownByDefault: isShownByDefault,
439
- resetAllFilter: resetAllFilter,
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