@wordpress/block-editor 11.4.0 → 11.5.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 (288) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/build/components/block-inspector/index.js +11 -10
  3. package/build/components/block-inspector/index.js.map +1 -1
  4. package/build/components/block-inspector/useBlockInspectorAnimationSettings.js +46 -0
  5. package/build/components/block-inspector/useBlockInspectorAnimationSettings.js.map +1 -0
  6. package/build/components/block-lock/modal.js +1 -0
  7. package/build/components/block-lock/modal.js.map +1 -1
  8. package/build/components/block-settings-menu/block-settings-dropdown.js +2 -2
  9. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  10. package/build/components/block-styles/index.js +2 -1
  11. package/build/components/block-styles/index.js.map +1 -1
  12. package/build/components/child-layout-control/index.js +107 -0
  13. package/build/components/child-layout-control/index.js.map +1 -0
  14. package/build/components/date-format-picker/index.js +3 -3
  15. package/build/components/date-format-picker/index.js.map +1 -1
  16. package/build/components/global-styles/dimensions-panel.js +594 -0
  17. package/build/components/global-styles/dimensions-panel.js.map +1 -0
  18. package/build/components/global-styles/hooks.js +72 -36
  19. package/build/components/global-styles/hooks.js.map +1 -1
  20. package/build/components/global-styles/index.js +20 -6
  21. package/build/components/global-styles/index.js.map +1 -1
  22. package/build/components/global-styles/typography-panel.js +25 -12
  23. package/build/components/global-styles/typography-panel.js.map +1 -1
  24. package/build/components/global-styles/use-global-styles-output.js +1 -1
  25. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  26. package/build/components/global-styles/utils.js +2 -0
  27. package/build/components/global-styles/utils.js.map +1 -1
  28. package/build/components/index.native.js +23 -0
  29. package/build/components/index.native.js.map +1 -1
  30. package/build/components/inserter/media-tab/hooks.js +10 -11
  31. package/build/components/inserter/media-tab/hooks.js.map +1 -1
  32. package/build/components/inserter/media-tab/media-list.js +5 -108
  33. package/build/components/inserter/media-tab/media-list.js.map +1 -1
  34. package/build/components/inserter/media-tab/media-preview.js +242 -0
  35. package/build/components/inserter/media-tab/media-preview.js.map +1 -0
  36. package/build/components/inspector-controls/block-support-tools-panel.js +1 -1
  37. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  38. package/build/components/inspector-controls/fill.js +38 -9
  39. package/build/components/inspector-controls/fill.js.map +1 -1
  40. package/build/components/link-control/settings-drawer.js +1 -1
  41. package/build/components/link-control/settings-drawer.js.map +1 -1
  42. package/build/components/link-control/settings.js +1 -0
  43. package/build/components/link-control/settings.js.map +1 -1
  44. package/build/components/list-view/block.js +17 -3
  45. package/build/components/list-view/block.js.map +1 -1
  46. package/build/components/list-view/branch.js +2 -2
  47. package/build/components/list-view/branch.js.map +1 -1
  48. package/build/components/list-view/expander.js +2 -1
  49. package/build/components/list-view/expander.js.map +1 -1
  50. package/build/components/list-view/leaf.js +10 -6
  51. package/build/components/list-view/leaf.js.map +1 -1
  52. package/build/components/list-view/use-list-view-scroll-into-view.js +51 -0
  53. package/build/components/list-view/use-list-view-scroll-into-view.js.map +1 -0
  54. package/build/components/off-canvas-editor/appender.js +5 -10
  55. package/build/components/off-canvas-editor/appender.js.map +1 -1
  56. package/build/components/off-canvas-editor/branch.js +1 -0
  57. package/build/components/off-canvas-editor/branch.js.map +1 -1
  58. package/build/components/off-canvas-editor/index.js +7 -3
  59. package/build/components/off-canvas-editor/index.js.map +1 -1
  60. package/build/components/off-canvas-editor/leaf-more-menu.js +34 -4
  61. package/build/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  62. package/build/components/off-canvas-editor/link-ui.js +1 -0
  63. package/build/components/off-canvas-editor/link-ui.js.map +1 -1
  64. package/build/components/responsive-block-control/index.js +1 -0
  65. package/build/components/responsive-block-control/index.js.map +1 -1
  66. package/build/components/rich-text/index.js +9 -43
  67. package/build/components/rich-text/index.js.map +1 -1
  68. package/build/components/rich-text/use-delete.js +73 -0
  69. package/build/components/rich-text/use-delete.js.map +1 -0
  70. package/build/components/rich-text/use-input-rules.js +14 -6
  71. package/build/components/rich-text/use-input-rules.js.map +1 -1
  72. package/build/components/writing-flow/use-selection-observer.js +4 -1
  73. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  74. package/build/hooks/align.js +3 -1
  75. package/build/hooks/align.js.map +1 -1
  76. package/build/hooks/dimensions.js +72 -190
  77. package/build/hooks/dimensions.js.map +1 -1
  78. package/build/hooks/duotone.js +94 -25
  79. package/build/hooks/duotone.js.map +1 -1
  80. package/build/hooks/gap.js +0 -202
  81. package/build/hooks/gap.js.map +1 -1
  82. package/build/hooks/layout.js +14 -5
  83. package/build/hooks/layout.js.map +1 -1
  84. package/build/hooks/margin.js +7 -163
  85. package/build/hooks/margin.js.map +1 -1
  86. package/build/hooks/padding.js +7 -163
  87. package/build/hooks/padding.js.map +1 -1
  88. package/build/hooks/typography.js +50 -65
  89. package/build/hooks/typography.js.map +1 -1
  90. package/build/hooks/utils.js +75 -0
  91. package/build/hooks/utils.js.map +1 -1
  92. package/build/layouts/flex.js +1 -0
  93. package/build/layouts/flex.js.map +1 -1
  94. package/build/store/actions.js +24 -12
  95. package/build/store/actions.js.map +1 -1
  96. package/build/store/defaults.js +28 -1
  97. package/build/store/defaults.js.map +1 -1
  98. package/build/store/reducer.js +53 -47
  99. package/build/store/reducer.js.map +1 -1
  100. package/build/store/selectors.js +5 -1
  101. package/build/store/selectors.js.map +1 -1
  102. package/build/utils/parse-css-unit-to-px.js +36 -3
  103. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  104. package/build-module/components/block-inspector/index.js +9 -9
  105. package/build-module/components/block-inspector/index.js.map +1 -1
  106. package/build-module/components/block-inspector/useBlockInspectorAnimationSettings.js +37 -0
  107. package/build-module/components/block-inspector/useBlockInspectorAnimationSettings.js.map +1 -0
  108. package/build-module/components/block-lock/modal.js +1 -0
  109. package/build-module/components/block-lock/modal.js.map +1 -1
  110. package/build-module/components/block-settings-menu/block-settings-dropdown.js +2 -2
  111. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  112. package/build-module/components/block-styles/index.js +2 -1
  113. package/build-module/components/block-styles/index.js.map +1 -1
  114. package/build-module/components/child-layout-control/index.js +98 -0
  115. package/build-module/components/child-layout-control/index.js.map +1 -0
  116. package/build-module/components/date-format-picker/index.js +4 -4
  117. package/build-module/components/date-format-picker/index.js.map +1 -1
  118. package/build-module/components/global-styles/dimensions-panel.js +574 -0
  119. package/build-module/components/global-styles/dimensions-panel.js.map +1 -0
  120. package/build-module/components/global-styles/hooks.js +71 -33
  121. package/build-module/components/global-styles/hooks.js.map +1 -1
  122. package/build-module/components/global-styles/index.js +2 -1
  123. package/build-module/components/global-styles/index.js.map +1 -1
  124. package/build-module/components/global-styles/typography-panel.js +26 -11
  125. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  126. package/build-module/components/global-styles/use-global-styles-output.js +1 -1
  127. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  128. package/build-module/components/global-styles/utils.js +2 -0
  129. package/build-module/components/global-styles/utils.js.map +1 -1
  130. package/build-module/components/index.native.js +2 -1
  131. package/build-module/components/index.native.js.map +1 -1
  132. package/build-module/components/inserter/media-tab/hooks.js +10 -11
  133. package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
  134. package/build-module/components/inserter/media-tab/media-list.js +6 -105
  135. package/build-module/components/inserter/media-tab/media-list.js.map +1 -1
  136. package/build-module/components/inserter/media-tab/media-preview.js +222 -0
  137. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -0
  138. package/build-module/components/inspector-controls/block-support-tools-panel.js +1 -1
  139. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  140. package/build-module/components/inspector-controls/fill.js +39 -9
  141. package/build-module/components/inspector-controls/fill.js.map +1 -1
  142. package/build-module/components/link-control/settings-drawer.js +1 -1
  143. package/build-module/components/link-control/settings-drawer.js.map +1 -1
  144. package/build-module/components/link-control/settings.js +1 -0
  145. package/build-module/components/link-control/settings.js.map +1 -1
  146. package/build-module/components/list-view/block.js +16 -3
  147. package/build-module/components/list-view/block.js.map +1 -1
  148. package/build-module/components/list-view/branch.js +2 -2
  149. package/build-module/components/list-view/branch.js.map +1 -1
  150. package/build-module/components/list-view/expander.js +2 -1
  151. package/build-module/components/list-view/expander.js.map +1 -1
  152. package/build-module/components/list-view/leaf.js +8 -4
  153. package/build-module/components/list-view/leaf.js.map +1 -1
  154. package/build-module/components/list-view/use-list-view-scroll-into-view.js +42 -0
  155. package/build-module/components/list-view/use-list-view-scroll-into-view.js.map +1 -0
  156. package/build-module/components/off-canvas-editor/appender.js +5 -10
  157. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  158. package/build-module/components/off-canvas-editor/branch.js +1 -0
  159. package/build-module/components/off-canvas-editor/branch.js.map +1 -1
  160. package/build-module/components/off-canvas-editor/index.js +7 -3
  161. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  162. package/build-module/components/off-canvas-editor/leaf-more-menu.js +36 -7
  163. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  164. package/build-module/components/off-canvas-editor/link-ui.js +1 -0
  165. package/build-module/components/off-canvas-editor/link-ui.js.map +1 -1
  166. package/build-module/components/responsive-block-control/index.js +1 -0
  167. package/build-module/components/responsive-block-control/index.js.map +1 -1
  168. package/build-module/components/rich-text/index.js +9 -43
  169. package/build-module/components/rich-text/index.js.map +1 -1
  170. package/build-module/components/rich-text/use-delete.js +62 -0
  171. package/build-module/components/rich-text/use-delete.js.map +1 -0
  172. package/build-module/components/rich-text/use-input-rules.js +14 -6
  173. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  174. package/build-module/components/writing-flow/use-selection-observer.js +4 -1
  175. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  176. package/build-module/hooks/align.js +3 -1
  177. package/build-module/hooks/align.js.map +1 -1
  178. package/build-module/hooks/dimensions.js +75 -187
  179. package/build-module/hooks/dimensions.js.map +1 -1
  180. package/build-module/hooks/duotone.js +86 -24
  181. package/build-module/hooks/duotone.js.map +1 -1
  182. package/build-module/hooks/gap.js +0 -183
  183. package/build-module/hooks/gap.js.map +1 -1
  184. package/build-module/hooks/layout.js +14 -5
  185. package/build-module/hooks/layout.js.map +1 -1
  186. package/build-module/hooks/margin.js +4 -143
  187. package/build-module/hooks/margin.js.map +1 -1
  188. package/build-module/hooks/padding.js +4 -143
  189. package/build-module/hooks/padding.js.map +1 -1
  190. package/build-module/hooks/typography.js +52 -65
  191. package/build-module/hooks/typography.js.map +1 -1
  192. package/build-module/hooks/utils.js +70 -0
  193. package/build-module/hooks/utils.js.map +1 -1
  194. package/build-module/layouts/flex.js +1 -0
  195. package/build-module/layouts/flex.js.map +1 -1
  196. package/build-module/store/actions.js +24 -12
  197. package/build-module/store/actions.js.map +1 -1
  198. package/build-module/store/defaults.js +28 -1
  199. package/build-module/store/defaults.js.map +1 -1
  200. package/build-module/store/reducer.js +53 -45
  201. package/build-module/store/reducer.js.map +1 -1
  202. package/build-module/store/selectors.js +5 -1
  203. package/build-module/store/selectors.js.map +1 -1
  204. package/build-module/utils/parse-css-unit-to-px.js +36 -3
  205. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  206. package/build-style/style-rtl.css +33 -21
  207. package/build-style/style.css +33 -21
  208. package/package.json +31 -31
  209. package/src/components/block-draggable/test/__snapshots__/index.native.js.snap +24 -24
  210. package/src/components/block-inspector/index.js +11 -14
  211. package/src/components/block-inspector/useBlockInspectorAnimationSettings.js +53 -0
  212. package/src/components/block-lock/modal.js +1 -0
  213. package/src/components/block-lock/style.scss +0 -9
  214. package/src/components/block-mobile-toolbar/test/__snapshots__/block-actions-menu.native.js.snap +20 -20
  215. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +15 -15
  216. package/src/components/block-settings-menu/block-settings-dropdown.js +4 -1
  217. package/src/components/block-styles/index.js +5 -1
  218. package/src/components/child-layout-control/index.js +106 -0
  219. package/src/components/color-palette/test/__snapshots__/control.js.snap +1 -1
  220. package/src/components/date-format-picker/index.js +6 -8
  221. package/src/components/date-format-picker/style.scss +0 -5
  222. package/src/components/global-styles/dimensions-panel.js +627 -0
  223. package/src/components/global-styles/hooks.js +88 -45
  224. package/src/components/global-styles/index.js +5 -1
  225. package/src/components/global-styles/typography-panel.js +33 -8
  226. package/src/components/global-styles/use-global-styles-output.js +4 -3
  227. package/src/components/global-styles/utils.js +2 -0
  228. package/src/components/index.native.js +5 -0
  229. package/src/components/inner-blocks/test/__snapshots__/index.js.snap +1 -1
  230. package/src/components/inserter/media-tab/hooks.js +9 -8
  231. package/src/components/inserter/media-tab/media-list.js +3 -122
  232. package/src/components/inserter/media-tab/media-preview.js +268 -0
  233. package/src/components/inserter/style.scss +22 -0
  234. package/src/components/inserter/test/__snapshots__/index.native.js.snap +15 -15
  235. package/src/components/inspector-controls/block-support-tools-panel.js +0 -1
  236. package/src/components/inspector-controls/fill.js +32 -8
  237. package/src/components/link-control/settings-drawer.js +2 -1
  238. package/src/components/link-control/settings.js +1 -0
  239. package/src/components/link-control/style.scss +18 -8
  240. package/src/components/link-control/test/index.js +3 -3
  241. package/src/components/list-view/block.js +19 -1
  242. package/src/components/list-view/branch.js +1 -2
  243. package/src/components/list-view/expander.js +1 -0
  244. package/src/components/list-view/leaf.js +43 -29
  245. package/src/components/list-view/use-list-view-scroll-into-view.js +48 -0
  246. package/src/components/media-replace-flow/style.scss +7 -9
  247. package/src/components/off-canvas-editor/appender.js +13 -16
  248. package/src/components/off-canvas-editor/branch.js +1 -0
  249. package/src/components/off-canvas-editor/index.js +8 -2
  250. package/src/components/off-canvas-editor/leaf-more-menu.js +57 -15
  251. package/src/components/off-canvas-editor/link-ui.js +1 -0
  252. package/src/components/responsive-block-control/index.js +1 -0
  253. package/src/components/rich-text/index.js +8 -44
  254. package/src/components/rich-text/use-delete.js +59 -0
  255. package/src/components/rich-text/use-input-rules.js +13 -5
  256. package/src/components/spacing-sizes-control/style.scss +1 -1
  257. package/src/components/url-popover/stories/index.js +1 -0
  258. package/src/components/writing-flow/use-selection-observer.js +5 -1
  259. package/src/hooks/align.js +1 -1
  260. package/src/hooks/dimensions.js +85 -269
  261. package/src/hooks/duotone.js +100 -30
  262. package/src/hooks/gap.js +0 -208
  263. package/src/hooks/layout.js +19 -6
  264. package/src/hooks/margin.js +1 -164
  265. package/src/hooks/padding.js +1 -163
  266. package/src/hooks/test/__snapshots__/align.native.js.snap +24 -24
  267. package/src/hooks/test/duotone.js +102 -0
  268. package/src/hooks/typography.js +66 -88
  269. package/src/hooks/utils.js +90 -0
  270. package/src/layouts/flex.js +1 -0
  271. package/src/store/actions.js +12 -4
  272. package/src/store/defaults.js +14 -1
  273. package/src/store/reducer.js +68 -43
  274. package/src/store/selectors.js +8 -1
  275. package/src/store/test/actions.js +4 -2
  276. package/src/utils/parse-css-unit-to-px.js +35 -5
  277. package/src/utils/test/parse-css-unit-to-px.js +12 -0
  278. package/tsconfig.tsbuildinfo +1 -1
  279. package/build/hooks/child-layout.js +0 -213
  280. package/build/hooks/child-layout.js.map +0 -1
  281. package/build/hooks/min-height.js +0 -139
  282. package/build/hooks/min-height.js.map +0 -1
  283. package/build-module/hooks/child-layout.js +0 -193
  284. package/build-module/hooks/child-layout.js.map +0 -1
  285. package/build-module/hooks/min-height.js +0 -116
  286. package/build-module/hooks/min-height.js.map +0 -1
  287. package/src/hooks/child-layout.js +0 -195
  288. package/src/hooks/min-height.js +0 -104
