@wordpress/block-editor 9.5.0 → 9.7.1-next.d6164808d3.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 (548) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/block-alignment-control/use-available-alignments.js +1 -1
  3. package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
  4. package/build/components/block-edit-visually-button/index.js +46 -0
  5. package/build/components/block-edit-visually-button/index.js.map +1 -0
  6. package/build/components/block-list/block.js +12 -2
  7. package/build/components/block-list/block.js.map +1 -1
  8. package/build/components/block-list/index.native.js +1 -1
  9. package/build/components/block-list/index.native.js.map +1 -1
  10. package/build/components/block-lock/modal.js +2 -2
  11. package/build/components/block-lock/modal.js.map +1 -1
  12. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  13. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  14. package/build/components/block-mover/mover-description.js +95 -32
  15. package/build/components/block-mover/mover-description.js.map +1 -1
  16. package/build/components/block-popover/inbetween.js +5 -3
  17. package/build/components/block-popover/inbetween.js.map +1 -1
  18. package/build/components/block-settings-menu/index.js +2 -6
  19. package/build/components/block-settings-menu/index.js.map +1 -1
  20. package/build/components/block-settings-menu-controls/index.js +1 -1
  21. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  22. package/build/components/block-styles/index.js +3 -6
  23. package/build/components/block-styles/index.js.map +1 -1
  24. package/build/components/block-styles/preview.native.js +1 -3
  25. package/build/components/block-styles/preview.native.js.map +1 -1
  26. package/build/components/block-switcher/index.js +10 -16
  27. package/build/components/block-switcher/index.js.map +1 -1
  28. package/build/components/block-toolbar/index.js +5 -1
  29. package/build/components/block-toolbar/index.js.map +1 -1
  30. package/build/components/block-tools/block-selection-button.js +1 -7
  31. package/build/components/block-tools/block-selection-button.js.map +1 -1
  32. package/build/components/block-tools/index.js +4 -1
  33. package/build/components/block-tools/index.js.map +1 -1
  34. package/build/components/block-types-list/index.js +1 -1
  35. package/build/components/block-types-list/index.js.map +1 -1
  36. package/build/components/block-types-list/index.native.js +65 -23
  37. package/build/components/block-types-list/index.native.js.map +1 -1
  38. package/build/components/border-radius-control/all-input-control.js +31 -3
  39. package/build/components/border-radius-control/all-input-control.js.map +1 -1
  40. package/build/components/border-radius-control/index.js +23 -7
  41. package/build/components/border-radius-control/index.js.map +1 -1
  42. package/build/components/border-radius-control/input-controls.js +21 -6
  43. package/build/components/border-radius-control/input-controls.js.map +1 -1
  44. package/build/components/border-radius-control/utils.js +13 -16
  45. package/build/components/border-radius-control/utils.js.map +1 -1
  46. package/build/components/colors/utils.js +6 -2
  47. package/build/components/colors/utils.js.map +1 -1
  48. package/build/components/colors/with-colors.js +17 -4
  49. package/build/components/colors/with-colors.js.map +1 -1
  50. package/build/components/colors-gradients/control.js +8 -4
  51. package/build/components/colors-gradients/control.js.map +1 -1
  52. package/build/components/colors-gradients/dropdown.js +9 -3
  53. package/build/components/colors-gradients/dropdown.js.map +1 -1
  54. package/build/components/copy-handler/index.js +6 -0
  55. package/build/components/copy-handler/index.js.map +1 -1
  56. package/build/components/date-format-picker/index.js +2 -7
  57. package/build/components/date-format-picker/index.js.map +1 -1
  58. package/build/components/duotone/components.js +5 -5
  59. package/build/components/duotone/components.js.map +1 -1
  60. package/build/components/font-appearance-control/index.js +10 -4
  61. package/build/components/font-appearance-control/index.js.map +1 -1
  62. package/build/components/font-family/index.js +1 -1
  63. package/build/components/font-family/index.js.map +1 -1
  64. package/build/components/font-sizes/with-font-sizes.js +17 -4
  65. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  66. package/build/components/image-editor/cropper.js +4 -3
  67. package/build/components/image-editor/cropper.js.map +1 -1
  68. package/build/components/image-editor/index.js +3 -1
  69. package/build/components/image-editor/index.js.map +1 -1
  70. package/build/components/image-size-control/index.js +3 -1
  71. package/build/components/image-size-control/index.js.map +1 -1
  72. package/build/components/index.js +22 -6
  73. package/build/components/index.js.map +1 -1
  74. package/build/components/index.native.js +11 -4
  75. package/build/components/index.native.js.map +1 -1
  76. package/build/components/inserter/block-types-tab.native.js +30 -16
  77. package/build/components/inserter/block-types-tab.native.js.map +1 -1
  78. package/build/components/inserter/index.native.js +8 -3
  79. package/build/components/inserter/index.native.js.map +1 -1
  80. package/build/components/inserter/preview-panel.js +8 -8
  81. package/build/components/inserter/preview-panel.js.map +1 -1
  82. package/build/components/inserter/reusable-blocks-tab.native.js +5 -1
  83. package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  84. package/build/components/inserter/search-items.js +22 -4
  85. package/build/components/inserter/search-items.js.map +1 -1
  86. package/build/components/inserter/search-results.native.js +5 -2
  87. package/build/components/inserter/search-results.native.js.map +1 -1
  88. package/build/components/inserter/utils.native.js +21 -0
  89. package/build/components/inserter/utils.native.js.map +1 -1
  90. package/build/components/inserter-list-item/index.js +7 -20
  91. package/build/components/inserter-list-item/index.js.map +1 -1
  92. package/build/components/letter-spacing-control/index.js +6 -3
  93. package/build/components/letter-spacing-control/index.js.map +1 -1
  94. package/build/components/line-height-control/index.js +6 -3
  95. package/build/components/line-height-control/index.js.map +1 -1
  96. package/build/components/link-control/is-url-like.js +1 -7
  97. package/build/components/link-control/is-url-like.js.map +1 -1
  98. package/build/components/link-control/link-preview.js +0 -1
  99. package/build/components/link-control/link-preview.js.map +1 -1
  100. package/build/components/link-control/use-search-handler.js +1 -7
  101. package/build/components/link-control/use-search-handler.js.map +1 -1
  102. package/build/components/list-view/block-select-button.js +5 -2
  103. package/build/components/list-view/block-select-button.js.map +1 -1
  104. package/build/components/list-view/branch.js +1 -7
  105. package/build/components/list-view/branch.js.map +1 -1
  106. package/build/components/list-view/expander.js +3 -1
  107. package/build/components/list-view/expander.js.map +1 -1
  108. package/build/components/list-view/use-block-selection.js +1 -7
  109. package/build/components/list-view/use-block-selection.js.map +1 -1
  110. package/build/components/media-upload/index.native.js +8 -3
  111. package/build/components/media-upload/index.native.js.map +1 -1
  112. package/build/components/observe-typing/index.js +22 -8
  113. package/build/components/observe-typing/index.js.map +1 -1
  114. package/build/components/preview-options/index.js +2 -2
  115. package/build/components/preview-options/index.js.map +1 -1
  116. package/build/components/{use-no-recursive-renders → recursion-provider}/index.js +40 -18
  117. package/build/components/recursion-provider/index.js.map +1 -0
  118. package/build/components/rich-text/format-toolbar-container.js +61 -12
  119. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  120. package/build/components/rich-text/index.js +8 -2
  121. package/build/components/rich-text/index.js.map +1 -1
  122. package/build/components/rich-text/index.native.js +3 -1
  123. package/build/components/rich-text/index.native.js.map +1 -1
  124. package/build/components/rich-text/use-before-input-rules.js +110 -0
  125. package/build/components/rich-text/use-before-input-rules.js.map +1 -0
  126. package/build/components/rich-text/use-enter.js +0 -4
  127. package/build/components/rich-text/use-enter.js.map +1 -1
  128. package/build/components/rich-text/use-format-types.js +39 -22
  129. package/build/components/rich-text/use-format-types.js.map +1 -1
  130. package/build/components/spacing-sizes-control/all-input-control.js +53 -0
  131. package/build/components/spacing-sizes-control/all-input-control.js.map +1 -0
  132. package/build/components/spacing-sizes-control/axial-input-controls.js +69 -0
  133. package/build/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
  134. package/build/components/spacing-sizes-control/index.js +100 -0
  135. package/build/components/spacing-sizes-control/index.js.map +1 -0
  136. package/build/components/spacing-sizes-control/input-controls.js +52 -0
  137. package/build/components/spacing-sizes-control/input-controls.js.map +1 -0
  138. package/build/components/spacing-sizes-control/linked-button.js +38 -0
  139. package/build/components/spacing-sizes-control/linked-button.js.map +1 -0
  140. package/build/components/spacing-sizes-control/spacing-input-control.js +208 -0
  141. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
  142. package/build/components/spacing-sizes-control/utils.js +202 -0
  143. package/build/components/spacing-sizes-control/utils.js.map +1 -0
  144. package/build/components/text-decoration-control/index.js +3 -1
  145. package/build/components/text-decoration-control/index.js.map +1 -1
  146. package/build/components/text-transform-control/index.js +3 -1
  147. package/build/components/text-transform-control/index.js.map +1 -1
  148. package/build/components/url-input/index.js +1 -1
  149. package/build/components/url-input/index.js.map +1 -1
  150. package/build/components/url-popover/image-url-input-ui.js +4 -1
  151. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  152. package/build/components/writing-flow/use-arrow-nav.js +4 -25
  153. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  154. package/build/components/writing-flow/use-drag-selection.js +9 -2
  155. package/build/components/writing-flow/use-drag-selection.js.map +1 -1
  156. package/build/components/writing-flow/use-multi-selection.js +4 -2
  157. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  158. package/build/components/writing-flow/use-select-all.js +3 -1
  159. package/build/components/writing-flow/use-select-all.js.map +1 -1
  160. package/build/components/writing-flow/use-selection-observer.js +10 -2
  161. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  162. package/build/components/writing-flow/use-tab-nav.js +1 -1
  163. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  164. package/build/hooks/border-radius.js +2 -7
  165. package/build/hooks/border-radius.js.map +1 -1
  166. package/build/hooks/border.js +2 -2
  167. package/build/hooks/border.js.map +1 -1
  168. package/build/hooks/color.js +4 -1
  169. package/build/hooks/color.js.map +1 -1
  170. package/build/hooks/dimensions.js +15 -0
  171. package/build/hooks/dimensions.js.map +1 -1
  172. package/build/hooks/duotone.js +4 -4
  173. package/build/hooks/duotone.js.map +1 -1
  174. package/build/hooks/gap.js +6 -4
  175. package/build/hooks/gap.js.map +1 -1
  176. package/build/hooks/generated-class-name.js +1 -7
  177. package/build/hooks/generated-class-name.js.map +1 -1
  178. package/build/hooks/layout.js +42 -15
  179. package/build/hooks/layout.js.map +1 -1
  180. package/build/hooks/margin.js +28 -12
  181. package/build/hooks/margin.js.map +1 -1
  182. package/build/hooks/padding.js +19 -8
  183. package/build/hooks/padding.js.map +1 -1
  184. package/build/hooks/style.js +40 -76
  185. package/build/hooks/style.js.map +1 -1
  186. package/build/layouts/constrained.js +215 -0
  187. package/build/layouts/constrained.js.map +1 -0
  188. package/build/layouts/flex.js +1 -1
  189. package/build/layouts/flex.js.map +1 -1
  190. package/build/layouts/flow.js +6 -145
  191. package/build/layouts/flow.js.map +1 -1
  192. package/build/layouts/index.js +3 -1
  193. package/build/layouts/index.js.map +1 -1
  194. package/build/layouts/utils.js +43 -0
  195. package/build/layouts/utils.js.map +1 -1
  196. package/build/store/actions.js +25 -3
  197. package/build/store/actions.js.map +1 -1
  198. package/build/store/selectors.js +4 -6
  199. package/build/store/selectors.js.map +1 -1
  200. package/build/utils/block-variation-transforms.js +15 -9
  201. package/build/utils/block-variation-transforms.js.map +1 -1
  202. package/build/utils/pasting.js +9 -1
  203. package/build/utils/pasting.js.map +1 -1
  204. package/build-module/components/block-alignment-control/use-available-alignments.js +1 -1
  205. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  206. package/build-module/components/block-edit-visually-button/index.js +35 -0
  207. package/build-module/components/block-edit-visually-button/index.js.map +1 -0
  208. package/build-module/components/block-list/block.js +13 -3
  209. package/build-module/components/block-list/block.js.map +1 -1
  210. package/build-module/components/block-list/index.native.js +1 -1
  211. package/build-module/components/block-list/index.native.js.map +1 -1
  212. package/build-module/components/block-lock/modal.js +2 -2
  213. package/build-module/components/block-lock/modal.js.map +1 -1
  214. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +2 -2
  215. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  216. package/build-module/components/block-mover/mover-description.js +97 -33
  217. package/build-module/components/block-mover/mover-description.js.map +1 -1
  218. package/build-module/components/block-popover/inbetween.js +5 -3
  219. package/build-module/components/block-popover/inbetween.js.map +1 -1
  220. package/build-module/components/block-settings-menu/index.js +3 -6
  221. package/build-module/components/block-settings-menu/index.js.map +1 -1
  222. package/build-module/components/block-settings-menu-controls/index.js +2 -2
  223. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  224. package/build-module/components/block-styles/index.js +4 -7
  225. package/build-module/components/block-styles/index.js.map +1 -1
  226. package/build-module/components/block-styles/preview.native.js +2 -3
  227. package/build-module/components/block-styles/preview.native.js.map +1 -1
  228. package/build-module/components/block-switcher/index.js +10 -16
  229. package/build-module/components/block-switcher/index.js.map +1 -1
  230. package/build-module/components/block-toolbar/index.js +4 -1
  231. package/build-module/components/block-toolbar/index.js.map +1 -1
  232. package/build-module/components/block-tools/block-selection-button.js +1 -7
  233. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  234. package/build-module/components/block-tools/index.js +4 -1
  235. package/build-module/components/block-tools/index.js.map +1 -1
  236. package/build-module/components/block-types-list/index.js +1 -1
  237. package/build-module/components/block-types-list/index.js.map +1 -1
  238. package/build-module/components/block-types-list/index.native.js +67 -25
  239. package/build-module/components/block-types-list/index.native.js.map +1 -1
  240. package/build-module/components/border-radius-control/all-input-control.js +32 -4
  241. package/build-module/components/border-radius-control/all-input-control.js.map +1 -1
  242. package/build-module/components/border-radius-control/index.js +24 -8
  243. package/build-module/components/border-radius-control/index.js.map +1 -1
  244. package/build-module/components/border-radius-control/input-controls.js +22 -7
  245. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  246. package/build-module/components/border-radius-control/utils.js +13 -16
  247. package/build-module/components/border-radius-control/utils.js.map +1 -1
  248. package/build-module/components/colors/utils.js +7 -3
  249. package/build-module/components/colors/utils.js.map +1 -1
  250. package/build-module/components/colors/with-colors.js +16 -3
  251. package/build-module/components/colors/with-colors.js.map +1 -1
  252. package/build-module/components/colors-gradients/control.js +8 -4
  253. package/build-module/components/colors-gradients/control.js.map +1 -1
  254. package/build-module/components/colors-gradients/dropdown.js +10 -4
  255. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  256. package/build-module/components/copy-handler/index.js +7 -1
  257. package/build-module/components/copy-handler/index.js.map +1 -1
  258. package/build-module/components/date-format-picker/index.js +2 -6
  259. package/build-module/components/date-format-picker/index.js.map +1 -1
  260. package/build-module/components/duotone/components.js +5 -5
  261. package/build-module/components/duotone/components.js.map +1 -1
  262. package/build-module/components/font-appearance-control/index.js +7 -4
  263. package/build-module/components/font-appearance-control/index.js.map +1 -1
  264. package/build-module/components/font-family/index.js +1 -1
  265. package/build-module/components/font-family/index.js.map +1 -1
  266. package/build-module/components/font-sizes/with-font-sizes.js +16 -3
  267. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  268. package/build-module/components/image-editor/cropper.js +4 -3
  269. package/build-module/components/image-editor/cropper.js.map +1 -1
  270. package/build-module/components/image-editor/index.js +3 -1
  271. package/build-module/components/image-editor/index.js.map +1 -1
  272. package/build-module/components/image-size-control/index.js +3 -1
  273. package/build-module/components/image-size-control/index.js.map +1 -1
  274. package/build-module/components/index.js +2 -1
  275. package/build-module/components/index.js.map +1 -1
  276. package/build-module/components/index.native.js +1 -1
  277. package/build-module/components/index.native.js.map +1 -1
  278. package/build-module/components/inserter/block-types-tab.native.js +31 -15
  279. package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
  280. package/build-module/components/inserter/index.native.js +9 -2
  281. package/build-module/components/inserter/index.native.js.map +1 -1
  282. package/build-module/components/inserter/preview-panel.js +9 -9
  283. package/build-module/components/inserter/preview-panel.js.map +1 -1
  284. package/build-module/components/inserter/reusable-blocks-tab.native.js +6 -2
  285. package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  286. package/build-module/components/inserter/search-items.js +19 -5
  287. package/build-module/components/inserter/search-items.js.map +1 -1
  288. package/build-module/components/inserter/search-results.native.js +6 -3
  289. package/build-module/components/inserter/search-results.native.js.map +1 -1
  290. package/build-module/components/inserter/utils.native.js +19 -0
  291. package/build-module/components/inserter/utils.native.js.map +1 -1
  292. package/build-module/components/inserter-list-item/index.js +5 -18
  293. package/build-module/components/inserter-list-item/index.js.map +1 -1
  294. package/build-module/components/letter-spacing-control/index.js +5 -3
  295. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  296. package/build-module/components/line-height-control/index.js +5 -3
  297. package/build-module/components/line-height-control/index.js.map +1 -1
  298. package/build-module/components/link-control/is-url-like.js +1 -6
  299. package/build-module/components/link-control/is-url-like.js.map +1 -1
  300. package/build-module/components/link-control/link-preview.js +0 -1
  301. package/build-module/components/link-control/link-preview.js.map +1 -1
  302. package/build-module/components/link-control/use-search-handler.js +1 -6
  303. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  304. package/build-module/components/list-view/block-select-button.js +5 -2
  305. package/build-module/components/list-view/block-select-button.js.map +1 -1
  306. package/build-module/components/list-view/branch.js +1 -6
  307. package/build-module/components/list-view/branch.js.map +1 -1
  308. package/build-module/components/list-view/expander.js +3 -2
  309. package/build-module/components/list-view/expander.js.map +1 -1
  310. package/build-module/components/list-view/use-block-selection.js +1 -6
  311. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  312. package/build-module/components/media-upload/index.native.js +9 -2
  313. package/build-module/components/media-upload/index.native.js.map +1 -1
  314. package/build-module/components/observe-typing/index.js +22 -8
  315. package/build-module/components/observe-typing/index.js.map +1 -1
  316. package/build-module/components/preview-options/index.js +2 -2
  317. package/build-module/components/preview-options/index.js.map +1 -1
  318. package/build-module/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -19
  319. package/build-module/components/recursion-provider/index.js.map +1 -0
  320. package/build-module/components/rich-text/format-toolbar-container.js +58 -12
  321. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  322. package/build-module/components/rich-text/index.js +7 -2
  323. package/build-module/components/rich-text/index.js.map +1 -1
  324. package/build-module/components/rich-text/index.native.js +3 -1
  325. package/build-module/components/rich-text/index.native.js.map +1 -1
  326. package/build-module/components/rich-text/use-before-input-rules.js +96 -0
  327. package/build-module/components/rich-text/use-before-input-rules.js.map +1 -0
  328. package/build-module/components/rich-text/use-enter.js +0 -4
  329. package/build-module/components/rich-text/use-enter.js.map +1 -1
  330. package/build-module/components/rich-text/use-format-types.js +39 -22
  331. package/build-module/components/rich-text/use-format-types.js.map +1 -1
  332. package/build-module/components/spacing-sizes-control/all-input-control.js +41 -0
  333. package/build-module/components/spacing-sizes-control/all-input-control.js.map +1 -0
  334. package/build-module/components/spacing-sizes-control/axial-input-controls.js +57 -0
  335. package/build-module/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
  336. package/build-module/components/spacing-sizes-control/index.js +83 -0
  337. package/build-module/components/spacing-sizes-control/index.js.map +1 -0
  338. package/build-module/components/spacing-sizes-control/input-controls.js +41 -0
  339. package/build-module/components/spacing-sizes-control/input-controls.js.map +1 -0
  340. package/build-module/components/spacing-sizes-control/linked-button.js +28 -0
  341. package/build-module/components/spacing-sizes-control/linked-button.js.map +1 -0
  342. package/build-module/components/spacing-sizes-control/spacing-input-control.js +192 -0
  343. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
  344. package/build-module/components/spacing-sizes-control/utils.js +174 -0
  345. package/build-module/components/spacing-sizes-control/utils.js.map +1 -0
  346. package/build-module/components/text-decoration-control/index.js +4 -2
  347. package/build-module/components/text-decoration-control/index.js.map +1 -1
  348. package/build-module/components/text-transform-control/index.js +4 -2
  349. package/build-module/components/text-transform-control/index.js.map +1 -1
  350. package/build-module/components/url-input/index.js +1 -1
  351. package/build-module/components/url-input/index.js.map +1 -1
  352. package/build-module/components/url-popover/image-url-input-ui.js +4 -1
  353. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  354. package/build-module/components/writing-flow/use-arrow-nav.js +5 -26
  355. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  356. package/build-module/components/writing-flow/use-drag-selection.js +9 -2
  357. package/build-module/components/writing-flow/use-drag-selection.js.map +1 -1
  358. package/build-module/components/writing-flow/use-multi-selection.js +4 -2
  359. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  360. package/build-module/components/writing-flow/use-select-all.js +3 -1
  361. package/build-module/components/writing-flow/use-select-all.js.map +1 -1
  362. package/build-module/components/writing-flow/use-selection-observer.js +10 -2
  363. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  364. package/build-module/components/writing-flow/use-tab-nav.js +1 -1
  365. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  366. package/build-module/hooks/border-radius.js +2 -7
  367. package/build-module/hooks/border-radius.js.map +1 -1
  368. package/build-module/hooks/border.js +2 -2
  369. package/build-module/hooks/border.js.map +1 -1
  370. package/build-module/hooks/color.js +4 -1
  371. package/build-module/hooks/color.js.map +1 -1
  372. package/build-module/hooks/dimensions.js +13 -0
  373. package/build-module/hooks/dimensions.js.map +1 -1
  374. package/build-module/hooks/duotone.js +4 -4
  375. package/build-module/hooks/duotone.js.map +1 -1
  376. package/build-module/hooks/gap.js +3 -2
  377. package/build-module/hooks/gap.js.map +1 -1
  378. package/build-module/hooks/generated-class-name.js +1 -6
  379. package/build-module/hooks/generated-class-name.js.map +1 -1
  380. package/build-module/hooks/layout.js +42 -15
  381. package/build-module/hooks/layout.js.map +1 -1
  382. package/build-module/hooks/margin.js +26 -12
  383. package/build-module/hooks/margin.js.map +1 -1
  384. package/build-module/hooks/padding.js +17 -8
  385. package/build-module/hooks/padding.js.map +1 -1
  386. package/build-module/hooks/style.js +44 -81
  387. package/build-module/hooks/style.js.map +1 -1
  388. package/build-module/layouts/constrained.js +197 -0
  389. package/build-module/layouts/constrained.js.map +1 -0
  390. package/build-module/layouts/flex.js +1 -1
  391. package/build-module/layouts/flex.js.map +1 -1
  392. package/build-module/layouts/flow.js +7 -140
  393. package/build-module/layouts/flow.js.map +1 -1
  394. package/build-module/layouts/index.js +2 -1
  395. package/build-module/layouts/index.js.map +1 -1
  396. package/build-module/layouts/utils.js +40 -0
  397. package/build-module/layouts/utils.js.map +1 -1
  398. package/build-module/store/actions.js +25 -3
  399. package/build-module/store/actions.js.map +1 -1
  400. package/build-module/store/selectors.js +5 -7
  401. package/build-module/store/selectors.js.map +1 -1
  402. package/build-module/utils/block-variation-transforms.js +14 -7
  403. package/build-module/utils/block-variation-transforms.js.map +1 -1
  404. package/build-module/utils/pasting.js +9 -1
  405. package/build-module/utils/pasting.js.map +1 -1
  406. package/build-style/style-rtl.css +154 -27
  407. package/build-style/style.css +154 -27
  408. package/package.json +30 -28
  409. package/src/components/block-alignment-control/use-available-alignments.js +1 -1
  410. package/src/components/block-edit-visually-button/index.js +39 -0
  411. package/src/components/block-list/block.js +13 -2
  412. package/src/components/block-list/index.native.js +1 -1
  413. package/src/components/block-lock/modal.js +5 -5
  414. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +3 -3
  415. package/src/components/block-mover/mover-description.js +131 -48
  416. package/src/components/block-mover/test/mover-description.js +55 -3
  417. package/src/components/block-popover/inbetween.js +5 -1
  418. package/src/components/block-popover/style.scss +25 -2
  419. package/src/components/block-settings-menu/index.js +11 -15
  420. package/src/components/block-settings-menu-controls/index.js +2 -2
  421. package/src/components/block-styles/index.js +4 -7
  422. package/src/components/block-styles/preview.native.js +2 -2
  423. package/src/components/block-styles/style.scss +10 -0
  424. package/src/components/block-switcher/index.js +9 -13
  425. package/src/components/block-switcher/test/index.js +1 -0
  426. package/src/components/block-toolbar/index.js +2 -0
  427. package/src/components/block-tools/block-selection-button.js +0 -5
  428. package/src/components/block-tools/index.js +4 -1
  429. package/src/components/block-types-list/index.js +1 -1
  430. package/src/components/block-types-list/index.native.js +76 -24
  431. package/src/components/block-types-list/style.native.scss +18 -0
  432. package/src/components/border-radius-control/all-input-control.js +41 -4
  433. package/src/components/border-radius-control/index.js +29 -6
  434. package/src/components/border-radius-control/input-controls.js +40 -13
  435. package/src/components/border-radius-control/test/utils.js +22 -60
  436. package/src/components/border-radius-control/utils.js +12 -16
  437. package/src/components/color-palette/test/__snapshots__/control.js.snap +91 -79
  438. package/src/components/colors/test/__snapshots__/with-colors.js.snap +1 -1
  439. package/src/components/colors/test/with-colors.js +1 -1
  440. package/src/components/colors/utils.js +5 -2
  441. package/src/components/colors/with-colors.js +11 -1
  442. package/src/components/colors-gradients/control.js +13 -8
  443. package/src/components/colors-gradients/dropdown.js +14 -3
  444. package/src/components/colors-gradients/style.scss +33 -12
  445. package/src/components/colors-gradients/test/control.js +3 -3
  446. package/src/components/copy-handler/index.js +18 -0
  447. package/src/components/date-format-picker/index.js +12 -14
  448. package/src/components/date-format-picker/style.scss +0 -4
  449. package/src/components/duotone/components.js +5 -5
  450. package/src/components/duotone-control/style.scss +0 -4
  451. package/src/components/font-appearance-control/index.js +3 -0
  452. package/src/components/font-appearance-control/style.scss +0 -2
  453. package/src/components/font-family/index.js +1 -1
  454. package/src/components/font-sizes/with-font-sizes.js +11 -1
  455. package/src/components/image-editor/cropper.js +9 -3
  456. package/src/components/image-editor/index.js +2 -0
  457. package/src/components/image-size-control/README.md +7 -0
  458. package/src/components/image-size-control/index.js +2 -0
  459. package/src/components/index.js +5 -1
  460. package/src/components/index.native.js +4 -1
  461. package/src/components/inserter/block-types-tab.native.js +42 -21
  462. package/src/components/inserter/index.native.js +7 -2
  463. package/src/components/inserter/preview-panel.js +6 -14
  464. package/src/components/inserter/reusable-blocks-tab.native.js +4 -2
  465. package/src/components/inserter/search-items.js +17 -5
  466. package/src/components/inserter/search-results.native.js +4 -2
  467. package/src/components/inserter/test/block-types-tab.native.js +2 -0
  468. package/src/components/inserter/test/utils.native.js +37 -0
  469. package/src/components/inserter/utils.native.js +11 -0
  470. package/src/components/inserter-list-item/index.js +5 -18
  471. package/src/components/letter-spacing-control/index.js +2 -0
  472. package/src/components/line-height-control/index.js +2 -0
  473. package/src/components/link-control/is-url-like.js +1 -6
  474. package/src/components/link-control/link-preview.js +0 -1
  475. package/src/components/link-control/test/index.js +540 -893
  476. package/src/components/link-control/use-search-handler.js +1 -6
  477. package/src/components/list-view/block-select-button.js +7 -2
  478. package/src/components/list-view/branch.js +1 -6
  479. package/src/components/list-view/expander.js +4 -2
  480. package/src/components/list-view/style.scss +11 -4
  481. package/src/components/list-view/use-block-selection.js +2 -8
  482. package/src/components/media-replace-flow/style.scss +1 -0
  483. package/src/components/media-upload/index.native.js +7 -3
  484. package/src/components/observe-typing/index.js +17 -14
  485. package/src/components/preview-options/index.js +2 -2
  486. package/src/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -28
  487. package/src/components/{use-no-recursive-renders/test/use-no-recursive-renders.js → recursion-provider/test/index.js} +5 -6
  488. package/src/components/rich-text/README.md +13 -1
  489. package/src/components/rich-text/format-toolbar-container.js +63 -14
  490. package/src/components/rich-text/index.js +3 -0
  491. package/src/components/rich-text/index.native.js +2 -0
  492. package/src/components/rich-text/use-before-input-rules.js +91 -0
  493. package/src/components/rich-text/use-enter.js +0 -3
  494. package/src/components/rich-text/use-format-types.js +38 -17
  495. package/src/components/spacing-sizes-control/all-input-control.js +40 -0
  496. package/src/components/spacing-sizes-control/axial-input-controls.js +62 -0
  497. package/src/components/spacing-sizes-control/index.js +91 -0
  498. package/src/components/spacing-sizes-control/input-controls.js +46 -0
  499. package/src/components/spacing-sizes-control/linked-button.js +25 -0
  500. package/src/components/spacing-sizes-control/spacing-input-control.js +280 -0
  501. package/src/components/spacing-sizes-control/style.scss +122 -0
  502. package/src/components/spacing-sizes-control/test/utils.js +156 -0
  503. package/src/components/spacing-sizes-control/utils.js +195 -0
  504. package/src/components/text-decoration-control/index.js +4 -2
  505. package/src/components/text-transform-control/index.js +4 -2
  506. package/src/components/url-input/index.js +1 -1
  507. package/src/components/url-input/style.scss +2 -2
  508. package/src/components/url-popover/image-url-input-ui.js +3 -0
  509. package/src/components/url-popover/style.scss +0 -3
  510. package/src/components/writing-flow/use-arrow-nav.js +4 -33
  511. package/src/components/writing-flow/use-drag-selection.js +7 -1
  512. package/src/components/writing-flow/use-multi-selection.js +4 -1
  513. package/src/components/writing-flow/use-select-all.js +2 -1
  514. package/src/components/writing-flow/use-selection-observer.js +10 -2
  515. package/src/components/writing-flow/use-tab-nav.js +1 -1
  516. package/src/hooks/border-radius.js +2 -6
  517. package/src/hooks/border.js +2 -2
  518. package/src/hooks/color.js +13 -3
  519. package/src/hooks/dimensions.js +15 -0
  520. package/src/hooks/duotone.js +4 -4
  521. package/src/hooks/gap.js +7 -2
  522. package/src/hooks/generated-class-name.js +6 -9
  523. package/src/hooks/layout.js +66 -18
  524. package/src/hooks/margin.js +49 -17
  525. package/src/hooks/padding.js +41 -14
  526. package/src/hooks/style.js +42 -86
  527. package/src/hooks/test/gap.js +22 -0
  528. package/src/hooks/typography.scss +0 -1
  529. package/src/layouts/constrained.js +217 -0
  530. package/src/layouts/flex.js +1 -1
  531. package/src/layouts/flow.js +6 -151
  532. package/src/layouts/index.js +2 -1
  533. package/src/layouts/test/constrained.js +21 -0
  534. package/src/layouts/utils.js +34 -0
  535. package/src/store/actions.js +32 -4
  536. package/src/store/selectors.js +5 -4
  537. package/src/style.scss +1 -0
  538. package/src/utils/block-variation-transforms.js +13 -6
  539. package/src/utils/pasting.js +10 -1
  540. package/src/utils/test/block-variation-transforms.js +24 -0
  541. package/src/utils/test/pasting.js +10 -0
  542. package/build/components/block-settings-menu/block-edit-visually-button.js +0 -70
  543. package/build/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
  544. package/build/components/use-no-recursive-renders/index.js.map +0 -1
  545. package/build-module/components/block-settings-menu/block-edit-visually-button.js +0 -56
  546. package/build-module/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
  547. package/build-module/components/use-no-recursive-renders/index.js.map +0 -1
  548. package/src/components/block-settings-menu/block-edit-visually-button.js +0 -52
