@wordpress/block-editor 10.2.0 → 10.3.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 (285) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +41 -0
  3. package/build/components/block-draggable/draggable-chip.js +4 -2
  4. package/build/components/block-draggable/draggable-chip.js.map +1 -1
  5. package/build/components/block-inspector/index.js +4 -4
  6. package/build/components/block-inspector/index.js.map +1 -1
  7. package/build/components/block-list/block-list-compact.native.js +1 -0
  8. package/build/components/block-list/block-list-compact.native.js.map +1 -1
  9. package/build/components/block-list/block.js +72 -14
  10. package/build/components/block-list/block.js.map +1 -1
  11. package/build/components/block-list/block.native.js +79 -12
  12. package/build/components/block-list/block.native.js.map +1 -1
  13. package/build/components/block-list/use-in-between-inserter.js +7 -23
  14. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  15. package/build/components/block-lock/modal.js +9 -6
  16. package/build/components/block-lock/modal.js.map +1 -1
  17. package/build/components/block-parent-selector/index.js +3 -3
  18. package/build/components/block-parent-selector/index.js.map +1 -1
  19. package/build/components/block-patterns-list/index.js +5 -4
  20. package/build/components/block-patterns-list/index.js.map +1 -1
  21. package/build/components/block-popover/drop-zone.js +85 -0
  22. package/build/components/block-popover/drop-zone.js.map +1 -0
  23. package/build/components/block-popover/index.js +2 -1
  24. package/build/components/block-popover/index.js.map +1 -1
  25. package/build/components/block-preview/auto.js +2 -2
  26. package/build/components/block-preview/auto.js.map +1 -1
  27. package/build/components/block-preview/index.js +6 -9
  28. package/build/components/block-preview/index.js.map +1 -1
  29. package/build/components/block-preview/live.js +3 -7
  30. package/build/components/block-preview/live.js.map +1 -1
  31. package/build/components/block-selection-clearer/index.js +9 -1
  32. package/build/components/block-selection-clearer/index.js.map +1 -1
  33. package/build/components/block-settings-menu/block-settings-dropdown.js +17 -11
  34. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  35. package/build/components/block-styles/index.js +18 -42
  36. package/build/components/block-styles/index.js.map +1 -1
  37. package/build/components/block-toolbar/index.js +4 -4
  38. package/build/components/block-toolbar/index.js.map +1 -1
  39. package/build/components/block-tools/back-compat.js +2 -1
  40. package/build/components/block-tools/back-compat.js.map +1 -1
  41. package/build/components/block-tools/insertion-point.js +50 -20
  42. package/build/components/block-tools/insertion-point.js.map +1 -1
  43. package/build/components/block-tools/selected-block-popover.js +15 -3
  44. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  45. package/build/components/colors-gradients/control.js +1 -1
  46. package/build/components/colors-gradients/control.js.map +1 -1
  47. package/build/components/colors-gradients/panel-color-gradient-settings.js +2 -2
  48. package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  49. package/build/components/font-sizes/fluid-utils.js +256 -0
  50. package/build/components/font-sizes/fluid-utils.js.map +1 -0
  51. package/build/components/font-sizes/index.js +8 -0
  52. package/build/components/font-sizes/index.js.map +1 -1
  53. package/build/components/index.js +0 -9
  54. package/build/components/index.js.map +1 -1
  55. package/build/components/inner-blocks/use-inner-block-template-sync.js +3 -2
  56. package/build/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  57. package/build/components/inserter/block-patterns-tab.js +151 -78
  58. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  59. package/build/components/inserter/menu.js +14 -3
  60. package/build/components/inserter/menu.js.map +1 -1
  61. package/build/components/inserter-draggable-blocks/index.js +4 -2
  62. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  63. package/build/components/list-view/use-list-view-drop-zone.js +1 -14
  64. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  65. package/build/components/preview-options/index.js +2 -3
  66. package/build/components/preview-options/index.js.map +1 -1
  67. package/build/components/spacing-sizes-control/spacing-input-control.js +35 -5
  68. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  69. package/build/components/use-block-drop-zone/index.js +98 -57
  70. package/build/components/use-block-drop-zone/index.js.map +1 -1
  71. package/build/components/use-on-block-drop/index.js +12 -12
  72. package/build/components/use-on-block-drop/index.js.map +1 -1
  73. package/build/components/use-on-block-drop/types.js +6 -0
  74. package/build/components/use-on-block-drop/types.js.map +1 -0
  75. package/build/hooks/align.js +1 -3
  76. package/build/hooks/align.js.map +1 -1
  77. package/build/hooks/align.native.js +1 -7
  78. package/build/hooks/align.native.js.map +1 -1
  79. package/build/hooks/font-size.js +60 -0
  80. package/build/hooks/font-size.js.map +1 -1
  81. package/build/hooks/margin.js +6 -5
  82. package/build/hooks/margin.js.map +1 -1
  83. package/build/hooks/padding.js +2 -1
  84. package/build/hooks/padding.js.map +1 -1
  85. package/build/hooks/style.js +126 -4
  86. package/build/hooks/style.js.map +1 -1
  87. package/build/hooks/use-typography-props.js +17 -3
  88. package/build/hooks/use-typography-props.js.map +1 -1
  89. package/build/hooks/utils.js +1 -1
  90. package/build/hooks/utils.js.map +1 -1
  91. package/build/store/actions.js +59 -45
  92. package/build/store/actions.js.map +1 -1
  93. package/build/store/defaults.js +3 -0
  94. package/build/store/defaults.js.map +1 -1
  95. package/build/store/reducer.js +31 -15
  96. package/build/store/reducer.js.map +1 -1
  97. package/build/utils/math.js +14 -0
  98. package/build/utils/math.js.map +1 -1
  99. package/build/utils/pre-parse-patterns.js +19 -2
  100. package/build/utils/pre-parse-patterns.js.map +1 -1
  101. package/build-module/components/block-draggable/draggable-chip.js +7 -3
  102. package/build-module/components/block-draggable/draggable-chip.js.map +1 -1
  103. package/build-module/components/block-inspector/index.js +4 -4
  104. package/build-module/components/block-inspector/index.js.map +1 -1
  105. package/build-module/components/block-list/block-list-compact.native.js +1 -0
  106. package/build-module/components/block-list/block-list-compact.native.js.map +1 -1
  107. package/build-module/components/block-list/block.js +72 -14
  108. package/build-module/components/block-list/block.js.map +1 -1
  109. package/build-module/components/block-list/block.native.js +80 -13
  110. package/build-module/components/block-list/block.native.js.map +1 -1
  111. package/build-module/components/block-list/use-in-between-inserter.js +8 -24
  112. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  113. package/build-module/components/block-lock/modal.js +10 -8
  114. package/build-module/components/block-lock/modal.js.map +1 -1
  115. package/build-module/components/block-parent-selector/index.js +3 -3
  116. package/build-module/components/block-parent-selector/index.js.map +1 -1
  117. package/build-module/components/block-patterns-list/index.js +5 -4
  118. package/build-module/components/block-patterns-list/index.js.map +1 -1
  119. package/build-module/components/block-popover/drop-zone.js +70 -0
  120. package/build-module/components/block-popover/drop-zone.js.map +1 -0
  121. package/build-module/components/block-popover/index.js +2 -1
  122. package/build-module/components/block-popover/index.js.map +1 -1
  123. package/build-module/components/block-preview/auto.js +1 -1
  124. package/build-module/components/block-preview/auto.js.map +1 -1
  125. package/build-module/components/block-preview/index.js +6 -9
  126. package/build-module/components/block-preview/index.js.map +1 -1
  127. package/build-module/components/block-preview/live.js +3 -6
  128. package/build-module/components/block-preview/live.js.map +1 -1
  129. package/build-module/components/block-selection-clearer/index.js +9 -1
  130. package/build-module/components/block-selection-clearer/index.js.map +1 -1
  131. package/build-module/components/block-settings-menu/block-settings-dropdown.js +18 -12
  132. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  133. package/build-module/components/block-styles/index.js +19 -44
  134. package/build-module/components/block-styles/index.js.map +1 -1
  135. package/build-module/components/block-toolbar/index.js +4 -4
  136. package/build-module/components/block-toolbar/index.js.map +1 -1
  137. package/build-module/components/block-tools/back-compat.js +2 -1
  138. package/build-module/components/block-tools/back-compat.js.map +1 -1
  139. package/build-module/components/block-tools/insertion-point.js +48 -20
  140. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  141. package/build-module/components/block-tools/selected-block-popover.js +15 -3
  142. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  143. package/build-module/components/colors-gradients/control.js +2 -2
  144. package/build-module/components/colors-gradients/control.js.map +1 -1
  145. package/build-module/components/colors-gradients/panel-color-gradient-settings.js +3 -3
  146. package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  147. package/build-module/components/font-sizes/fluid-utils.js +245 -0
  148. package/build-module/components/font-sizes/fluid-utils.js.map +1 -0
  149. package/build-module/components/font-sizes/index.js +1 -0
  150. package/build-module/components/font-sizes/index.js.map +1 -1
  151. package/build-module/components/index.js +0 -1
  152. package/build-module/components/index.js.map +1 -1
  153. package/build-module/components/inner-blocks/use-inner-block-template-sync.js +3 -2
  154. package/build-module/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  155. package/build-module/components/inserter/block-patterns-tab.js +148 -81
  156. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  157. package/build-module/components/inserter/menu.js +10 -3
  158. package/build-module/components/inserter/menu.js.map +1 -1
  159. package/build-module/components/inserter-draggable-blocks/index.js +4 -2
  160. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  161. package/build-module/components/list-view/use-list-view-drop-zone.js +1 -14
  162. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  163. package/build-module/components/preview-options/index.js +2 -3
  164. package/build-module/components/preview-options/index.js.map +1 -1
  165. package/build-module/components/spacing-sizes-control/spacing-input-control.js +34 -5
  166. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  167. package/build-module/components/use-block-drop-zone/index.js +98 -58
  168. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  169. package/build-module/components/use-on-block-drop/index.js +12 -12
  170. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  171. package/build-module/components/use-on-block-drop/types.js +2 -0
  172. package/build-module/components/use-on-block-drop/types.js.map +1 -0
  173. package/build-module/hooks/align.js +1 -2
  174. package/build-module/hooks/align.js.map +1 -1
  175. package/build-module/hooks/align.native.js +1 -6
  176. package/build-module/hooks/align.native.js.map +1 -1
  177. package/build-module/hooks/font-size.js +59 -1
  178. package/build-module/hooks/font-size.js.map +1 -1
  179. package/build-module/hooks/margin.js +6 -5
  180. package/build-module/hooks/margin.js.map +1 -1
  181. package/build-module/hooks/padding.js +2 -1
  182. package/build-module/hooks/padding.js.map +1 -1
  183. package/build-module/hooks/style.js +124 -3
  184. package/build-module/hooks/style.js.map +1 -1
  185. package/build-module/hooks/use-typography-props.js +17 -4
  186. package/build-module/hooks/use-typography-props.js.map +1 -1
  187. package/build-module/hooks/utils.js +2 -2
  188. package/build-module/hooks/utils.js.map +1 -1
  189. package/build-module/store/actions.js +55 -42
  190. package/build-module/store/actions.js.map +1 -1
  191. package/build-module/store/defaults.js +3 -0
  192. package/build-module/store/defaults.js.map +1 -1
  193. package/build-module/store/reducer.js +32 -16
  194. package/build-module/store/reducer.js.map +1 -1
  195. package/build-module/utils/math.js +12 -0
  196. package/build-module/utils/math.js.map +1 -1
  197. package/build-module/utils/pre-parse-patterns.js +19 -2
  198. package/build-module/utils/pre-parse-patterns.js.map +1 -1
  199. package/build-style/style-rtl.css +243 -144
  200. package/build-style/style.css +243 -144
  201. package/package.json +28 -28
  202. package/src/components/block-breadcrumb/test/index.js +1 -1
  203. package/src/components/block-draggable/draggable-chip.js +4 -2
  204. package/src/components/block-inspector/index.js +8 -7
  205. package/src/components/block-list/block-list-compact.native.js +1 -0
  206. package/src/components/block-list/block.js +111 -7
  207. package/src/components/block-list/block.native.js +123 -9
  208. package/src/components/block-list/style.scss +93 -126
  209. package/src/components/block-list/use-in-between-inserter.js +8 -19
  210. package/src/components/block-lock/modal.js +12 -7
  211. package/src/components/block-mover/style.scss +0 -1
  212. package/src/components/block-parent-selector/index.js +3 -3
  213. package/src/components/block-patterns-list/index.js +9 -5
  214. package/src/components/block-patterns-list/style.scss +7 -3
  215. package/src/components/block-popover/README.md +8 -0
  216. package/src/components/block-popover/drop-zone.js +63 -0
  217. package/src/components/block-popover/index.js +2 -1
  218. package/src/components/block-popover/style.scss +17 -1
  219. package/src/components/block-preview/auto.js +1 -1
  220. package/src/components/block-preview/index.js +7 -8
  221. package/src/components/block-preview/live.js +2 -7
  222. package/src/components/block-preview/test/index.js +1 -7
  223. package/src/components/block-selection-clearer/index.js +7 -2
  224. package/src/components/block-selection-clearer/test/index.js +118 -0
  225. package/src/components/block-settings-menu/block-settings-dropdown.js +25 -11
  226. package/src/components/block-settings-menu/test/block-mode-toggle.js +17 -17
  227. package/src/components/block-styles/index.js +26 -49
  228. package/src/components/block-switcher/test/index.js +2 -2
  229. package/src/components/block-toolbar/index.js +4 -6
  230. package/src/components/block-toolbar/style.scss +38 -14
  231. package/src/components/block-tools/back-compat.js +1 -0
  232. package/src/components/block-tools/insertion-point.js +42 -17
  233. package/src/components/block-tools/selected-block-popover.js +14 -1
  234. package/src/components/button-block-appender/style.scss +4 -2
  235. package/src/components/color-palette/test/__snapshots__/control.js.snap +32 -52
  236. package/src/components/color-palette/test/control.js +11 -15
  237. package/src/components/colors-gradients/control.js +2 -2
  238. package/src/components/colors-gradients/panel-color-gradient-settings.js +3 -4
  239. package/src/components/colors-gradients/test/control.js +49 -77
  240. package/src/components/font-sizes/fluid-utils.js +296 -0
  241. package/src/components/font-sizes/index.js +1 -0
  242. package/src/components/font-sizes/test/fluid-utils.js +168 -0
  243. package/src/components/image-size-control/test/index.js +47 -60
  244. package/src/components/index.js +0 -1
  245. package/src/components/inner-blocks/use-inner-block-template-sync.js +3 -2
  246. package/src/components/inserter/block-patterns-tab.js +232 -98
  247. package/src/components/inserter/menu.js +15 -2
  248. package/src/components/inserter/style.scss +94 -9
  249. package/src/components/inserter/test/reusable-blocks-tab.js +6 -6
  250. package/src/components/inserter-draggable-blocks/index.js +12 -2
  251. package/src/components/inserter-list-item/style.scss +20 -1
  252. package/src/components/link-control/test/index.js +1 -1
  253. package/src/components/list-view/use-list-view-drop-zone.js +4 -18
  254. package/src/components/panel-color-settings/test/index.js +4 -4
  255. package/src/components/preview-options/index.js +2 -2
  256. package/src/components/preview-options/style.scss +1 -1
  257. package/src/components/provider/test/use-block-sync.js +131 -165
  258. package/src/components/responsive-block-control/test/index.js +4 -4
  259. package/src/components/spacing-sizes-control/spacing-input-control.js +16 -2
  260. package/src/components/spacing-sizes-control/style.scss +26 -19
  261. package/src/components/use-block-drop-zone/index.js +136 -79
  262. package/src/components/use-block-drop-zone/test/index.js +333 -81
  263. package/src/components/use-on-block-drop/index.js +11 -12
  264. package/src/components/use-on-block-drop/types.ts +1 -0
  265. package/src/hooks/align.js +3 -2
  266. package/src/hooks/align.native.js +5 -8
  267. package/src/hooks/font-size.js +75 -0
  268. package/src/hooks/margin.js +5 -4
  269. package/src/hooks/padding.js +1 -0
  270. package/src/hooks/style.js +122 -3
  271. package/src/hooks/test/style.js +206 -1
  272. package/src/hooks/test/use-typography-props.js +22 -0
  273. package/src/hooks/use-typography-props.js +18 -3
  274. package/src/hooks/utils.js +6 -2
  275. package/src/store/actions.js +20 -12
  276. package/src/store/defaults.js +3 -0
  277. package/src/store/reducer.js +31 -24
  278. package/src/store/test/actions.js +0 -9
  279. package/src/utils/math.js +17 -0
  280. package/src/utils/pre-parse-patterns.js +12 -7
  281. package/build/components/inserter/pattern-panel.js +0 -87
  282. package/build/components/inserter/pattern-panel.js.map +0 -1
  283. package/build-module/components/inserter/pattern-panel.js +0 -74
  284. package/build-module/components/inserter/pattern-panel.js.map +0 -1
  285. package/src/components/inserter/pattern-panel.js +0 -93