@@ -1,229 +1,117 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import { createElement, Fragment } from "@wordpress/element";
3
3
 
4
- /**
5
- * External dependencies
6
- */
7
- import classnames from 'classnames';
8
4
  /**
9
5
  * WordPress dependencies
10
6
  */
11
-
12
- import { __experimentalToolsPanelItem as ToolsPanelItem, __experimentalVStack as VStack } from '@wordpress/components';
13
- import { Platform, useState } from '@wordpress/element';
14
- import { __ } from '@wordpress/i18n';
15
- import { getBlockSupport } from '@wordpress/blocks';
7
+ import { useState, useEffect, useCallback } from '@wordpress/element';
16
8
  import { useDispatch } from '@wordpress/data';
9
+ import { getBlockSupport } from '@wordpress/blocks';
10
+ import deprecated from '@wordpress/deprecated';
17
11
  /**
18
12
  * Internal dependencies
19
13
  */
20
14
 
21
15
  import InspectorControls from '../components/inspector-controls';
22
- import { GapEdit, hasGapSupport, hasGapValue, resetGap, useIsGapDisabled } from './gap';
23
- import { MarginEdit, MarginVisualizer, hasMarginSupport, hasMarginValue, resetMargin, useIsMarginDisabled } from './margin';
24
- import { MinHeightEdit, hasMinHeightSupport, hasMinHeightValue, resetMinHeight, useIsMinHeightDisabled } from './min-height';
25
- import { PaddingEdit, PaddingVisualizer, hasPaddingSupport, hasPaddingValue, resetPadding, useIsPaddingDisabled } from './padding';
26
- import { ChildLayoutEdit, hasChildLayoutSupport, hasChildLayoutValue, resetChildLayout, useIsChildLayoutDisabled, childLayoutOrientation } from './child-layout';
27
- import useSetting from '../components/use-setting';
16
+ import { DimensionsPanel as StylesDimensionsPanel, useHasDimensionsPanel } from '../components/global-styles';
17
+ import { MarginVisualizer } from './margin';
18
+ import { PaddingVisualizer } from './padding';
28
19
  import { store as blockEditorStore } from '../store';
29
20
  import { unlock } from '../lock-unlock';
21
+ import { cleanEmptyObject, useBlockSettings } from './utils';
30
22
  export const DIMENSIONS_SUPPORT_KEY = 'dimensions';
31
23
  export const SPACING_SUPPORT_KEY = 'spacing';
32
24
  export const ALL_SIDES = ['top', 'right', 'bottom', 'left'];
33
25
  export const AXIAL_SIDES = ['vertical', 'horizontal'];
34
26
 
