@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
@@ -6,14 +6,14 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { useState, useLayoutEffect } from '@wordpress/element';
9
+ import { useState } from '@wordpress/element';
10
10
  import { debounce, useViewportMatch } from '@wordpress/compose';
11
11
  import {
12
12
  Button,
13
13
  __experimentalTruncate as Truncate,
14
- Slot,
15
- Fill,
14
+ Popover,
16
15
  } from '@wordpress/components';
16
+ import deprecated from '@wordpress/deprecated';
17
17
 
18
18
  /**
19
19
  * Internal dependencies
@@ -21,32 +21,10 @@ import {
21
21
  import BlockStylesPreviewPanel from './preview-panel';
22
22
  import useStylesForBlocks from './use-styles-for-block';
23
23
 
24
- function BlockStylesPreviewPanelSlot( { scope } ) {
25
- return <Slot name={ `BlockStylesPreviewPanel/${ scope }` } />;
26
- }
27
-
28
- function BlockStylesPreviewPanelFill( { children, scope, ...props } ) {
29
- return (
30
- <Fill name={ `BlockStylesPreviewPanel/${ scope }` }>
31
- <div { ...props }>{ children }</div>
32
- </Fill>
33
- );
34
- }
35
-
36
- // Top position (in px) of the Block Styles container
37
- // relative to the editor pane.
38
- // The value is the equivalent of the container's right position.
39
- const DEFAULT_POSITION_TOP = 16;
40
-
41
24
  const noop = () => {};
42
25
 
43
26
  // Block Styles component for the Settings Sidebar.
44
- function BlockStyles( {
45
- clientId,
46
- onSwitch = noop,
47
- onHoverClassName = noop,
48
- scope,
49
- } ) {
27
+ function BlockStyles( { clientId, onSwitch = noop, onHoverClassName = noop } ) {
50
28
  const {
51
29
  onSelect,
52
30
  stylesToRender,
@@ -58,17 +36,8 @@ function BlockStyles( {
58
36
  onSwitch,
59
37
  } );
60
38
  const [ hoveredStyle, setHoveredStyle ] = useState( null );
61
- const [ containerScrollTop, setContainerScrollTop ] = useState( 0 );
62
39
  const isMobileViewport = useViewportMatch( 'medium', '<' );
63
40
 
64
- useLayoutEffect( () => {
65
- const scrollContainer = document.querySelector(
66
- '.interface-interface-skeleton__content'
67
- );
68
- const scrollTop = scrollContainer?.scrollTop || 0;
69
- setContainerScrollTop( scrollTop + DEFAULT_POSITION_TOP );
70
- }, [ hoveredStyle ] );
71
-
72
41
  if ( ! stylesToRender || stylesToRender.length === 0 ) {
73
42
  return null;
74
43
  }
@@ -127,23 +96,31 @@ function BlockStyles( {
127
96
  } ) }
128
97
  </div>
129
98
  { hoveredStyle && ! isMobileViewport && (
130
- <BlockStylesPreviewPanelFill
131
- scope={ scope }
132
- className="block-editor-block-styles__preview-panel"
133
- style={ { top: containerScrollTop } }
134
- onMouseLeave={ () => styleItemHandler( null ) }
135
- >
136
- <BlockStylesPreviewPanel
137
- activeStyle={ activeStyle }
138
- className={ previewClassName }
139
- genericPreviewBlock={ genericPreviewBlock }
140
- style={ hoveredStyle }
141
- />
142
- </BlockStylesPreviewPanelFill>
99
+ <Popover placement="left-start" offset={ 20 }>
100
+ <div
101
+ className="block-editor-block-styles__preview-panel"
102
+ onMouseLeave={ () => styleItemHandler( null ) }
103
+ >
104
+ <BlockStylesPreviewPanel
105
+ activeStyle={ activeStyle }
106
+ className={ previewClassName }
107
+ genericPreviewBlock={ genericPreviewBlock }
108
+ style={ hoveredStyle }
109
+ />
110
+ </div>
111
+ </Popover>
143
112
  ) }
144
113
  </div>
145
114
  );
146
115
  }
147
116
 
148
- BlockStyles.Slot = BlockStylesPreviewPanelSlot;
149
117
  export default BlockStyles;
118
+
119
+ BlockStyles.Slot = () => {
120
+ deprecated( 'BlockStyles.Slot', {
121
+ version: '6.4',
122
+ since: '6.2',
123
+ } );
124
+
125
+ return null;
126
+ };
@@ -1,43 +1,114 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`BlockSwitcherDropdownMenu should render disabled block switcher with multi block of different types when no transforms 1`] = `
4
- <ToolbarGroup>
5
- <ForwardRef(ToolbarButton)
6
- className="block-editor-block-switcher__no-switcher-icon"
7
- disabled={true}
8
- icon={
9
- <React.Fragment>
10
- <Memo(BlockIcon)
11
- icon={
12
- <SVG
13
- viewBox="0 0 24 24"
14
- xmlns="http://www.w3.org/2000/svg"
15
- >
16
- <Path
17
- d="M20.2 8v11c0 .7-.6 1.2-1.2 1.2H6v1.5h13c1.5 0 2.7-1.2 2.7-2.8V8zM18 16.4V4.6c0-.9-.7-1.6-1.6-1.6H4.6C3.7 3 3 3.7 3 4.6v11.8c0 .9.7 1.6 1.6 1.6h11.8c.9 0 1.6-.7 1.6-1.6zm-13.5 0V4.6c0-.1.1-.1.1-.1h11.8c.1 0 .1.1.1.1v11.8c0 .1-.1.1-.1.1H4.6l-.1-.1z"
18
- />
19
- </SVG>
20
- }
21
- showColors={true}
22
- />
23
- </React.Fragment>
24
- }
25
- />
26
- </ToolbarGroup>
4
+ <div>
5
+ <div
6
+ class="components-toolbar"
7
+ >
8
+ <div>
9
+ <button
10
+ aria-label="Block Name"
11
+ class="components-button components-toolbar__control block-editor-block-switcher__no-switcher-icon has-icon"
12
+ data-toolbar-item="true"
13
+ disabled=""
14
+ type="button"
15
+ >
16
+ <span
17
+ class="block-editor-block-icon has-colors"
18
+ >
19
+ <svg
20
+ aria-hidden="true"
21
+ focusable="false"
22
+ height="24"
23
+ viewBox="0 0 24 24"
24
+ width="24"
25
+ xmlns="http://www.w3.org/2000/svg"
26
+ >
27
+ <path
28
+ d="M20.2 8v11c0 .7-.6 1.2-1.2 1.2H6v1.5h13c1.5 0 2.7-1.2 2.7-2.8V8zM18 16.4V4.6c0-.9-.7-1.6-1.6-1.6H4.6C3.7 3 3 3.7 3 4.6v11.8c0 .9.7 1.6 1.6 1.6h11.8c.9 0 1.6-.7 1.6-1.6zm-13.5 0V4.6c0-.1.1-.1.1-.1h11.8c.1 0 .1.1.1.1v11.8c0 .1-.1.1-.1.1H4.6l-.1-.1z"
29
+ />
30
+ </svg>
31
+ </span>
32
+ </button>
33
+ </div>
34
+ </div>
35
+ </div>
27
36
  `;
28
37
 
29
38
  exports[`BlockSwitcherDropdownMenu should render enabled block switcher with multi block when transforms exist 1`] = `
30
- <ToolbarGroup>
31
- <ForwardRef(ToolbarItem)>
32
- <Component />
33
- </ForwardRef(ToolbarItem)>
34
- </ToolbarGroup>
39
+ <div>
40
+ <div
41
+ class="components-toolbar"
42
+ >
43
+ <div
44
+ class="components-dropdown components-dropdown-menu block-editor-block-switcher"
45
+ tabindex="-1"
46
+ >
47
+ <button
48
+ aria-describedby="components-button__description-2"
49
+ aria-expanded="false"
50
+ aria-haspopup="true"
51
+ aria-label="Block Name"
52
+ class="components-button components-dropdown-menu__toggle has-icon"
53
+ data-toolbar-item="true"
54
+ type="button"
55
+ >
56
+ <span
57
+ class="block-editor-block-icon block-editor-block-switcher__toggle has-colors"
58
+ />
59
+ </button>
60
+ <div
61
+ class="components-visually-hidden emotion-0 emotion-1"
62
+ data-wp-c16t="true"
63
+ data-wp-component="VisuallyHidden"
64
+ style="border: 0px; clip: rect(1px, 1px, 1px, 1px); clip-path: inset( 50% ); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; width: 1px; word-wrap: normal;"
65
+ >
66
+ <span
67
+ id="components-button__description-2"
68
+ >
69
+ Change type of 2 blocks
70
+ </span>
71
+ </div>
72
+ </div>
73
+ </div>
74
+ </div>
35
75
  `;
36
76
 
37
77
  exports[`BlockSwitcherDropdownMenu should render switcher with blocks 1`] = `
38
- <ToolbarGroup>
39
- <ForwardRef(ToolbarItem)>
40
- <Component />
41
- </ForwardRef(ToolbarItem)>
42
- </ToolbarGroup>
78
+ <div>
79
+ <div
80
+ class="components-toolbar"
81
+ >
82
+ <div
83
+ class="components-dropdown components-dropdown-menu block-editor-block-switcher"
84
+ tabindex="-1"
85
+ >
86
+ <button
87
+ aria-describedby="components-button__description-0"
88
+ aria-expanded="false"
89
+ aria-haspopup="true"
90
+ aria-label="Block Name"
91
+ class="components-button components-dropdown-menu__toggle has-icon"
92
+ data-toolbar-item="true"
93
+ type="button"
94
+ >
95
+ <span
96
+ class="block-editor-block-icon block-editor-block-switcher__toggle has-colors"
97
+ />
98
+ </button>
99
+ <div
100
+ class="components-visually-hidden emotion-0 emotion-1"
101
+ data-wp-c16t="true"
102
+ data-wp-component="VisuallyHidden"
103
+ style="border: 0px; clip: rect(1px, 1px, 1px, 1px); clip-path: inset( 50% ); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; width: 1px; word-wrap: normal;"
104
+ >
105
+ <span
106
+ id="components-button__description-0"
107
+ >
108
+ Block Name: Change block type or style
109
+ </span>
110
+ </div>
111
+ </div>
112
+ </div>
113
+ </div>
43
114
  `;
@@ -1,14 +1,14 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { shallow, mount } from 'enzyme';
4
+ import { render, screen, within } from '@testing-library/react';
5
+ import userEvent from '@testing-library/user-event';
5
6
 
6
7
  /**
7
8
  * WordPress dependencies
8
9
  */