@@ -0,0 +1,122 @@
1
+ .tools-panel-item-spacing {
2
+ display: grid;
3
+ grid-template-columns: auto 1fr auto;
4
+ grid-row-gap: $grid-unit-05;
5
+ }
6
+
7
+ .component-spacing-sizes-control {
8
+ box-sizing: border-box;
9
+ padding-bottom: 12px;
10
+ width: 100%;
11
+ display: contents;
12
+
13
+ legend {
14
+ padding: 0;
15
+ grid-column: 1 / 1;
16
+ grid-row: 1 / 1;
17
+ align-self: center;
18
+ }
19
+
20
+ .components-spacing-sizes-control__side-labels {
21
+ grid-column: 1 / 1;
22
+ min-height: 30px;
23
+ justify-content: left;
24
+ }
25
+
26
+ .components-spacing-sizes-control__hint-single {
27
+ margin-top: 0;
28
+ margin-left: 0;
29
+ }
30
+
31
+ .components-spacing-sizes-control__hint-single,
32
+ .components-spacing-sizes-control__hint-all {
33
+ color: $gray-700;
34
+ font-size: 12px;
35
+ }
36
+
37
+ .components-spacing-sizes-control__hint-all {
38
+ grid-column: 2 / 2;
39
+ justify-self: left;
40
+ grid-row: 1 / 1;
41
+ align-self: center;
42
+ margin-left: $grid-unit-05;
43
+ }
44
+
45
+ .components-spacing-sizes-control__custom-toggle-all {
46
+ grid-column: 2 / 2;
47
+ grid-row: 1 / 1;
48
+ justify-self: end;
49
+ margin-right: $grid-unit-05;
50
+ padding: 0;
51
+ }
52
+
53
+ .components-spacing-sizes-control__custom-toggle-single {
54
+ grid-column: 3 / 3;
55
+ justify-self: end;
56
+ }
57
+
58
+ .components-spacing-sizes-control__custom-toggle-all,
59
+ .components-spacing-sizes-control__custom-toggle-single {
60
+ &.is-small.has-icon {
61
+ padding: 0;
62
+ min-width: $icon-size;
63
+ }
64
+ }
65
+
66
+ .component-spacing-sizes-control__linked-button {
67
+ grid-column: 3 / 3;
68
+ grid-row: 1 / 1;
69
+ justify-self: end;
70
+ }
71
+
72
+ .components-spacing-sizes-control__custom-value-range {
73
+ grid-column: span 2;
74
+ margin-left: $grid-unit-10;
75
+ padding-right: $grid-unit-10;
76
+ height: 30px;
77
+ }
78
+
79
+ .components-spacing-sizes-control__custom-value-input {
80
+ width: 124px;
81
+ }
82
+
83
+ .components-spacing-sizes-control__range-control {
84
+ grid-column: span 3;
85
+ padding-right: $grid-unit-10;
86
+ height: 30px;
87
+ }
88
+
89
+ .components-range-control__wrapper {
90
+ margin-bottom: 0;
91
+ }
92
+
93
+ .components-range-control__mark {
94
+ height: $grid-unit-05;
95
+ width: 3px;
96
+ background-color: #fff;
97
+ z-index: 1;
98
+ }
99
+
100
+ .components-range-control__marks {
101
+ margin-top: 17px;
102
+
103
+ :first-child {
104
+ display: none;
105
+ }
106
+ }
107
+
108
+ [class*="ThumbWrapper-thumbColor"] {
109
+ z-index: 3;
110
+ }
111
+
112
+ .components-spacing-sizes-control__side-label {
113
+ margin-right: $grid-unit-05;
114
+ grid-column: 1 / 1;
115
+ justify-self: left;
116
+ font-size: 12px;
117
+ }
118
+
119
+ .components-spacing-sizes-control__custom-select-control {
120
+ grid-column: span 3;
121
+ }
122
+ }
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import {
5
+ isValueSpacingPreset,
6
+ getCustomValueFromPreset,
7
+ getSpacingPresetCssVar,
8
+ getSpacingPresetSlug,
9
+ getSliderValueFromPreset,
10
+ getAllRawValue,
11
+ isValuesMixed,
12
+ isValuesDefined,
13
+ } from '../utils';
14
+
15
+ describe( 'isValueSpacingPreset', () => {
16
+ it( 'should return true if value is string in spacing presets var format', () => {
17
+ expect( isValueSpacingPreset( 'var:preset|spacing|20' ) ).toBe( true );
18
+ } );
19
+ it( 'should return false if value is not a string in spacing presets var format', () => {
20
+ expect( isValueSpacingPreset( '30px' ) ).toBe( false );
21
+ } );
22
+ } );
23
+
24
+ describe( 'getCustomValueFromPreset', () => {
25
+ const spacingSizes = [ { name: 'Small', slug: 20, size: '8px' } ];
26
+ it( 'should return original value if not a string in spacing presets var format', () => {
27
+ expect( getCustomValueFromPreset( '20px', spacingSizes ) ).toBe(
28
+ '20px'
29
+ );
30
+ } );
31
+ it( 'should return value from matching spacingSizes array entry if string in spacing presets var format', () => {
32
+ expect(
33
+ getCustomValueFromPreset( 'var:preset|spacing|20', spacingSizes )
34
+ ).toBe( '8px' );
35
+ } );
36
+ it( 'should return undefined if no matching preset in spacingSizes array', () => {
37
+ expect(
38
+ getCustomValueFromPreset( 'var:preset|spacing|30', spacingSizes )
39
+ ).toBe( undefined );
40
+ } );
41
+ } );
42
+
43
+ describe( 'getSpacingPresetCssVar', () => {
44
+ it( 'should return original value if not a string in spacing presets var format', () => {
45
+ expect( getSpacingPresetCssVar( '20px' ) ).toBe( '20px' );
46
+ } );
47
+ it( 'should return a string in spacing presets css var format with slug from provided value', () => {
48
+ expect( getSpacingPresetCssVar( 'var:preset|spacing|20' ) ).toBe(
49
+ 'var(--wp--preset--spacing--20)'
50
+ );
51
+ } );
52
+ } );
53
+
54
+ describe( 'getSpacingPresetSlug', () => {
55
+ it( 'should return original value if 0 or default', () => {
56
+ expect( getSpacingPresetSlug( '0' ) ).toBe( '0' );
57
+ expect( getSpacingPresetSlug( 'default' ) ).toBe( 'default' );
58
+ } );
59
+ it( 'should return the int value of the slug portion of a valid preset var', () => {
60
+ expect( getSpacingPresetSlug( 'var:preset|spacing|20' ) ).toBe( '20' );
61
+ } );
62
+ } );
63
+
64
+ describe( 'getSliderValueFromPreset', () => {
65
+ const spacingSizes = [
66
+ { name: 'Small', slug: 20, size: '8px' },
67
+ { name: 'Large', slug: 30, size: '24px' },
68
+ ];
69
+ it( 'should return NaN if no matching preset found - NaN makes range control go to start', () => {
70
+ expect( getSliderValueFromPreset( '10px', spacingSizes ) ).toBe( NaN );
71
+ } );
72
+ it( 'should return the int value of the slug portion of a valid preset var', () => {
73
+ expect(
74
+ getSliderValueFromPreset( 'var:preset|spacing|30', spacingSizes )
75
+ ).toBe( 1 );
76
+ } );
77
+ } );
78
+
79
+ describe( 'getAllRawValue', () => {
80
+ const customValues = {
81
+ top: '5px',
82
+ bottom: '5px',
83
+ left: '6px',
84
+ right: '2px',
85
+ };
86
+ it( 'should return the most common custom value from the values object', () => {
87
+ expect( getAllRawValue( customValues ) ).toBe( '5px' );
88
+ } );
89
+ const presetValues = {
90
+ top: 'var:preset|spacing|30',
91
+ bottom: 'var:preset|spacing|20',
92
+ left: 'var:preset|spacing|10',
93
+ right: 'var:preset|spacing|30',
94
+ };
95
+ it( 'should return the most common preset value from the values object', () => {
96
+ expect( getAllRawValue( presetValues ) ).toBe(
97
+ 'var:preset|spacing|30'
98
+ );
99
+ } );
100
+ } );
101
+
102
+ describe( 'isValuesMixed', () => {
103
+ const unmixedValues = {
104
+ top: '5px',
105
+ bottom: '5px',
106
+ left: '5px',
107
+ right: '5px',
108
+ };
109
+ it( 'should return false if all values are the same', () => {
110
+ expect( isValuesMixed( unmixedValues ) ).toBe( false );
111
+ } );
112
+ const mixedValues = {
113
+ top: 'var:preset|spacing|30',
114
+ bottom: 'var:preset|spacing|20',
115
+ left: 'var:preset|spacing|10',
116
+ right: 'var:preset|spacing|30',
117
+ };
118
+ it( 'should return true if all the values are not the same', () => {
119
+ expect( isValuesMixed( mixedValues ) ).toBe( true );
120
+ } );
121
+ const singleValue = {
122
+ top: 'var:preset|spacing|30',
123
+ };
124
+ it( 'should return true if only one side set', () => {
125
+ expect( isValuesMixed( singleValue ) ).toBe( true );
126
+ } );
127
+ const incompleteValues = {
128
+ top: 'var:preset|spacing|30',
129
+ bottom: 'var:preset|spacing|30',
130
+ left: 'var:preset|spacing|30',
131
+ };
132
+ it( 'should return true if all sides not set', () => {
133
+ expect( isValuesMixed( incompleteValues ) ).toBe( true );
134
+ } );
135
+ } );
136
+
137
+ describe( 'isValuesDefined', () => {
138
+ const undefinedValues = {
139
+ top: undefined,
140
+ bottom: undefined,
141
+ left: undefined,
142
+ right: undefined,
143
+ };
144
+ it( 'should return false if values are not defined', () => {
145
+ expect( isValuesDefined( undefinedValues ) ).toBe( false );
146
+ } );
147
+ const definedValues = {
148
+ top: 'var:preset|spacing|30',
149
+ bottom: 'var:preset|spacing|20',
150
+ left: 'var:preset|spacing|10',
151
+ right: 'var:preset|spacing|30',
152
+ };
153
+ it( 'should return true if all the values are not the same', () => {
154
+ expect( isValuesDefined( definedValues ) ).toBe( true );
155
+ } );
156
+ } );
@@ -0,0 +1,195 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { isEmpty } from 'lodash';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { __ } from '@wordpress/i18n';
10
+
11
+ /**
12
+ * Checks is given value is a spacing preset.
13
+ *
14
+ * @param {string} value Value to check
15
+ *
16
+ * @return {boolean} Return true if value is string in format var:preset|spacing|.
17
+ */
18
+ export function isValueSpacingPreset( value ) {
19
+ if ( ! value?.includes ) {
20
+ return false;
21
+ }
22
+ return value === '0' || value.includes( 'var:preset|spacing|' );
23
+ }
24
+
25
+ /**
26
+ * Converts a spacing preset into a custom value.
27
+ *
28
+ * @param {string} value Value to convert
29
+ * @param {Array} spacingSizes Array of the current spacing preset objects
30
+ *
31
+ * @return {string} Mapping of the spacing preset to its equivalent custom value.
32
+ */
33
+ export function getCustomValueFromPreset( value, spacingSizes ) {
34
+ if ( ! isValueSpacingPreset( value ) ) {
35
+ return value;
36
+ }
37
+
38
+ const slug = getSpacingPresetSlug( value );
39
+ const spacingSize = spacingSizes.find(
40
+ ( size ) => String( size.slug ) === slug
41
+ );
42
+
43
+ return spacingSize?.size;
44
+ }
45
+
46
+ /**
47
+ * Converts a spacing preset into a custom value.
48
+ *
49
+ * @param {string} value Value to convert.
50
+ *
51
+ * @return {string} CSS var string for given spacing preset value.
52
+ */
53
+ export function getSpacingPresetCssVar( value ) {
54
+ if ( ! value ) {
55
+ return;
56
+ }
57
+
58
+ const slug = value.match( /var:preset\|spacing\|(.+)/ );
59
+
60
+ if ( ! slug ) {
61
+ return value;
62
+ }
63
+
64
+ return `var(--wp--preset--spacing--${ slug[ 1 ] })`;
65
+ }
66
+
67
+ /**
68
+ * Returns the slug section of the given spacing preset string.
69
+ *
70
+ * @param {string} value Value to extract slug from.
71
+ *
72
+ * @return {number} The int value of the slug from given spacing preset.
73
+ */
74
+ export function getSpacingPresetSlug( value ) {
75
+ if ( ! value ) {
76
+ return;
77
+ }
78
+
79
+ if ( value === '0' || value === 'default' ) {
80
+ return value;
81
+ }
82
+
83
+ const slug = value.match( /var:preset\|spacing\|(.+)/ );
84
+
85
+ return slug ? slug[ 1 ] : undefined;
86
+ }
87
+
88
+ /**
89
+ * Converts spacing preset value into a Range component value .
90
+ *
91
+ * @param {string} presetValue Value to convert to Range value.
92
+ * @param {Array} spacingSizes Array of current spacing preset value objects.
93
+ *
94
+ * @return {number} The int value for use in Range control.
95
+ */
96
+ export function getSliderValueFromPreset( presetValue, spacingSizes ) {
97
+ if ( presetValue === undefined ) {
98
+ return 0;
99
+ }
100
+ const slug =
101
+ parseFloat( presetValue, 10 ) === 0
102
+ ? '0'
103
+ : getSpacingPresetSlug( presetValue );
104
+ const sliderValue = spacingSizes.findIndex( ( spacingSize ) => {
105
+ return String( spacingSize.slug ) === slug;
106
+ } );
107
+
108
+ // Returning NaN rather than undefined as undefined makes range control thumb sit in center
109
+ return sliderValue !== -1 ? sliderValue : NaN;
110
+ }
111
+
112
+ export const LABELS = {
113
+ all: __( 'All sides' ),
114
+ top: __( 'Top' ),
115
+ bottom: __( 'Bottom' ),
116
+ left: __( 'Left' ),
117
+ right: __( 'Right' ),
118
+ mixed: __( 'Mixed' ),
119
+ vertical: __( 'Vertical' ),
120
+ horizontal: __( 'Horizontal' ),
121
+ };
122
+
123
+ export const DEFAULT_VALUES = {
124
+ top: undefined,
125
+ right: undefined,
126
+ bottom: undefined,
127
+ left: undefined,
128
+ };
129
+
130
+ export const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];
131
+
132
+ /**
133
+ * Gets an items with the most occurrence within an array
134
+ * https://stackoverflow.com/a/20762713
135
+ *
136
+ * @param {Array<any>} arr Array of items to check.
137
+ * @return {any} The item with the most occurrences.
138
+ */
139
+ function mode( arr ) {
140
+ return arr
141
+ .sort(
142
+ ( a, b ) =>
143
+ arr.filter( ( v ) => v === a ).length -
144
+ arr.filter( ( v ) => v === b ).length
145
+ )
146
+ .pop();
147
+ }
148
+
149
+ /**
150
+ * Gets the 'all' input value from values data.
151
+ *
152
+ * @param {Object} values Box spacing values
153
+ *
154
+ * @return {string} The most common value from all sides of box.
155
+ */
156
+ export function getAllRawValue( values = {} ) {
157
+ return mode( Object.values( values ) );
158
+ }
159
+
160
+ /**
161
+ * Checks to determine if values are mixed.
162
+ *
163
+ * @param {Object} values Box values.
164
+ * @param {Array} sides Sides that values relate to.
165
+ *
166
+ * @return {boolean} Whether values are mixed.
167
+ */
168
+ export function isValuesMixed( values = {}, sides = ALL_SIDES ) {
169
+ return (
170
+ ( Object.values( values ).length >= 1 &&
171
+ Object.values( values ).length < sides.length ) ||
172
+ new Set( Object.values( values ) ).size > 1
173
+ );
174
+ }
175
+
176
+ /**
177
+ * Checks to determine if values are defined.
178
+ *
179
+ * @param {Object} values Box values.
180
+ *
181
+ * @return {boolean} Whether values are defined.
182
+ */
183
+ export function isValuesDefined( values ) {
184
+ return (
185
+ values !== undefined &&
186
+ ! isEmpty(
187
+ Object.values( values ).filter(
188
+ // Switching units when input is empty causes values only
189
+ // containing units. This gives false positive on mixed values
190
+ // unless filtered.
191
+ ( value ) => !! value && /\d/.test( value )
192
+ )
193
+ )
194
+ );
195
+ }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { Button } from '@wordpress/components';
4
+ import { BaseControl, Button } from '@wordpress/components';
5
5
  import { formatStrikethrough, formatUnderline } from '@wordpress/icons';