@@ -11,7 +11,10 @@ import {
11
11
  /**
12
12
  * Internal dependencies
13
13
  */
14
- import { getDistanceToNearestEdge } from '../../utils/math';
14
+ import {
15
+ getDistanceToNearestEdge,
16
+ isPointContainedByRect,
17
+ } from '../../utils/math';
15
18
  import useOnBlockDrop from '../use-on-block-drop';
16
19
  import { store as blockEditorStore } from '../../store';
17
20
 
@@ -48,23 +51,6 @@ import { store as blockEditorStore } from '../../store';
48
51
  * 'inside' refers to nesting as an inner block.
49
52
  */
50
53
 
51
- /**
52
- * Is the point contained by the rectangle.
53
- *
54
- * @param {WPPoint} point The point.
55
- * @param {DOMRect} rect The rectangle.
56
- *
57
- * @return {boolean} True if the point is contained by the rectangle, false otherwise.
58
- */
59
- function isPointContainedByRect( point, rect ) {
60
- return (
61
- rect.left <= point.x &&
62
- rect.right >= point.x &&
63
- rect.top <= point.y &&
64
- rect.bottom >= point.y
65
- );
66
- }
67
-
68
54
  /**
69
55
  * Determines whether the user positioning the dragged block to nest as an
70
56
  * inner block.
@@ -31,7 +31,7 @@ describe( 'PanelColorSettings', () => {
31
31
  ] }
32
32
  />
33
33
  );
34
- expect( container.innerHTML ).toBe( '' );
34
+ expect( container ).toBeEmptyDOMElement();
35
35
  } );
36
36
 
37
37
  it( 'should render a color panel if at least one setting supports custom colors', async () => {
@@ -55,7 +55,7 @@ describe( 'PanelColorSettings', () => {
55
55
  ] }
56
56
  />
57
57
  );
58
- expect( container.innerHTML ).not.toBe( '' );
58
+ expect( container ).not.toBeEmptyDOMElement();
59
59
  } );
60
60
 
61
61
  it( 'should render a color panel if at least one setting specifies some colors to choose', async () => {
@@ -85,7 +85,7 @@ describe( 'PanelColorSettings', () => {
85
85
  ] }
86
86
  />
87
87
  );
88
- expect( container.innerHTML ).not.toBe( '' );
88
+ expect( container ).not.toBeEmptyDOMElement();
89
89
  } );
90
90
 
91
91
  it( 'should not render anything if none of the setting panels has colors to choose', async () => {
@@ -112,6 +112,6 @@ describe( 'PanelColorSettings', () => {
112
112
  ] }
113
113
  />
114
114
  );
115
- expect( container.innerHTML ).not.toBe( '' );
115
+ expect( container ).not.toBeEmptyDOMElement();
116
116
  } );
117
117
  } );
@@ -13,6 +13,7 @@ import { check } from '@wordpress/icons';
13
13
 
14
14
  export default function PreviewOptions( {
15
15
  children,
16
+ viewLabel,
16
17
  className,
17
18
  isEnabled = true,
18
19
  deviceType,
@@ -32,8 +33,7 @@ export default function PreviewOptions( {
32
33
  variant: 'tertiary',
33
34
  className: 'block-editor-post-preview__button-toggle',
34
35
  disabled: ! isEnabled,
35
- /* translators: button label text should, if possible, be under 16 characters. */
36
- children: __( 'View' ),
36
+ children: viewLabel,
37
37
  };