9
10
  import { useSelect } from '@wordpress/data';
10
11
  import { registerBlockType, unregisterBlockType } from '@wordpress/blocks';
11
- import { Button } from '@wordpress/components';
12
12
  import { copy } from '@wordpress/icons';
13
13
 
14
14
  /**
@@ -17,23 +17,25 @@ import { copy } from '@wordpress/icons';
17
17
  import { BlockSwitcher, BlockSwitcherDropdownMenu } from '../';
18
18
 
19
19
  jest.mock( '@wordpress/data/src/components/use-select', () => jest.fn() );
20
- jest.mock( '../../block-title/use-block-display-title', () => jest.fn() );
20
+ jest.mock( '../../block-title/use-block-display-title', () =>
21
+ jest.fn().mockReturnValue( 'Block Name' )
22
+ );
21
23
 
22
24
  describe( 'BlockSwitcher', () => {
23
25
  test( 'should not render block switcher without blocks', () => {
24
26
  useSelect.mockImplementation( () => ( {} ) );
25
- const wrapper = shallow( <BlockSwitcher /> );
26
- expect( wrapper.html() ).toBeNull();
27
+ const { container } = render( <BlockSwitcher /> );
28
+ expect( container ).toBeEmptyDOMElement();
27
29
  } );
28
30
 
29
31
  test( 'should not render block switcher with null blocks', () => {
30
32
  useSelect.mockImplementation( () => ( { blocks: [ null ] } ) );
31
- const wrapper = shallow(
33
+ const { container } = render(
32
34
  <BlockSwitcher
33
35
  clientIds={ [ 'a1303fd6-3e60-4fff-a770-0e0ea656c5b9' ] }
34
36
  />
35
37
  );
36
- expect( wrapper.html() ).toBeNull();
38
+ expect( container ).toBeEmptyDOMElement();
37
39
  } );
38
40
  } );
39
41
  describe( 'BlockSwitcherDropdownMenu', () => {
@@ -122,10 +124,10 @@ describe( 'BlockSwitcherDropdownMenu', () => {
122
124
  ],
123
125
  canRemove: true,
124
126
  } ) );
125
- const wrapper = shallow(
127
+ const { container } = render(
126
128
  <BlockSwitcherDropdownMenu blocks={ [ headingBlock1 ] } />
127
129
  );
128
- expect( wrapper ).toMatchSnapshot();
130
+ expect( container ).toMatchSnapshot();
129
131
  } );
130
132
 
131
133
  test( 'should render disabled block switcher with multi block of different types when no transforms', () => {
@@ -133,12 +135,12 @@ describe( 'BlockSwitcherDropdownMenu', () => {
133
135
  possibleBlockTransformations: [],
134
136
  icon: copy,
135
137
  } ) );
136
- const wrapper = shallow(
138
+ const { container } = render(
137
139
  <BlockSwitcherDropdownMenu
138
140
  blocks={ [ headingBlock1, textBlock ] }
139
141
  />
140
142
  );
141
- expect( wrapper ).toMatchSnapshot();
143
+ expect( container ).toMatchSnapshot();
142
144
  } );
143
145
 
144
146
  test( 'should render enabled block switcher with multi block when transforms exist', () => {
@@ -149,12 +151,12 @@ describe( 'BlockSwitcherDropdownMenu', () => {
149
151
  ],
150
152
  canRemove: true,
151
153
  } ) );
152
- const wrapper = shallow(
154
+ const { container } = render(
153
155
  <BlockSwitcherDropdownMenu
154
156
  blocks={ [ headingBlock1, headingBlock2 ] }
155
157
  />
156
158
  );
157
- expect( wrapper ).toMatchSnapshot();
159
+ expect( container ).toMatchSnapshot();
158
160
  } );
159
161
 
160
162
  describe( 'Dropdown', () => {
@@ -166,70 +168,128 @@ describe( 'BlockSwitcherDropdownMenu', () => {
166
168
  canRemove: true,
167
169
  } ) );
168
170
  } );
169
- const getDropdown = () =>
170
- mount(
171
- <BlockSwitcherDropdownMenu blocks={ [ headingBlock1 ] } />
172
- ).find( 'Dropdown' );
173
171
 
174
172
  test( 'should dropdown exist', () => {
175
- expect( getDropdown() ).toHaveLength( 1 );
176
- } );
173
+ render(
174
+ <BlockSwitcherDropdownMenu blocks={ [ headingBlock1 ] } />
175
+ );
177
176
 
178
- describe( '.renderToggle', () => {
179
- const onToggleStub = jest.fn();
180
- const mockKeyDown = {
181
- preventDefault: () => {},
182
- code: 'ArrowDown',
183
- };
177
+ expect(
178
+ screen.getByRole( 'button', {
179
+ name: 'Block Name',
180
+ expanded: false,
181
+ } )
182
+ ).toBeVisible();
183
+ } );
184
184
 
185
- afterEach( () => {
186
- onToggleStub.mockReset();
185
+ test( 'should simulate a keydown event, which should open transform toggle.', async () => {
186
+ const user = userEvent.setup( {
187
+ advanceTimers: jest.advanceTimersByTime,
187
188
  } );
188
189
 
189
- test( 'should simulate a keydown event, which should call onToggle and open transform toggle.', () => {
190
- const toggleClosed = mount(
191
- getDropdown().props().renderToggle( {
192
- onToggle: onToggleStub,
193
- isOpen: false,
194
- } )
195
- );
196
- const iconButtonClosed = toggleClosed.find( Button );
190
+ render(
191
+ <BlockSwitcherDropdownMenu blocks={ [ headingBlock1 ] } />
192
+ );
193
+
194
+ expect(
195
+ screen.getByRole( 'button', {
196
+ name: 'Block Name',
197
+ expanded: false,
198
+ } )
199
+ ).toBeVisible();
200
+ expect(
201
+ screen.queryByRole( 'menu', {
202
+ name: 'Block Name',
203
+ } )
204
+ ).not.toBeInTheDocument();
205
+
206
+ await user.type(
207
+ screen.getByRole( 'button', {
208
+ name: 'Block Name',
209
+ expanded: false,
210
+ } ),
211
+ '[ArrowDown]'
212
+ );
197
213
 
198
- iconButtonClosed.simulate( 'keydown', mockKeyDown );
214
+ expect(
215
+ screen.getByRole( 'button', {
216
+ name: 'Block Name',
217
+ expanded: true,
218
+ } )
219
+ ).toBeVisible();
199
220
 
200
- expect( onToggleStub ).toHaveBeenCalledTimes( 1 );
221
+ const menu = screen.getByRole( 'menu', {
222
+ name: 'Block Name',
201
223
  } );
224
+ expect( menu ).toBeInTheDocument();
225
+ expect( menu ).not.toBeVisible();
226
+ } );
202
227
 
203
- test( 'should simulate a click event, which should call onToggle.', () => {
204
- const toggleOpen = mount(
205
- getDropdown().props().renderToggle( {
206
- onToggle: onToggleStub,
207
- isOpen: true,
208
- } )
209
- );
210
- const iconButtonOpen = toggleOpen.find( Button );
228
+ test( 'should simulate a click event, which should call onToggle.', async () => {
229
+ const user = userEvent.setup( {
230
+ advanceTimers: jest.advanceTimersByTime,
231
+ } );
232
+
233
+ render(
234
+ <BlockSwitcherDropdownMenu blocks={ [ headingBlock1 ] } />
235
+ );
236
+
237
+ expect(
238
+ screen.getByRole( 'button', {
239
+ name: 'Block Name',
240
+ expanded: false,
241
+ } )
242
+ ).toBeVisible();
243
+ expect(
244
+ screen.queryByRole( 'menu', {
245
+ name: 'Block Name',
246
+ } )
247
+ ).not.toBeInTheDocument();
248
+
249
+ await user.click(
250
+ screen.getByRole( 'button', {
251
+ name: 'Block Name',
252
+ expanded: false,
253
+ } )
254
+ );
211
255
 
212
- iconButtonOpen.simulate( 'keydown', mockKeyDown );
256
+ expect(
257
+ screen.getByRole( 'button', {
258
+ name: 'Block Name',
259
+ expanded: true,
260
+ } )
261
+ ).toBeVisible();
213
262
 
214
- expect( onToggleStub ).toHaveBeenCalledTimes( 0 );
263
+ const menu = screen.getByRole( 'menu', {
264
+ name: 'Block Name',
215
265
  } );
266
+ expect( menu ).toBeInTheDocument();
267
+ expect( menu ).not.toBeVisible();
216
268
  } );
217
269
 
218
- describe( '.renderContent', () => {
219
- test( 'should create the transform items for the chosen block. A heading block will have 3 items', () => {
220
- const onCloseStub = jest.fn();
221
- const content = shallow(
222
- <div>
223
- { getDropdown()
224
- .props()
225
- .renderContent( { onClose: onCloseStub } ) }
226
- </div>
227
- );
228
- const blockList = content.find( 'BlockTransformationsMenu' );
229
- expect(
230
- blockList.prop( 'possibleBlockTransformations' )
231
- ).toHaveLength( 1 );
270
+ test( 'should create the transform items for the chosen block.', async () => {
271
+ const user = userEvent.setup( {
272
+ advanceTimers: jest.advanceTimersByTime,
232
273
  } );
274
+
275
+ render(
276
+ <BlockSwitcherDropdownMenu blocks={ [ headingBlock1 ] } />
277
+ );
278
+
279
+ await user.click(
280
+ screen.getByRole( 'button', {
281
+ name: 'Block Name',
282
+ expanded: false,
283
+ } )
284
+ );
285
+
286
+ expect(
287
+ within(
288
+ screen.getByRole( 'menu', {
289
+ name: 'Block Name',
290
+ } )
291
+ ).getByRole( 'menuitem' )
292
+ ).toBeInTheDocument();
233
293
  } );
234
294
  } );
235
295
  } );
@@ -34,7 +34,7 @@ const BlockToolbar = ( { hideDragHandle } ) => {
34
34
  blockClientId,
35
35
  blockType,
36
36
  hasFixedToolbar,
37
- hasReducedUI,
37
+ isDistractionFree,
38
38
  isValid,
39
39
  isVisual,
40
40
  isContentLocked,
@@ -60,7 +60,7 @@ const BlockToolbar = ( { hideDragHandle } ) => {
60
60
  selectedBlockClientId &&
61
61
  getBlockType( getBlockName( selectedBlockClientId ) ),
62
62
  hasFixedToolbar: settings.hasFixedToolbar,
63
- hasReducedUI: settings.hasReducedUI,
63
+ isDistractionFree: settings.isDistractionFree,
64
64
  rootClientId: blockRootClientId,
65
65
  isValid: selectedBlockClientIds.every( ( id ) =>
66
66
  isBlockValid( id )
@@ -82,7 +82,7 @@ const BlockToolbar = ( { hideDragHandle } ) => {
82
82
  {
83
83
  ref: nodeRef,
84
84
  onChange( isFocused ) {
85
- if ( isFocused && hasReducedUI ) {
85
+ if ( isFocused && isDistractionFree ) {
86
86
  return;
87
87
  }
88
88
  toggleBlockHighlight( blockClientId, isFocused );
@@ -132,9 +132,7 @@ const BlockToolbar = ( { hideDragHandle } ) => {
132
132
  ) }
133
133
  <BlockMover
134
134
  clientIds={ blockClientIds }
135
- hideDragHandle={
136
- hideDragHandle || hasReducedUI
137
- }
135
+ hideDragHandle={ hideDragHandle }
138
136
  />
139
137
  </ToolbarGroup>
140
138
  ) }
@@ -137,15 +137,6 @@
137
137
  padding-right: 6px;
138
138
  }
139
139
 
140
- // Switcher overrides.
141
- .block-editor-block-switcher {
142
- border-right: 1px solid $gray-900;
143
-
144
- .components-dropdown-menu__toggle {
145
- margin-left: 0;
146
- }
147
- }
148
-
149
140
  .block-editor-block-switcher .components-dropdown-menu__toggle,
150
141
  .block-editor-block-switcher__no-switcher-icon {
151
142
  .block-editor-block-icon {
@@ -162,12 +153,22 @@
162
153
  }
163
154
  }
164
155
 
156
+ .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container {
157
+ width: auto;
158
+ }
159
+
165
160
  // Mover overrides.
166
161
  .block-editor-block-toolbar__block-controls .block-editor-block-mover {
167
- margin-left: 0;
162
+ border-left: 1px solid $gray-900;
163
+ margin-left: 6px;
164
+ margin-right: -6px;
168
165
  white-space: nowrap;
169
166
  }
170
167
 
168
+ .block-editor-block-contextual-toolbar.is-fixed .block-editor-block-toolbar__block-controls .block-editor-block-mover {
169
+ border-left-color: $gray-200;
170
+ }
171
+
171
172
  .block-editor-block-mover-button {
172
173
  // The specificity can be reduced once https://github.com/WordPress/gutenberg/blob/try/block-toolbar-labels/packages/block-editor/src/components/block-mover/style.scss#L34 is also dealt with.
173
174
  padding-left: $grid-unit !important;
@@ -175,17 +176,40 @@
175
176
  }
176
177
 
177
178
  .block-editor-block-mover__drag-handle.has-icon {
178
- padding-left: 6px !important;
179
- padding-right: 6px !important;
180
- border-right: 1px solid $gray-900;
179
+ padding-left: 12px !important;
180
+ padding-right: 12px !important;
181
+ }
182
+
183
+ .block-editor-block-contextual-toolbar.is-fixed .block-editor-block-mover__move-button-container {
184
+ border-width: 0;
181
185
  }
182
186
 
183
187
  @include break-small() {
184
188
  // Specificity override for https://github.com/WordPress/gutenberg/blob/try/block-toolbar-labels/packages/block-editor/src/components/block-mover/style.scss#L69
185
189
  .is-up-button.is-up-button.is-up-button {
186
- border-bottom: 1px solid $gray-900;
187
190
  margin-right: 0;
188
191
  border-radius: 0;
192
+ order: 1;
193
+ }
194
+
195
+ .block-editor-block-mover__move-button-container {
196
+ border-left: 1px solid $gray-900;
197
+
198
+ &::before {
199
+ content: "";
200
+ display: block;
201
+ height: 1px;
202
+ background: $gray-900;
203
+ order: 2;
204
+ }
205
+ }
206
+
207
+ .is-down-button.is-down-button.is-down-button {
208
+ order: 3;
209
+ }
210
+
211
+ .block-editor-block-contextual-toolbar.is-fixed .block-editor-block-mover__move-button-container::before {
212
+ background: $gray-300;
189
213
  }
190
214
  }
191
215
 
@@ -23,6 +23,7 @@ export default function BlockToolsBackCompat( { children } ) {
23
23
  deprecated( 'wp.components.Popover.Slot name="block-toolbar"', {
24
24
  alternative: 'wp.blockEditor.BlockTools',
25
25
  since: '5.8',
26
+ version: '6.3',
26
27
  } );
27
28
 
28
29
  return (