@wordpress/block-editor 10.1.1-next.4d3b314fd5.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 (327) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +41 -0
  3. package/build/components/block-controls/slot.js +2 -2
  4. package/build/components/block-controls/slot.js.map +1 -1
  5. package/build/components/block-draggable/draggable-chip.js +4 -2
  6. package/build/components/block-draggable/draggable-chip.js.map +1 -1
  7. package/build/components/block-inspector/index.js +4 -5
  8. package/build/components/block-inspector/index.js.map +1 -1
  9. package/build/components/block-list/block-list-compact.native.js +1 -0
  10. package/build/components/block-list/block-list-compact.native.js.map +1 -1
  11. package/build/components/block-list/block.js +72 -14
  12. package/build/components/block-list/block.js.map +1 -1
  13. package/build/components/block-list/block.native.js +79 -12
  14. package/build/components/block-list/block.native.js.map +1 -1
  15. package/build/components/block-list/use-in-between-inserter.js +7 -23
  16. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  17. package/build/components/block-lock/modal.js +9 -6
  18. package/build/components/block-lock/modal.js.map +1 -1
  19. package/build/components/block-parent-selector/index.js +5 -5
  20. package/build/components/block-parent-selector/index.js.map +1 -1
  21. package/build/components/block-patterns-list/index.js +5 -4
  22. package/build/components/block-patterns-list/index.js.map +1 -1
  23. package/build/components/block-popover/drop-zone.js +85 -0
  24. package/build/components/block-popover/drop-zone.js.map +1 -0
  25. package/build/components/block-popover/inbetween.js +3 -1
  26. package/build/components/block-popover/inbetween.js.map +1 -1
  27. package/build/components/block-popover/index.js +22 -17
  28. package/build/components/block-popover/index.js.map +1 -1
  29. package/build/components/block-preview/auto.js +2 -2
  30. package/build/components/block-preview/auto.js.map +1 -1
  31. package/build/components/block-preview/index.js +6 -9
  32. package/build/components/block-preview/index.js.map +1 -1
  33. package/build/components/block-preview/live.js +3 -7
  34. package/build/components/block-preview/live.js.map +1 -1
  35. package/build/components/block-selection-clearer/index.js +9 -1
  36. package/build/components/block-selection-clearer/index.js.map +1 -1
  37. package/build/components/block-settings-menu/block-settings-dropdown.js +22 -16
  38. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  39. package/build/components/block-styles/index.js +18 -42
  40. package/build/components/block-styles/index.js.map +1 -1
  41. package/build/components/block-toolbar/index.js +4 -4
  42. package/build/components/block-toolbar/index.js.map +1 -1
  43. package/build/components/block-tools/back-compat.js +2 -1
  44. package/build/components/block-tools/back-compat.js.map +1 -1
  45. package/build/components/block-tools/insertion-point.js +50 -20
  46. package/build/components/block-tools/insertion-point.js.map +1 -1
  47. package/build/components/block-tools/selected-block-popover.js +15 -3
  48. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  49. package/build/components/colors-gradients/control.js +1 -1
  50. package/build/components/colors-gradients/control.js.map +1 -1
  51. package/build/components/colors-gradients/panel-color-gradient-settings.js +2 -2
  52. package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  53. package/build/components/font-sizes/fluid-utils.js +256 -0
  54. package/build/components/font-sizes/fluid-utils.js.map +1 -0
  55. package/build/components/font-sizes/index.js +8 -0
  56. package/build/components/font-sizes/index.js.map +1 -1
  57. package/build/components/image-editor/use-transform-image.js +2 -2
  58. package/build/components/image-editor/use-transform-image.js.map +1 -1
  59. package/build/components/index.js +0 -9
  60. package/build/components/index.js.map +1 -1
  61. package/build/components/inner-blocks/use-inner-block-template-sync.js +3 -2
  62. package/build/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  63. package/build/components/inserter/block-patterns-tab.js +151 -78
  64. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  65. package/build/components/inserter/block-types-tab.js +1 -1
  66. package/build/components/inserter/block-types-tab.js.map +1 -1
  67. package/build/components/inserter/menu.js +14 -3
  68. package/build/components/inserter/menu.js.map +1 -1
  69. package/build/components/inserter/search-items.js +2 -17
  70. package/build/components/inserter/search-items.js.map +1 -1
  71. package/build/components/inserter-draggable-blocks/index.js +4 -2
  72. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  73. package/build/components/inspector-controls/slot.js +2 -1
  74. package/build/components/inspector-controls/slot.js.map +1 -1
  75. package/build/components/list-view/use-list-view-drop-zone.js +1 -14
  76. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  77. package/build/components/preview-options/index.js +2 -3
  78. package/build/components/preview-options/index.js.map +1 -1
  79. package/build/components/rich-text/index.js +17 -0
  80. package/build/components/rich-text/index.js.map +1 -1
  81. package/build/components/spacing-sizes-control/index.js +10 -2
  82. package/build/components/spacing-sizes-control/index.js.map +1 -1
  83. package/build/components/spacing-sizes-control/spacing-input-control.js +40 -9
  84. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  85. package/build/components/use-block-drop-zone/index.js +98 -57
  86. package/build/components/use-block-drop-zone/index.js.map +1 -1
  87. package/build/components/use-on-block-drop/index.js +12 -12
  88. package/build/components/use-on-block-drop/index.js.map +1 -1
  89. package/build/components/use-on-block-drop/types.js +6 -0
  90. package/build/components/use-on-block-drop/types.js.map +1 -0
  91. package/build/hooks/align.js +1 -3
  92. package/build/hooks/align.js.map +1 -1
  93. package/build/hooks/align.native.js +1 -7
  94. package/build/hooks/align.native.js.map +1 -1
  95. package/build/hooks/font-size.js +60 -0
  96. package/build/hooks/font-size.js.map +1 -1
  97. package/build/hooks/margin.js +6 -5
  98. package/build/hooks/margin.js.map +1 -1
  99. package/build/hooks/padding.js +2 -1
  100. package/build/hooks/padding.js.map +1 -1
  101. package/build/hooks/style.js +126 -4
  102. package/build/hooks/style.js.map +1 -1
  103. package/build/hooks/use-typography-props.js +17 -3
  104. package/build/hooks/use-typography-props.js.map +1 -1
  105. package/build/hooks/utils.js +1 -1
  106. package/build/hooks/utils.js.map +1 -1
  107. package/build/store/actions.js +59 -45
  108. package/build/store/actions.js.map +1 -1
  109. package/build/store/defaults.js +3 -0
  110. package/build/store/defaults.js.map +1 -1
  111. package/build/store/reducer.js +36 -18
  112. package/build/store/reducer.js.map +1 -1
  113. package/build/utils/math.js +14 -0
  114. package/build/utils/math.js.map +1 -1
  115. package/build/utils/pre-parse-patterns.js +19 -2
  116. package/build/utils/pre-parse-patterns.js.map +1 -1
  117. package/build-module/components/block-controls/slot.js +3 -3
  118. package/build-module/components/block-controls/slot.js.map +1 -1
  119. package/build-module/components/block-draggable/draggable-chip.js +7 -3
  120. package/build-module/components/block-draggable/draggable-chip.js.map +1 -1
  121. package/build-module/components/block-inspector/index.js +5 -6
  122. package/build-module/components/block-inspector/index.js.map +1 -1
  123. package/build-module/components/block-list/block-list-compact.native.js +1 -0
  124. package/build-module/components/block-list/block-list-compact.native.js.map +1 -1
  125. package/build-module/components/block-list/block.js +72 -14
  126. package/build-module/components/block-list/block.js.map +1 -1
  127. package/build-module/components/block-list/block.native.js +80 -13
  128. package/build-module/components/block-list/block.native.js.map +1 -1
  129. package/build-module/components/block-list/use-in-between-inserter.js +8 -24
  130. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  131. package/build-module/components/block-lock/modal.js +10 -8
  132. package/build-module/components/block-lock/modal.js.map +1 -1
  133. package/build-module/components/block-parent-selector/index.js +5 -5
  134. package/build-module/components/block-parent-selector/index.js.map +1 -1
  135. package/build-module/components/block-patterns-list/index.js +5 -4
  136. package/build-module/components/block-patterns-list/index.js.map +1 -1
  137. package/build-module/components/block-popover/drop-zone.js +70 -0
  138. package/build-module/components/block-popover/drop-zone.js.map +1 -0
  139. package/build-module/components/block-popover/inbetween.js +3 -1
  140. package/build-module/components/block-popover/inbetween.js.map +1 -1
  141. package/build-module/components/block-popover/index.js +22 -17
  142. package/build-module/components/block-popover/index.js.map +1 -1
  143. package/build-module/components/block-preview/auto.js +1 -1
  144. package/build-module/components/block-preview/auto.js.map +1 -1
  145. package/build-module/components/block-preview/index.js +6 -9
  146. package/build-module/components/block-preview/index.js.map +1 -1
  147. package/build-module/components/block-preview/live.js +3 -6
  148. package/build-module/components/block-preview/live.js.map +1 -1
  149. package/build-module/components/block-selection-clearer/index.js +9 -1
  150. package/build-module/components/block-selection-clearer/index.js.map +1 -1
  151. package/build-module/components/block-settings-menu/block-settings-dropdown.js +25 -19
  152. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  153. package/build-module/components/block-styles/index.js +19 -44
  154. package/build-module/components/block-styles/index.js.map +1 -1
  155. package/build-module/components/block-toolbar/index.js +4 -4
  156. package/build-module/components/block-toolbar/index.js.map +1 -1
  157. package/build-module/components/block-tools/back-compat.js +2 -1
  158. package/build-module/components/block-tools/back-compat.js.map +1 -1
  159. package/build-module/components/block-tools/insertion-point.js +48 -20
  160. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  161. package/build-module/components/block-tools/selected-block-popover.js +15 -3
  162. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  163. package/build-module/components/colors-gradients/control.js +2 -2
  164. package/build-module/components/colors-gradients/control.js.map +1 -1
  165. package/build-module/components/colors-gradients/panel-color-gradient-settings.js +3 -3
  166. package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  167. package/build-module/components/font-sizes/fluid-utils.js +245 -0
  168. package/build-module/components/font-sizes/fluid-utils.js.map +1 -0
  169. package/build-module/components/font-sizes/index.js +1 -0
  170. package/build-module/components/font-sizes/index.js.map +1 -1
  171. package/build-module/components/image-editor/use-transform-image.js +2 -2
  172. package/build-module/components/image-editor/use-transform-image.js.map +1 -1
  173. package/build-module/components/index.js +0 -1
  174. package/build-module/components/index.js.map +1 -1
  175. package/build-module/components/inner-blocks/use-inner-block-template-sync.js +3 -2
  176. package/build-module/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  177. package/build-module/components/inserter/block-patterns-tab.js +148 -81
  178. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  179. package/build-module/components/inserter/block-types-tab.js +3 -3
  180. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  181. package/build-module/components/inserter/menu.js +10 -3
  182. package/build-module/components/inserter/menu.js.map +1 -1
  183. package/build-module/components/inserter/search-items.js +3 -17
  184. package/build-module/components/inserter/search-items.js.map +1 -1
  185. package/build-module/components/inserter-draggable-blocks/index.js +4 -2
  186. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  187. package/build-module/components/inspector-controls/slot.js +3 -2
  188. package/build-module/components/inspector-controls/slot.js.map +1 -1
  189. package/build-module/components/list-view/use-list-view-drop-zone.js +1 -14
  190. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  191. package/build-module/components/preview-options/index.js +2 -3
  192. package/build-module/components/preview-options/index.js.map +1 -1
  193. package/build-module/components/rich-text/index.js +17 -0
  194. package/build-module/components/rich-text/index.js.map +1 -1
  195. package/build-module/components/spacing-sizes-control/index.js +10 -3
  196. package/build-module/components/spacing-sizes-control/index.js.map +1 -1
  197. package/build-module/components/spacing-sizes-control/spacing-input-control.js +40 -10
  198. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  199. package/build-module/components/use-block-drop-zone/index.js +98 -58
  200. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  201. package/build-module/components/use-on-block-drop/index.js +12 -12
  202. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  203. package/build-module/components/use-on-block-drop/types.js +2 -0
  204. package/build-module/components/use-on-block-drop/types.js.map +1 -0
  205. package/build-module/hooks/align.js +1 -2
  206. package/build-module/hooks/align.js.map +1 -1
  207. package/build-module/hooks/align.native.js +1 -6
  208. package/build-module/hooks/align.native.js.map +1 -1
  209. package/build-module/hooks/font-size.js +59 -1
  210. package/build-module/hooks/font-size.js.map +1 -1
  211. package/build-module/hooks/margin.js +6 -5
  212. package/build-module/hooks/margin.js.map +1 -1
  213. package/build-module/hooks/padding.js +2 -1
  214. package/build-module/hooks/padding.js.map +1 -1
  215. package/build-module/hooks/style.js +124 -3
  216. package/build-module/hooks/style.js.map +1 -1
  217. package/build-module/hooks/use-typography-props.js +17 -4
  218. package/build-module/hooks/use-typography-props.js.map +1 -1
  219. package/build-module/hooks/utils.js +2 -2
  220. package/build-module/hooks/utils.js.map +1 -1
  221. package/build-module/store/actions.js +55 -42
  222. package/build-module/store/actions.js.map +1 -1
  223. package/build-module/store/defaults.js +3 -0
  224. package/build-module/store/defaults.js.map +1 -1
  225. package/build-module/store/reducer.js +36 -19
  226. package/build-module/store/reducer.js.map +1 -1
  227. package/build-module/utils/math.js +12 -0
  228. package/build-module/utils/math.js.map +1 -1
  229. package/build-module/utils/pre-parse-patterns.js +19 -2
  230. package/build-module/utils/pre-parse-patterns.js.map +1 -1
  231. package/build-style/style-rtl.css +256 -152
  232. package/build-style/style.css +256 -152
  233. package/package.json +28 -29
  234. package/src/components/block-breadcrumb/test/index.js +1 -1
  235. package/src/components/block-controls/slot.js +3 -3
  236. package/src/components/block-draggable/draggable-chip.js +4 -2
  237. package/src/components/block-inspector/index.js +8 -11
  238. package/src/components/block-list/block-list-compact.native.js +1 -0
  239. package/src/components/block-list/block.js +111 -7
  240. package/src/components/block-list/block.native.js +123 -9
  241. package/src/components/block-list/style.scss +93 -126
  242. package/src/components/block-list/use-in-between-inserter.js +8 -19
  243. package/src/components/block-lock/modal.js +12 -7
  244. package/src/components/block-mover/style.scss +0 -1
  245. package/src/components/block-parent-selector/index.js +5 -5
  246. package/src/components/block-patterns-list/index.js +9 -5
  247. package/src/components/block-patterns-list/style.scss +7 -3
  248. package/src/components/block-popover/README.md +8 -0
  249. package/src/components/block-popover/drop-zone.js +63 -0
  250. package/src/components/block-popover/inbetween.js +1 -1
  251. package/src/components/block-popover/index.js +39 -22
  252. package/src/components/block-popover/style.scss +17 -1
  253. package/src/components/block-preview/auto.js +1 -1
  254. package/src/components/block-preview/index.js +7 -8
  255. package/src/components/block-preview/live.js +2 -7
  256. package/src/components/block-preview/test/index.js +1 -7
  257. package/src/components/block-selection-clearer/index.js +7 -2
  258. package/src/components/block-selection-clearer/test/index.js +118 -0
  259. package/src/components/block-settings-menu/block-settings-dropdown.js +32 -18
  260. package/src/components/block-settings-menu/test/block-mode-toggle.js +17 -17
  261. package/src/components/block-styles/index.js +26 -49
  262. package/src/components/block-switcher/test/__snapshots__/index.js.snap +104 -33
  263. package/src/components/block-switcher/test/index.js +121 -61
  264. package/src/components/block-toolbar/index.js +4 -6
  265. package/src/components/block-toolbar/style.scss +38 -14
  266. package/src/components/block-tools/back-compat.js +1 -0
  267. package/src/components/block-tools/insertion-point.js +42 -17
  268. package/src/components/block-tools/selected-block-popover.js +14 -1
  269. package/src/components/button-block-appender/style.scss +5 -1
  270. package/src/components/color-palette/test/__snapshots__/control.js.snap +32 -52
  271. package/src/components/color-palette/test/control.js +11 -15
  272. package/src/components/colors-gradients/control.js +2 -2
  273. package/src/components/colors-gradients/panel-color-gradient-settings.js +3 -4
  274. package/src/components/colors-gradients/test/control.js +49 -77
  275. package/src/components/font-sizes/fluid-utils.js +296 -0
  276. package/src/components/font-sizes/index.js +1 -0
  277. package/src/components/font-sizes/test/fluid-utils.js +168 -0
  278. package/src/components/image-editor/use-transform-image.js +2 -2
  279. package/src/components/image-size-control/test/index.js +47 -60
  280. package/src/components/index.js +0 -1
  281. package/src/components/inner-blocks/use-inner-block-template-sync.js +3 -2
  282. package/src/components/inserter/block-patterns-tab.js +232 -98
  283. package/src/components/inserter/block-types-tab.js +3 -3
  284. package/src/components/inserter/menu.js +15 -2
  285. package/src/components/inserter/search-items.js +3 -15
  286. package/src/components/inserter/style.scss +94 -9
  287. package/src/components/inserter/test/reusable-blocks-tab.js +6 -6
  288. package/src/components/inserter/test/search-items.js +4 -0
  289. package/src/components/inserter-draggable-blocks/index.js +12 -2
  290. package/src/components/inserter-list-item/style.scss +20 -1
  291. package/src/components/inspector-controls/slot.js +6 -2
  292. package/src/components/link-control/test/index.js +1 -1
  293. package/src/components/list-view/use-list-view-drop-zone.js +4 -18
  294. package/src/components/panel-color-settings/test/index.js +4 -4
  295. package/src/components/preview-options/index.js +2 -2
  296. package/src/components/preview-options/style.scss +1 -1
  297. package/src/components/provider/test/use-block-sync.js +131 -165
  298. package/src/components/responsive-block-control/test/index.js +77 -122
  299. package/src/components/rich-text/index.js +22 -0
  300. package/src/components/spacing-sizes-control/index.js +15 -3
  301. package/src/components/spacing-sizes-control/spacing-input-control.js +24 -9
  302. package/src/components/spacing-sizes-control/style.scss +42 -31
  303. package/src/components/use-block-drop-zone/index.js +136 -79
  304. package/src/components/use-block-drop-zone/test/index.js +333 -81
  305. package/src/components/use-on-block-drop/index.js +11 -12
  306. package/src/components/use-on-block-drop/types.ts +1 -0
  307. package/src/hooks/align.js +3 -2
  308. package/src/hooks/align.native.js +5 -8
  309. package/src/hooks/font-size.js +75 -0
  310. package/src/hooks/margin.js +5 -4
  311. package/src/hooks/padding.js +1 -0
  312. package/src/hooks/style.js +122 -3
  313. package/src/hooks/test/style.js +206 -1
  314. package/src/hooks/test/use-typography-props.js +22 -0
  315. package/src/hooks/use-typography-props.js +18 -3
  316. package/src/hooks/utils.js +6 -2
  317. package/src/store/actions.js +20 -12
  318. package/src/store/defaults.js +3 -0
  319. package/src/store/reducer.js +35 -28
  320. package/src/store/test/actions.js +0 -9
  321. package/src/utils/math.js +17 -0
  322. package/src/utils/pre-parse-patterns.js +12 -7
  323. package/build/components/inserter/pattern-panel.js +0 -87
  324. package/build/components/inserter/pattern-panel.js.map +0 -1
  325. package/build-module/components/inserter/pattern-panel.js +0 -74
  326. package/build-module/components/inserter/pattern-panel.js.map +0 -1
  327. package/src/components/inserter/pattern-panel.js +0 -93
