@wordpress/block-editor 10.2.0 → 10.4.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 (482) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +41 -0
  3. package/build/components/alignment-control/ui.js +1 -1
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/block-alignment-control/constants.js +1 -1
  6. package/build/components/block-alignment-control/constants.js.map +1 -1
  7. package/build/components/block-alignment-matrix-control/index.js +1 -1
  8. package/build/components/block-alignment-matrix-control/index.js.map +1 -1
  9. package/build/components/block-compare/index.js +1 -3
  10. package/build/components/block-compare/index.js.map +1 -1
  11. package/build/components/block-draggable/draggable-chip.js +4 -2
  12. package/build/components/block-draggable/draggable-chip.js.map +1 -1
  13. package/build/components/block-edit/index.js +4 -2
  14. package/build/components/block-edit/index.js.map +1 -1
  15. package/build/components/block-inspector/index.js +4 -4
  16. package/build/components/block-inspector/index.js.map +1 -1
  17. package/build/components/block-list/block-list-compact.native.js +1 -0
  18. package/build/components/block-list/block-list-compact.native.js.map +1 -1
  19. package/build/components/block-list/block.js +75 -15
  20. package/build/components/block-list/block.js.map +1 -1
  21. package/build/components/block-list/block.native.js +79 -12
  22. package/build/components/block-list/block.native.js.map +1 -1
  23. package/build/components/block-list/use-in-between-inserter.js +7 -23
  24. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  25. package/build/components/block-lock/modal.js +9 -6
  26. package/build/components/block-lock/modal.js.map +1 -1
  27. package/build/components/block-parent-selector/index.js +3 -3
  28. package/build/components/block-parent-selector/index.js.map +1 -1
  29. package/build/components/block-patterns-list/index.js +5 -4
  30. package/build/components/block-patterns-list/index.js.map +1 -1
  31. package/build/components/block-popover/drop-zone.js +85 -0
  32. package/build/components/block-popover/drop-zone.js.map +1 -0
  33. package/build/components/block-popover/inbetween.js +2 -1
  34. package/build/components/block-popover/inbetween.js.map +1 -1
  35. package/build/components/block-popover/index.js +4 -2
  36. package/build/components/block-popover/index.js.map +1 -1
  37. package/build/components/block-preview/auto.js +2 -2
  38. package/build/components/block-preview/auto.js.map +1 -1
  39. package/build/components/block-preview/index.js +8 -13
  40. package/build/components/block-preview/index.js.map +1 -1
  41. package/build/components/block-preview/live.js +3 -7
  42. package/build/components/block-preview/live.js.map +1 -1
  43. package/build/components/block-selection-clearer/index.js +9 -1
  44. package/build/components/block-selection-clearer/index.js.map +1 -1
  45. package/build/components/block-settings-menu/block-settings-dropdown.js +19 -19
  46. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  47. package/build/components/block-styles/index.js +18 -42
  48. package/build/components/block-styles/index.js.map +1 -1
  49. package/build/components/block-switcher/index.js +2 -8
  50. package/build/components/block-switcher/index.js.map +1 -1
  51. package/build/components/block-switcher/preview-block-popover.js +1 -1
  52. package/build/components/block-switcher/preview-block-popover.js.map +1 -1
  53. package/build/components/block-toolbar/index.js +4 -4
  54. package/build/components/block-toolbar/index.js.map +1 -1
  55. package/build/components/block-tools/back-compat.js +2 -1
  56. package/build/components/block-tools/back-compat.js.map +1 -1
  57. package/build/components/block-tools/insertion-point.js +56 -16
  58. package/build/components/block-tools/insertion-point.js.map +1 -1
  59. package/build/components/block-tools/selected-block-popover.js +15 -3
  60. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  61. package/build/components/block-vertical-alignment-control/ui.js +1 -1
  62. package/build/components/block-vertical-alignment-control/ui.js.map +1 -1
  63. package/build/components/border-radius-control/all-input-control.js +2 -1
  64. package/build/components/border-radius-control/all-input-control.js.map +1 -1
  65. package/build/components/border-radius-control/index.js +2 -1
  66. package/build/components/border-radius-control/index.js.map +1 -1
  67. package/build/components/border-radius-control/input-controls.js +2 -1
  68. package/build/components/border-radius-control/input-controls.js.map +1 -1
  69. package/build/components/colors-gradients/control.js +1 -1
  70. package/build/components/colors-gradients/control.js.map +1 -1
  71. package/build/components/colors-gradients/panel-color-gradient-settings.js +2 -2
  72. package/build/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  73. package/build/components/duotone-control/index.js +1 -1
  74. package/build/components/duotone-control/index.js.map +1 -1
  75. package/build/components/font-sizes/fluid-utils.js +256 -0
  76. package/build/components/font-sizes/fluid-utils.js.map +1 -0
  77. package/build/components/font-sizes/index.js +8 -0
  78. package/build/components/font-sizes/index.js.map +1 -1
  79. package/build/components/font-sizes/with-font-sizes.js +1 -1
  80. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  81. package/build/components/iframe/index.js +1 -1
  82. package/build/components/iframe/index.js.map +1 -1
  83. package/build/components/image-editor/constants.js +1 -1
  84. package/build/components/image-editor/constants.js.map +1 -1
  85. package/build/components/index.js +0 -9
  86. package/build/components/index.js.map +1 -1
  87. package/build/components/inner-blocks/index.js +6 -2
  88. package/build/components/inner-blocks/index.js.map +1 -1
  89. package/build/components/inner-blocks/use-inner-block-template-sync.js +3 -2
  90. package/build/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  91. package/build/components/inserter/block-patterns-tab.js +151 -78
  92. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  93. package/build/components/inserter/hooks/use-insertion-point.js +2 -7
  94. package/build/components/inserter/hooks/use-insertion-point.js.map +1 -1
  95. package/build/components/inserter/menu.js +14 -3
  96. package/build/components/inserter/menu.js.map +1 -1
  97. package/build/components/inserter/search-items.js +23 -2
  98. package/build/components/inserter/search-items.js.map +1 -1
  99. package/build/components/inserter-draggable-blocks/index.js +4 -2
  100. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  101. package/build/components/line-height-control/index.js +2 -1
  102. package/build/components/line-height-control/index.js.map +1 -1
  103. package/build/components/list-view/drop-indicator.js +2 -1
  104. package/build/components/list-view/drop-indicator.js.map +1 -1
  105. package/build/components/list-view/use-list-view-drop-zone.js +1 -14
  106. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  107. package/build/components/media-replace-flow/index.js +1 -1
  108. package/build/components/media-replace-flow/index.js.map +1 -1
  109. package/build/components/preview-options/index.js +2 -3
  110. package/build/components/preview-options/index.js.map +1 -1
  111. package/build/components/rich-text/format-toolbar/index.js +1 -1
  112. package/build/components/rich-text/format-toolbar/index.js.map +1 -1
  113. package/build/components/rich-text/format-toolbar-container.js +1 -1
  114. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  115. package/build/components/rich-text/use-paste-handler.js +1 -1
  116. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  117. package/build/components/spacing-sizes-control/all-input-control.js +6 -2
  118. package/build/components/spacing-sizes-control/all-input-control.js.map +1 -1
  119. package/build/components/spacing-sizes-control/axial-input-controls.js +6 -2
  120. package/build/components/spacing-sizes-control/axial-input-controls.js.map +1 -1
  121. package/build/components/spacing-sizes-control/index.js +6 -2
  122. package/build/components/spacing-sizes-control/index.js.map +1 -1
  123. package/build/components/spacing-sizes-control/input-controls.js +6 -2
  124. package/build/components/spacing-sizes-control/input-controls.js.map +1 -1
  125. package/build/components/spacing-sizes-control/spacing-input-control.js +45 -8
  126. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  127. package/build/components/url-input/index.js +1 -1
  128. package/build/components/url-input/index.js.map +1 -1
  129. package/build/components/use-block-drop-zone/index.js +98 -57
  130. package/build/components/use-block-drop-zone/index.js.map +1 -1
  131. package/build/components/use-on-block-drop/index.js +12 -12
  132. package/build/components/use-on-block-drop/index.js.map +1 -1
  133. package/build/components/use-on-block-drop/types.js +6 -0
  134. package/build/components/use-on-block-drop/types.js.map +1 -0
  135. package/build/hooks/align.js +1 -3
  136. package/build/hooks/align.js.map +1 -1
  137. package/build/hooks/align.native.js +1 -7
  138. package/build/hooks/align.native.js.map +1 -1
  139. package/build/hooks/border.js +1 -0
  140. package/build/hooks/border.js.map +1 -1
  141. package/build/hooks/dimensions.js +32 -4
  142. package/build/hooks/dimensions.js.map +1 -1
  143. package/build/hooks/font-size.js +61 -0
  144. package/build/hooks/font-size.js.map +1 -1
  145. package/build/hooks/layout.js +4 -3
  146. package/build/hooks/layout.js.map +1 -1
  147. package/build/hooks/margin.js +24 -17
  148. package/build/hooks/margin.js.map +1 -1
  149. package/build/hooks/padding.js +20 -12
  150. package/build/hooks/padding.js.map +1 -1
  151. package/build/hooks/style.js +126 -4
  152. package/build/hooks/style.js.map +1 -1
  153. package/build/hooks/use-typography-props.js +17 -3
  154. package/build/hooks/use-typography-props.js.map +1 -1
  155. package/build/hooks/utils.js +8 -7
  156. package/build/hooks/utils.js.map +1 -1
  157. package/build/layouts/constrained.js +0 -1
  158. package/build/layouts/constrained.js.map +1 -1
  159. package/build/layouts/flex.js +1 -1
  160. package/build/layouts/flex.js.map +1 -1
  161. package/build/store/actions.js +63 -45
  162. package/build/store/actions.js.map +1 -1
  163. package/build/store/array.js +1 -7
  164. package/build/store/array.js.map +1 -1
  165. package/build/store/defaults.js +3 -0
  166. package/build/store/defaults.js.map +1 -1
  167. package/build/store/reducer.js +31 -15
  168. package/build/store/reducer.js.map +1 -1
  169. package/build/store/selectors.js +46 -29
  170. package/build/store/selectors.js.map +1 -1
  171. package/build/utils/math.js +14 -0
  172. package/build/utils/math.js.map +1 -1
  173. package/build/utils/pre-parse-patterns.js +19 -2
  174. package/build/utils/pre-parse-patterns.js.map +1 -1
  175. package/build-module/components/alignment-control/ui.js +1 -1
  176. package/build-module/components/alignment-control/ui.js.map +1 -1
  177. package/build-module/components/block-alignment-control/constants.js +1 -1
  178. package/build-module/components/block-alignment-control/constants.js.map +1 -1
  179. package/build-module/components/block-alignment-matrix-control/index.js +1 -1
  180. package/build-module/components/block-alignment-matrix-control/index.js.map +1 -1
  181. package/build-module/components/block-compare/index.js +2 -3
  182. package/build-module/components/block-compare/index.js.map +1 -1
  183. package/build-module/components/block-draggable/draggable-chip.js +7 -3
  184. package/build-module/components/block-draggable/draggable-chip.js.map +1 -1
  185. package/build-module/components/block-edit/index.js +4 -2
  186. package/build-module/components/block-edit/index.js.map +1 -1
  187. package/build-module/components/block-inspector/index.js +4 -4
  188. package/build-module/components/block-inspector/index.js.map +1 -1
  189. package/build-module/components/block-list/block-list-compact.native.js +1 -0
  190. package/build-module/components/block-list/block-list-compact.native.js.map +1 -1
  191. package/build-module/components/block-list/block.js +75 -15
  192. package/build-module/components/block-list/block.js.map +1 -1
  193. package/build-module/components/block-list/block.native.js +80 -13
  194. package/build-module/components/block-list/block.native.js.map +1 -1
  195. package/build-module/components/block-list/use-in-between-inserter.js +8 -24
  196. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  197. package/build-module/components/block-lock/modal.js +10 -8
  198. package/build-module/components/block-lock/modal.js.map +1 -1
  199. package/build-module/components/block-parent-selector/index.js +3 -3
  200. package/build-module/components/block-parent-selector/index.js.map +1 -1
  201. package/build-module/components/block-patterns-list/index.js +5 -4
  202. package/build-module/components/block-patterns-list/index.js.map +1 -1
  203. package/build-module/components/block-popover/drop-zone.js +70 -0
  204. package/build-module/components/block-popover/drop-zone.js.map +1 -0
  205. package/build-module/components/block-popover/inbetween.js +2 -1
  206. package/build-module/components/block-popover/inbetween.js.map +1 -1
  207. package/build-module/components/block-popover/index.js +4 -2
  208. package/build-module/components/block-popover/index.js.map +1 -1
  209. package/build-module/components/block-preview/auto.js +1 -1
  210. package/build-module/components/block-preview/auto.js.map +1 -1
  211. package/build-module/components/block-preview/index.js +8 -12
  212. package/build-module/components/block-preview/index.js.map +1 -1
  213. package/build-module/components/block-preview/live.js +3 -6
  214. package/build-module/components/block-preview/live.js.map +1 -1
  215. package/build-module/components/block-selection-clearer/index.js +9 -1
  216. package/build-module/components/block-selection-clearer/index.js.map +1 -1
  217. package/build-module/components/block-settings-menu/block-settings-dropdown.js +20 -19
  218. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  219. package/build-module/components/block-styles/index.js +19 -44
  220. package/build-module/components/block-styles/index.js.map +1 -1
  221. package/build-module/components/block-switcher/index.js +2 -7
  222. package/build-module/components/block-switcher/index.js.map +1 -1
  223. package/build-module/components/block-switcher/preview-block-popover.js +1 -1
  224. package/build-module/components/block-switcher/preview-block-popover.js.map +1 -1
  225. package/build-module/components/block-toolbar/index.js +4 -4
  226. package/build-module/components/block-toolbar/index.js.map +1 -1
  227. package/build-module/components/block-tools/back-compat.js +2 -1
  228. package/build-module/components/block-tools/back-compat.js.map +1 -1
  229. package/build-module/components/block-tools/insertion-point.js +54 -16
  230. package/build-module/components/block-tools/insertion-point.js.map +1 -1
  231. package/build-module/components/block-tools/selected-block-popover.js +15 -3
  232. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  233. package/build-module/components/block-vertical-alignment-control/ui.js +1 -1
  234. package/build-module/components/block-vertical-alignment-control/ui.js.map +1 -1
  235. package/build-module/components/border-radius-control/all-input-control.js +2 -1
  236. package/build-module/components/border-radius-control/all-input-control.js.map +1 -1
  237. package/build-module/components/border-radius-control/index.js +2 -1
  238. package/build-module/components/border-radius-control/index.js.map +1 -1
  239. package/build-module/components/border-radius-control/input-controls.js +2 -1
  240. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  241. package/build-module/components/colors-gradients/control.js +2 -2
  242. package/build-module/components/colors-gradients/control.js.map +1 -1
  243. package/build-module/components/colors-gradients/panel-color-gradient-settings.js +3 -3
  244. package/build-module/components/colors-gradients/panel-color-gradient-settings.js.map +1 -1
  245. package/build-module/components/duotone-control/index.js +1 -1
  246. package/build-module/components/duotone-control/index.js.map +1 -1
  247. package/build-module/components/font-sizes/fluid-utils.js +245 -0
  248. package/build-module/components/font-sizes/fluid-utils.js.map +1 -0
  249. package/build-module/components/font-sizes/index.js +1 -0
  250. package/build-module/components/font-sizes/index.js.map +1 -1
  251. package/build-module/components/font-sizes/with-font-sizes.js +2 -2
  252. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  253. package/build-module/components/iframe/index.js +1 -1
  254. package/build-module/components/iframe/index.js.map +1 -1
  255. package/build-module/components/image-editor/constants.js +1 -1
  256. package/build-module/components/image-editor/constants.js.map +1 -1
  257. package/build-module/components/index.js +0 -1
  258. package/build-module/components/index.js.map +1 -1
  259. package/build-module/components/inner-blocks/index.js +6 -2
  260. package/build-module/components/inner-blocks/index.js.map +1 -1
  261. package/build-module/components/inner-blocks/use-inner-block-template-sync.js +3 -2
  262. package/build-module/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  263. package/build-module/components/inserter/block-patterns-tab.js +148 -81
  264. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  265. package/build-module/components/inserter/hooks/use-insertion-point.js +2 -6
  266. package/build-module/components/inserter/hooks/use-insertion-point.js.map +1 -1
  267. package/build-module/components/inserter/menu.js +10 -3
  268. package/build-module/components/inserter/menu.js.map +1 -1
  269. package/build-module/components/inserter/search-items.js +23 -3
  270. package/build-module/components/inserter/search-items.js.map +1 -1
  271. package/build-module/components/inserter-draggable-blocks/index.js +4 -2
  272. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  273. package/build-module/components/line-height-control/index.js +2 -1
  274. package/build-module/components/line-height-control/index.js.map +1 -1
  275. package/build-module/components/list-view/drop-indicator.js +2 -1
  276. package/build-module/components/list-view/drop-indicator.js.map +1 -1
  277. package/build-module/components/list-view/use-list-view-drop-zone.js +1 -14
  278. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  279. package/build-module/components/media-replace-flow/index.js +1 -1
  280. package/build-module/components/media-replace-flow/index.js.map +1 -1
  281. package/build-module/components/preview-options/index.js +2 -3
  282. package/build-module/components/preview-options/index.js.map +1 -1
  283. package/build-module/components/rich-text/format-toolbar/index.js +1 -1
  284. package/build-module/components/rich-text/format-toolbar/index.js.map +1 -1
  285. package/build-module/components/rich-text/format-toolbar-container.js +1 -1
  286. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  287. package/build-module/components/rich-text/use-paste-handler.js +1 -1
  288. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  289. package/build-module/components/spacing-sizes-control/all-input-control.js +6 -2
  290. package/build-module/components/spacing-sizes-control/all-input-control.js.map +1 -1
  291. package/build-module/components/spacing-sizes-control/axial-input-controls.js +6 -2
  292. package/build-module/components/spacing-sizes-control/axial-input-controls.js.map +1 -1
  293. package/build-module/components/spacing-sizes-control/index.js +6 -2
  294. package/build-module/components/spacing-sizes-control/index.js.map +1 -1
  295. package/build-module/components/spacing-sizes-control/input-controls.js +6 -2
  296. package/build-module/components/spacing-sizes-control/input-controls.js.map +1 -1
  297. package/build-module/components/spacing-sizes-control/spacing-input-control.js +44 -8
  298. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  299. package/build-module/components/url-input/index.js +1 -1
  300. package/build-module/components/url-input/index.js.map +1 -1
  301. package/build-module/components/use-block-drop-zone/index.js +98 -58
  302. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  303. package/build-module/components/use-on-block-drop/index.js +12 -12
  304. package/build-module/components/use-on-block-drop/index.js.map +1 -1
  305. package/build-module/components/use-on-block-drop/types.js +2 -0
  306. package/build-module/components/use-on-block-drop/types.js.map +1 -0
  307. package/build-module/hooks/align.js +1 -2
  308. package/build-module/hooks/align.js.map +1 -1
  309. package/build-module/hooks/align.native.js +1 -6
  310. package/build-module/hooks/align.native.js.map +1 -1
  311. package/build-module/hooks/border.js +1 -0
  312. package/build-module/hooks/border.js.map +1 -1
  313. package/build-module/hooks/dimensions.js +32 -4
  314. package/build-module/hooks/dimensions.js.map +1 -1
  315. package/build-module/hooks/font-size.js +60 -1
  316. package/build-module/hooks/font-size.js.map +1 -1
  317. package/build-module/hooks/layout.js +5 -4
  318. package/build-module/hooks/layout.js.map +1 -1
  319. package/build-module/hooks/margin.js +25 -18
  320. package/build-module/hooks/margin.js.map +1 -1
  321. package/build-module/hooks/padding.js +21 -13
  322. package/build-module/hooks/padding.js.map +1 -1
  323. package/build-module/hooks/style.js +124 -3
  324. package/build-module/hooks/style.js.map +1 -1
  325. package/build-module/hooks/use-typography-props.js +17 -4
  326. package/build-module/hooks/use-typography-props.js.map +1 -1
  327. package/build-module/hooks/utils.js +8 -8
  328. package/build-module/hooks/utils.js.map +1 -1
  329. package/build-module/layouts/constrained.js +0 -1
  330. package/build-module/layouts/constrained.js.map +1 -1
  331. package/build-module/layouts/flex.js +1 -1
  332. package/build-module/layouts/flex.js.map +1 -1
  333. package/build-module/store/actions.js +59 -42
  334. package/build-module/store/actions.js.map +1 -1
  335. package/build-module/store/array.js +1 -6
  336. package/build-module/store/array.js.map +1 -1
  337. package/build-module/store/defaults.js +3 -0
  338. package/build-module/store/defaults.js.map +1 -1
  339. package/build-module/store/reducer.js +32 -16
  340. package/build-module/store/reducer.js.map +1 -1
  341. package/build-module/store/selectors.js +47 -30
  342. package/build-module/store/selectors.js.map +1 -1
  343. package/build-module/utils/math.js +12 -0
  344. package/build-module/utils/math.js.map +1 -1
  345. package/build-module/utils/pre-parse-patterns.js +19 -2
  346. package/build-module/utils/pre-parse-patterns.js.map +1 -1
  347. package/build-style/style-rtl.css +292 -206
  348. package/build-style/style.css +288 -202
  349. package/package.json +29 -28
  350. package/src/components/alignment-control/ui.js +1 -1
  351. package/src/components/block-alignment-control/constants.js +1 -1
  352. package/src/components/block-alignment-matrix-control/index.js +1 -1
  353. package/src/components/block-breadcrumb/test/__snapshots__/index.js.snap +13 -11
  354. package/src/components/block-breadcrumb/test/index.js +2 -2
  355. package/src/components/block-compare/index.js +3 -2
  356. package/src/components/block-draggable/draggable-chip.js +4 -2
  357. package/src/components/block-edit/index.js +2 -1
  358. package/src/components/block-inspector/index.js +8 -7
  359. package/src/components/block-list/block-list-compact.native.js +1 -0
  360. package/src/components/block-list/block.js +113 -7
  361. package/src/components/block-list/block.native.js +123 -9
  362. package/src/components/block-list/style.scss +93 -126
  363. package/src/components/block-list/use-in-between-inserter.js +8 -19
  364. package/src/components/block-lock/modal.js +12 -7
  365. package/src/components/block-mover/stories/index.js +1 -1
  366. package/src/components/block-mover/style.scss +35 -1
  367. package/src/components/block-parent-selector/index.js +3 -3
  368. package/src/components/block-patterns-list/index.js +9 -5
  369. package/src/components/block-patterns-list/style.scss +7 -3
  370. package/src/components/block-popover/README.md +8 -0
  371. package/src/components/block-popover/drop-zone.js +63 -0
  372. package/src/components/block-popover/inbetween.js +1 -0
  373. package/src/components/block-popover/index.js +3 -1
  374. package/src/components/block-popover/style.scss +17 -5
  375. package/src/components/block-preview/auto.js +1 -1
  376. package/src/components/block-preview/index.js +15 -11
  377. package/src/components/block-preview/live.js +2 -7
  378. package/src/components/block-preview/test/index.js +1 -7
  379. package/src/components/block-selection-clearer/index.js +7 -2
  380. package/src/components/block-selection-clearer/test/index.js +118 -0
  381. package/src/components/block-settings-menu/block-settings-dropdown.js +29 -18
  382. package/src/components/block-settings-menu/test/block-mode-toggle.js +17 -17
  383. package/src/components/block-styles/index.js +26 -49
  384. package/src/components/block-switcher/index.js +2 -7
  385. package/src/components/block-switcher/preview-block-popover.js +1 -1
  386. package/src/components/block-switcher/test/index.js +2 -2
  387. package/src/components/block-toolbar/index.js +4 -6
  388. package/src/components/block-toolbar/style.scss +38 -14
  389. package/src/components/block-tools/back-compat.js +1 -0
  390. package/src/components/block-tools/insertion-point.js +49 -15
  391. package/src/components/block-tools/selected-block-popover.js +14 -1
  392. package/src/components/block-variation-picker/README.md +1 -1
  393. package/src/components/block-vertical-alignment-control/ui.js +1 -1
  394. package/src/components/border-radius-control/all-input-control.js +1 -0
  395. package/src/components/border-radius-control/index.js +1 -0
  396. package/src/components/border-radius-control/input-controls.js +1 -0
  397. package/src/components/border-radius-control/style.scss +15 -24
  398. package/src/components/button-block-appender/style.scss +4 -2
  399. package/src/components/color-palette/test/__snapshots__/control.js.snap +86 -104
  400. package/src/components/color-palette/test/control.js +11 -15
  401. package/src/components/colors-gradients/control.js +2 -2
  402. package/src/components/colors-gradients/panel-color-gradient-settings.js +3 -4
  403. package/src/components/colors-gradients/test/control.js +49 -77
  404. package/src/components/duotone-control/index.js +1 -1
  405. package/src/components/font-sizes/fluid-utils.js +296 -0
  406. package/src/components/font-sizes/index.js +1 -0
  407. package/src/components/font-sizes/test/fluid-utils.js +168 -0
  408. package/src/components/font-sizes/with-font-sizes.js +2 -3
  409. package/src/components/iframe/index.js +1 -1
  410. package/src/components/image-editor/constants.js +1 -1
  411. package/src/components/image-size-control/test/index.js +47 -60
  412. package/src/components/index.js +0 -1
  413. package/src/components/inner-blocks/index.js +5 -1
  414. package/src/components/inner-blocks/test/index.js +4 -0
  415. package/src/components/inner-blocks/use-inner-block-template-sync.js +3 -2
  416. package/src/components/inserter/block-patterns-tab.js +232 -98
  417. package/src/components/inserter/hooks/use-insertion-point.js +3 -11
  418. package/src/components/inserter/menu.js +15 -2
  419. package/src/components/inserter/search-items.js +23 -3
  420. package/src/components/inserter/style.scss +94 -9
  421. package/src/components/inserter/test/reusable-blocks-tab.js +6 -6
  422. package/src/components/inserter/test/search-items.js +6 -0
  423. package/src/components/inserter-draggable-blocks/index.js +12 -2
  424. package/src/components/inserter-list-item/style.scss +22 -1
  425. package/src/components/letter-spacing-control/README.md +55 -0
  426. package/src/components/line-height-control/index.js +1 -0
  427. package/src/components/link-control/README.md +3 -3
  428. package/src/components/link-control/test/index.js +1 -1
  429. package/src/components/list-view/drop-indicator.js +1 -0
  430. package/src/components/list-view/style.scss +1 -36
  431. package/src/components/list-view/use-list-view-drop-zone.js +4 -18
  432. package/src/components/media-replace-flow/index.js +1 -1
  433. package/src/components/media-replace-flow/test/index.js +69 -51
  434. package/src/components/panel-color-settings/test/index.js +4 -4
  435. package/src/components/preview-options/index.js +2 -2
  436. package/src/components/preview-options/style.scss +1 -1
  437. package/src/components/provider/test/use-block-sync.js +131 -165
  438. package/src/components/responsive-block-control/test/index.js +4 -4
  439. package/src/components/rich-text/format-toolbar/index.js +1 -1
  440. package/src/components/rich-text/format-toolbar-container.js +1 -1
  441. package/src/components/rich-text/use-paste-handler.js +1 -1
  442. package/src/components/spacing-sizes-control/all-input-control.js +4 -0
  443. package/src/components/spacing-sizes-control/axial-input-controls.js +4 -0
  444. package/src/components/spacing-sizes-control/index.js +4 -0
  445. package/src/components/spacing-sizes-control/input-controls.js +4 -0
  446. package/src/components/spacing-sizes-control/spacing-input-control.js +26 -3
  447. package/src/components/spacing-sizes-control/style.scss +27 -19
  448. package/src/components/url-input/index.js +1 -1
  449. package/src/components/use-block-drop-zone/index.js +136 -79
  450. package/src/components/use-block-drop-zone/test/index.js +333 -81
  451. package/src/components/use-on-block-drop/index.js +11 -12
  452. package/src/components/use-on-block-drop/types.ts +1 -0
  453. package/src/hooks/align.js +3 -2
  454. package/src/hooks/align.native.js +5 -8
  455. package/src/hooks/border.js +1 -0
  456. package/src/hooks/dimensions.js +32 -5
  457. package/src/hooks/font-size.js +76 -0
  458. package/src/hooks/layout.js +7 -9
  459. package/src/hooks/margin.js +20 -14
  460. package/src/hooks/padding.js +20 -16
  461. package/src/hooks/style.js +122 -3
  462. package/src/hooks/test/align.js +96 -72
  463. package/src/hooks/test/style.js +206 -1
  464. package/src/hooks/test/use-typography-props.js +22 -0
  465. package/src/hooks/use-typography-props.js +18 -3
  466. package/src/hooks/utils.js +10 -7
  467. package/src/layouts/constrained.js +0 -1
  468. package/src/layouts/flex.js +1 -1
  469. package/src/store/actions.js +24 -12
  470. package/src/store/array.js +1 -6
  471. package/src/store/defaults.js +3 -0
  472. package/src/store/reducer.js +31 -24
  473. package/src/store/selectors.js +28 -21
  474. package/src/store/test/actions.js +0 -9
  475. package/src/store/test/selectors.js +1 -1
  476. package/src/utils/math.js +17 -0
  477. package/src/utils/pre-parse-patterns.js +12 -7
  478. package/build/components/inserter/pattern-panel.js +0 -87
  479. package/build/components/inserter/pattern-panel.js.map +0 -1
  480. package/build-module/components/inserter/pattern-panel.js +0 -74
  481. package/build-module/components/inserter/pattern-panel.js.map +0 -1
  482. package/src/components/inserter/pattern-panel.js +0 -93
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { without } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -28,9 +23,11 @@ addFilter(
28
23
  settings.supports = {
29
24
  ...settings.supports,
30
25
  align: Array.isArray( blockAlign )
31
- ? without(
32
- blockAlign,
33
- ...Object.values( WIDE_ALIGNMENTS.alignments )
26
+ ? blockAlign.filter(
27
+ ( alignment ) =>
28
+ ! Object.values(
29
+ WIDE_ALIGNMENTS.alignments
30
+ ).includes( alignment )
34
31
  )
35
32
  : blockAlign,
36
33
  alignWide: false,
@@ -272,6 +272,7 @@ export function BorderPanel( props ) {
272
272
  onChange={ onBorderChange }
273
273
  popoverOffset={ 40 }
274
274
  popoverPlacement="left-start"
275
+ size="__unstable-large"
275
276
  value={ hydratedBorder }
276
277
  __experimentalHasMultipleOrigins={ true }
277
278
  __experimentalIsRenderedInSidebar={ true }
@@ -7,7 +7,7 @@ import classnames from 'classnames';
7
7
  * WordPress dependencies
8
8
  */
9
9
  import { __experimentalToolsPanelItem as ToolsPanelItem } from '@wordpress/components';
10
- import { Platform } from '@wordpress/element';
10
+ import { Platform, useState } from '@wordpress/element';
11
11
  import { __ } from '@wordpress/i18n';
12
12
  import { getBlockSupport } from '@wordpress/blocks';
13
13
 
@@ -44,6 +44,13 @@ export const SPACING_SUPPORT_KEY = 'spacing';
44
44
  export const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];
45
45
  export const AXIAL_SIDES = [ 'vertical', 'horizontal' ];
46
46
 
47
+ function useVisualizerMouseOver() {
48
+ const [ isMouseOver, setIsMouseOver ] = useState( false );
49
+ const onMouseOver = () => setIsMouseOver( true );
50
+ const onMouseOut = () => setIsMouseOver( false );
51
+ return { isMouseOver, onMouseOver, onMouseOut };
52
+ }
53
+
47
54
  /**
48
55
  * Inspector controls for dimensions support.
49
56
  *
@@ -58,6 +65,8 @@ export function DimensionsPanel( props ) {
58
65
  const isDisabled = useIsDimensionsDisabled( props );
59
66
  const isSupported = hasDimensionsSupport( props.name );
60
67
  const spacingSizes = useSetting( 'spacing.spacingSizes' );
68
+ const paddingMouseOver = useVisualizerMouseOver();
69
+ const marginMouseOver = useVisualizerMouseOver();
61
70
 
62
71
  if ( isDisabled || ! isSupported ) {
63
72
  return null;
@@ -96,7 +105,11 @@ export function DimensionsPanel( props ) {
96
105
  isShownByDefault={ defaultSpacingControls?.padding }
97
106
  panelId={ props.clientId }
98
107
  >
99
- <PaddingEdit { ...props } />
108
+ <PaddingEdit
109
+ onMouseOver={ paddingMouseOver.onMouseOver }
110
+ onMouseOut={ paddingMouseOver.onMouseOut }
111
+ { ...props }
112
+ />
100
113
  </ToolsPanelItem>
101
114
  ) }
102
115
  { ! isMarginDisabled && (
@@ -109,7 +122,11 @@ export function DimensionsPanel( props ) {
109
122
  isShownByDefault={ defaultSpacingControls?.margin }
110
123
  panelId={ props.clientId }
111
124
  >
112
- <MarginEdit { ...props } />
125
+ <MarginEdit
126
+ onMouseOver={ marginMouseOver.onMouseOver }
127
+ onMouseOut={ marginMouseOver.onMouseOut }
128
+ { ...props }
129
+ />
113
130
  </ToolsPanelItem>
114
131
  ) }
115
132
  { ! isGapDisabled && (
@@ -126,8 +143,18 @@ export function DimensionsPanel( props ) {
126
143
  </ToolsPanelItem>
127
144
  ) }
128
145
  </InspectorControls>
129
- { ! isPaddingDisabled && <PaddingVisualizer { ...props } /> }
130
- { ! isMarginDisabled && <MarginVisualizer { ...props } /> }
146
+ { ! isPaddingDisabled && (
147
+ <PaddingVisualizer
148
+ forceShow={ paddingMouseOver.isMouseOver }
149
+ { ...props }
150
+ />
151
+ ) }
152
+ { ! isMarginDisabled && (
153
+ <MarginVisualizer
154
+ forceShow={ marginMouseOver.isMouseOver }
155
+ { ...props }
156
+ />
157
+ ) }
131
158
  </>
132
159
  );
133
160
  }
@@ -5,6 +5,7 @@ import { addFilter } from '@wordpress/hooks';
5
5
  import { hasBlockSupport } from '@wordpress/blocks';
6
6
  import TokenList from '@wordpress/token-list';
7
7
  import { createHigherOrderComponent } from '@wordpress/compose';
8
+ import { select } from '@wordpress/data';
8
9
 
9
10
  /**
10
11
  * Internal dependencies
@@ -14,6 +15,7 @@ import {
14
15
  getFontSizeClass,
15
16
  getFontSizeObjectByValue,
16
17
  FontSizePicker,
18
+ getComputedFluidTypographyValue,
17
19
  } from '../components/font-sizes';
18
20
  import { TYPOGRAPHY_SUPPORT_KEY } from './typography';
19
21
  import {
@@ -22,6 +24,7 @@ import {
22
24
  shouldSkipSerialization,
23
25
  } from './utils';
24
26
  import useSetting from '../components/use-setting';
27
+ import { store as blockEditorStore } from '../store';
25
28
 
26
29
  export const FONT_SIZE_SUPPORT_KEY = 'typography.fontSize';
27
30
 
@@ -147,6 +150,7 @@ export function FontSizeEdit( props ) {
147
150
  onChange={ onChange }
148
151
  value={ fontSizeValue }
149
152
  withReset={ false }
153
+ withSlider
150
154
  size="__unstable-large"
151
155
  __nextHasNoMarginBottom
152
156
  />
@@ -282,6 +286,69 @@ export function addTransforms( result, source, index, results ) {
282
286
  );
283
287
  }
284
288
 
289
+ /**
290
+ * Allow custom font sizes to appear fluid when fluid typography is enabled at
291
+ * the theme level.
292
+ *
293
+ * Adds a custom getEditWrapperProps() callback to all block types that support
294
+ * font sizes. Then, if fluid typography is enabled, this callback will swap any
295
+ * custom font size in style.fontSize with a fluid font size (i.e. one that uses
296
+ * clamp()).
297
+ *
298
+ * It's important that this hook runs after 'core/style/addEditProps' sets
299
+ * style.fontSize as otherwise fontSize will be overwritten.
300
+ *
301
+ * @param {Object} blockType Block settings object.
302
+ */
303
+ function addEditPropsForFluidCustomFontSizes( blockType ) {
304
+ if (
305
+ ! hasBlockSupport( blockType, FONT_SIZE_SUPPORT_KEY ) ||
306
+ shouldSkipSerialization( blockType, TYPOGRAPHY_SUPPORT_KEY, 'fontSize' )
307
+ ) {
308
+ return blockType;
309
+ }
310
+
311
+ const existingGetEditWrapperProps = blockType.getEditWrapperProps;
312
+
313
+ blockType.getEditWrapperProps = ( attributes ) => {
314
+ const wrapperProps = existingGetEditWrapperProps
315
+ ? existingGetEditWrapperProps( attributes )
316
+ : {};
317
+
318
+ const fontSize = wrapperProps?.style?.fontSize;
319
+
320
+ // TODO: This sucks! We should be using useSetting( 'typography.fluid' )
321
+ // or even useSelect( blockEditorStore ). We can't do either here
322
+ // because getEditWrapperProps is a plain JavaScript function called by
323
+ // BlockListBlock and not a React component rendered within
324
+ // BlockListContext.Provider. If we set fontSize using editor.
325
+ // BlockListBlock instead of using getEditWrapperProps then the value is
326
+ // clobbered when the core/style/addEditProps filter runs.
327
+ const isFluidTypographyEnabled =
328
+ !! select( blockEditorStore ).getSettings().__experimentalFeatures
329
+ ?.typography?.fluid;
330
+
331
+ const newFontSize =
332
+ fontSize && isFluidTypographyEnabled
333
+ ? getComputedFluidTypographyValue( { fontSize } )
334
+ : null;
335
+
336
+ if ( newFontSize === null ) {
337
+ return wrapperProps;
338
+ }
339
+
340
+ return {
341
+ ...wrapperProps,
342
+ style: {
343
+ ...wrapperProps?.style,
344
+ fontSize: newFontSize,
345
+ },
346
+ };
347
+ };
348
+
349
+ return blockType;
350
+ }
351
+
285
352
  addFilter(
286
353
  'blocks.registerBlockType',
287
354
  'core/font/addAttribute',
@@ -307,3 +374,12 @@ addFilter(
307
374
  'core/font-size/addTransforms',
308
375
  addTransforms
309
376
  );
377
+
378
+ addFilter(
379
+ 'blocks.registerBlockType',
380
+ 'core/font-size/addEditPropsForFluidCustomFontSizes',
381
+ addEditPropsForFluidCustomFontSizes,
382
+ // Run after 'core/style/addEditProps' so that the style object has already
383
+ // been translated into inline CSS.
384
+ 11
385
+ );
@@ -9,11 +9,7 @@ import { kebabCase } from 'lodash';
9
9
  */
10
10
  import { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';
11
11
  import { addFilter } from '@wordpress/hooks';
12
- import {
13
- getBlockDefaultClassName,
14
- getBlockSupport,
15
- hasBlockSupport,
16
- } from '@wordpress/blocks';
12
+ import { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';
17
13
  import { useSelect } from '@wordpress/data';
18
14
  import {
19
15
  Button,
@@ -366,9 +362,8 @@ export const withLayoutStyles = createHigherOrderComponent(
366
362
  const layoutClasses = hasLayoutBlockSupport
367
363
  ? useLayoutClasses( block )
368
364
  : null;
369
- const selector = `.${ getBlockDefaultClassName(
370
- name
371
- ) }.wp-container-${ id }`;
365
+ // Higher specificity to override defaults from theme.json.
366
+ const selector = `.wp-container-${ id }.wp-container-${ id }`;
372
367
  const blockGapSupport = useSetting( 'spacing.blockGap' );
373
368
  const hasBlockGapSupport = blockGapSupport !== null;
374
369
 
@@ -413,7 +408,10 @@ export const withLayoutStyles = createHigherOrderComponent(
413
408
  />,
414
409
  element
415
410
  ) }
416
- <BlockListBlock { ...props } className={ className } />
411
+ <BlockListBlock
412
+ { ...props }
413
+ __unstableLayoutClassNames={ className }
414
+ />
417
415
  </>
418
416
  );
419
417
  }
@@ -29,7 +29,7 @@ import {
29
29
  import { cleanEmptyObject } from './utils';
30
30
  import BlockPopover from '../components/block-popover';
31
31
  import SpacingSizesControl from '../components/spacing-sizes-control';
32
- import { getCustomValueFromPreset } from '../components/spacing-sizes-control/utils';
32
+ import { getSpacingPresetCssVar } from '../components/spacing-sizes-control/utils';
33
33
 
34
34
  /**
35
35
  * Determines if there is margin support.
@@ -101,6 +101,8 @@ export function MarginEdit( props ) {
101
101
  name: blockName,
102
102
  attributes: { style },
103
103
  setAttributes,
104
+ onMouseOver,
105
+ onMouseOut,
104
106
  } = props;
105
107
 
106
108
  const spacingSizes = useSetting( 'spacing.spacingSizes' );
@@ -148,6 +150,8 @@ export function MarginEdit( props ) {
148
150
  units={ units }
149
151
  allowReset={ false }
150
152
  splitOnAxis={ splitOnAxis }
153
+ onMouseOver={ onMouseOver }
154
+ onMouseOut={ onMouseOut }
151
155
  />
152
156
  ) }
153
157
  { spacingSizes?.length > 0 && (
@@ -159,6 +163,8 @@ export function MarginEdit( props ) {
159
163
  units={ units }
160
164
  allowReset={ false }
161
165
  splitOnAxis={ false }
166
+ onMouseOver={ onMouseOver }
167
+ onMouseOut={ onMouseOut }
162
168
  />
163
169
  ) }
164
170
  </>
@@ -167,22 +173,21 @@ export function MarginEdit( props ) {
167
173
  } );
168
174
  }
169
175
 
170
- export function MarginVisualizer( { clientId, attributes } ) {
176
+ export function MarginVisualizer( { clientId, attributes, forceShow } ) {
171
177
  const margin = attributes?.style?.spacing?.margin;
172
- const spacingSizes = useSetting( 'spacing.spacingSizes' );
173
178
 
174
179
  const style = useMemo( () => {
175
180
  const marginTop = margin?.top
176
- ? getCustomValueFromPreset( margin?.top, spacingSizes )
181
+ ? getSpacingPresetCssVar( margin?.top )
177
182
  : 0;
178
183
  const marginRight = margin?.right
179
- ? getCustomValueFromPreset( margin?.right, spacingSizes )
184
+ ? getSpacingPresetCssVar( margin?.right )
180
185
  : 0;
181
186
  const marginBottom = margin?.bottom
182
- ? getCustomValueFromPreset( margin?.bottom, spacingSizes )
187
+ ? getSpacingPresetCssVar( margin?.bottom )
183
188
  : 0;
184
189
  const marginLeft = margin?.left
185
- ? getCustomValueFromPreset( margin?.left, spacingSizes )
190
+ ? getSpacingPresetCssVar( margin?.left )
186
191
  : 0;
187
192
 
188
193
  return {
@@ -190,10 +195,10 @@ export function MarginVisualizer( { clientId, attributes } ) {
190
195
  borderRightWidth: marginRight,
191
196
  borderBottomWidth: marginBottom,
192
197
  borderLeftWidth: marginLeft,
193
- top: marginTop !== 0 ? `-${ marginTop }` : 0,
194
- right: marginRight !== 0 ? `-${ marginRight }` : 0,
195
- bottom: marginBottom !== 0 ? `-${ marginBottom }` : 0,
196
- left: marginLeft !== 0 ? `-${ marginLeft }` : 0,
198
+ top: marginTop ? `calc(${ marginTop } * -1)` : 0,
199
+ right: marginRight ? `calc(${ marginRight } * -1)` : 0,
200
+ bottom: marginBottom ? `calc(${ marginBottom } * -1)` : 0,
201
+ left: marginLeft ? `calc(${ marginLeft } * -1)` : 0,
197
202
  };
198
203
  }, [ margin ] );
199
204
 
@@ -208,7 +213,7 @@ export function MarginVisualizer( { clientId, attributes } ) {
208
213
  };
209
214
 
210
215
  useEffect( () => {
211
- if ( ! isShallowEqual( margin, valueRef.current ) ) {
216
+ if ( ! isShallowEqual( margin, valueRef.current ) && ! forceShow ) {
212
217
  setIsActive( true );
213
218
  valueRef.current = margin;
214
219
 
@@ -220,9 +225,9 @@ export function MarginVisualizer( { clientId, attributes } ) {
220
225
  }
221
226
 
222
227
  return () => clearTimer();
223
- }, [ margin ] );
228
+ }, [ margin, forceShow ] );
224
229
 
225
- if ( ! isActive ) {
230
+ if ( ! isActive && ! forceShow ) {
226
231
  return null;
227
232
  }
228
233
 
@@ -231,6 +236,7 @@ export function MarginVisualizer( { clientId, attributes } ) {
231
236
  clientId={ clientId }
232
237
  __unstableCoverTarget
233
238
  __unstableRefreshSize={ margin }
239
+ shift={ false }
234
240
  >
235
241
  <div className="block-editor__padding-visualizer" style={ style } />
236
242
  </BlockPopover>
@@ -29,10 +29,7 @@ import {
29
29
  import { cleanEmptyObject } from './utils';
30
30
  import BlockPopover from '../components/block-popover';
31
31
  import SpacingSizesControl from '../components/spacing-sizes-control';
32
- import {
33
- getSpacingPresetCssVar,
34
- isValueSpacingPreset,
35
- } from '../components/spacing-sizes-control/utils';
32
+ import { getSpacingPresetCssVar } from '../components/spacing-sizes-control/utils';
36
33
  /**
37
34
  * Determines if there is padding support.
38
35
  *
@@ -103,6 +100,8 @@ export function PaddingEdit( props ) {
103
100
  name: blockName,
104
101
  attributes: { style },
105
102
  setAttributes,
103
+ onMouseOver,
104
+ onMouseOut,
106
105
  } = props;
107
106
 
108
107
  const spacingSizes = useSetting( 'spacing.spacingSizes' );
@@ -150,6 +149,8 @@ export function PaddingEdit( props ) {
150
149
  units={ units }
151
150
  allowReset={ false }
152
151
  splitOnAxis={ splitOnAxis }
152
+ onMouseOver={ onMouseOver }
153
+ onMouseOut={ onMouseOut }
153
154
  />
154
155
  ) }
155
156
  { spacingSizes?.length > 0 && (
@@ -161,6 +162,8 @@ export function PaddingEdit( props ) {
161
162
  units={ units }
162
163
  allowReset={ false }
163
164
  splitOnAxis={ splitOnAxis }
165
+ onMouseOver={ onMouseOver }
166
+ onMouseOut={ onMouseOut }
164
167
  />
165
168
  ) }
166
169
  </>
@@ -169,22 +172,22 @@ export function PaddingEdit( props ) {
169
172
  } );
170
173
  }
171
174
 
172
- export function PaddingVisualizer( { clientId, attributes } ) {
175
+ export function PaddingVisualizer( { clientId, attributes, forceShow } ) {
173
176
  const padding = attributes?.style?.spacing?.padding;
174
177
  const style = useMemo( () => {
175
178
  return {
176
- borderTopWidth: isValueSpacingPreset( padding?.top )
179
+ borderTopWidth: padding?.top
177
180
  ? getSpacingPresetCssVar( padding?.top )
178
- : padding?.top,
179
- borderRightWidth: isValueSpacingPreset( padding?.right )
181
+ : 0,
182
+ borderRightWidth: padding?.right
180
183
  ? getSpacingPresetCssVar( padding?.right )
181
- : padding?.right,
182
- borderBottomWidth: isValueSpacingPreset( padding?.bottom )
184
+ : 0,
185
+ borderBottomWidth: padding?.bottom
183
186
  ? getSpacingPresetCssVar( padding?.bottom )
184
- : padding?.bottom,
185
- borderLeftWidth: isValueSpacingPreset( padding?.left )
187
+ : 0,
188
+ borderLeftWidth: padding?.left
186
189
  ? getSpacingPresetCssVar( padding?.left )
187
- : padding?.left,
190
+ : 0,
188
191
  };
189
192
  }, [ padding ] );
190
193
 
@@ -199,7 +202,7 @@ export function PaddingVisualizer( { clientId, attributes } ) {
199
202
  };
200
203
 
201
204
  useEffect( () => {
202
- if ( ! isShallowEqual( padding, valueRef.current ) ) {
205
+ if ( ! isShallowEqual( padding, valueRef.current ) && ! forceShow ) {
203
206
  setIsActive( true );
204
207
  valueRef.current = padding;
205
208
 
@@ -211,9 +214,9 @@ export function PaddingVisualizer( { clientId, attributes } ) {
211
214
  }
212
215
 
213
216
  return () => clearTimer();
214
- }, [ padding ] );
217
+ }, [ padding, forceShow ] );
215
218
 
216
- if ( ! isActive ) {
219
+ if ( ! isActive && ! forceShow ) {
217
220
  return null;
218
221
  }
219
222
 
@@ -222,6 +225,7 @@ export function PaddingVisualizer( { clientId, attributes } ) {
222
225
  clientId={ clientId }
223
226
  __unstableCoverTarget
224
227
  __unstableRefreshSize={ padding }
228
+ shift={ false }
225
229
  >
226
230
  <div className="block-editor__padding-visualizer" style={ style } />
227
231
  </BlockPopover>
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { omit } from 'lodash';
5
4
  import classnames from 'classnames';
6
5
 
7
6
  /**
@@ -134,6 +133,126 @@ const skipSerializationPathsSave = {
134
133
  */
135
134
  const renamedFeatures = { gradients: 'gradient' };
136
135
 
136
+ /**
137
+ * A utility function used to remove one or more paths from a style object.
138
+ * Works in a way similar to Lodash's `omit()`. See unit tests and examples below.
139
+ *
140
+ * It supports a single string path:
141
+ *
142
+ * ```
143
+ * omitStyle( { color: 'red' }, 'color' ); // {}
144
+ * ```
145
+ *
146
+ * or an array of paths:
147
+ *
148
+ * ```
149
+ * omitStyle( { color: 'red', background: '#fff' }, [ 'color', 'background' ] ); // {}
150
+ * ```
151
+ *
152
+ * It also allows you to specify paths at multiple levels in a string.
153
+ *
154
+ * ```
155
+ * omitStyle( { typography: { textDecoration: 'underline' } }, 'typography.textDecoration' ); // {}
156
+ * ```
157
+ *
158
+ * You can remove multiple paths at the same time:
159
+ *
160
+ * ```
161
+ * omitStyle(
162
+ * {
163
+ * typography: {
164
+ * textDecoration: 'underline',
165
+ * textTransform: 'uppercase',
166
+ * }
167
+ * },
168
+ * [
169
+ * 'typography.textDecoration',
170
+ * 'typography.textTransform',
171
+ * ]
172
+ * );
173
+ * // {}
174
+ * ```
175
+ *
176
+ * You can also specify nested paths as arrays:
177
+ *
178
+ * ```
179
+ * omitStyle(
180
+ * {
181
+ * typography: {
182
+ * textDecoration: 'underline',
183
+ * textTransform: 'uppercase',
184
+ * }
185
+ * },
186
+ * [
187
+ * [ 'typography', 'textDecoration' ],
188
+ * [ 'typography', 'textTransform' ],
189
+ * ]
190
+ * );
191
+ * // {}
192
+ * ```
193
+ *
194
+ * With regards to nesting of styles, infinite depth is supported:
195
+ *
196
+ * ```
197
+ * omitStyle(
198
+ * {
199
+ * border: {
200
+ * radius: {
201
+ * topLeft: '10px',
202
+ * topRight: '0.5rem',
203
+ * }
204
+ * }
205
+ * },
206
+ * [
207
+ * [ 'border', 'radius', 'topRight' ],
208
+ * ]
209
+ * );
210
+ * // { border: { radius: { topLeft: '10px' } } }
211
+ * ```
212
+ *
213
+ * The third argument, `preserveReference`, defines how to treat the input style object.
214
+ * It is mostly necessary to properly handle mutation when recursively handling the style object.
215
+ * Defaulting to `false`, this will always create a new object, avoiding to mutate `style`.
216
+ * However, when recursing, we change that value to `true` in order to work with a single copy
217
+ * of the original style object.
218
+ *
219
+ * @see https://lodash.com/docs/4.17.15#omit
220
+ *
221
+ * @param {Object} style Styles object.
222
+ * @param {Array|string} paths Paths to remove.
223
+ * @param {boolean} preserveReference True to mutate the `style` object, false otherwise.
224
+ * @return {Object} Styles object with the specified paths removed.
225
+ */
226
+ export function omitStyle( style, paths, preserveReference = false ) {
227
+ if ( ! style ) {
228
+ return style;
229
+ }
230
+
231
+ let newStyle = style;
232
+ if ( ! preserveReference ) {
233
+ newStyle = JSON.parse( JSON.stringify( style ) );
234
+ }
235
+
236
+ if ( ! Array.isArray( paths ) ) {
237
+ paths = [ paths ];
238
+ }
239
+
240
+ paths.forEach( ( path ) => {
241
+ if ( ! Array.isArray( path ) ) {
242
+ path = path.split( '.' );
243
+ }
244
+
245
+ if ( path.length > 1 ) {
246
+ const [ firstSubpath, ...restPath ] = path;
247
+ omitStyle( newStyle[ firstSubpath ], [ restPath ], true );
248
+ } else if ( path.length === 1 ) {
249
+ delete newStyle[ path[ 0 ] ];
250
+ }
251
+ } );
252
+
253
+ return newStyle;
254
+ }
255
+
137
256
  /**
138
257
  * Override props assigned to save component to inject the CSS variables definition.
139
258
  *
@@ -159,13 +278,13 @@ export function addSaveProps(
159
278
  const skipSerialization = getBlockSupport( blockType, indicator );
160
279
 
161
280
  if ( skipSerialization === true ) {
162
- style = omit( style, path );
281
+ style = omitStyle( style, path );
163
282
  }
164
283
 
165
284
  if ( Array.isArray( skipSerialization ) ) {
166
285
  skipSerialization.forEach( ( featureName ) => {
167
286
  const feature = renamedFeatures[ featureName ] || featureName;
168
- style = omit( style, [ [ ...path, feature ] ] );
287
+ style = omitStyle( style, [ [ ...path, feature ] ] );
169
288
  } );
170
289
  }
171
290
  } );