6
6
  import { __ } from '@wordpress/i18n';
7
7
 
@@ -30,7 +30,9 @@ const TEXT_DECORATIONS = [
30
30
  export default function TextDecorationControl( { value, onChange } ) {
31
31
  return (
32
32
  <fieldset className="block-editor-text-decoration-control">
33
- <legend>{ __( 'Decoration' ) }</legend>
33
+ <BaseControl.VisualLabel as="legend">
34
+ { __( 'Decoration' ) }
35
+ </BaseControl.VisualLabel>
34
36
  <div className="block-editor-text-decoration-control__buttons">
35
37
  { TEXT_DECORATIONS.map( ( textDecoration ) => {
36
38
  return (
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { Button } from '@wordpress/components';
4
+ import { BaseControl, Button } from '@wordpress/components';
5
5
  import { __ } from '@wordpress/i18n';
6
6
  import {
7
7
  formatCapitalize,
@@ -39,7 +39,9 @@ const TEXT_TRANSFORMS = [
39
39
  export default function TextTransformControl( { value, onChange } ) {
40
40
  return (
41
41
  <fieldset className="block-editor-text-transform-control">
42
- <legend>{ __( 'Letter case' ) }</legend>
42
+ <BaseControl.VisualLabel as="legend">
43
+ { __( 'Letter case' ) }
44
+ </BaseControl.VisualLabel>
43
45
  <div className="block-editor-text-transform-control__buttons">
44
46
  { TEXT_TRANSFORMS.map( ( textTransform ) => {
45
47
  return (
@@ -462,7 +462,7 @@ class URLInput extends Component {
462
462
  'aria-label': label ? undefined : __( 'URL' ), // Ensure input always has an accessible label
463
463
  'aria-expanded': showSuggestions,
464
464
  'aria-autocomplete': 'list',
465
- 'aria-owns': suggestionsListboxId,
465
+ 'aria-controls': suggestionsListboxId,
466
466
  'aria-activedescendant':
467
467
  selectedSuggestion !== null
468
468
  ? `${ suggestionOptionIdPrefix }-${ selectedSuggestion }`
@@ -45,9 +45,9 @@ $input-size: 300px;
45
45
 
46
46
  .components-spinner {
47
47
  position: absolute;
48
- right: $input-padding;
49
- bottom: $input-padding + $grid-unit-10 + 1;
50
48
  margin: 0;
49
+ top: calc(50% - #{$spinner-size} / 2);
50
+ right: $grid-unit;
51
51
  }
52
52
  }
53
53
 
@@ -51,6 +51,7 @@ const ImageURLInputUI = ( {
51
51
  rel,
52
52
  } ) => {
53
53
  const [ isOpen, setIsOpen ] = useState( false );
54
+ const buttonRef = useRef( null );
54
55
  const openLinkUI = useCallback( () => {
55
56
  setIsOpen( true );
56
57
  } );
@@ -245,9 +246,11 @@ const ImageURLInputUI = ( {
245
246
  label={ url ? __( 'Edit link' ) : __( 'Insert link' ) }
246
247
  aria-expanded={ isOpen }
247
248
  onClick={ openLinkUI }
249
+ ref={ buttonRef }
248
250
  />
249
251
  { isOpen && (
250
252
  <URLPopover
253
+ anchorRef={ buttonRef }
251
254
  onFocusOutside={ onFocusOutside() }
252
255
  onClose={ closeLinkUI }
253
256
  renderSettings={ () => advancedOptions }
@@ -72,9 +72,6 @@
72
72
  .block-editor-url-input .components-base-control__field {
73
73
  margin-bottom: 0;
74
74
  }
75
- .block-editor-url-input .components-spinner {
76
- bottom: $input-padding + 1;
77
- }
78
75
  }
79
76
 
80
77
  .block-editor-url-popover__link-viewer-url {
@@ -17,7 +17,7 @@ import { useRefEffect } from '@wordpress/compose';
17
17
  /**
18
18
  * Internal dependencies
19
19
  */
20
- import { isInSameBlock } from '../../utils/dom';
20
+ import { getBlockClientId } from '../../utils/dom';
21
21
  import { store as blockEditorStore } from '../../store';
22
22
 
23
23
  /**
@@ -130,11 +130,8 @@ export function getClosestTabbable(
130
130
 
131
131
  export default function useArrowNav() {
132
132
  const {
133
- getSelectedBlockClientId,
134
133
  getMultiSelectedBlocksStartClientId,
135
134
  getMultiSelectedBlocksEndClientId,
136
- getPreviousBlockClientId,
137
- getNextBlockClientId,
138
135
  getSettings,
139
136
  hasMultiSelection,
140
137
  __unstableIsFullySelected,
@@ -150,26 +147,13 @@ export default function useArrowNav() {
150
147
  verticalRect = null;
151
148
  }
152
149
 
153
- /**
154
- * Returns true if the given target field is the last in its block which
155
- * can be considered for tab transition. For example, in a block with
156
- * two text fields, this would return true when reversing from the first
157
- * of the two fields, but false when reversing from the second.
158
- *
159
- * @param {Element} target Currently focused text field.
160
- * @param {boolean} isReverse True if considering as the first field.
161
- *
162
- * @return {boolean} Whether field is at edge for tab transition.
163
- */
164
- function isTabbableEdge( target, isReverse ) {
150
+ function isClosestTabbableABlock( target, isReverse ) {
165
151
  const closestTabbable = getClosestTabbable(
166
152
  target,
167
153
  isReverse,
168
154
  node
169
155
  );
170
- return (
171
- ! closestTabbable || ! isInSameBlock( target, closestTabbable )
172
- );
156
+ return closestTabbable && getBlockClientId( closestTabbable );
173
157
  }
174
158
 
175
159
  function onKeyDown( event ) {
@@ -254,23 +238,10 @@ export default function useArrowNav() {
254
238
  // next, which is the exact reverse of LTR.
255
239
  const isReverseDir = isRTL( target ) ? ! isReverse : isReverse;
256
240
  const { keepCaretInsideBlock } = getSettings();
257
- const selectedBlockClientId = getSelectedBlockClientId();
258
241
 
259
242
  if ( isShift ) {
260
- const selectionEndClientId =
261
- getMultiSelectedBlocksEndClientId();
262
- const selectionBeforeEndClientId = getPreviousBlockClientId(
263
- selectionEndClientId || selectedBlockClientId
264
- );
265
- const selectionAfterEndClientId = getNextBlockClientId(
266
- selectionEndClientId || selectedBlockClientId
267
- );
268
-
269
243
  if (
270
- // Ensure that there is a target block.
271
- ( ( isReverse && selectionBeforeEndClientId ) ||
272
- ( ! isReverse && selectionAfterEndClientId ) ) &&
273
- isTabbableEdge( target, isReverse ) &&
244
+ isClosestTabbableABlock( target, isReverse ) &&
274
245
  isNavEdge( target, isReverse )
275
246
  ) {
276
247
  node.contentEditable = true;
@@ -27,7 +27,7 @@ function setContentEditableWrapper( node, value ) {
27
27
  export default function useDragSelection() {
28
28
  const { startMultiSelect, stopMultiSelect } =
29
29
  useDispatch( blockEditorStore );
30
- const { isSelectionEnabled, hasMultiSelection } =
30
+ const { isSelectionEnabled, hasMultiSelection, isDraggingBlocks } =
31
31
  useSelect( blockEditorStore );
32
32
  return useRefEffect(
33
33
  ( node ) => {
@@ -72,6 +72,12 @@ export default function useDragSelection() {
72
72
  }
73
73
 
74
74
  function onMouseLeave( { buttons, target } ) {
75
+ // Avoid triggering a multi-selection if the user is already
76
+ // dragging blocks.
77
+ if ( isDraggingBlocks() ) {
78
+ return;
79
+ }
80
+
75
81
  // The primary button must be pressed to initiate selection.
76
82
  // See https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons
77
83
  if ( buttons !== 1 ) {
@@ -75,8 +75,11 @@ export default function useMultiSelection() {
75
75
  // able to select across instances immediately.
76
76
  node.contentEditable = true;
77
77
 
78
- defaultView.getSelection().removeAllRanges();
78
+ // For some browsers, like Safari, it is important that focus
79
+ // happens BEFORE selection removal.
79
80
  node.focus();
81
+
82
+ defaultView.getSelection().removeAllRanges();
80
83
  },
81
84
  [
82
85
  hasMultiSelection,
@@ -19,7 +19,7 @@ import { store as blockEditorStore } from '../../store';
19
19
  export default function useSelectAll() {
20
20
  const { getBlockOrder, getSelectedBlockClientIds, getBlockRootClientId } =
21
21
  useSelect( blockEditorStore );
22
- const { multiSelect } = useDispatch( blockEditorStore );
22
+ const { multiSelect, selectBlock } = useDispatch( blockEditorStore );
23
23
  const isMatch = useShortcutEventMatch();
24
24
 
25
25
  return useRefEffect( ( node ) => {
@@ -53,6 +53,7 @@ export default function useSelectAll() {
53
53
  const lastClientId = last( blockClientIds );
54
54
 
55
55
  if ( firstClientId === lastClientId ) {
56
+ selectBlock( firstClientId );
56
57
  return;
57
58
  }
58
59