@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
@@ -1,22 +1,21 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { get, has, isEmpty, kebabCase, omit } from 'lodash';
4
+ import { omit } from 'lodash';
5
5
  import classnames from 'classnames';
6
6
 
7
7
  /**
8
8
  * WordPress dependencies
9
9
  */
10
- import { useContext, createPortal } from '@wordpress/element';
10
+ import { useContext, useMemo, createPortal } from '@wordpress/element';
11
11
  import { addFilter } from '@wordpress/hooks';
12
12
  import {
13
13
  getBlockSupport,
14
14
  hasBlockSupport,
15
- __EXPERIMENTAL_STYLE_PROPERTY as STYLE_PROPERTY,
16
15
  __EXPERIMENTAL_ELEMENTS as ELEMENTS,
17
16
  } from '@wordpress/blocks';
18
17
  import { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';
19
- import { getCSSRules } from '@wordpress/style-engine';
18
+ import { getCSSRules, compileCSS } from '@wordpress/style-engine';
20
19
 
21
20
  /**
22
21
  * Internal dependencies
@@ -43,20 +42,6 @@ const styleSupportKeys = [
43
42
  const hasStyleSupport = ( blockType ) =>
44
43
  styleSupportKeys.some( ( key ) => hasBlockSupport( blockType, key ) );
45
44
 
46
- const VARIABLE_REFERENCE_PREFIX = 'var:';
47
- const VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE = '|';
48
- const VARIABLE_PATH_SEPARATOR_TOKEN_STYLE = '--';
49
- function compileStyleValue( uncompiledValue ) {
50
- if ( uncompiledValue?.startsWith?.( VARIABLE_REFERENCE_PREFIX ) ) {
51
- const variable = uncompiledValue
52
- .slice( VARIABLE_REFERENCE_PREFIX.length )
53
- .split( VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE )
54
- .join( VARIABLE_PATH_SEPARATOR_TOKEN_STYLE );
55
- return `var(--wp--${ variable })`;
56
- }
57
- return uncompiledValue;
58
- }
59
-
60
45
  /**
61
46
  * Returns the inline styles to add depending on the style object
62
47
  *
@@ -65,68 +50,16 @@ function compileStyleValue( uncompiledValue ) {
65
50
  * @return {Object} Flattened CSS variables declaration.
66
51
  */
67
52
  export function getInlineStyles( styles = {} ) {
68
- const ignoredStyles = [ 'spacing.blockGap' ];
69
53
  const output = {};
70
- Object.keys( STYLE_PROPERTY ).forEach( ( propKey ) => {
71
- const path = STYLE_PROPERTY[ propKey ].value;
72
- const subPaths = STYLE_PROPERTY[ propKey ].properties;
73
- // Ignore styles on elements because they are handled on the server.
74
- if ( has( styles, path ) && 'elements' !== path?.[ 0 ] ) {
75
- // Checking if style value is a string allows for shorthand css
76
- // option and backwards compatibility for border radius support.
77
- const styleValue = get( styles, path );
78
-
79
- if ( ! STYLE_PROPERTY[ propKey ].useEngine ) {
80
- if ( !! subPaths && typeof styleValue !== 'string' ) {
81
- Object.entries( subPaths ).forEach( ( entry ) => {
82
- const [ name, subPath ] = entry;
83
- const value = get( styleValue, [ subPath ] );
84
-
85
- if ( value ) {
86
- output[ name ] = compileStyleValue( value );
87
- }
88
- } );
89
- } else if ( ! ignoredStyles.includes( path.join( '.' ) ) ) {
90
- output[ propKey ] = compileStyleValue(
91
- get( styles, path )
92
- );
93
- }
94
- }
95
- }
96
- } );
97
-
98
54
  // The goal is to move everything to server side generated engine styles
99
55
  // This is temporary as we absorb more and more styles into the engine.
100
- const extraRules = getCSSRules( styles );
101
- extraRules.forEach( ( rule ) => {
56
+ getCSSRules( styles ).forEach( ( rule ) => {
102
57
  output[ rule.key ] = rule.value;
103
58
  } );
104
59
 
105
60
  return output;
106
61
  }
107
62
 
108
- function compileElementsStyles( selector, elements = {} ) {
109
- return Object.entries( elements )
110
- .map( ( [ element, styles ] ) => {
111
- const elementStyles = getInlineStyles( styles );
112
- if ( ! isEmpty( elementStyles ) ) {
113
- // The .editor-styles-wrapper selector is required on elements styles. As it is
114
- // added to all other editor styles, not providing it causes reset and global
115
- // styles to override element styles because of higher specificity.
116
- return [
117
- `.editor-styles-wrapper .${ selector } ${ ELEMENTS[ element ] }{`,
118
- ...Object.entries( elementStyles ).map(
119
- ( [ cssProperty, value ] ) =>
120
- `\t${ kebabCase( cssProperty ) }: ${ value };`
121
- ),
122
- '}',
123
- ].join( '\n' );
124
- }
125
- return '';
126
- } )
127
- .join( '\n' );
128
- }
129
-
130
63
  /**
131
64
  * Filters registered block settings, extending attributes to include `style` attribute.
132
65
  *
@@ -306,7 +239,7 @@ export const withBlockControls = createHigherOrderComponent(
306
239
  );
307
240
 
308
241
  /**
309
- * Override the default block element to include duotone styles.
242
+ * Override the default block element to include elements styles.
310
243
  *
311
244
  * @param {Function} BlockListBlock Original component
312
245
  * @return {Function} Wrapped component
@@ -323,23 +256,46 @@ const withElementsStyles = createHigherOrderComponent(
323
256
  'link'
324
257
  );
325
258
 
326
- // The Elements API only supports link colors for now,
327
- // hence the specific omission of `link` in the elements styles.
328
- // This might need to be refactored or removed if the Elements API
329
- // changes or `link` supports styles beyond `color`.
330
- const elements = skipLinkColorSerialization
331
- ? omit( props.attributes.style?.elements, [ 'link' ] )
332
- : props.attributes.style?.elements;
333
-
334
- const styles = compileElementsStyles(
335
- blockElementsContainerIdentifier,
336
- elements
337
- );
259
+ const styles = useMemo( () => {
260
+ const rawElementsStyles = props.attributes.style?.elements;
261
+ const elementCssRules = [];
262
+ if (
263
+ rawElementsStyles &&
264
+ Object.keys( rawElementsStyles ).length > 0
265
+ ) {
266
+ // Remove values based on whether serialization has been skipped for a specific style.
267
+ const filteredElementsStyles = {
268
+ ...rawElementsStyles,
269
+ link: {
270
+ ...rawElementsStyles.link,
271
+ color: ! skipLinkColorSerialization
272
+ ? rawElementsStyles.link?.color
273
+ : undefined,
274
+ },
275
+ };
276
+
277
+ for ( const [ elementName, elementStyles ] of Object.entries(
278
+ filteredElementsStyles
279
+ ) ) {
280
+ const cssRule = compileCSS( elementStyles, {
281
+ // The .editor-styles-wrapper selector is required on elements styles. As it is
282
+ // added to all other editor styles, not providing it causes reset and global
283
+ // styles to override element styles because of higher specificity.
284
+ selector: `.editor-styles-wrapper .${ blockElementsContainerIdentifier } ${ ELEMENTS[ elementName ] }`,
285
+ } );
286
+ if ( !! cssRule ) {
287
+ elementCssRules.push( cssRule );
288
+ }
289
+ }
290
+ }
291
+ return elementCssRules.length > 0 ? elementCssRules : undefined;
292
+ }, [ props.attributes.style?.elements ] );
293
+
338
294
  const element = useContext( BlockList.__unstableElementContext );
339
295
 
340
296
  return (
341
297
  <>
342
- { elements &&
298
+ { styles &&
343
299
  element &&
344
300
  createPortal(
345
301
  <style
@@ -353,7 +309,7 @@ const withElementsStyles = createHigherOrderComponent(
353
309
  <BlockListBlock
354
310
  { ...props }
355
311
  className={
356
- elements
312
+ props.attributes.style?.elements
357
313
  ? classnames(
358
314
  props.className,
359
315
  blockElementsContainerIdentifier
@@ -27,6 +27,28 @@ describe( 'gap', () => {
27
27
  ...blockGapValue,
28
28
  } );
29
29
  } );
30
+ it( 'should unwrap var: values from a string into a CSS var() function', () => {
31
+ const expectedValue = {
32
+ top: 'var(--wp--preset--spacing--60)',
33
+ left: 'var(--wp--preset--spacing--60)',
34
+ };
35
+ expect(
36
+ getGapBoxControlValueFromStyle( 'var:preset|spacing|60' )
37
+ ).toEqual( expectedValue );
38
+ } );
39
+ it( 'should unwrap var: values from an object into a CSS var() function', () => {
40
+ const expectedValue = {
41
+ top: 'var(--wp--preset--spacing--20)',
42
+ left: 'var(--wp--preset--spacing--60)',
43
+ };
44
+ const blockGapValue = {
45
+ top: 'var:preset|spacing|20',
46
+ left: 'var:preset|spacing|60',
47
+ };
48
+ expect( getGapBoxControlValueFromStyle( blockGapValue ) ).toEqual(
49
+ expectedValue
50
+ );
51
+ } );
30
52
  } );
31
53
  describe( 'getGapCSSValue()', () => {
32
54
  it( 'should return `null` if argument is falsey', () => {
@@ -1,5 +1,4 @@
1
1
  .typography-block-support-panel {
2
- .components-font-appearance-control,
3
2
  .components-font-size-picker__controls,
4
3
  .block-editor-text-decoration-control__buttons,
5
4
  .block-editor-text-transform-control__buttons {
@@ -0,0 +1,217 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import {
5
+ Button,
6
+ __experimentalUseCustomUnits as useCustomUnits,
7
+ __experimentalUnitControl as UnitControl,
8
+ } from '@wordpress/components';
9
+ import { __ } from '@wordpress/i18n';
10
+ import { Icon, positionCenter, stretchWide } from '@wordpress/icons';
11
+ import { getCSSRules } from '@wordpress/style-engine';
12
+
13
+ /**
14
+ * Internal dependencies
15
+ */
16
+ import useSetting from '../components/use-setting';
17
+ import { appendSelectors, getBlockGapCSS, getAlignmentsInfo } from './utils';
18
+ import { getGapBoxControlValueFromStyle } from '../hooks/gap';
19
+ import { shouldSkipSerialization } from '../hooks/utils';
20
+
21
+ export default {
22
+ name: 'constrained',
23
+ label: __( 'Constrained' ),
24
+ inspectorControls: function DefaultLayoutInspectorControls( {
25
+ layout,
26
+ onChange,
27
+ } ) {
28
+ const { wideSize, contentSize } = layout;
29
+ const units = useCustomUnits( {
30
+ availableUnits: useSetting( 'spacing.units' ) || [
31
+ '%',
32
+ 'px',
33
+ 'em',
34
+ 'rem',
35
+ 'vw',
36
+ ],
37
+ } );
38
+
39
+ return (
40
+ <>
41
+ <div className="block-editor-hooks__layout-controls">
42
+ <div className="block-editor-hooks__layout-controls-unit">
43
+ <UnitControl
44
+ label={ __( 'Content' ) }
45
+ labelPosition="top"
46
+ __unstableInputWidth="80px"
47
+ value={ contentSize || wideSize || '' }
48
+ onChange={ ( nextWidth ) => {
49
+ nextWidth =
50
+ 0 > parseFloat( nextWidth )
51
+ ? '0'
52
+ : nextWidth;
53
+ onChange( {
54
+ ...layout,
55
+ contentSize: nextWidth,
56
+ } );
57
+ } }
58
+ units={ units }
59
+ />
60
+ <Icon icon={ positionCenter } />
61
+ </div>
62
+ <div className="block-editor-hooks__layout-controls-unit">
63
+ <UnitControl
64
+ label={ __( 'Wide' ) }
65
+ labelPosition="top"
66
+ __unstableInputWidth="80px"
67
+ value={ wideSize || contentSize || '' }
68
+ onChange={ ( nextWidth ) => {
69
+ nextWidth =
70
+ 0 > parseFloat( nextWidth )
71
+ ? '0'
72
+ : nextWidth;
73
+ onChange( {
74
+ ...layout,
75
+ wideSize: nextWidth,
76
+ } );
77
+ } }
78
+ units={ units }
79
+ />
80
+ <Icon icon={ stretchWide } />
81
+ </div>
82
+ </div>
83
+ <div className="block-editor-hooks__layout-controls-reset">
84
+ <Button
85
+ variant="secondary"
86
+ isSmall
87
+ disabled={ ! contentSize && ! wideSize }
88
+ onClick={ () =>
89
+ onChange( {
90
+ contentSize: undefined,
91
+ wideSize: undefined,
92
+ inherit: false,
93
+ } )
94
+ }
95
+ >
96
+ { __( 'Reset' ) }
97
+ </Button>
98
+ </div>
99
+
100
+ <p className="block-editor-hooks__layout-controls-helptext">
101
+ { __(
102
+ 'Customize the width for all elements that are assigned to the center or wide columns.'
103
+ ) }
104
+ </p>
105
+ </>
106
+ );
107
+ },
108
+ toolBarControls: function DefaultLayoutToolbarControls() {
109
+ return null;
110
+ },
111
+ getLayoutStyle: function getLayoutStyle( {
112
+ selector,
113
+ layout = {},
114
+ style,
115
+ blockName,
116
+ hasBlockGapSupport,
117
+ layoutDefinitions,
118
+ } ) {
119
+ const { contentSize, wideSize } = layout;
120
+ const blockGapStyleValue = getGapBoxControlValueFromStyle(
121
+ style?.spacing?.blockGap
122
+ );
123
+ // If a block's block.json skips serialization for spacing or
124
+ // spacing.blockGap, don't apply the user-defined value to the styles.
125
+ const blockGapValue =
126
+ blockGapStyleValue?.top &&
127
+ ! shouldSkipSerialization( blockName, 'spacing', 'blockGap' )
128
+ ? blockGapStyleValue?.top
129
+ : '';
130
+
131
+ let output =
132
+ !! contentSize || !! wideSize
133
+ ? `
134
+ ${ appendSelectors(
135
+ selector,
136
+ '> :where(:not(.alignleft):not(.alignright):not(.alignfull))'
137
+ ) } {
138
+ max-width: ${ contentSize ?? wideSize };
139
+ margin-left: auto !important;
140
+ margin-right: auto !important;
141
+ }
142
+ ${ appendSelectors( selector, '> .alignwide' ) } {
143
+ max-width: ${ wideSize ?? contentSize };
144
+ }
145
+ ${ appendSelectors( selector, '> .alignfull' ) } {
146
+ max-width: none;
147
+ }
148
+ `
149
+ : '';
150
+
151
+ // If there is custom padding, add negative margins for alignfull blocks.
152
+ if ( style?.spacing?.padding ) {
153
+ // The style object might be storing a preset so we need to make sure we get a usable value.
154
+ const paddingValues = getCSSRules( style );
155
+ paddingValues.forEach( ( rule ) => {
156
+ if ( rule.key === 'paddingRight' ) {
157
+ output += `
158
+ ${ appendSelectors( selector, '> .alignfull' ) } {
159
+ margin-right: calc(${ rule.value } * -1);
160
+ }
161
+ `;
162
+ } else if ( rule.key === 'paddingLeft' ) {
163
+ output += `
164
+ ${ appendSelectors( selector, '> .alignfull' ) } {
165
+ margin-left: calc(${ rule.value } * -1);
166
+ }
167
+ `;
168
+ }
169
+ } );
170
+ }
171
+
172
+ // Output blockGap styles based on rules contained in layout definitions in theme.json.
173
+ if ( hasBlockGapSupport && blockGapValue ) {
174
+ output += getBlockGapCSS(
175
+ selector,
176
+ layoutDefinitions,
177
+ 'constrained',
178
+ blockGapValue
179
+ );
180
+ }
181
+ return output;
182
+ },
183
+ getOrientation() {
184
+ return 'vertical';
185
+ },
186
+ getAlignments( layout ) {
187
+ const alignmentInfo = getAlignmentsInfo( layout );
188
+ if ( layout.alignments !== undefined ) {
189
+ if ( ! layout.alignments.includes( 'none' ) ) {
190
+ layout.alignments.unshift( 'none' );
191
+ }
192
+ return layout.alignments.map( ( alignment ) => ( {
193
+ name: alignment,
194
+ info: alignmentInfo[ alignment ],
195
+ } ) );
196
+ }
197
+ const { contentSize, wideSize } = layout;
198
+
199
+ const alignments = [
200
+ { name: 'left' },
201
+ { name: 'center' },
202
+ { name: 'right' },
203
+ ];
204
+
205
+ if ( contentSize ) {
206
+ alignments.unshift( { name: 'full' } );
207
+ }
208
+
209
+ if ( wideSize ) {
210
+ alignments.unshift( { name: 'wide', info: alignmentInfo.wide } );
211
+ }
212
+
213
+ alignments.unshift( { name: 'none', info: alignmentInfo.none } );
214
+
215
+ return alignments;
216
+ },
217
+ };
@@ -120,7 +120,7 @@ export default {
120
120
  const blockGapValue =
121
121
  style?.spacing?.blockGap &&
122
122
  ! shouldSkipSerialization( blockName, 'spacing', 'blockGap' )
123
- ? getGapCSSValue( style?.spacing?.blockGap )
123
+ ? getGapCSSValue( style?.spacing?.blockGap, '0.5em' )
124
124
  : undefined;
125
125
  const justifyContent = justifyContentMap[ layout.justifyContent ];
126
126
  const flexWrap = flexWrapOptions.includes( layout.flexWrap )
@@ -1,121 +1,32 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import {
5
- Button,
6
- __experimentalUseCustomUnits as useCustomUnits,
7
- __experimentalUnitControl as UnitControl,
8
- } from '@wordpress/components';
9
- import { __, sprintf } from '@wordpress/i18n';
10
- import { Icon, positionCenter, stretchWide } from '@wordpress/icons';
4
+ import { __ } from '@wordpress/i18n';
11
5
 
12
6
  /**
13
7
  * Internal dependencies
14
8
  */
15
- import useSetting from '../components/use-setting';
16
- import { appendSelectors, getBlockGapCSS } from './utils';
9
+
10
+ import { getBlockGapCSS, getAlignmentsInfo } from './utils';
17
11
  import { getGapBoxControlValueFromStyle } from '../hooks/gap';
18
12
  import { shouldSkipSerialization } from '../hooks/utils';
19
13
 
20
14
  export default {
21
15
  name: 'default',
22
16
  label: __( 'Flow' ),
23
- inspectorControls: function DefaultLayoutInspectorControls( {
24
- layout,
25
- onChange,
26
- } ) {
27
- const { wideSize, contentSize } = layout;
28
- const units = useCustomUnits( {
29
- availableUnits: useSetting( 'spacing.units' ) || [
30
- '%',
31
- 'px',
32
- 'em',
33
- 'rem',
34
- 'vw',
35
- ],
36
- } );
37
-
38
- return (
39
- <>
40
- <div className="block-editor-hooks__layout-controls">
41
- <div className="block-editor-hooks__layout-controls-unit">
42
- <UnitControl
43
- label={ __( 'Content' ) }
44
- labelPosition="top"
45
- __unstableInputWidth="80px"
46
- value={ contentSize || wideSize || '' }
47
- onChange={ ( nextWidth ) => {
48
- nextWidth =
49
- 0 > parseFloat( nextWidth )
50
- ? '0'
51
- : nextWidth;
52
- onChange( {
53
- ...layout,
54
- contentSize: nextWidth,
55
- } );
56
- } }
57
- units={ units }
58
- />
59
- <Icon icon={ positionCenter } />
60
- </div>
61
- <div className="block-editor-hooks__layout-controls-unit">
62
- <UnitControl
63
- label={ __( 'Wide' ) }
64
- labelPosition="top"
65
- __unstableInputWidth="80px"
66
- value={ wideSize || contentSize || '' }
67
- onChange={ ( nextWidth ) => {
68
- nextWidth =
69
- 0 > parseFloat( nextWidth )
70
- ? '0'
71
- : nextWidth;
72
- onChange( {
73
- ...layout,
74
- wideSize: nextWidth,
75
- } );
76
- } }
77
- units={ units }
78
- />
79
- <Icon icon={ stretchWide } />
80
- </div>
81
- </div>
82
- <div className="block-editor-hooks__layout-controls-reset">
83
- <Button
84
- variant="secondary"
85
- isSmall
86
- disabled={ ! contentSize && ! wideSize }
87
- onClick={ () =>
88
- onChange( {
89
- contentSize: undefined,
90
- wideSize: undefined,
91
- inherit: false,
92
- } )
93
- }
94
- >
95
- { __( 'Reset' ) }
96
- </Button>
97
- </div>
98
-
99
- <p className="block-editor-hooks__layout-controls-helptext">
100
- { __(
101
- 'Customize the width for all elements that are assigned to the center or wide columns.'
102
- ) }
103
- </p>
104
- </>
105
- );
17
+ inspectorControls: function DefaultLayoutInspectorControls() {
18
+ return null;
106
19
  },
107
20
  toolBarControls: function DefaultLayoutToolbarControls() {
108
21
  return null;
109
22
  },
110
23
  getLayoutStyle: function getLayoutStyle( {
111
24
  selector,
112
- layout = {},
113
25
  style,
114
26
  blockName,
115
27
  hasBlockGapSupport,
116
28
  layoutDefinitions,
117
29
  } ) {
118
- const { contentSize, wideSize } = layout;
119
30
  const blockGapStyleValue = getGapBoxControlValueFromStyle(
120
31
  style?.spacing?.blockGap
121
32
  );
@@ -127,25 +38,7 @@ export default {
127
38
  ? blockGapStyleValue?.top
128
39
  : '';
129
40
 
130
- let output =
131
- !! contentSize || !! wideSize
132
- ? `
133
- ${ appendSelectors(
134
- selector,
135
- '> :where(:not(.alignleft):not(.alignright))'
136
- ) } {
137
- max-width: ${ contentSize ?? wideSize };
138
- margin-left: auto !important;
139
- margin-right: auto !important;
140
- }
141
- ${ appendSelectors( selector, '> .alignwide' ) } {
142
- max-width: ${ wideSize ?? contentSize };
143
- }
144
- ${ appendSelectors( selector, '> .alignfull' ) } {
145
- max-width: none;
146
- }
147
- `
148
- : '';
41
+ let output = '';
149
42
 
150
43
  // Output blockGap styles based on rules contained in layout definitions in theme.json.
151
44
  if ( hasBlockGapSupport && blockGapValue ) {
@@ -172,7 +65,6 @@ export default {
172
65
  info: alignmentInfo[ alignment ],
173
66
  } ) );
174
67
  }
175
- const { contentSize, wideSize } = layout;
176
68
 
177
69
  const alignments = [
178
70
  { name: 'left' },
@@ -180,45 +72,8 @@ export default {
180
72
  { name: 'right' },
181
73
  ];
182
74
 
183
- if ( contentSize ) {
184
- alignments.unshift( { name: 'full' } );
185
- }
186
-
187
- if ( wideSize ) {
188
- alignments.unshift( { name: 'wide', info: alignmentInfo.wide } );
189
- }
190
-
191
75
  alignments.unshift( { name: 'none', info: alignmentInfo.none } );
192
76
 
193
77
  return alignments;
194
78
  },
195
79
  };
196
-
197
- /**
198
- * Helper method to assign contextual info to clarify
199
- * alignment settings.
200
- *
201
- * Besides checking if `contentSize` and `wideSize` have a
202
- * value, we now show this information only if their values
203
- * are not a `css var`. This needs to change when parsing
204
- * css variables land.
205
- *
206
- * @see https://github.com/WordPress/gutenberg/pull/34710#issuecomment-918000752
207
- *
208
- * @param {Object} layout The layout object.
209
- * @return {Object} An object with contextual info per alignment.
210
- */
211
- function getAlignmentsInfo( layout ) {
212
- const { contentSize, wideSize } = layout;
213
- const alignmentInfo = {};
214
- const sizeRegex = /^(?!0)\d+(px|em|rem|vw|vh|%)?$/i;
215
- if ( sizeRegex.test( contentSize ) ) {
216
- // translators: %s: container size (i.e. 600px etc)
217
- alignmentInfo.none = sprintf( __( 'Max %s wide' ), contentSize );
218
- }
219
- if ( sizeRegex.test( wideSize ) ) {
220
- // translators: %s: container size (i.e. 600px etc)
221
- alignmentInfo.wide = sprintf( __( 'Max %s wide' ), wideSize );
222
- }
223
- return alignmentInfo;
224
- }
@@ -3,8 +3,9 @@
3
3
  */
4
4
  import flex from './flex';
5
5
  import flow from './flow';
6
+ import constrained from './constrained';
6
7
 
7
- const layoutTypes = [ flow, flex ];
8
+ const layoutTypes = [ flow, flex, constrained ];
8
9
 
9
10
  /**
10
11
  * Retrieves a layout type by name.
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import constrained from '../constrained';
5
+
6
+ describe( 'getLayoutStyle', () => {
7
+ it( 'should return an empty string if no non-default params are provided', () => {
8
+ const expected = '';
9
+
10
+ const result = constrained.getLayoutStyle( {
11
+ selector: '.my-container',
12
+ layout: {},
13
+ style: {},
14
+ blockName: 'test-block',
15
+ hasBlockGapSupport: false,
16
+ layoutDefinitions: undefined,
17
+ } );
18
+
19
+ expect( result ).toBe( expected );
20
+ } );
21
+ } );