35
- function useVisualizerMouseOver() {
36
- const [isMouseOver, setIsMouseOver] = useState(false);
27
+ function useVisualizer() {
28
+ const [property, setProperty] = useState(false);
37
29
  const {
38
30
  hideBlockInterface,
39
31
  showBlockInterface
40
32
  } = unlock(useDispatch(blockEditorStore));
41
-
42
- const onMouseOver = e => {
43
- e.stopPropagation();
44
- hideBlockInterface();
45
- setIsMouseOver(true);
46
- };
47
-
48
- const onMouseOut = e => {
49
- e.stopPropagation();
50
- showBlockInterface();
51
- setIsMouseOver(false);
52
- };
53
-
54
- return {
55
- isMouseOver,
56
- onMouseOver,
57
- onMouseOut
58
- };
33
+ useEffect(() => {
34
+ if (!property) {
35
+ showBlockInterface();
36
+ } else {
37
+ hideBlockInterface();
38
+ }
39
+ }, [property, showBlockInterface, hideBlockInterface]);
40
+ return [property, setProperty];
59
41
  }
60
- /**
61
- * Inspector controls for dimensions support.
62
- *
63
- * @param {Object} props Block props.
64
- *
65
- * @return {WPElement} Inspector controls for dimensions and spacing support features.
66
- */
67
42
 
43
+ function DimensionsInspectorControl(_ref) {
44
+ let {
45
+ children,
46
+ resetAllFilter
47
+ } = _ref;
48
+ const attributesResetAllFilter = useCallback(attributes => {
49
+ const existingStyle = attributes.style;
50
+ const updatedStyle = resetAllFilter(existingStyle);
51
+ return { ...attributes,
52
+ style: updatedStyle
53
+ };
54
+ }, [resetAllFilter]);
55
+ return createElement(InspectorControls, {
56
+ group: "dimensions",
57
+ resetAllFilter: attributesResetAllFilter
58
+ }, children);
59
+ }
68
60
 
69
61
  export function DimensionsPanel(props) {
70
- const isGapDisabled = useIsGapDisabled(props);
71
- const isPaddingDisabled = useIsPaddingDisabled(props);
72
- const isMarginDisabled = useIsMarginDisabled(props);
73
- const isMinHeightDisabled = useIsMinHeightDisabled(props);
74
- const isChildLayoutDisabled = useIsChildLayoutDisabled(props);
75
- const isDisabled = useIsDimensionsDisabled(props);
76
- const isSupported = hasDimensionsSupport(props);
77
- const spacingSizes = useSetting('spacing.spacingSizes');
78
- const paddingMouseOver = useVisualizerMouseOver();
79
- const marginMouseOver = useVisualizerMouseOver();
62
+ var _settings$spacing, _settings$spacing2;
80
63
 
81
- if (isDisabled || !isSupported) {
64
+ const {
65
+ clientId,
66
+ name,
67
+ attributes,
68
+ setAttributes,
69
+ __unstableParentLayout
70
+ } = props;
71
+ const settings = useBlockSettings(name, __unstableParentLayout);
72
+ const isEnabled = useHasDimensionsPanel(settings);
73
+ const value = attributes.style;
74
+ const [visualizedProperty, setVisualizedProperty] = useVisualizer();
75
+
76
+ const onChange = newStyle => {
77
+ setAttributes({
78
+ style: cleanEmptyObject(newStyle)
79
+ });
80
+ };
81
+
82
+ if (!isEnabled) {
82
83
  return null;
83
84
  }
84
85
 
85
86
  const defaultDimensionsControls = getBlockSupport(props.name, [DIMENSIONS_SUPPORT_KEY, '__experimentalDefaultControls']);
86
87
  const defaultSpacingControls = getBlockSupport(props.name, [SPACING_SUPPORT_KEY, '__experimentalDefaultControls']);
87
-
88
- const createResetAllFilter = (attribute, featureSet) => newAttributes => {
89
- var _newAttributes$style;
90
-
91
- return { ...newAttributes,
92
- style: { ...newAttributes.style,
93
- [featureSet]: { ...((_newAttributes$style = newAttributes.style) === null || _newAttributes$style === void 0 ? void 0 : _newAttributes$style[featureSet]),
94
- [attribute]: undefined
95
- }
96
- }
97
- };
88
+ const defaultControls = { ...defaultDimensionsControls,
89
+ ...defaultSpacingControls
98
90
  };
99
-
100
- const spacingClassnames = classnames({
101
- 'tools-panel-item-spacing': spacingSizes && spacingSizes.length > 0
102
- });
103
- const {
104
- __unstableParentLayout: parentLayout
105
- } = props;
106
- return createElement(Fragment, null, createElement(InspectorControls, {
107
- group: "dimensions"
108
- }, !isPaddingDisabled && createElement(ToolsPanelItem, {
109
- className: spacingClassnames,
110
- hasValue: () => hasPaddingValue(props),
111
- label: __('Padding'),
112
- onDeselect: () => resetPadding(props),
113
- resetAllFilter: createResetAllFilter('padding', 'spacing'),
114
- isShownByDefault: defaultSpacingControls === null || defaultSpacingControls === void 0 ? void 0 : defaultSpacingControls.padding,
115
- panelId: props.clientId
116
- }, createElement(PaddingEdit, _extends({
117
- onMouseOver: paddingMouseOver.onMouseOver,
118
- onMouseOut: paddingMouseOver.onMouseOut
119
- }, props))), !isMarginDisabled && createElement(ToolsPanelItem, {
120
- className: spacingClassnames,
121
- hasValue: () => hasMarginValue(props),
122
- label: __('Margin'),
123
- onDeselect: () => resetMargin(props),
124
- resetAllFilter: createResetAllFilter('margin', 'spacing'),
125
- isShownByDefault: defaultSpacingControls === null || defaultSpacingControls === void 0 ? void 0 : defaultSpacingControls.margin,
126
- panelId: props.clientId
127
- }, createElement(MarginEdit, _extends({
128
- onMouseOver: marginMouseOver.onMouseOver,
129
- onMouseOut: marginMouseOver.onMouseOut
130
- }, props))), !isGapDisabled && createElement(ToolsPanelItem, {
131
- className: spacingClassnames,
132
- hasValue: () => hasGapValue(props),
133
- label: __('Block spacing'),
134
- onDeselect: () => resetGap(props),
135
- resetAllFilter: createResetAllFilter('blockGap', 'spacing'),
136
- isShownByDefault: defaultSpacingControls === null || defaultSpacingControls === void 0 ? void 0 : defaultSpacingControls.blockGap,
137
- panelId: props.clientId
138
- }, createElement(GapEdit, props)), !isMinHeightDisabled && createElement(ToolsPanelItem, {
139
- hasValue: () => hasMinHeightValue(props),
140
- label: __('Min. height'),
141
- onDeselect: () => resetMinHeight(props),
142
- resetAllFilter: createResetAllFilter('minHeight', 'dimensions'),
143
- isShownByDefault: defaultDimensionsControls === null || defaultDimensionsControls === void 0 ? void 0 : defaultDimensionsControls.minHeight,
144
- panelId: props.clientId
145
- }, createElement(MinHeightEdit, props)), !isChildLayoutDisabled && createElement(VStack, {
146
- as: ToolsPanelItem,
147
- spacing: 2,
148
- hasValue: () => hasChildLayoutValue(props),
149
- label: childLayoutOrientation(parentLayout),
150
- onDeselect: () => resetChildLayout(props),
151
- resetAllFilter: createResetAllFilter('selfStretch', 'layout'),
152
- isShownByDefault: false,
153
- panelId: props.clientId
154
- }, createElement(ChildLayoutEdit, props))), !isPaddingDisabled && createElement(PaddingVisualizer, _extends({
155
- forceShow: paddingMouseOver.isMouseOver
156
- }, props)), !isMarginDisabled && createElement(MarginVisualizer, _extends({
157
- forceShow: marginMouseOver.isMouseOver
91
+ return createElement(Fragment, null, createElement(StylesDimensionsPanel, {
92
+ as: DimensionsInspectorControl,
93
+ panelId: clientId,
94
+ name: name,
95
+ settings: settings,
96
+ value: value,
97
+ onChange: onChange,
98
+ defaultControls: defaultControls,
99
+ onVisualize: setVisualizedProperty
100
+ }), !!(settings !== null && settings !== void 0 && (_settings$spacing = settings.spacing) !== null && _settings$spacing !== void 0 && _settings$spacing.padding) && createElement(PaddingVisualizer, _extends({
101
+ forceShow: visualizedProperty === 'padding'
102
+ }, props)), !!(settings !== null && settings !== void 0 && (_settings$spacing2 = settings.spacing) !== null && _settings$spacing2 !== void 0 && _settings$spacing2.margin) && createElement(MarginVisualizer, _extends({
103
+ forceShow: visualizedProperty === 'margin'
158
104
  }, props)));
159
105
  }
160
106
  /**
161
- * Determine whether there is dimensions related block support.
162
- *
163
- * @param {Object} props Block props.
164
- *
165
- * @return {boolean} Whether there is support.
166
- */
167
-
168
- export function hasDimensionsSupport(props) {
169
- if (Platform.OS !== 'web') {
170
- return false;
171
- }
172
-
173
- const {
174
- name: blockName
175
- } = props;
176
- return hasGapSupport(blockName) || hasMinHeightSupport(blockName) || hasPaddingSupport(blockName) || hasMarginSupport(blockName) || hasChildLayoutSupport(props);
177
- }
178
- /**
179
- * Determines whether dimensions support has been disabled.
180
- *
181
- * @param {Object} props Block properties.
182
- *
183
- * @return {boolean} If spacing support is completely disabled.
107
+ * @deprecated
184
108
  */
185
109
 
186
- const useIsDimensionsDisabled = function () {
187
- let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
188
- const gapDisabled = useIsGapDisabled(props);
189
- const minHeightDisabled = useIsMinHeightDisabled(props);
190
- const paddingDisabled = useIsPaddingDisabled(props);
191
- const marginDisabled = useIsMarginDisabled(props);
192
- const childLayoutDisabled = useIsChildLayoutDisabled(props);
193
- return gapDisabled && minHeightDisabled && paddingDisabled && marginDisabled && childLayoutDisabled;
194
- };
195
- /**
196
- * Custom hook to retrieve which padding/margin/blockGap is supported
197
- * e.g. top, right, bottom or left.
198
- *
199
- * Sides are opted into by default. It is only if a specific side is set to
200
- * false that it is omitted.
201
- *
202
- * @param {string} blockName Block name.
203
- * @param {string} feature The feature custom sides relate to e.g. padding or margins.
204
- *
205
- * @return {string[] | undefined} Strings representing the custom sides available.
206
- */
207
-
208
-
209
- export function useCustomSides(blockName, feature) {
210
- var _support$feature;
211
-
212
- const support = getBlockSupport(blockName, SPACING_SUPPORT_KEY); // Skip when setting is boolean as theme isn't setting arbitrary sides.
213
-
214
- if (!support || typeof support[feature] === 'boolean') {
215
- return;
216
- } // Return if the setting is an array of sides (e.g. `[ 'top', 'bottom' ]`).
217
-
218
-
219
- if (Array.isArray(support[feature])) {
220
- return support[feature];
221
- } // Finally, attempt to return `.sides` if the setting is an object.
222
-
223
-
224
- if ((_support$feature = support[feature]) !== null && _support$feature !== void 0 && _support$feature.sides) {
225
- return support[feature].sides;
226
- }
110
+ export function useCustomSides() {
111
+ deprecated('wp.blockEditor.__experimentalUseCustomSides', {
112
+ since: '6.3',
113
+ version: '6.4'
114
+ });
227
115
  }
228
116
  /**
229
117
  * Custom hook to determine whether the sides configured in the
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/hooks/dimensions.js"],"names":["classnames","__experimentalToolsPanelItem","ToolsPanelItem","__experimentalVStack","VStack","Platform","useState","__","getBlockSupport","useDispatch","InspectorControls","GapEdit","hasGapSupport","hasGapValue","resetGap","useIsGapDisabled","MarginEdit","MarginVisualizer","hasMarginSupport","hasMarginValue","resetMargin","useIsMarginDisabled","MinHeightEdit","hasMinHeightSupport","hasMinHeightValue","resetMinHeight","useIsMinHeightDisabled","PaddingEdit","PaddingVisualizer","hasPaddingSupport","hasPaddingValue","resetPadding","useIsPaddingDisabled","ChildLayoutEdit","hasChildLayoutSupport","hasChildLayoutValue","resetChildLayout","useIsChildLayoutDisabled","childLayoutOrientation","useSetting","store","blockEditorStore","unlock","DIMENSIONS_SUPPORT_KEY","SPACING_SUPPORT_KEY","ALL_SIDES","AXIAL_SIDES","useVisualizerMouseOver","isMouseOver","setIsMouseOver","hideBlockInterface","showBlockInterface","onMouseOver","e","stopPropagation","onMouseOut","DimensionsPanel","props","isGapDisabled","isPaddingDisabled","isMarginDisabled","isMinHeightDisabled","isChildLayoutDisabled","isDisabled","useIsDimensionsDisabled","isSupported","hasDimensionsSupport","spacingSizes","paddingMouseOver","marginMouseOver","defaultDimensionsControls","name","defaultSpacingControls","createResetAllFilter","attribute","featureSet","newAttributes","style","undefined","spacingClassnames","length","__unstableParentLayout","parentLayout","padding","clientId","margin","blockGap","minHeight","OS","blockName","gapDisabled","minHeightDisabled","paddingDisabled","marginDisabled","childLayoutDisabled","useCustomSides","feature","support","Array","isArray","sides","useIsDimensionsSupportValid","some","side","includes","console","warn","every"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { Platform, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { getBlockSupport } from '@wordpress/blocks';\nimport { useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tGapEdit,\n\thasGapSupport,\n\thasGapValue,\n\tresetGap,\n\tuseIsGapDisabled,\n} from './gap';\nimport {\n\tMarginEdit,\n\tMarginVisualizer,\n\thasMarginSupport,\n\thasMarginValue,\n\tresetMargin,\n\tuseIsMarginDisabled,\n} from './margin';\nimport {\n\tMinHeightEdit,\n\thasMinHeightSupport,\n\thasMinHeightValue,\n\tresetMinHeight,\n\tuseIsMinHeightDisabled,\n} from './min-height';\nimport {\n\tPaddingEdit,\n\tPaddingVisualizer,\n\thasPaddingSupport,\n\thasPaddingValue,\n\tresetPadding,\n\tuseIsPaddingDisabled,\n} from './padding';\nimport {\n\tChildLayoutEdit,\n\thasChildLayoutSupport,\n\thasChildLayoutValue,\n\tresetChildLayout,\n\tuseIsChildLayoutDisabled,\n\tchildLayoutOrientation,\n} from './child-layout';\nimport useSetting from '../components/use-setting';\nimport { store as blockEditorStore } from '../store';\nimport { unlock } from '../lock-unlock';\n\nexport const DIMENSIONS_SUPPORT_KEY = 'dimensions';\nexport const SPACING_SUPPORT_KEY = 'spacing';\nexport const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];\nexport const AXIAL_SIDES = [ 'vertical', 'horizontal' ];\n\nfunction useVisualizerMouseOver() {\n\tconst [ isMouseOver, setIsMouseOver ] = useState( false );\n\tconst { hideBlockInterface, showBlockInterface } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\tconst onMouseOver = ( e ) => {\n\t\te.stopPropagation();\n\t\thideBlockInterface();\n\t\tsetIsMouseOver( true );\n\t};\n\tconst onMouseOut = ( e ) => {\n\t\te.stopPropagation();\n\t\tshowBlockInterface();\n\t\tsetIsMouseOver( false );\n\t};\n\treturn { isMouseOver, onMouseOver, onMouseOut };\n}\n\n/**\n * Inspector controls for dimensions support.\n *\n * @param {Object} props Block props.\n *\n * @return {WPElement} Inspector controls for dimensions and spacing support features.\n */\nexport function DimensionsPanel( props ) {\n\tconst isGapDisabled = useIsGapDisabled( props );\n\tconst isPaddingDisabled = useIsPaddingDisabled( props );\n\tconst isMarginDisabled = useIsMarginDisabled( props );\n\tconst isMinHeightDisabled = useIsMinHeightDisabled( props );\n\tconst isChildLayoutDisabled = useIsChildLayoutDisabled( props );\n\tconst isDisabled = useIsDimensionsDisabled( props );\n\tconst isSupported = hasDimensionsSupport( props );\n\tconst spacingSizes = useSetting( 'spacing.spacingSizes' );\n\tconst paddingMouseOver = useVisualizerMouseOver();\n\tconst marginMouseOver = useVisualizerMouseOver();\n\n\tif ( isDisabled || ! isSupported ) {\n\t\treturn null;\n\t}\n\n\tconst defaultDimensionsControls = getBlockSupport( props.name, [\n\t\tDIMENSIONS_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\tconst defaultSpacingControls = getBlockSupport( props.name, [\n\t\tSPACING_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\tconst createResetAllFilter =\n\t\t( attribute, featureSet ) => ( newAttributes ) => ( {\n\t\t\t...newAttributes,\n\t\t\tstyle: {\n\t\t\t\t...newAttributes.style,\n\t\t\t\t[ featureSet ]: {\n\t\t\t\t\t...newAttributes.style?.[ featureSet ],\n\t\t\t\t\t[ attribute ]: undefined,\n\t\t\t\t},\n\t\t\t},\n\t\t} );\n\n\tconst spacingClassnames = classnames( {\n\t\t'tools-panel-item-spacing': spacingSizes && spacingSizes.length > 0,\n\t} );\n\n\tconst { __unstableParentLayout: parentLayout } = props;\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls group=\"dimensions\">\n\t\t\t\t{ ! isPaddingDisabled && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tclassName={ spacingClassnames }\n\t\t\t\t\t\thasValue={ () => hasPaddingValue( props ) }\n\t\t\t\t\t\tlabel={ __( 'Padding' ) }\n\t\t\t\t\t\tonDeselect={ () => resetPadding( props ) }\n\t\t\t\t\t\tresetAllFilter={ createResetAllFilter(\n\t\t\t\t\t\t\t'padding',\n\t\t\t\t\t\t\t'spacing'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tisShownByDefault={ defaultSpacingControls?.padding }\n\t\t\t\t\t\tpanelId={ props.clientId }\n\t\t\t\t\t>\n\t\t\t\t\t\t<PaddingEdit\n\t\t\t\t\t\t\tonMouseOver={ paddingMouseOver.onMouseOver }\n\t\t\t\t\t\t\tonMouseOut={ paddingMouseOver.onMouseOut }\n\t\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t\t{ ! isMarginDisabled && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tclassName={ spacingClassnames }\n\t\t\t\t\t\thasValue={ () => hasMarginValue( props ) }\n\t\t\t\t\t\tlabel={ __( 'Margin' ) }\n\t\t\t\t\t\tonDeselect={ () => resetMargin( props ) }\n\t\t\t\t\t\tresetAllFilter={ createResetAllFilter(\n\t\t\t\t\t\t\t'margin',\n\t\t\t\t\t\t\t'spacing'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tisShownByDefault={ defaultSpacingControls?.margin }\n\t\t\t\t\t\tpanelId={ props.clientId }\n\t\t\t\t\t>\n\t\t\t\t\t\t<MarginEdit\n\t\t\t\t\t\t\tonMouseOver={ marginMouseOver.onMouseOver }\n\t\t\t\t\t\t\tonMouseOut={ marginMouseOver.onMouseOut }\n\t\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t\t{ ! isGapDisabled && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tclassName={ spacingClassnames }\n\t\t\t\t\t\thasValue={ () => hasGapValue( props ) }\n\t\t\t\t\t\tlabel={ __( 'Block spacing' ) }\n\t\t\t\t\t\tonDeselect={ () => resetGap( props ) }\n\t\t\t\t\t\tresetAllFilter={ createResetAllFilter(\n\t\t\t\t\t\t\t'blockGap',\n\t\t\t\t\t\t\t'spacing'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tisShownByDefault={ defaultSpacingControls?.blockGap }\n\t\t\t\t\t\tpanelId={ props.clientId }\n\t\t\t\t\t>\n\t\t\t\t\t\t<GapEdit { ...props } />\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t\t{ ! isMinHeightDisabled && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\thasValue={ () => hasMinHeightValue( props ) }\n\t\t\t\t\t\tlabel={ __( 'Min. height' ) }\n\t\t\t\t\t\tonDeselect={ () => resetMinHeight( props ) }\n\t\t\t\t\t\tresetAllFilter={ createResetAllFilter(\n\t\t\t\t\t\t\t'minHeight',\n\t\t\t\t\t\t\t'dimensions'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tisShownByDefault={\n\t\t\t\t\t\t\tdefaultDimensionsControls?.minHeight\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpanelId={ props.clientId }\n\t\t\t\t\t>\n\t\t\t\t\t\t<MinHeightEdit { ...props } />\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t\t{ ! isChildLayoutDisabled && (\n\t\t\t\t\t<VStack\n\t\t\t\t\t\tas={ ToolsPanelItem }\n\t\t\t\t\t\tspacing={ 2 }\n\t\t\t\t\t\thasValue={ () => hasChildLayoutValue( props ) }\n\t\t\t\t\t\tlabel={ childLayoutOrientation( parentLayout ) }\n\t\t\t\t\t\tonDeselect={ () => resetChildLayout( props ) }\n\t\t\t\t\t\tresetAllFilter={ createResetAllFilter(\n\t\t\t\t\t\t\t'selfStretch',\n\t\t\t\t\t\t\t'layout'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tisShownByDefault={ false }\n\t\t\t\t\t\tpanelId={ props.clientId }\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChildLayoutEdit { ...props } />\n\t\t\t\t\t</VStack>\n\t\t\t\t) }\n\t\t\t</InspectorControls>\n\t\t\t{ ! isPaddingDisabled && (\n\t\t\t\t<PaddingVisualizer\n\t\t\t\t\tforceShow={ paddingMouseOver.isMouseOver }\n\t\t\t\t\t{ ...props }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ ! isMarginDisabled && (\n\t\t\t\t<MarginVisualizer\n\t\t\t\t\tforceShow={ marginMouseOver.isMouseOver }\n\t\t\t\t\t{ ...props }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\n/**\n * Determine whether there is dimensions related block support.\n *\n * @param {Object} props Block props.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasDimensionsSupport( props ) {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\tconst { name: blockName } = props;\n\n\treturn (\n\t\thasGapSupport( blockName ) ||\n\t\thasMinHeightSupport( blockName ) ||\n\t\thasPaddingSupport( blockName ) ||\n\t\thasMarginSupport( blockName ) ||\n\t\thasChildLayoutSupport( props )\n\t);\n}\n\n/**\n * Determines whether dimensions support has been disabled.\n *\n * @param {Object} props Block properties.\n *\n * @return {boolean} If spacing support is completely disabled.\n */\nconst useIsDimensionsDisabled = ( props = {} ) => {\n\tconst gapDisabled = useIsGapDisabled( props );\n\tconst minHeightDisabled = useIsMinHeightDisabled( props );\n\tconst paddingDisabled = useIsPaddingDisabled( props );\n\tconst marginDisabled = useIsMarginDisabled( props );\n\tconst childLayoutDisabled = useIsChildLayoutDisabled( props );\n\n\treturn (\n\t\tgapDisabled &&\n\t\tminHeightDisabled &&\n\t\tpaddingDisabled &&\n\t\tmarginDisabled &&\n\t\tchildLayoutDisabled\n\t);\n};\n\n/**\n * Custom hook to retrieve which padding/margin/blockGap is supported\n * e.g. top, right, bottom or left.\n *\n * Sides are opted into by default. It is only if a specific side is set to\n * false that it is omitted.\n *\n * @param {string} blockName Block name.\n * @param {string} feature The feature custom sides relate to e.g. padding or margins.\n *\n * @return {string[] | undefined} Strings representing the custom sides available.\n */\nexport function useCustomSides( blockName, feature ) {\n\tconst support = getBlockSupport( blockName, SPACING_SUPPORT_KEY );\n\n\t// Skip when setting is boolean as theme isn't setting arbitrary sides.\n\tif ( ! support || typeof support[ feature ] === 'boolean' ) {\n\t\treturn;\n\t}\n\n\t// Return if the setting is an array of sides (e.g. `[ 'top', 'bottom' ]`).\n\tif ( Array.isArray( support[ feature ] ) ) {\n\t\treturn support[ feature ];\n\t}\n\n\t// Finally, attempt to return `.sides` if the setting is an object.\n\tif ( support[ feature ]?.sides ) {\n\t\treturn support[ feature ].sides;\n\t}\n}\n\n/**\n * Custom hook to determine whether the sides configured in the\n * block support are valid. A dimension property cannot declare\n * support for a mix of axial and individual sides.\n *\n * @param {string} blockName Block name.\n * @param {string} feature The feature custom sides relate to e.g. padding or margins.\n *\n * @return {boolean} If the feature has a valid configuration of sides.\n */\nexport function useIsDimensionsSupportValid( blockName, feature ) {\n\tconst sides = useCustomSides( blockName, feature );\n\n\tif (\n\t\tsides &&\n\t\tsides.some( ( side ) => ALL_SIDES.includes( side ) ) &&\n\t\tsides.some( ( side ) => AXIAL_SIDES.includes( side ) )\n\t) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(\n\t\t\t`The ${ feature } support for the \"${ blockName }\" block can not be configured to support both axial and arbitrary sides.`\n\t\t);\n\t\treturn false;\n\t}\n\n\tif (\n\t\tsides?.length &&\n\t\tfeature === 'blockGap' &&\n\t\t! AXIAL_SIDES.every( ( side ) => sides.includes( side ) )\n\t) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(\n\t\t\t`The ${ feature } support for the \"${ blockName }\" block can not be configured to support arbitrary sides.`\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/hooks/dimensions.js"],"names":["useState","useEffect","useCallback","useDispatch","getBlockSupport","deprecated","InspectorControls","DimensionsPanel","StylesDimensionsPanel","useHasDimensionsPanel","MarginVisualizer","PaddingVisualizer","store","blockEditorStore","unlock","cleanEmptyObject","useBlockSettings","DIMENSIONS_SUPPORT_KEY","SPACING_SUPPORT_KEY","ALL_SIDES","AXIAL_SIDES","useVisualizer","property","setProperty","hideBlockInterface","showBlockInterface","DimensionsInspectorControl","children","resetAllFilter","attributesResetAllFilter","attributes","existingStyle","style","updatedStyle","props","clientId","name","setAttributes","__unstableParentLayout","settings","isEnabled","value","visualizedProperty","setVisualizedProperty","onChange","newStyle","defaultDimensionsControls","defaultSpacingControls","defaultControls","spacing","padding","margin","useCustomSides","since","version","useIsDimensionsSupportValid","blockName","feature","sides","some","side","includes","console","warn","length","every"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useState, useEffect, useCallback } from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\nimport { getBlockSupport } from '@wordpress/blocks';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tDimensionsPanel as StylesDimensionsPanel,\n\tuseHasDimensionsPanel,\n} from '../components/global-styles';\nimport { MarginVisualizer } from './margin';\nimport { PaddingVisualizer } from './padding';\nimport { store as blockEditorStore } from '../store';\nimport { unlock } from '../lock-unlock';\n\nimport { cleanEmptyObject, useBlockSettings } from './utils';\n\nexport const DIMENSIONS_SUPPORT_KEY = 'dimensions';\nexport const SPACING_SUPPORT_KEY = 'spacing';\nexport const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];\nexport const AXIAL_SIDES = [ 'vertical', 'horizontal' ];\n\nfunction useVisualizer() {\n\tconst [ property, setProperty ] = useState( false );\n\tconst { hideBlockInterface, showBlockInterface } = unlock(\n\t\tuseDispatch( blockEditorStore )\n\t);\n\tuseEffect( () => {\n\t\tif ( ! property ) {\n\t\t\tshowBlockInterface();\n\t\t} else {\n\t\t\thideBlockInterface();\n\t\t}\n\t}, [ property, showBlockInterface, hideBlockInterface ] );\n\n\treturn [ property, setProperty ];\n}\n\nfunction DimensionsInspectorControl( { children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributes.style;\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\tstyle: updatedStyle,\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t<InspectorControls\n\t\t\tgroup=\"dimensions\"\n\t\t\tresetAllFilter={ attributesResetAllFilter }\n\t\t>\n\t\t\t{ children }\n\t\t</InspectorControls>\n\t);\n}\n\nexport function DimensionsPanel( props ) {\n\tconst {\n\t\tclientId,\n\t\tname,\n\t\tattributes,\n\t\tsetAttributes,\n\t\t__unstableParentLayout,\n\t} = props;\n\tconst settings = useBlockSettings( name, __unstableParentLayout );\n\tconst isEnabled = useHasDimensionsPanel( settings );\n\tconst value = attributes.style;\n\tconst [ visualizedProperty, setVisualizedProperty ] = useVisualizer();\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t} );\n\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultDimensionsControls = getBlockSupport( props.name, [\n\t\tDIMENSIONS_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\tconst defaultSpacingControls = getBlockSupport( props.name, [\n\t\tSPACING_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\tconst defaultControls = {\n\t\t...defaultDimensionsControls,\n\t\t...defaultSpacingControls,\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<StylesDimensionsPanel\n\t\t\t\tas={ DimensionsInspectorControl }\n\t\t\t\tpanelId={ clientId }\n\t\t\t\tname={ name }\n\t\t\t\tsettings={ settings }\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tdefaultControls={ defaultControls }\n\t\t\t\tonVisualize={ setVisualizedProperty }\n\t\t\t/>\n\t\t\t{ !! settings?.spacing?.padding && (\n\t\t\t\t<PaddingVisualizer\n\t\t\t\t\tforceShow={ visualizedProperty === 'padding' }\n\t\t\t\t\t{ ...props }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ !! settings?.spacing?.margin && (\n\t\t\t\t<MarginVisualizer\n\t\t\t\t\tforceShow={ visualizedProperty === 'margin' }\n\t\t\t\t\t{ ...props }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\n/**\n * @deprecated\n */\nexport function useCustomSides() {\n\tdeprecated( 'wp.blockEditor.__experimentalUseCustomSides', {\n\t\tsince: '6.3',\n\t\tversion: '6.4',\n\t} );\n}\n\n/**\n * Custom hook to determine whether the sides configured in the\n * block support are valid. A dimension property cannot declare\n * support for a mix of axial and individual sides.\n *\n * @param {string} blockName Block name.\n * @param {string} feature The feature custom sides relate to e.g. padding or margins.\n *\n * @return {boolean} If the feature has a valid configuration of sides.\n */\nexport function useIsDimensionsSupportValid( blockName, feature ) {\n\tconst sides = useCustomSides( blockName, feature );\n\n\tif (\n\t\tsides &&\n\t\tsides.some( ( side ) => ALL_SIDES.includes( side ) ) &&\n\t\tsides.some( ( side ) => AXIAL_SIDES.includes( side ) )\n\t) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(\n\t\t\t`The ${ feature } support for the \"${ blockName }\" block can not be configured to support both axial and arbitrary sides.`\n\t\t);\n\t\treturn false;\n\t}\n\n\tif (\n\t\tsides?.length &&\n\t\tfeature === 'blockGap' &&\n\t\t! AXIAL_SIDES.every( ( side ) => sides.includes( side ) )\n\t) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(\n\t\t\t`The ${ feature } support for the \"${ blockName }\" block can not be configured to support arbitrary sides.`\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n"]}
@@ -71,15 +71,41 @@ function useMultiOriginPresets(_ref2) {
71
71
  return useMemo(() => [...userPresets, ...themePresets, ...(disableDefault ? EMPTY_ARRAY : defaultPresets)], [disableDefault, userPresets, themePresets, defaultPresets]);
72
72
  }
73
73
 
74
- function DuotonePanel(_ref3) {
74
+ export function getColorsFromDuotonePreset(duotone, duotonePalette) {
75
+ if (!duotone) {
76
+ return;
77
+ }
78
+
79
+ const preset = duotonePalette === null || duotonePalette === void 0 ? void 0 : duotonePalette.find(_ref3 => {
80
+ let {
81
+ slug
82
+ } = _ref3;
83
+ return duotone === `var:preset|duotone|${slug}`;
84
+ });
85
+ return preset ? preset.colors : undefined;
86
+ }
87
+ export function getDuotonePresetFromColors(colors, duotonePalette) {
88
+ if (!colors || !Array.isArray(colors)) {
89
+ return;
90
+ }
91
+
92
+ const preset = duotonePalette === null || duotonePalette === void 0 ? void 0 : duotonePalette.find(duotonePreset => {
93
+ var _duotonePreset$colors;
94
+
95
+ return duotonePreset === null || duotonePreset === void 0 ? void 0 : (_duotonePreset$colors = duotonePreset.colors) === null || _duotonePreset$colors === void 0 ? void 0 : _duotonePreset$colors.every((val, index) => val === colors[index]);
96
+ });
97
+ return preset ? `var:preset|duotone|${preset.slug}` : undefined;
98
+ }
99
+
100
+ function DuotonePanel(_ref4) {
75
101
  var _style$color;
76
102
 
77
103
  let {
78
104
  attributes,
79
105
  setAttributes
80
- } = _ref3;
106
+ } = _ref4;
81
107
  const style = attributes === null || attributes === void 0 ? void 0 : attributes.style;
82
- const duotone = style === null || style === void 0 ? void 0 : (_style$color = style.color) === null || _style$color === void 0 ? void 0 : _style$color.duotone;
108
+ const duotoneStyle = style === null || style === void 0 ? void 0 : (_style$color = style.color) === null || _style$color === void 0 ? void 0 : _style$color.duotone;
83
109
  const duotonePalette = useMultiOriginPresets({
84
110
  presetSetting: 'color.duotone',
85
111
  defaultSetting: 'color.defaultDuotone'
@@ -95,6 +121,7 @@ function DuotonePanel(_ref3) {
95
121
  return null;
96
122
  }
97
123
 
124
+ const duotonePresetOrColors = !Array.isArray(duotoneStyle) ? getColorsFromDuotonePreset(duotoneStyle, duotonePalette) : duotoneStyle;
98
125
  return createElement(BlockControls, {
99
126
  group: "block",
100
127
  __experimentalShareWithChildBlocks: true
@@ -103,11 +130,13 @@ function DuotonePanel(_ref3) {
103
130
  colorPalette: colorPalette,
104
131
  disableCustomDuotone: disableCustomDuotone,
105
132
  disableCustomColors: disableCustomColors,
106
- value: duotone,
133
+ value: duotonePresetOrColors,
107
134
  onChange: newDuotone => {
135
+ const maybePreset = getDuotonePresetFromColors(newDuotone, duotonePalette);
108
136
  const newStyle = { ...style,
109
137
  color: { ...(style === null || style === void 0 ? void 0 : style.color),
110
- duotone: newDuotone
138
+ duotone: maybePreset !== null && maybePreset !== void 0 ? maybePreset : newDuotone // use preset or fallback to custom colors.
139
+
111
140
  }
112
141
  };
113
142
  setAttributes({
@@ -157,8 +186,12 @@ const withDuotoneControls = createHigherOrderComponent(BlockEdit => props => {
157
186
  const hasDuotoneSupport = hasBlockSupport(props.name, 'color.__experimentalDuotone');
158
187
  const isContentLocked = useSelect(select => {
159
188
  return select(blockEditorStore).__unstableGetContentLockingParent(props.clientId);
160
- }, [props.clientId]);
161
- return createElement(Fragment, null, createElement(BlockEdit, props), hasDuotoneSupport && !isContentLocked && createElement(DuotonePanel, props));
189
+ }, [props.clientId]); // CAUTION: code added before this line will be executed
190
+ // for all blocks, not just those that support duotone. Code added
191
+ // above this line should be carefully evaluated for its impact on
192
+ // performance.
193
+
194
+ return createElement(Fragment, null, hasDuotoneSupport && !isContentLocked && createElement(DuotonePanel, props), createElement(BlockEdit, props));
162
195
  }, 'withDuotoneControls');
163
196
  /**
164
197
  * Function that scopes a selector with another one. This works a bit like
@@ -189,6 +222,41 @@ function scopeSelector(scope, selector) {
189
222
  });
190
223
  return selectorsScoped.join(', ');
191
224
  }
225
+
226
+ function BlockDuotoneStyles(_ref5) {
227
+ let {
228
+ name,
229
+ duotoneStyle,
230
+ id
231
+ } = _ref5;
232
+ const duotonePalette = useMultiOriginPresets({
233
+ presetSetting: 'color.duotone',
234
+ defaultSetting: 'color.defaultDuotone'
235
+ });
236
+ const element = useContext(BlockList.__unstableElementContext); // Portals cannot exist without a container.
237
+ // Guard against empty Duotone styles.
238
+
239
+ if (!element || !duotoneStyle) {
240
+ return null;
241
+ }
242
+
243
+ let colors = duotoneStyle;
244
+
245
+ if (!Array.isArray(colors) && colors !== 'unset') {
246
+ colors = getColorsFromDuotonePreset(colors, duotonePalette);
247
+ }
248
+
249
+ const duotoneSupportSelectors = getBlockSupport(name, 'color.__experimentalDuotone'); // Extra .editor-styles-wrapper specificity is needed in the editor
250
+ // since we're not using inline styles to apply the filter. We need to
251
+ // override duotone applied by global styles and theme.json.
252
+
253
+ const selectorsGroup = scopeSelector(`.editor-styles-wrapper .${id}`, duotoneSupportSelectors);
254
+ return createPortal(createElement(InlineDuotone, {
255
+ selector: selectorsGroup,
256
+ id: id,
257
+ colors: colors
258
+ }), element);
259
+ }
192
260
  /**
193
261
  * Override the default block element to include duotone styles.
194
262
  *
@@ -202,24 +270,18 @@ const withDuotoneStyles = createHigherOrderComponent(BlockListBlock => props =>
202
270
  var _props$attributes, _props$attributes$sty, _props$attributes$sty2;
203
271
 
204
272
  const duotoneSupport = getBlockSupport(props.name, 'color.__experimentalDuotone');
205
- const colors = props === null || props === void 0 ? void 0 : (_props$attributes = props.attributes) === null || _props$attributes === void 0 ? void 0 : (_props$attributes$sty = _props$attributes.style) === null || _props$attributes$sty === void 0 ? void 0 : (_props$attributes$sty2 = _props$attributes$sty.color) === null || _props$attributes$sty2 === void 0 ? void 0 : _props$attributes$sty2.duotone;
206
-
207
- if (!duotoneSupport || !colors) {
208
- return createElement(BlockListBlock, props);
209
- }
210
-
211
- const id = `wp-duotone-${useInstanceId(BlockListBlock)}`; // Extra .editor-styles-wrapper specificity is needed in the editor
212
- // since we're not using inline styles to apply the filter. We need to
213
- // override duotone applied by global styles and theme.json.
273
+ const id = `wp-duotone-${useInstanceId(BlockListBlock)}`;
274
+ const className = duotoneSupport ? classnames(props === null || props === void 0 ? void 0 : props.className, id) : props === null || props === void 0 ? void 0 : props.className;
275
+ const duotoneStyle = props === null || props === void 0 ? void 0 : (_props$attributes = props.attributes) === null || _props$attributes === void 0 ? void 0 : (_props$attributes$sty = _props$attributes.style) === null || _props$attributes$sty === void 0 ? void 0 : (_props$attributes$sty2 = _props$attributes$sty.color) === null || _props$attributes$sty2 === void 0 ? void 0 : _props$attributes$sty2.duotone; // CAUTION: code added before this line will be executed
276
+ // for all blocks, not just those that support duotone. Code added
277
+ // above this line should be carefully evaluated for its impact on
278
+ // performance.
214
279
 
215
- const selectorsGroup = scopeSelector(`.editor-styles-wrapper .${id}`, duotoneSupport);
216
- const className = classnames(props === null || props === void 0 ? void 0 : props.className, id);
217
- const element = useContext(BlockList.__unstableElementContext);
218
- return createElement(Fragment, null, element && createPortal(createElement(InlineDuotone, {
219
- selector: selectorsGroup,
220
- id: id,
221
- colors: colors
222
- }), element), createElement(BlockListBlock, _extends({}, props, {
280
+ return createElement(Fragment, null, duotoneSupport && duotoneStyle && createElement(BlockDuotoneStyles, {
281
+ name: props === null || props === void 0 ? void 0 : props.name,
282
+ duotoneStyle: duotoneStyle,
283
+ id: id
284
+ }), createElement(BlockListBlock, _extends({}, props, {
223
285
  className: className
224
286
  })));
225
287
  }, 'withDuotoneStyles');
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/hooks/duotone.js"],"names":["classnames","extend","namesPlugin","getBlockSupport","hasBlockSupport","createHigherOrderComponent","useInstanceId","addFilter","useMemo","useContext","createPortal","useSelect","BlockControls","__experimentalDuotoneControl","DuotoneControl","useSetting","BlockList","__unstableDuotoneFilter","DuotoneFilter","__unstableDuotoneStylesheet","DuotoneStylesheet","__unstableDuotoneUnsetStylesheet","DuotoneUnsetStylesheet","store","blockEditorStore","EMPTY_ARRAY","InlineDuotone","selector","id","colors","useMultiOriginPresets","presetSetting","defaultSetting","disableDefault","userPresets","themePresets","defaultPresets","DuotonePanel","attributes","setAttributes","style","duotone","color","duotonePalette","colorPalette","disableCustomColors","disableCustomDuotone","length","newDuotone","newStyle","addDuotoneAttributes","settings","Object","assign","type","withDuotoneControls","BlockEdit","props","hasDuotoneSupport","name","isContentLocked","select","__unstableGetContentLockingParent","clientId","scopeSelector","scope","scopes","split","selectors","selectorsScoped","forEach","outer","inner","push","trim","join","withDuotoneStyles","BlockListBlock","duotoneSupport","selectorsGroup","className","element","__unstableElementContext"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { extend } from 'colord';\nimport namesPlugin from 'colord/plugins/names';\n\n/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { useMemo, useContext, createPortal } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBlockControls,\n\t__experimentalDuotoneControl as DuotoneControl,\n\tuseSetting,\n} from '../components';\nimport BlockList from '../components/block-list';\nimport {\n\t__unstableDuotoneFilter as DuotoneFilter,\n\t__unstableDuotoneStylesheet as DuotoneStylesheet,\n\t__unstableDuotoneUnsetStylesheet as DuotoneUnsetStylesheet,\n} from '../components/duotone';\nimport { store as blockEditorStore } from '../store';\n\nconst EMPTY_ARRAY = [];\n\nextend( [ namesPlugin ] );\n\n/**\n * SVG and stylesheet needed for rendering the duotone filter.\n *\n * @param {Object} props Duotone props.\n * @param {string} props.selector Selector to apply the filter to.\n * @param {string} props.id Unique id for this duotone filter.\n * @param {string[]|\"unset\"} props.colors Array of RGB color strings ordered from dark to light.\n *\n * @return {WPElement} Duotone element.\n */\nfunction InlineDuotone( { selector, id, colors } ) {\n\tif ( colors === 'unset' ) {\n\t\treturn <DuotoneUnsetStylesheet selector={ selector } />;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<DuotoneFilter id={ id } colors={ colors } />\n\t\t\t<DuotoneStylesheet id={ id } selector={ selector } />\n\t\t</>\n\t);\n}\n\nfunction useMultiOriginPresets( { presetSetting, defaultSetting } ) {\n\tconst disableDefault = ! useSetting( defaultSetting );\n\tconst userPresets =\n\t\tuseSetting( `${ presetSetting }.custom` ) || EMPTY_ARRAY;\n\tconst themePresets =\n\t\tuseSetting( `${ presetSetting }.theme` ) || EMPTY_ARRAY;\n\tconst defaultPresets =\n\t\tuseSetting( `${ presetSetting }.default` ) || EMPTY_ARRAY;\n\treturn useMemo(\n\t\t() => [\n\t\t\t...userPresets,\n\t\t\t...themePresets,\n\t\t\t...( disableDefault ? EMPTY_ARRAY : defaultPresets ),\n\t\t],\n\t\t[ disableDefault, userPresets, themePresets, defaultPresets ]\n\t);\n}\n\nfunction DuotonePanel( { attributes, setAttributes } ) {\n\tconst style = attributes?.style;\n\tconst duotone = style?.color?.duotone;\n\n\tconst duotonePalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.duotone',\n\t\tdefaultSetting: 'color.defaultDuotone',\n\t} );\n\tconst colorPalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.palette',\n\t\tdefaultSetting: 'color.defaultPalette',\n\t} );\n\tconst disableCustomColors = ! useSetting( 'color.custom' );\n\tconst disableCustomDuotone =\n\t\t! useSetting( 'color.customDuotone' ) ||\n\t\t( colorPalette?.length === 0 && disableCustomColors );\n\n\tif ( duotonePalette?.length === 0 && disableCustomDuotone ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<BlockControls group=\"block\" __experimentalShareWithChildBlocks>\n\t\t\t<DuotoneControl\n\t\t\t\tduotonePalette={ duotonePalette }\n\t\t\t\tcolorPalette={ colorPalette }\n\t\t\t\tdisableCustomDuotone={ disableCustomDuotone }\n\t\t\t\tdisableCustomColors={ disableCustomColors }\n\t\t\t\tvalue={ duotone }\n\t\t\t\tonChange={ ( newDuotone ) => {\n\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t...style,\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t...style?.color,\n\t\t\t\t\t\t\tduotone: newDuotone,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tsetAttributes( { style: newStyle } );\n\t\t\t\t} }\n\t\t\t/>\n\t\t</BlockControls>\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `duotone` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addDuotoneAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, 'color.__experimentalDuotone' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default\n\t// values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override the default edit UI to include toolbar controls for duotone if the\n * block supports duotone.\n *\n * @param {Function} BlockEdit Original component.\n *\n * @return {Function} Wrapped component.\n */\nconst withDuotoneControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst hasDuotoneSupport = hasBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\t\tconst isContentLocked = useSelect(\n\t\t\t( select ) => {\n\t\t\t\treturn select(\n\t\t\t\t\tblockEditorStore\n\t\t\t\t).__unstableGetContentLockingParent( props.clientId );\n\t\t\t},\n\t\t\t[ props.clientId ]\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BlockEdit { ...props } />\n\t\t\t\t{ hasDuotoneSupport && ! isContentLocked && (\n\t\t\t\t\t<DuotonePanel { ...props } />\n\t\t\t\t) }\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneControls'\n);\n\n/**\n * Function that scopes a selector with another one. This works a bit like\n * SCSS nesting except the `&` operator isn't supported.\n *\n * @example\n * ```js\n * const scope = '.a, .b .c';\n * const selector = '> .x, .y';\n * const merged = scopeSelector( scope, selector );\n * // merged is '.a > .x, .a .y, .b .c > .x, .b .c .y'\n * ```\n *\n * @param {string} scope Selector to scope to.\n * @param {string} selector Original selector.\n *\n * @return {string} Scoped selector.\n */\nfunction scopeSelector( scope, selector ) {\n\tconst scopes = scope.split( ',' );\n\tconst selectors = selector.split( ',' );\n\n\tconst selectorsScoped = [];\n\tscopes.forEach( ( outer ) => {\n\t\tselectors.forEach( ( inner ) => {\n\t\t\tselectorsScoped.push( `${ outer.trim() } ${ inner.trim() }` );\n\t\t} );\n\t} );\n\n\treturn selectorsScoped.join( ', ' );\n}\n\n/**\n * Override the default block element to include duotone styles.\n *\n * @param {Function} BlockListBlock Original component.\n *\n * @return {Function} Wrapped component.\n */\nconst withDuotoneStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst duotoneSupport = getBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\t\tconst colors = props?.attributes?.style?.color?.duotone;\n\n\t\tif ( ! duotoneSupport || ! colors ) {\n\t\t\treturn <BlockListBlock { ...props } />;\n\t\t}\n\n\t\tconst id = `wp-duotone-${ useInstanceId( BlockListBlock ) }`;\n\n\t\t// Extra .editor-styles-wrapper specificity is needed in the editor\n\t\t// since we're not using inline styles to apply the filter. We need to\n\t\t// override duotone applied by global styles and theme.json.\n\t\tconst selectorsGroup = scopeSelector(\n\t\t\t`.editor-styles-wrapper .${ id }`,\n\t\t\tduotoneSupport\n\t\t);\n\n\t\tconst className = classnames( props?.className, id );\n\n\t\tconst element = useContext( BlockList.__unstableElementContext );\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ element &&\n\t\t\t\t\tcreatePortal(\n\t\t\t\t\t\t<InlineDuotone\n\t\t\t\t\t\t\tselector={ selectorsGroup }\n\t\t\t\t\t\t\tid={ id }\n\t\t\t\t\t\t\tcolors={ colors }\n\t\t\t\t\t\t/>,\n\t\t\t\t\t\telement\n\t\t\t\t\t) }\n\t\t\t\t<BlockListBlock { ...props } className={ className } />\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneStyles'\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/duotone/add-attributes',\n\taddDuotoneAttributes\n);\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/duotone/with-editor-controls',\n\twithDuotoneControls\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/duotone/with-styles',\n\twithDuotoneStyles\n);\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/hooks/duotone.js"],"names":["classnames","extend","namesPlugin","getBlockSupport","hasBlockSupport","createHigherOrderComponent","useInstanceId","addFilter","useMemo","useContext","createPortal","useSelect","BlockControls","__experimentalDuotoneControl","DuotoneControl","useSetting","BlockList","__unstableDuotoneFilter","DuotoneFilter","__unstableDuotoneStylesheet","DuotoneStylesheet","__unstableDuotoneUnsetStylesheet","DuotoneUnsetStylesheet","store","blockEditorStore","EMPTY_ARRAY","InlineDuotone","selector","id","colors","useMultiOriginPresets","presetSetting","defaultSetting","disableDefault","userPresets","themePresets","defaultPresets","getColorsFromDuotonePreset","duotone","duotonePalette","preset","find","slug","undefined","getDuotonePresetFromColors","Array","isArray","duotonePreset","every","val","index","DuotonePanel","attributes","setAttributes","style","duotoneStyle","color","colorPalette","disableCustomColors","disableCustomDuotone","length","duotonePresetOrColors","newDuotone","maybePreset","newStyle","addDuotoneAttributes","settings","Object","assign","type","withDuotoneControls","BlockEdit","props","hasDuotoneSupport","name","isContentLocked","select","__unstableGetContentLockingParent","clientId","scopeSelector","scope","scopes","split","selectors","selectorsScoped","forEach","outer","inner","push","trim","join","BlockDuotoneStyles","element","__unstableElementContext","duotoneSupportSelectors","selectorsGroup","withDuotoneStyles","BlockListBlock","duotoneSupport","className"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { extend } from 'colord';\nimport namesPlugin from 'colord/plugins/names';\n\n/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { useMemo, useContext, createPortal } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBlockControls,\n\t__experimentalDuotoneControl as DuotoneControl,\n\tuseSetting,\n} from '../components';\nimport BlockList from '../components/block-list';\nimport {\n\t__unstableDuotoneFilter as DuotoneFilter,\n\t__unstableDuotoneStylesheet as DuotoneStylesheet,\n\t__unstableDuotoneUnsetStylesheet as DuotoneUnsetStylesheet,\n} from '../components/duotone';\nimport { store as blockEditorStore } from '../store';\n\nconst EMPTY_ARRAY = [];\n\nextend( [ namesPlugin ] );\n\n/**\n * SVG and stylesheet needed for rendering the duotone filter.\n *\n * @param {Object} props Duotone props.\n * @param {string} props.selector Selector to apply the filter to.\n * @param {string} props.id Unique id for this duotone filter.\n * @param {string[]|\"unset\"} props.colors Array of RGB color strings ordered from dark to light.\n *\n * @return {WPElement} Duotone element.\n */\nfunction InlineDuotone( { selector, id, colors } ) {\n\tif ( colors === 'unset' ) {\n\t\treturn <DuotoneUnsetStylesheet selector={ selector } />;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<DuotoneFilter id={ id } colors={ colors } />\n\t\t\t<DuotoneStylesheet id={ id } selector={ selector } />\n\t\t</>\n\t);\n}\n\nfunction useMultiOriginPresets( { presetSetting, defaultSetting } ) {\n\tconst disableDefault = ! useSetting( defaultSetting );\n\tconst userPresets =\n\t\tuseSetting( `${ presetSetting }.custom` ) || EMPTY_ARRAY;\n\tconst themePresets =\n\t\tuseSetting( `${ presetSetting }.theme` ) || EMPTY_ARRAY;\n\tconst defaultPresets =\n\t\tuseSetting( `${ presetSetting }.default` ) || EMPTY_ARRAY;\n\treturn useMemo(\n\t\t() => [\n\t\t\t...userPresets,\n\t\t\t...themePresets,\n\t\t\t...( disableDefault ? EMPTY_ARRAY : defaultPresets ),\n\t\t],\n\t\t[ disableDefault, userPresets, themePresets, defaultPresets ]\n\t);\n}\n\nexport function getColorsFromDuotonePreset( duotone, duotonePalette ) {\n\tif ( ! duotone ) {\n\t\treturn;\n\t}\n\tconst preset = duotonePalette?.find( ( { slug } ) => {\n\t\treturn duotone === `var:preset|duotone|${ slug }`;\n\t} );\n\n\treturn preset ? preset.colors : undefined;\n}\n\nexport function getDuotonePresetFromColors( colors, duotonePalette ) {\n\tif ( ! colors || ! Array.isArray( colors ) ) {\n\t\treturn;\n\t}\n\n\tconst preset = duotonePalette?.find( ( duotonePreset ) => {\n\t\treturn duotonePreset?.colors?.every(\n\t\t\t( val, index ) => val === colors[ index ]\n\t\t);\n\t} );\n\n\treturn preset ? `var:preset|duotone|${ preset.slug }` : undefined;\n}\n\nfunction DuotonePanel( { attributes, setAttributes } ) {\n\tconst style = attributes?.style;\n\tconst duotoneStyle = style?.color?.duotone;\n\n\tconst duotonePalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.duotone',\n\t\tdefaultSetting: 'color.defaultDuotone',\n\t} );\n\tconst colorPalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.palette',\n\t\tdefaultSetting: 'color.defaultPalette',\n\t} );\n\tconst disableCustomColors = ! useSetting( 'color.custom' );\n\tconst disableCustomDuotone =\n\t\t! useSetting( 'color.customDuotone' ) ||\n\t\t( colorPalette?.length === 0 && disableCustomColors );\n\n\tif ( duotonePalette?.length === 0 && disableCustomDuotone ) {\n\t\treturn null;\n\t}\n\n\tconst duotonePresetOrColors = ! Array.isArray( duotoneStyle )\n\t\t? getColorsFromDuotonePreset( duotoneStyle, duotonePalette )\n\t\t: duotoneStyle;\n\n\treturn (\n\t\t<BlockControls group=\"block\" __experimentalShareWithChildBlocks>\n\t\t\t<DuotoneControl\n\t\t\t\tduotonePalette={ duotonePalette }\n\t\t\t\tcolorPalette={ colorPalette }\n\t\t\t\tdisableCustomDuotone={ disableCustomDuotone }\n\t\t\t\tdisableCustomColors={ disableCustomColors }\n\t\t\t\tvalue={ duotonePresetOrColors }\n\t\t\t\tonChange={ ( newDuotone ) => {\n\t\t\t\t\tconst maybePreset = getDuotonePresetFromColors(\n\t\t\t\t\t\tnewDuotone,\n\t\t\t\t\t\tduotonePalette\n\t\t\t\t\t);\n\n\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t...style,\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t...style?.color,\n\t\t\t\t\t\t\tduotone: maybePreset ?? newDuotone, // use preset or fallback to custom colors.\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tsetAttributes( { style: newStyle } );\n\t\t\t\t} }\n\t\t\t/>\n\t\t</BlockControls>\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `duotone` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addDuotoneAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, 'color.__experimentalDuotone' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default\n\t// values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override the default edit UI to include toolbar controls for duotone if the\n * block supports duotone.\n *\n * @param {Function} BlockEdit Original component.\n *\n * @return {Function} Wrapped component.\n */\nconst withDuotoneControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst hasDuotoneSupport = hasBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\t\tconst isContentLocked = useSelect(\n\t\t\t( select ) => {\n\t\t\t\treturn select(\n\t\t\t\t\tblockEditorStore\n\t\t\t\t).__unstableGetContentLockingParent( props.clientId );\n\t\t\t},\n\t\t\t[ props.clientId ]\n\t\t);\n\n\t\t// CAUTION: code added before this line will be executed\n\t\t// for all blocks, not just those that support duotone. Code added\n\t\t// above this line should be carefully evaluated for its impact on\n\t\t// performance.\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ hasDuotoneSupport && ! isContentLocked && (\n\t\t\t\t\t<DuotonePanel { ...props } />\n\t\t\t\t) }\n\t\t\t\t<BlockEdit { ...props } />\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneControls'\n);\n\n/**\n * Function that scopes a selector with another one. This works a bit like\n * SCSS nesting except the `&` operator isn't supported.\n *\n * @example\n * ```js\n * const scope = '.a, .b .c';\n * const selector = '> .x, .y';\n * const merged = scopeSelector( scope, selector );\n * // merged is '.a > .x, .a .y, .b .c > .x, .b .c .y'\n * ```\n *\n * @param {string} scope Selector to scope to.\n * @param {string} selector Original selector.\n *\n * @return {string} Scoped selector.\n */\nfunction scopeSelector( scope, selector ) {\n\tconst scopes = scope.split( ',' );\n\tconst selectors = selector.split( ',' );\n\n\tconst selectorsScoped = [];\n\tscopes.forEach( ( outer ) => {\n\t\tselectors.forEach( ( inner ) => {\n\t\t\tselectorsScoped.push( `${ outer.trim() } ${ inner.trim() }` );\n\t\t} );\n\t} );\n\n\treturn selectorsScoped.join( ', ' );\n}\n\nfunction BlockDuotoneStyles( { name, duotoneStyle, id } ) {\n\tconst duotonePalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.duotone',\n\t\tdefaultSetting: 'color.defaultDuotone',\n\t} );\n\n\tconst element = useContext( BlockList.__unstableElementContext );\n\n\t// Portals cannot exist without a container.\n\t// Guard against empty Duotone styles.\n\tif ( ! element || ! duotoneStyle ) {\n\t\treturn null;\n\t}\n\n\tlet colors = duotoneStyle;\n\n\tif ( ! Array.isArray( colors ) && colors !== 'unset' ) {\n\t\tcolors = getColorsFromDuotonePreset( colors, duotonePalette );\n\t}\n\n\tconst duotoneSupportSelectors = getBlockSupport(\n\t\tname,\n\t\t'color.__experimentalDuotone'\n\t);\n\n\t// Extra .editor-styles-wrapper specificity is needed in the editor\n\t// since we're not using inline styles to apply the filter. We need to\n\t// override duotone applied by global styles and theme.json.\n\tconst selectorsGroup = scopeSelector(\n\t\t`.editor-styles-wrapper .${ id }`,\n\t\tduotoneSupportSelectors\n\t);\n\n\treturn createPortal(\n\t\t<InlineDuotone\n\t\t\tselector={ selectorsGroup }\n\t\t\tid={ id }\n\t\t\tcolors={ colors }\n\t\t/>,\n\t\telement\n\t);\n}\n\n/**\n * Override the default block element to include duotone styles.\n *\n * @param {Function} BlockListBlock Original component.\n *\n * @return {Function} Wrapped component.\n */\nconst withDuotoneStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst duotoneSupport = getBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\n\t\tconst id = `wp-duotone-${ useInstanceId( BlockListBlock ) }`;\n\t\tconst className = duotoneSupport\n\t\t\t? classnames( props?.className, id )\n\t\t\t: props?.className;\n\t\tconst duotoneStyle = props?.attributes?.style?.color?.duotone;\n\n\t\t// CAUTION: code added before this line will be executed\n\t\t// for all blocks, not just those that support duotone. Code added\n\t\t// above this line should be carefully evaluated for its impact on\n\t\t// performance.\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ duotoneSupport && duotoneStyle && (\n\t\t\t\t\t<BlockDuotoneStyles\n\t\t\t\t\t\tname={ props?.name }\n\t\t\t\t\t\tduotoneStyle={ duotoneStyle }\n\t\t\t\t\t\tid={ id }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t<BlockListBlock { ...props } className={ className } />\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneStyles'\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/duotone/add-attributes',\n\taddDuotoneAttributes\n);\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/duotone/with-editor-controls',\n\twithDuotoneControls\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/duotone/with-styles',\n\twithDuotoneStyles\n);\n"]}