38
38
  const menuProps = {
39
39
  'aria-label': __( 'View options' ),
@@ -28,7 +28,7 @@
28
28
  }
29
29
 
30
30
  .edit-post-header__settings,
31
- .edit-site-header__actions {
31
+ .edit-site-header-edit-mode__actions {
32
32
  @include break-small () {
33
33
  .editor-post-preview {
34
34
  display: none;
@@ -6,7 +6,7 @@ import { registerBlockType } from '@wordpress/blocks';
6
6
  /**
7
7
  * External dependencies
8
8
  */
9
- import { create, act } from 'react-test-renderer';
9
+ import { render } from '@testing-library/react';
10
10
 
11
11
  /**
12
12
  * Internal dependencies
@@ -48,16 +48,13 @@ describe( 'useBlockSync hook', () => {
48
48
  const onChange = jest.fn();
49
49
  const onInput = jest.fn();
50
50
 
51
- let root;
52
- await act( async () => {
53
- root = create(
54
- <TestWrapper
55
- value={ fakeBlocks }
56
- onChange={ onChange }
57
- onInput={ onInput }
58
- />
59
- );
60
- } );
51
+ const { rerender } = render(
52
+ <TestWrapper
53
+ value={ fakeBlocks }
54
+ onChange={ onChange }
55
+ onInput={ onInput }
56
+ />
57
+ );
61
58
 
62
59
  // Reset blocks should be called on mount.
63
60
  expect( onChange ).not.toHaveBeenCalled();
@@ -68,15 +65,13 @@ describe( 'useBlockSync hook', () => {
68
65
  const testBlocks = [
69
66
  { clientId: 'a', innerBlocks: [], attributes: { foo: 1 } },
70
67
  ];
71
- await act( async () => {
72
- root.update(
73
- <TestWrapper
74
- value={ testBlocks }
75
- onChange={ onChange }
76
- onInput={ onInput }
77
- />
78
- );
79
- } );
68
+ rerender(
69
+ <TestWrapper
70
+ value={ testBlocks }
71
+ onChange={ onChange }
72
+ onInput={ onInput }
73
+ />
74
+ );
80
75
 
81
76
  // Reset blocks should be called when the incoming value changes.
82
77
  expect( onChange ).not.toHaveBeenCalled();
@@ -95,17 +90,14 @@ describe( 'useBlockSync hook', () => {
95
90
  const onChange = jest.fn();
96
91
  const onInput = jest.fn();
97
92
 
98
- let root;
99
- await act( async () => {
100
- root = create(
101
- <TestWrapper
102
- clientId="test"
103
- value={ fakeBlocks }
104
- onChange={ onChange }
105
- onInput={ onInput }
106
- />
107
- );
108
- } );
93
+ const { rerender } = render(
94
+ <TestWrapper
95
+ clientId="test"
96
+ value={ fakeBlocks }
97
+ onChange={ onChange }
98
+ onInput={ onInput }
99
+ />
100
+ );
109
101
 
110
102
  expect( resetBlocks ).not.toHaveBeenCalled();
111
103
  expect( onChange ).not.toHaveBeenCalled();
@@ -123,16 +115,14 @@ describe( 'useBlockSync hook', () => {
123
115
  attributes: { foo: 1 },
124
116
  },
125
117
  ];
126
- await act( async () => {
127
- root.update(
128
- <TestWrapper
129
- clientId="test"
130
- value={ testBlocks }
131
- onChange={ onChange }
132
- onInput={ onInput }
133
- />
134
- );
135
- } );
118
+ rerender(
119
+ <TestWrapper
120
+ clientId="test"
121
+ value={ testBlocks }
122
+ onChange={ onChange }
123
+ onInput={ onInput }
124
+ />
125
+ );
136
126
 
137
127
  // Reset blocks should be called when the incoming value changes.
138
128
  expect( onChange ).not.toHaveBeenCalled();
@@ -158,22 +148,20 @@ describe( 'useBlockSync hook', () => {
158
148
  attributes: { foo: 1 },
159
149
  },
160
150
  ];
161
- let root;
151
+
162
152
  let registry;
163
153
  const setRegistry = ( reg ) => {
164
154
  registry = reg;
165
155
  };
166
- await act( async () => {
167
- root = create(
168
- <TestWrapper
169
- setRegistry={ setRegistry }
170
- clientId="test"
171
- value={ value1 }
172
- onChange={ onChange }
173
- onInput={ onInput }
174
- />
175
- );
176
- } );
156
+ const { rerender } = render(
157
+ <TestWrapper
158
+ setRegistry={ setRegistry }
159
+ clientId="test"
160
+ value={ value1 }
161
+ onChange={ onChange }
162
+ onInput={ onInput }
163
+ />
164
+ );
177
165
 
178
166
  registry
179
167
  .dispatch( blockEditorStore )
@@ -188,16 +176,14 @@ describe( 'useBlockSync hook', () => {
188
176
  // triggered once more.
189
177
  expect( newBlockValue ).not.toBe( value1 );
190
178
 
191
- await act( async () => {
192
- root.update(
193
- <TestWrapper
194
- clientId="test"
195
- value={ newBlockValue }
196
- onChange={ onChange }
197
- onInput={ onInput }
198
- />
199
- );
200
- } );
179
+ rerender(
180
+ <TestWrapper
181
+ clientId="test"
182
+ value={ newBlockValue }
183
+ onChange={ onChange }
184
+ onInput={ onInput }
185
+ />
186
+ );
201
187
 
202
188
  // replaceInnerBlocks should not be called when the controlling
203
189
  // block value is the same as what already exists in the store.
@@ -210,16 +196,14 @@ describe( 'useBlockSync hook', () => {
210
196
  'setHasControlledInnerBlocks'
211
197
  );
212
198
 
213
- await act( async () => {
214
- create(
215
- <TestWrapper
216
- clientId="test"
217
- value={ [] }
218
- onChange={ jest.fn() }
219
- onInput={ jest.fn() }
220
- />
221
- );
222
- } );
199
+ render(
200
+ <TestWrapper
201
+ clientId="test"
202
+ value={ [] }
203
+ onChange={ jest.fn() }
204
+ onInput={ jest.fn() }
205
+ />
206
+ );
223
207
  expect( setAsController ).toHaveBeenCalledWith( 'test', true );
224
208
  } );
225
209
 
@@ -233,16 +217,14 @@ describe( 'useBlockSync hook', () => {
233
217
  const setRegistry = ( reg ) => {
234
218
  registry = reg;
235
219
  };
236
- await act( async () => {
237
- create(
238
- <TestWrapper
239
- setRegistry={ setRegistry }
240
- value={ value1 }
241
- onChange={ onChange }
242
- onInput={ onInput }
243
- />
244
- );
245
- } );
220
+ render(
221
+ <TestWrapper
222
+ setRegistry={ setRegistry }
223
+ value={ value1 }
224
+ onChange={ onChange }
225
+ onInput={ onInput }
226
+ />
227
+ );
246
228
  onChange.mockClear();
247
229
  onInput.mockClear();
248
230
 
@@ -278,16 +260,14 @@ describe( 'useBlockSync hook', () => {
278
260
  const setRegistry = ( reg ) => {
279
261
  registry = reg;
280
262
  };
281
- await act( async () => {
282
- create(
283
- <TestWrapper
284
- setRegistry={ setRegistry }
285
- value={ value1 }
286
- onChange={ onChange }
287
- onInput={ onInput }
288
- />
289
- );
290
- } );
263
+ render(
264
+ <TestWrapper
265
+ setRegistry={ setRegistry }
266
+ value={ value1 }
267
+ onChange={ onChange }
268
+ onInput={ onInput }
269
+ />
270
+ );
291
271
  onChange.mockClear();
292
272
  onInput.mockClear();
293
273
 
@@ -327,30 +307,26 @@ describe( 'useBlockSync hook', () => {
327
307
  },
328
308
  ];
329
309
 
330
- await act( async () => {
331
- create(
332
- <TestWrapper
333
- clientId="test"
334
- value={ value1 }
335
- onChange={ onChange }
336
- onInput={ onInput }
337
- />
338
- );
339
- } );
310
+ const { rerender } = render(
311
+ <TestWrapper
312
+ clientId="test"
313
+ value={ value1 }
314
+ onChange={ onChange }
315
+ onInput={ onInput }
316
+ />
317
+ );
340
318
  onChange.mockClear();
341
319
  onInput.mockClear();
342
320
  replaceInnerBlocks.mockClear();
343
321
 
344
- await act( async () => {
345
- create(
346
- <TestWrapper
347
- clientId="test"
348
- value={ [] }
349
- onChange={ onChange }
350
- onInput={ onInput }
351
- />
352
- );
353
- } );
322
+ rerender(
323
+ <TestWrapper
324
+ clientId="test"
325
+ value={ [] }
326
+ onChange={ onChange }
327
+ onInput={ onInput }
328
+ />
329
+ );
354
330
 
355
331
  expect( replaceInnerBlocks ).toHaveBeenCalledWith( 'test', [] );
356
332
  expect( onChange ).not.toHaveBeenCalled();
@@ -379,16 +355,14 @@ describe( 'useBlockSync hook', () => {
379
355
  const setRegistry = ( reg ) => {
380
356
  registry = reg;
381
357
  };
382
- await act( async () => {
383
- create(
384
- <TestWrapper
385
- setRegistry={ setRegistry }
386
- value={ value1 }
387
- onChange={ onChange }
388
- onInput={ onInput }
389
- />
390
- );
391
- } );
358
+ render(
359
+ <TestWrapper
360
+ setRegistry={ setRegistry }
361
+ value={ value1 }
362
+ onChange={ onChange }
363
+ onInput={ onInput }
364
+ />
365
+ );
392
366
  onChange.mockClear();
393
367
  onInput.mockClear();
394
368
  replaceInnerBlocks.mockClear();
@@ -429,17 +403,15 @@ describe( 'useBlockSync hook', () => {
429
403
  const setRegistry = ( reg ) => {
430
404
  registry = reg;
431
405
  };
432
- let root;
433
- await act( async () => {
434
- root = create(
435
- <TestWrapper
436
- setRegistry={ setRegistry }
437
- value={ fakeBlocks }
438
- onChange={ onChange1 }
439
- onInput={ onInput }
440
- />
441
- );
442
- } );
406
+
407
+ const { rerender } = render(
408
+ <TestWrapper
409
+ setRegistry={ setRegistry }
410
+ value={ fakeBlocks }
411
+ onChange={ onChange1 }
412
+ onInput={ onInput }
413
+ />
414
+ );
443
415
 
444
416
  // Create a persistent change.
445
417
  registry
@@ -468,16 +440,14 @@ describe( 'useBlockSync hook', () => {
468
440
 
469
441
  // Update the component to point at a "different entity" (e.g. different
470
442
  // blocks and onChange handler.)
471
- await act( async () => {
472
- root.update(
473
- <TestWrapper
474
- setRegistry={ setRegistry }
475
- value={ newBlocks }
476
- onChange={ onChange2 }
477
- onInput={ onInput }
478
- />
479
- );
480
- } );
443
+ rerender(
444
+ <TestWrapper
445
+ setRegistry={ setRegistry }
446
+ value={ newBlocks }
447
+ onChange={ onChange2 }
448
+ onInput={ onInput }
449
+ />
450
+ );
481
451
 
482
452
  // Create a persistent change.
483
453
  registry
@@ -511,17 +481,15 @@ describe( 'useBlockSync hook', () => {
511
481
  const setRegistry = ( reg ) => {
512
482
  registry = reg;
513
483
  };
514
- let root;
515
- await act( async () => {
516
- root = create(
517
- <TestWrapper
518
- setRegistry={ setRegistry }
519
- value={ fakeBlocks }
520
- onChange={ onChange1 }
521
- onInput={ onInput }
522
- />
523
- );
524
- } );
484
+
485
+ const { rerender } = render(
486
+ <TestWrapper
487
+ setRegistry={ setRegistry }
488
+ value={ fakeBlocks }
489
+ onChange={ onChange1 }
490
+ onInput={ onInput }
491
+ />
492
+ );
525
493
 
526
494
  const newBlocks = [
527
495
  { clientId: 'b', innerBlocks: [], attributes: { foo: 1 } },
@@ -531,16 +499,14 @@ describe( 'useBlockSync hook', () => {
531
499
 
532
500
  // Update the component to point at a "different entity" (e.g. different
533
501
  // blocks and onChange handler.)
534
- await act( async () => {
535
- root.update(
536
- <TestWrapper
537
- setRegistry={ setRegistry }
538
- value={ newBlocks }
539
- onChange={ onChange2 }
540
- onInput={ onInput }
541
- />
542
- );
543
- } );
502
+ rerender(
503
+ <TestWrapper
504
+ setRegistry={ setRegistry }
505
+ value={ newBlocks }
506
+ onChange={ onChange2 }
507
+ onInput={ onInput }
508
+ />
509
+ );
544
510
 
545
511
  // Create a persistent change.
546
512
  registry
@@ -90,7 +90,7 @@ describe( 'Basic rendering', () => {
90
90
  '.block-editor-responsive-block-control__group.is-responsive'
91
91
  );
92
92
 
93
- expect( container.innerHTML ).not.toBe( '' );
93
+ expect( container ).not.toBeEmptyDOMElement();
94
94
 
95
95
  expect( defaultControlGroup ).not.toBeNull();
96
96
  expect( responsiveControlGroup ).toBeNull();
@@ -110,7 +110,7 @@ describe( 'Basic rendering', () => {
110
110
  />
111
111
  );
112
112
 
113
- expect( container.innerHTML ).toBe( '' );
113
+ expect( container ).toBeEmptyDOMElement();
114
114
  } );
115
115
 
116
116
  it( 'should not render without valid property', () => {
@@ -121,7 +121,7 @@ describe( 'Basic rendering', () => {
121
121
  />
122
122
  );
123
123
 
124
- expect( container.innerHTML ).toBe( '' );
124
+ expect( container ).toBeEmptyDOMElement();
125
125
  } );
126
126
 
127
127
  it( 'should not render without valid default control render prop', () => {
@@ -129,7 +129,7 @@ describe( 'Basic rendering', () => {
129
129
  <ResponsiveBlockControl title="Padding" property="padding" />
130
130
  );
131
131
 
132
- expect( container.innerHTML ).toBe( '' );
132
+ expect( container ).toBeEmptyDOMElement();
133
133
  } );
134
134
 
135
135
  it( 'should render with custom label for toggle control when provided', () => {
@@ -34,6 +34,15 @@ import {
34
34
  isValueSpacingPreset,
35
35
  } from './utils';
36
36
 
37
+ const CUSTOM_VALUE_SETTINGS = {
38
+ px: { max: 300, steps: 1 },
39
+ '%': { max: 100, steps: 1 },
40
+ vw: { max: 100, steps: 1 },
41
+ vh: { max: 100, steps: 1 },
42
+ em: { max: 10, steps: 0.1 },
43
+ rm: { max: 10, steps: 0.1 },
44
+ };
45
+
37
46
  export default function SpacingInputControl( {
38
47
  spacingSizes,
39
48
  value,
@@ -107,7 +116,7 @@ export default function SpacingInputControl( {
107
116
  const customTooltipContent = ( newValue ) =>
108
117
  value === undefined ? undefined : spacingSizes[ newValue ]?.name;
109
118
 
110
- const customRangeValue = parseInt( currentValue, 10 );
119
+ const customRangeValue = parseFloat( currentValue, 10 );
111
120
 
112
121
  const getNewCustomValue = ( newSize ) => {
113
122
  const isNumeric = ! isNaN( parseFloat( newSize ) );
@@ -221,12 +230,16 @@ export default function SpacingInputControl( {
221
230
  hideLabelFromVision={ true }
222
231
  className="components-spacing-sizes-control__custom-value-input"
223
232
  style={ { gridColumn: '1' } }
233
+ size={ '__unstable-large' }
224
234
  />
225
235
 
226
236
  <RangeControl
227
237
  value={ customRangeValue }
228
238
  min={ 0 }
229
- max={ 100 }
239
+ max={ CUSTOM_VALUE_SETTINGS[ selectedUnit ]?.max ?? 10 }
240
+ step={
241
+ CUSTOM_VALUE_SETTINGS[ selectedUnit ]?.steps ?? 0.1
242
+ }
230
243
  withInputField={ false }
231
244
  onChange={ handleCustomValueSliderChange }
232
245
  className="components-spacing-sizes-control__custom-value-range"
@@ -279,6 +292,7 @@ export default function SpacingInputControl( {
279
292
  label={ ariaLabel }
280
293
  hideLabelFromVision={ true }
281
294
  __nextUnconstrainedWidth={ true }
295
+ size={ '__unstable-large' }
282
296
  />
283
297
  ) }
284
298
  </>