@@ -1,14 +1,13 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { render, unmountComponentAtNode } from 'react-dom';
5
- import { act, Simulate } from 'react-dom/test-utils';
4
+ import { render } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
6
6
 
7
7
  /**
8
8
  * WordPress dependencies
9
9
  */
10
10
  import { Fragment, useState } from '@wordpress/element';
11
-
12
11
  import { SelectControl } from '@wordpress/components';
13
12
 
14
13
  /**
@@ -16,20 +15,6 @@ import { SelectControl } from '@wordpress/components';
16
15
  */
17
16
  import ResponsiveBlockControl from '../index';
18
17
 
19
- let container = null;
20
- beforeEach( () => {
21
- // Setup a DOM element as a render target.
22
- container = document.createElement( 'div' );
23
- document.body.appendChild( container );
24
- } );
25
-
26
- afterEach( () => {
27
- // Cleanup on exiting.
28
- unmountComponentAtNode( container );
29
- container.remove();
30
- container = null;
31
- } );
32
-
33
18
  const inputId = 'input-12345678';
34
19
 
35
20
  const sizeOptions = [
@@ -65,16 +50,13 @@ const renderTestDefaultControlComponent = ( labelComponent, device ) => {
65
50
 
66
51
  describe( 'Basic rendering', () => {
67
52
  it( 'should render with required props', () => {
68
- act( () => {
69
- render(
70
- <ResponsiveBlockControl
71
- title="Padding"
72
- property="padding"
73
- renderDefaultControl={ renderTestDefaultControlComponent }
74
- />,
75
- container
76
- );
77
- } );
53
+ const { container } = render(
54
+ <ResponsiveBlockControl
55
+ title="Padding"
56
+ property="padding"
57
+ renderDefaultControl={ renderTestDefaultControlComponent }
58
+ />
59
+ );
78
60
 
79
61
  const activePropertyLabel = Array.from(
80
62
  container.querySelectorAll( 'legend' )
@@ -108,7 +90,7 @@ describe( 'Basic rendering', () => {
108
90
  '.block-editor-responsive-block-control__group.is-responsive'
109
91
  );
110
92
 
111
- expect( container.innerHTML ).not.toBe( '' );
93
+ expect( container ).not.toBeEmptyDOMElement();
112
94
 
113
95
  expect( defaultControlGroup ).not.toBeNull();
114
96
  expect( responsiveControlGroup ).toBeNull();
@@ -121,58 +103,46 @@ describe( 'Basic rendering', () => {
121
103
  } );
122
104
 
123
105
  it( 'should not render without valid legend', () => {
124
- act( () => {
125
- render(
126
- <ResponsiveBlockControl
127
- property="padding"
128
- renderDefaultControl={ renderTestDefaultControlComponent }
129
- />,
130
- container
131
- );
132
- } );
106
+ const { container } = render(
107
+ <ResponsiveBlockControl
108
+ property="padding"
109
+ renderDefaultControl={ renderTestDefaultControlComponent }
110
+ />
111
+ );
133
112
 
134
- expect( container.innerHTML ).toBe( '' );
113
+ expect( container ).toBeEmptyDOMElement();
135
114
  } );
136
115
 
137
116
  it( 'should not render without valid property', () => {
138
- act( () => {
139
- render(
140
- <ResponsiveBlockControl
141
- title="Padding"
142
- renderDefaultControl={ renderTestDefaultControlComponent }
143
- />,
144
- container
145
- );
146
- } );
117
+ const { container } = render(
118
+ <ResponsiveBlockControl
119
+ title="Padding"
120
+ renderDefaultControl={ renderTestDefaultControlComponent }
121
+ />
122
+ );
147
123
 
148
- expect( container.innerHTML ).toBe( '' );
124
+ expect( container ).toBeEmptyDOMElement();
149
125
  } );
150
126
 
151
127
  it( 'should not render without valid default control render prop', () => {
152
- act( () => {
153
- render(
154
- <ResponsiveBlockControl title="Padding" property="padding" />,
155
- container
156
- );
157
- } );
128
+ const { container } = render(
129
+ <ResponsiveBlockControl title="Padding" property="padding" />
130
+ );
158
131
 
159
- expect( container.innerHTML ).toBe( '' );
132
+ expect( container ).toBeEmptyDOMElement();
160
133
  } );
161
134
 
162
135
  it( 'should render with custom label for toggle control when provided', () => {
163
136
  const customToggleLabel =
164
137
  'Utilise a matching padding value on all viewports';
165
- act( () => {
166
- render(
167
- <ResponsiveBlockControl
168
- title="Padding"
169
- property="padding"
170
- renderDefaultControl={ renderTestDefaultControlComponent }
171
- toggleLabel={ customToggleLabel }
172
- />,
173
- container
174
- );
175
- } );
138
+ const { container } = render(
139
+ <ResponsiveBlockControl
140
+ title="Padding"
141
+ property="padding"
142
+ renderDefaultControl={ renderTestDefaultControlComponent }
143
+ toggleLabel={ customToggleLabel }
144
+ />
145
+ );
176
146
 
177
147
  const actualToggleLabel = container.querySelector(
178
148
  'label.components-toggle-control__label'
@@ -184,17 +154,14 @@ describe( 'Basic rendering', () => {
184
154
  it( 'should pass custom label for default control group to the renderDefaultControl function when provided', () => {
185
155
  const customDefaultControlGroupLabel = 'Everything';
186
156
 
187
- act( () => {
188
- render(
189
- <ResponsiveBlockControl
190
- title="Padding"
191
- property="padding"
192
- renderDefaultControl={ renderTestDefaultControlComponent }
193
- defaultLabel={ customDefaultControlGroupLabel }
194
- />,
195
- container
196
- );
197
- } );
157
+ const { container } = render(
158
+ <ResponsiveBlockControl
159
+ title="Padding"
160
+ property="padding"
161
+ renderDefaultControl={ renderTestDefaultControlComponent }
162
+ defaultLabel={ customDefaultControlGroupLabel }
163
+ />
164
+ );
198
165
 
199
166
  const defaultControlLabel = Array.from(
200
167
  container.querySelectorAll( 'label' )
@@ -206,17 +173,14 @@ describe( 'Basic rendering', () => {
206
173
 
207
174
  describe( 'Default and Responsive modes', () => {
208
175
  it( 'should render in responsive mode when isResponsive prop is set to true', () => {
209
- act( () => {
210
- render(
211
- <ResponsiveBlockControl
212
- title="Padding"
213
- property="padding"
214
- isResponsive={ true }
215
- renderDefaultControl={ renderTestDefaultControlComponent }
216
- />,
217
- container
218
- );
219
- } );
176
+ const { container } = render(
177
+ <ResponsiveBlockControl
178
+ title="Padding"
179
+ property="padding"
180
+ isResponsive={ true }
181
+ renderDefaultControl={ renderTestDefaultControlComponent }
182
+ />
183
+ );
220
184
 
221
185
  const defaultControlGroup = container.querySelector(
222
186
  '.block-editor-responsive-block-control__group:not(.is-responsive)'
@@ -253,18 +217,15 @@ describe( 'Default and Responsive modes', () => {
253
217
  renderTestDefaultControlComponent
254
218
  );
255
219
 
256
- act( () => {
257
- render(
258
- <ResponsiveBlockControl
259
- title="Padding"
260
- property="padding"
261
- isResponsive={ true }
262
- renderDefaultControl={ mockRenderDefaultControl }
263
- viewports={ customViewportSet }
264
- />,
265
- container
266
- );
267
- } );
220
+ const { container } = render(
221
+ <ResponsiveBlockControl
222
+ title="Padding"
223
+ property="padding"
224
+ isResponsive={ true }
225
+ renderDefaultControl={ mockRenderDefaultControl }
226
+ viewports={ customViewportSet }
227
+ />
228
+ );
268
229
 
269
230
  const defaultRenderControlCall = 1;
270
231
 
@@ -287,7 +248,10 @@ describe( 'Default and Responsive modes', () => {
287
248
  );
288
249
  } );
289
250
 
290
- it( 'should switch between default and responsive modes when interacting with toggle control', () => {
251
+ it( 'should switch between default and responsive modes when interacting with toggle control', async () => {
252
+ const user = userEvent.setup( {
253
+ advanceTimers: jest.advanceTimersByTime,
254
+ } );
291
255
  const ResponsiveBlockControlConsumer = () => {
292
256
  const [ isResponsive, setIsResponsive ] = useState( false );
293
257
 
@@ -304,9 +268,7 @@ describe( 'Default and Responsive modes', () => {
304
268
  );
305
269
  };
306
270
 
307
- act( () => {
308
- render( <ResponsiveBlockControlConsumer />, container );
309
- } );
271
+ const { container } = render( <ResponsiveBlockControlConsumer /> );
310
272
 
311
273
  let defaultControlGroup = container.querySelector(
312
274
  '.block-editor-responsive-block-control__group:not(.is-responsive)'
@@ -332,9 +294,7 @@ describe( 'Default and Responsive modes', () => {
332
294
  expect( responsiveControlGroup ).toBeNull();
333
295
 
334
296
  // Toggle to "responsive" mode.
335
- act( () => {
336
- Simulate.change( toggleInput, { target: { checked: false } } );
337
- } );
297
+ await user.click( toggleInput );
338
298
 
339
299
  defaultControlGroup = container.querySelector(
340
300
  '.block-editor-responsive-block-control__group:not(.is-responsive)'
@@ -347,9 +307,7 @@ describe( 'Default and Responsive modes', () => {
347
307
  expect( responsiveControlGroup ).not.toBeNull();
348
308
 
349
309
  // Toggle back to "default" mode.
350
- act( () => {
351
- Simulate.change( toggleInput, { target: { checked: true } } );
352
- } );
310
+ await user.click( toggleInput );
353
311
 
354
312
  defaultControlGroup = container.querySelector(
355
313
  '.block-editor-responsive-block-control__group:not(.is-responsive)'
@@ -382,18 +340,15 @@ describe( 'Default and Responsive modes', () => {
382
340
  } );
383
341
  } );
384
342
 
385
- act( () => {
386
- render(
387
- <ResponsiveBlockControl
388
- title="Padding"
389
- property="padding"
390
- isResponsive={ true }
391
- renderDefaultControl={ spyRenderDefaultControl }
392
- renderResponsiveControls={ mockRenderResponsiveControls }
393
- />,
394
- container
395
- );
396
- } );
343
+ const { container } = render(
344
+ <ResponsiveBlockControl
345
+ title="Padding"
346
+ property="padding"
347
+ isResponsive={ true }
348
+ renderDefaultControl={ spyRenderDefaultControl }
349
+ renderResponsiveControls={ mockRenderResponsiveControls }
350
+ />
351
+ );
397
352
 
398
353
  // The user should see "range" controls so we can legitimately query for them here.
399
354
  const customControls = Array.from(
@@ -159,6 +159,8 @@ function RichTextWrapper(
159
159
  // retreived from the store on merge.
160
160
  // To do: fix this somehow.
161
161
  const { selectionStart, selectionEnd, isSelected } = useSelect( selector );
162
+ const { getSelectionStart, getSelectionEnd, getBlockRootClientId } =
163
+ useSelect( blockEditorStore );
162
164
  const { selectionChange } = useDispatch( blockEditorStore );
163
165
  const multilineTag = getMultilineTag( multiline );
164
166
  const adjustedAllowedFormats = getAllowedFormats( {
@@ -195,6 +197,18 @@ function RichTextWrapper(
195
197
  const unset = start === undefined && end === undefined;
196
198
 
197
199
  if ( typeof start === 'number' || unset ) {
200
+ // If we are only setting the start (or the end below), which
201
+ // means a partial selection, and we're not updating a selection
202
+ // with the same client ID, abort. This means the selected block
203
+ // is a parent block.
204
+ if (
205
+ end === undefined &&
206
+ getBlockRootClientId( clientId ) !==
207
+ getBlockRootClientId( getSelectionEnd().clientId )
208
+ ) {
209
+ return;
210
+ }
211
+
198
212
  selection.start = {
199
213
  clientId,
200
214
  attributeKey: identifier,
@@ -203,6 +217,14 @@ function RichTextWrapper(
203
217
  }
204
218
 
205
219
  if ( typeof end === 'number' || unset ) {
220
+ if (
221
+ start === undefined &&
222
+ getBlockRootClientId( clientId ) !==
223
+ getBlockRootClientId( getSelectionStart().clientId )
224
+ ) {
225
+ return;
226
+ }
227
+
206
228
  selection.end = {
207
229
  clientId,
208
230
  attributeKey: identifier,
@@ -1,9 +1,14 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import classnames from 'classnames';
5
+
1
6
  /**
2
7
  * WordPress dependencies
3
8
  */
4
9
  import { useState } from '@wordpress/element';
5
10
  import { __ } from '@wordpress/i18n';
6
- import { __experimentalText as Text } from '@wordpress/components';
11
+ import { BaseControl } from '@wordpress/components';
7
12
 
8
13
  /**
9
14
  * Internal dependencies
@@ -68,8 +73,15 @@ export default function SpacingSizesControl( {
68
73
  };
69
74
 
70
75
  return (
71
- <fieldset role="region" className="component-spacing-sizes-control">
72
- <Text as="legend">{ label }</Text>
76
+ <fieldset
77
+ role="region"
78
+ className={ classnames( 'component-spacing-sizes-control', {
79
+ 'is-unlinked': ! isLinked,
80
+ } ) }
81
+ >
82
+ <BaseControl.VisualLabel as="legend">
83
+ { label }
84
+ </BaseControl.VisualLabel>
73
85
  { ! hasOneSide && (
74
86
  <LinkedButton onClick={ toggleLinked } isLinked={ isLinked } />
75
87
  ) }
@@ -9,12 +9,12 @@ import classnames from 'classnames';
9
9
  import { useState, useMemo } from '@wordpress/element';
10
10
  import { useSelect } from '@wordpress/data';
11
11
  import {
12
+ BaseControl,
12
13
  Button,
13
14
  RangeControl,
14
15
  CustomSelectControl,
15
16
  __experimentalUnitControl as UnitControl,
16
17
  __experimentalHStack as HStack,
17
- __experimentalText as Text,
18
18
  __experimentalUseCustomUnits as useCustomUnits,
19
19
  __experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,
20
20
  } from '@wordpress/components';
@@ -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 ) );
@@ -167,21 +176,21 @@ export default function SpacingInputControl( {
167
176
  <>
168
177
  { side !== 'all' && (
169
178
  <HStack className="components-spacing-sizes-control__side-labels">
170
- <Text className="components-spacing-sizes-control__side-label">
179
+ <BaseControl.VisualLabel className="components-spacing-sizes-control__side-label">
171
180
  { LABELS[ side ] }
172
- </Text>
181
+ </BaseControl.VisualLabel>
173
182
 
174
183
  { showHint && (
175
- <Text className="components-spacing-sizes-control__hint-single">
184
+ <BaseControl.VisualLabel className="components-spacing-sizes-control__hint-single">
176
185
  { currentValueHint }
177
- </Text>
186
+ </BaseControl.VisualLabel>
178
187
  ) }
179
188
  </HStack>
180
189
  ) }
181
190
  { side === 'all' && showHint && (
182
- <Text className="components-spacing-sizes-control__hint-all">
191
+ <BaseControl.VisualLabel className="components-spacing-sizes-control__hint-all">
183
192
  { currentValueHint }
184
- </Text>
193
+ </BaseControl.VisualLabel>
185
194
  ) }
186
195
 
187
196
  { ! disableCustomSpacingSizes && (
@@ -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"
@@ -256,6 +269,7 @@ export default function SpacingInputControl( {
256
269
  marks={ marks }
257
270
  label={ ariaLabel }
258
271
  hideLabelFromVision={ true }
272
+ __nextHasNoMarginBottom={ true }
259
273
  />
260
274
  ) }
261
275
  { ! showRangeControl && ! showCustomValueControl && (
@@ -278,6 +292,7 @@ export default function SpacingInputControl( {
278
292
  label={ ariaLabel }
279
293
  hideLabelFromVision={ true }
280
294
  __nextUnconstrainedWidth={ true }
295
+ size={ '__unstable-large' }
281
296
  />
282
297
  ) }
283
298
  </>
@@ -1,7 +1,8 @@
1
1
  .tools-panel-item-spacing {
2
2
  display: grid;
3
3
  grid-template-columns: auto 1fr auto;
4
- grid-row-gap: $grid-unit-05;
4
+ align-items: center;
5
+ grid-template-rows: 16px auto;
5
6
  }
6
7
 
7
8
  .component-spacing-sizes-control {
@@ -17,21 +18,35 @@
17
18
  align-self: center;
18
19
  }
19
20
 
21
+ .components-base-control__label {
22
+ margin-bottom: 0;
23
+ height: $grid-unit-20;
24
+ }
25
+
20
26
  .components-spacing-sizes-control__side-labels {
21
27
  grid-column: 1 / 1;
22
- min-height: 30px;
23
28
  justify-content: left;
29
+ height: $grid-unit-20;
30
+ margin-top: $grid-unit-20;
24
31
  }
25
32
 
26
- .components-spacing-sizes-control__hint-single {
27
- margin-top: 0;
28
- margin-left: 0;
33
+ .components-spacing-sizes-control__side-label {
34
+ grid-column: 1 / 1;
35
+ justify-self: left;
36
+ margin-bottom: 0;
37
+ }
38
+
39
+ &.is-unlinked {
40
+ .components-range-control.components-spacing-sizes-control__range-control,
41
+ .components-spacing-sizes-control__custom-value-input {
42
+ margin-top: $grid-unit-10;
43
+ }
29
44
  }
30
45
 
31
46
  .components-spacing-sizes-control__hint-single,
32
47
  .components-spacing-sizes-control__hint-all {
33
48
  color: $gray-700;
34
- font-size: 12px;
49
+ margin-bottom: 0;
35
50
  }
36
51
 
37
52
  .components-spacing-sizes-control__hint-all {
@@ -46,7 +61,7 @@
46
61
  grid-column: 2 / 2;
47
62
  grid-row: 1 / 1;
48
63
  justify-self: end;
49
- padding: 0;
64
+ margin-top: -4px;
50
65
  }
51
66
 
52
67
  .component-spacing-sizes-control__linked-button ~ .components-spacing-sizes-control__custom-toggle-all {
@@ -56,41 +71,43 @@
56
71
  .components-spacing-sizes-control__custom-toggle-single {
57
72
  grid-column: 3 / 3;
58
73
  justify-self: end;
59
- }
60
-
61
- .components-spacing-sizes-control__custom-toggle-all,
62
- .components-spacing-sizes-control__custom-toggle-single {
63
- &.is-small.has-icon {
64
- padding: 0;
65
- min-width: $icon-size;
66
- }
74
+ margin-top: $grid-unit-15;
67
75
  }
68
76
 
69
77
  .component-spacing-sizes-control__linked-button {
70
78
  grid-column: 3 / 3;
71
79
  grid-row: 1 / 1;
72
80
  justify-self: end;
81
+ line-height: 0;
82
+ margin-top: -4px;
73
83
  }
74
84
 
75
85
  .components-spacing-sizes-control__custom-value-range {
76
86
  grid-column: span 2;
77
- margin-left: $grid-unit-10;
78
- padding-right: $grid-unit-10;
79
- height: 30px;
87
+ margin-left: $grid-unit-20;
88
+ margin-top: 8px;
80
89
  }
81
90
 
82
91
  .components-spacing-sizes-control__custom-value-input {
83
92
  width: 124px;
93
+ margin-top: 8px;
84
94
  }
85
95
 
86
- .components-spacing-sizes-control__range-control {
87
- grid-column: span 3;
88
- padding-right: $grid-unit-10;
89
- height: 30px;
96
+ .components-range-control {
97
+ height: 40px;
98
+ /* Vertically center the RangeControl until it has true 40px height. */
99
+ display: flex;
100
+ align-items: center;
101
+
102
+ > .components-base-control__field {
103
+ /* Fixes RangeControl contents when the outer wrapper is flex */
104
+ flex: 1;
105
+ }
90
106
  }
91
107
 
92
- .components-range-control__wrapper {
93
- margin-bottom: 0;
108
+ .components-spacing-sizes-control__range-control {
109
+ grid-column: span 3;
110
+ margin-top: 8px;
94
111
  }
95
112
 
96
113
  .components-range-control__mark {
@@ -112,14 +129,8 @@
112
129
  z-index: 3;
113
130
  }
114
131
 
115
- .components-spacing-sizes-control__side-label {
116
- margin-right: $grid-unit-05;
117
- grid-column: 1 / 1;
118
- justify-self: left;
119
- font-size: 12px;
120
- }
121
-
122
132
  .components-spacing-sizes-control__custom-select-control {
123
133
  grid-column: span 3;
134
+ margin-top: $grid-unit-10;
124
135
  }
125
136
  }