@wordpress/block-editor 11.4.0 → 11.6.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 (400) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/build/components/block-inspector/index.js +11 -10
  3. package/build/components/block-inspector/index.js.map +1 -1
  4. package/build/components/block-inspector/useBlockInspectorAnimationSettings.js +46 -0
  5. package/build/components/block-inspector/useBlockInspectorAnimationSettings.js.map +1 -0
  6. package/build/components/block-list/block-invalid-warning.js +63 -80
  7. package/build/components/block-list/block-invalid-warning.js.map +1 -1
  8. package/build/components/block-lock/modal.js +1 -0
  9. package/build/components/block-lock/modal.js.map +1 -1
  10. package/build/components/block-settings-menu/block-settings-dropdown.js +2 -2
  11. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  12. package/build/components/block-settings-menu-controls/index.js +1 -1
  13. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  14. package/build/components/block-styles/index.js +2 -1
  15. package/build/components/block-styles/index.js.map +1 -1
  16. package/build/components/block-switcher/block-transformations-menu.native.js +1 -0
  17. package/build/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  18. package/build/components/child-layout-control/index.js +107 -0
  19. package/build/components/child-layout-control/index.js.map +1 -0
  20. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js +6 -3
  21. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  22. package/build/components/date-format-picker/index.js +3 -3
  23. package/build/components/date-format-picker/index.js.map +1 -1
  24. package/build/components/global-styles/border-panel.js +306 -0
  25. package/build/components/global-styles/border-panel.js.map +1 -0
  26. package/build/components/global-styles/dimensions-panel.js +594 -0
  27. package/build/components/global-styles/dimensions-panel.js.map +1 -0
  28. package/build/components/global-styles/hooks.js +127 -37
  29. package/build/components/global-styles/hooks.js.map +1 -1
  30. package/build/components/global-styles/index.js +36 -2
  31. package/build/components/global-styles/index.js.map +1 -1
  32. package/build/components/global-styles/typography-panel.js +87 -27
  33. package/build/components/global-styles/typography-panel.js.map +1 -1
  34. package/build/components/global-styles/use-global-styles-output.js +21 -14
  35. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  36. package/build/components/global-styles/utils.js +2 -0
  37. package/build/components/global-styles/utils.js.map +1 -1
  38. package/build/components/index.native.js +23 -0
  39. package/build/components/index.native.js.map +1 -1
  40. package/build/components/inserter/index.js +29 -17
  41. package/build/components/inserter/index.js.map +1 -1
  42. package/build/components/inserter/media-tab/hooks.js +10 -11
  43. package/build/components/inserter/media-tab/hooks.js.map +1 -1
  44. package/build/components/inserter/media-tab/media-list.js +5 -108
  45. package/build/components/inserter/media-tab/media-list.js.map +1 -1
  46. package/build/components/inserter/media-tab/media-preview.js +242 -0
  47. package/build/components/inserter/media-tab/media-preview.js.map +1 -0
  48. package/build/components/inserter/menu.js +1 -1
  49. package/build/components/inserter/menu.js.map +1 -1
  50. package/build/components/inserter/quick-inserter.js +4 -2
  51. package/build/components/inserter/quick-inserter.js.map +1 -1
  52. package/build/components/inserter/search-results.js +10 -3
  53. package/build/components/inserter/search-results.js.map +1 -1
  54. package/build/components/inserter/tabs.js +1 -1
  55. package/build/components/inserter/tabs.js.map +1 -1
  56. package/build/components/inspector-controls/block-support-tools-panel.js +1 -1
  57. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  58. package/build/components/inspector-controls/fill.js +38 -9
  59. package/build/components/inspector-controls/fill.js.map +1 -1
  60. package/build/components/link-control/index.js +1 -1
  61. package/build/components/link-control/index.js.map +1 -1
  62. package/build/components/link-control/search-item.js +5 -2
  63. package/build/components/link-control/search-item.js.map +1 -1
  64. package/build/components/link-control/settings-drawer.js +1 -1
  65. package/build/components/link-control/settings-drawer.js.map +1 -1
  66. package/build/components/link-control/settings.js +1 -0
  67. package/build/components/link-control/settings.js.map +1 -1
  68. package/build/components/list-view/block.js +17 -3
  69. package/build/components/list-view/block.js.map +1 -1
  70. package/build/components/list-view/branch.js +2 -2
  71. package/build/components/list-view/branch.js.map +1 -1
  72. package/build/components/list-view/expander.js +2 -1
  73. package/build/components/list-view/expander.js.map +1 -1
  74. package/build/components/list-view/leaf.js +10 -6
  75. package/build/components/list-view/leaf.js.map +1 -1
  76. package/build/components/list-view/use-block-selection.js +1 -2
  77. package/build/components/list-view/use-block-selection.js.map +1 -1
  78. package/build/components/list-view/use-list-view-scroll-into-view.js +51 -0
  79. package/build/components/list-view/use-list-view-scroll-into-view.js.map +1 -0
  80. package/build/components/off-canvas-editor/appender.js +33 -13
  81. package/build/components/off-canvas-editor/appender.js.map +1 -1
  82. package/build/components/off-canvas-editor/branch.js +6 -3
  83. package/build/components/off-canvas-editor/branch.js.map +1 -1
  84. package/build/components/off-canvas-editor/index.js +8 -2
  85. package/build/components/off-canvas-editor/index.js.map +1 -1
  86. package/build/components/off-canvas-editor/leaf-more-menu.js +34 -4
  87. package/build/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  88. package/build/components/provider/use-block-sync.js +17 -3
  89. package/build/components/provider/use-block-sync.js.map +1 -1
  90. package/build/components/responsive-block-control/index.js +1 -0
  91. package/build/components/responsive-block-control/index.js.map +1 -1
  92. package/build/components/rich-text/format-toolbar-container.js +0 -3
  93. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  94. package/build/components/rich-text/index.js +9 -43
  95. package/build/components/rich-text/index.js.map +1 -1
  96. package/build/components/rich-text/use-delete.js +73 -0
  97. package/build/components/rich-text/use-delete.js.map +1 -0
  98. package/build/components/rich-text/use-input-rules.js +14 -6
  99. package/build/components/rich-text/use-input-rules.js.map +1 -1
  100. package/build/components/writing-flow/use-selection-observer.js +4 -1
  101. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  102. package/build/hooks/align.js +3 -1
  103. package/build/hooks/align.js.map +1 -1
  104. package/build/hooks/border.js +91 -240
  105. package/build/hooks/border.js.map +1 -1
  106. package/build/hooks/custom-class-name.js +4 -4
  107. package/build/hooks/custom-class-name.js.map +1 -1
  108. package/build/hooks/custom-class-name.native.js +3 -4
  109. package/build/hooks/custom-class-name.native.js.map +1 -1
  110. package/build/hooks/dimensions.js +72 -190
  111. package/build/hooks/dimensions.js.map +1 -1
  112. package/build/hooks/duotone.js +94 -25
  113. package/build/hooks/duotone.js.map +1 -1
  114. package/build/hooks/gap.js +0 -202
  115. package/build/hooks/gap.js.map +1 -1
  116. package/build/hooks/layout.js +33 -27
  117. package/build/hooks/layout.js.map +1 -1
  118. package/build/hooks/margin.js +7 -163
  119. package/build/hooks/margin.js.map +1 -1
  120. package/build/hooks/padding.js +7 -163
  121. package/build/hooks/padding.js.map +1 -1
  122. package/build/hooks/supports.js +7 -1
  123. package/build/hooks/supports.js.map +1 -1
  124. package/build/hooks/typography.js +52 -66
  125. package/build/hooks/typography.js.map +1 -1
  126. package/build/hooks/utils.js +101 -0
  127. package/build/hooks/utils.js.map +1 -1
  128. package/build/layouts/constrained.js +6 -2
  129. package/build/layouts/constrained.js.map +1 -1
  130. package/build/layouts/flex.js +1 -0
  131. package/build/layouts/flex.js.map +1 -1
  132. package/build/private-apis.js +4 -1
  133. package/build/private-apis.js.map +1 -1
  134. package/build/store/actions.js +28 -14
  135. package/build/store/actions.js.map +1 -1
  136. package/build/store/defaults.js +28 -1
  137. package/build/store/defaults.js.map +1 -1
  138. package/build/store/reducer.js +53 -47
  139. package/build/store/reducer.js.map +1 -1
  140. package/build/store/selectors.js +24 -4
  141. package/build/store/selectors.js.map +1 -1
  142. package/build/utils/parse-css-unit-to-px.js +49 -10
  143. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  144. package/build-module/components/block-inspector/index.js +9 -9
  145. package/build-module/components/block-inspector/index.js.map +1 -1
  146. package/build-module/components/block-inspector/useBlockInspectorAnimationSettings.js +37 -0
  147. package/build-module/components/block-inspector/useBlockInspectorAnimationSettings.js.map +1 -0
  148. package/build-module/components/block-list/block-invalid-warning.js +66 -78
  149. package/build-module/components/block-list/block-invalid-warning.js.map +1 -1
  150. package/build-module/components/block-lock/modal.js +1 -0
  151. package/build-module/components/block-lock/modal.js.map +1 -1
  152. package/build-module/components/block-settings-menu/block-settings-dropdown.js +2 -2
  153. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  154. package/build-module/components/block-settings-menu-controls/index.js +1 -1
  155. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  156. package/build-module/components/block-styles/index.js +2 -1
  157. package/build-module/components/block-styles/index.js.map +1 -1
  158. package/build-module/components/block-switcher/block-transformations-menu.native.js +1 -0
  159. package/build-module/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  160. package/build-module/components/child-layout-control/index.js +98 -0
  161. package/build-module/components/child-layout-control/index.js.map +1 -0
  162. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js +6 -3
  163. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  164. package/build-module/components/date-format-picker/index.js +4 -4
  165. package/build-module/components/date-format-picker/index.js.map +1 -1
  166. package/build-module/components/global-styles/border-panel.js +291 -0
  167. package/build-module/components/global-styles/border-panel.js.map +1 -0
  168. package/build-module/components/global-styles/dimensions-panel.js +574 -0
  169. package/build-module/components/global-styles/dimensions-panel.js.map +1 -0
  170. package/build-module/components/global-styles/hooks.js +123 -34
  171. package/build-module/components/global-styles/hooks.js.map +1 -1
  172. package/build-module/components/global-styles/index.js +3 -1
  173. package/build-module/components/global-styles/index.js.map +1 -1
  174. package/build-module/components/global-styles/typography-panel.js +88 -27
  175. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  176. package/build-module/components/global-styles/use-global-styles-output.js +21 -14
  177. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  178. package/build-module/components/global-styles/utils.js +2 -0
  179. package/build-module/components/global-styles/utils.js.map +1 -1
  180. package/build-module/components/index.native.js +2 -1
  181. package/build-module/components/index.native.js.map +1 -1
  182. package/build-module/components/inserter/index.js +28 -16
  183. package/build-module/components/inserter/index.js.map +1 -1
  184. package/build-module/components/inserter/media-tab/hooks.js +10 -11
  185. package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
  186. package/build-module/components/inserter/media-tab/media-list.js +6 -105
  187. package/build-module/components/inserter/media-tab/media-list.js.map +1 -1
  188. package/build-module/components/inserter/media-tab/media-preview.js +222 -0
  189. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -0
  190. package/build-module/components/inserter/menu.js +1 -1
  191. package/build-module/components/inserter/menu.js.map +1 -1
  192. package/build-module/components/inserter/quick-inserter.js +4 -2
  193. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  194. package/build-module/components/inserter/search-results.js +10 -3
  195. package/build-module/components/inserter/search-results.js.map +1 -1
  196. package/build-module/components/inserter/tabs.js +1 -1
  197. package/build-module/components/inserter/tabs.js.map +1 -1
  198. package/build-module/components/inspector-controls/block-support-tools-panel.js +1 -1
  199. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  200. package/build-module/components/inspector-controls/fill.js +39 -9
  201. package/build-module/components/inspector-controls/fill.js.map +1 -1
  202. package/build-module/components/link-control/index.js +1 -1
  203. package/build-module/components/link-control/index.js.map +1 -1
  204. package/build-module/components/link-control/search-item.js +4 -2
  205. package/build-module/components/link-control/search-item.js.map +1 -1
  206. package/build-module/components/link-control/settings-drawer.js +1 -1
  207. package/build-module/components/link-control/settings-drawer.js.map +1 -1
  208. package/build-module/components/link-control/settings.js +1 -0
  209. package/build-module/components/link-control/settings.js.map +1 -1
  210. package/build-module/components/list-view/block.js +16 -3
  211. package/build-module/components/list-view/block.js.map +1 -1
  212. package/build-module/components/list-view/branch.js +2 -2
  213. package/build-module/components/list-view/branch.js.map +1 -1
  214. package/build-module/components/list-view/expander.js +2 -1
  215. package/build-module/components/list-view/expander.js.map +1 -1
  216. package/build-module/components/list-view/leaf.js +8 -4
  217. package/build-module/components/list-view/leaf.js.map +1 -1
  218. package/build-module/components/list-view/use-block-selection.js +1 -2
  219. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  220. package/build-module/components/list-view/use-list-view-scroll-into-view.js +42 -0
  221. package/build-module/components/list-view/use-list-view-scroll-into-view.js.map +1 -0
  222. package/build-module/components/off-canvas-editor/appender.js +33 -14
  223. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  224. package/build-module/components/off-canvas-editor/branch.js +6 -3
  225. package/build-module/components/off-canvas-editor/branch.js.map +1 -1
  226. package/build-module/components/off-canvas-editor/index.js +8 -2
  227. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  228. package/build-module/components/off-canvas-editor/leaf-more-menu.js +36 -7
  229. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  230. package/build-module/components/provider/use-block-sync.js +17 -3
  231. package/build-module/components/provider/use-block-sync.js.map +1 -1
  232. package/build-module/components/responsive-block-control/index.js +1 -0
  233. package/build-module/components/responsive-block-control/index.js.map +1 -1
  234. package/build-module/components/rich-text/format-toolbar-container.js +0 -3
  235. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  236. package/build-module/components/rich-text/index.js +9 -43
  237. package/build-module/components/rich-text/index.js.map +1 -1
  238. package/build-module/components/rich-text/use-delete.js +62 -0
  239. package/build-module/components/rich-text/use-delete.js.map +1 -0
  240. package/build-module/components/rich-text/use-input-rules.js +14 -6
  241. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  242. package/build-module/components/writing-flow/use-selection-observer.js +4 -1
  243. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  244. package/build-module/hooks/align.js +3 -1
  245. package/build-module/hooks/align.js.map +1 -1
  246. package/build-module/hooks/border.js +93 -240
  247. package/build-module/hooks/border.js.map +1 -1
  248. package/build-module/hooks/custom-class-name.js +4 -4
  249. package/build-module/hooks/custom-class-name.js.map +1 -1
  250. package/build-module/hooks/custom-class-name.native.js +3 -4
  251. package/build-module/hooks/custom-class-name.native.js.map +1 -1
  252. package/build-module/hooks/dimensions.js +75 -187
  253. package/build-module/hooks/dimensions.js.map +1 -1
  254. package/build-module/hooks/duotone.js +86 -24
  255. package/build-module/hooks/duotone.js.map +1 -1
  256. package/build-module/hooks/gap.js +0 -183
  257. package/build-module/hooks/gap.js.map +1 -1
  258. package/build-module/hooks/layout.js +33 -27
  259. package/build-module/hooks/layout.js.map +1 -1
  260. package/build-module/hooks/margin.js +4 -143
  261. package/build-module/hooks/margin.js.map +1 -1
  262. package/build-module/hooks/padding.js +4 -143
  263. package/build-module/hooks/padding.js.map +1 -1
  264. package/build-module/hooks/supports.js +7 -1
  265. package/build-module/hooks/supports.js.map +1 -1
  266. package/build-module/hooks/typography.js +54 -66
  267. package/build-module/hooks/typography.js.map +1 -1
  268. package/build-module/hooks/utils.js +96 -0
  269. package/build-module/hooks/utils.js.map +1 -1
  270. package/build-module/layouts/constrained.js +6 -2
  271. package/build-module/layouts/constrained.js.map +1 -1
  272. package/build-module/layouts/flex.js +1 -0
  273. package/build-module/layouts/flex.js.map +1 -1
  274. package/build-module/private-apis.js +3 -1
  275. package/build-module/private-apis.js.map +1 -1
  276. package/build-module/store/actions.js +28 -14
  277. package/build-module/store/actions.js.map +1 -1
  278. package/build-module/store/defaults.js +28 -1
  279. package/build-module/store/defaults.js.map +1 -1
  280. package/build-module/store/reducer.js +53 -45
  281. package/build-module/store/reducer.js.map +1 -1
  282. package/build-module/store/selectors.js +22 -4
  283. package/build-module/store/selectors.js.map +1 -1
  284. package/build-module/utils/parse-css-unit-to-px.js +49 -10
  285. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  286. package/build-style/style-rtl.css +39 -27
  287. package/build-style/style.css +39 -27
  288. package/package.json +31 -31
  289. package/src/components/block-draggable/test/__snapshots__/index.native.js.snap +24 -24
  290. package/src/components/block-inspector/index.js +11 -14
  291. package/src/components/block-inspector/style.scss +3 -0
  292. package/src/components/block-inspector/useBlockInspectorAnimationSettings.js +53 -0
  293. package/src/components/block-list/block-invalid-warning.js +72 -64
  294. package/src/components/block-lock/modal.js +1 -0
  295. package/src/components/block-lock/style.scss +0 -9
  296. package/src/components/block-mobile-toolbar/test/__snapshots__/block-actions-menu.native.js.snap +20 -20
  297. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +35 -17
  298. package/src/components/block-preview/test/index.js +0 -2
  299. package/src/components/block-settings-menu/block-settings-dropdown.js +4 -1
  300. package/src/components/block-settings-menu-controls/index.js +2 -1
  301. package/src/components/block-styles/index.js +5 -1
  302. package/src/components/block-styles/style.scss +2 -2
  303. package/src/components/block-switcher/block-transformations-menu.native.js +1 -0
  304. package/src/components/child-layout-control/index.js +106 -0
  305. package/src/components/color-palette/test/__snapshots__/control.js.snap +17 -15
  306. package/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js +48 -38
  307. package/src/components/date-format-picker/index.js +6 -8
  308. package/src/components/date-format-picker/style.scss +0 -5
  309. package/src/components/global-styles/border-panel.js +285 -0
  310. package/src/components/global-styles/dimensions-panel.js +627 -0
  311. package/src/components/global-styles/hooks.js +160 -44
  312. package/src/components/global-styles/index.js +7 -1
  313. package/src/components/global-styles/test/use-global-styles-output.js +1 -1
  314. package/src/components/global-styles/typography-panel.js +81 -9
  315. package/src/components/global-styles/use-global-styles-output.js +17 -16
  316. package/src/components/global-styles/utils.js +2 -0
  317. package/src/components/index.native.js +5 -0
  318. package/src/components/inner-blocks/test/__snapshots__/index.js.snap +1 -1
  319. package/src/components/inserter/index.js +30 -11
  320. package/src/components/inserter/media-tab/hooks.js +9 -8
  321. package/src/components/inserter/media-tab/media-list.js +3 -122
  322. package/src/components/inserter/media-tab/media-preview.js +268 -0
  323. package/src/components/inserter/menu.js +0 -1
  324. package/src/components/inserter/quick-inserter.js +2 -0
  325. package/src/components/inserter/search-results.js +7 -1
  326. package/src/components/inserter/style.scss +25 -0
  327. package/src/components/inserter/tabs.js +1 -9
  328. package/src/components/inserter/test/__snapshots__/index.native.js.snap +15 -15
  329. package/src/components/inspector-controls/block-support-tools-panel.js +0 -1
  330. package/src/components/inspector-controls/fill.js +32 -8
  331. package/src/components/link-control/index.js +1 -1
  332. package/src/components/link-control/search-item.js +3 -1
  333. package/src/components/link-control/settings-drawer.js +2 -1
  334. package/src/components/link-control/settings.js +1 -0
  335. package/src/components/link-control/style.scss +18 -12
  336. package/src/components/link-control/test/index.js +3 -5
  337. package/src/components/list-view/block.js +19 -1
  338. package/src/components/list-view/branch.js +1 -2
  339. package/src/components/list-view/expander.js +1 -0
  340. package/src/components/list-view/leaf.js +43 -29
  341. package/src/components/list-view/use-block-selection.js +0 -2
  342. package/src/components/list-view/use-list-view-scroll-into-view.js +48 -0
  343. package/src/components/media-replace-flow/style.scss +7 -9
  344. package/src/components/off-canvas-editor/appender.js +44 -21
  345. package/src/components/off-canvas-editor/branch.js +4 -1
  346. package/src/components/off-canvas-editor/index.js +7 -1
  347. package/src/components/off-canvas-editor/leaf-more-menu.js +57 -15
  348. package/src/components/provider/use-block-sync.js +21 -4
  349. package/src/components/responsive-block-control/index.js +1 -0
  350. package/src/components/rich-text/format-toolbar-container.js +1 -7
  351. package/src/components/rich-text/index.js +8 -44
  352. package/src/components/rich-text/use-delete.js +59 -0
  353. package/src/components/rich-text/use-input-rules.js +13 -5
  354. package/src/components/spacing-sizes-control/style.scss +1 -1
  355. package/src/components/url-popover/stories/index.js +1 -0
  356. package/src/components/url-popover/test/index.js +0 -2
  357. package/src/components/writing-flow/use-selection-observer.js +5 -1
  358. package/src/hooks/align.js +1 -1
  359. package/src/hooks/border.js +94 -225
  360. package/src/hooks/custom-class-name.js +4 -4
  361. package/src/hooks/custom-class-name.native.js +3 -4
  362. package/src/hooks/dimensions.js +85 -269
  363. package/src/hooks/duotone.js +100 -30
  364. package/src/hooks/gap.js +0 -208
  365. package/src/hooks/layout.js +38 -22
  366. package/src/hooks/margin.js +1 -164
  367. package/src/hooks/padding.js +1 -163
  368. package/src/hooks/supports.js +6 -0
  369. package/src/hooks/test/__snapshots__/align.native.js.snap +24 -24
  370. package/src/hooks/test/duotone.js +102 -0
  371. package/src/hooks/test/style.js +2 -1
  372. package/src/hooks/test/use-typography-props.js +2 -0
  373. package/src/hooks/typography.js +68 -88
  374. package/src/hooks/utils.js +126 -0
  375. package/src/layouts/constrained.js +23 -17
  376. package/src/layouts/flex.js +1 -0
  377. package/src/private-apis.js +2 -0
  378. package/src/store/actions.js +16 -6
  379. package/src/store/defaults.js +14 -1
  380. package/src/store/reducer.js +68 -43
  381. package/src/store/selectors.js +28 -4
  382. package/src/store/test/actions.js +4 -2
  383. package/src/utils/parse-css-unit-to-px.js +48 -13
  384. package/src/utils/test/parse-css-unit-to-px.js +13 -2
  385. package/tsconfig.tsbuildinfo +1 -1
  386. package/build/hooks/border-radius.js +0 -100
  387. package/build/hooks/border-radius.js.map +0 -1
  388. package/build/hooks/child-layout.js +0 -213
  389. package/build/hooks/child-layout.js.map +0 -1
  390. package/build/hooks/min-height.js +0 -139
  391. package/build/hooks/min-height.js.map +0 -1
  392. package/build-module/hooks/border-radius.js +0 -84
  393. package/build-module/hooks/border-radius.js.map +0 -1
  394. package/build-module/hooks/child-layout.js +0 -193
  395. package/build-module/hooks/child-layout.js.map +0 -1
  396. package/build-module/hooks/min-height.js +0 -116
  397. package/build-module/hooks/min-height.js.map +0 -1
  398. package/src/hooks/border-radius.js +0 -70
  399. package/src/hooks/child-layout.js +0 -195
  400. package/src/hooks/min-height.js +0 -104
@@ -1,109 +1,89 @@
1
- /**
2
- * External dependencies
3
- */
4
- import classnames from 'classnames';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
9
- import {
10
- __experimentalToolsPanelItem as ToolsPanelItem,
11
- __experimentalVStack as VStack,
12
- } from '@wordpress/components';
13
- import { Platform, useState } from '@wordpress/element';
14
- import { __ } from '@wordpress/i18n';
15
- import { getBlockSupport } from '@wordpress/blocks';
4
+ import { useState, useEffect, useCallback } from '@wordpress/element';
16
5
  import { useDispatch } from '@wordpress/data';
6
+ import { getBlockSupport } from '@wordpress/blocks';
7
+ import deprecated from '@wordpress/deprecated';
17
8
 
18
9
  /**
19
10
  * Internal dependencies
20
11
  */
21
12
  import InspectorControls from '../components/inspector-controls';
22
13
  import {
23
- GapEdit,
24
- hasGapSupport,
25
- hasGapValue,
26
- resetGap,
27
- useIsGapDisabled,
28
- } from './gap';
29
- import {
30
- MarginEdit,
31
- MarginVisualizer,
32
- hasMarginSupport,
33
- hasMarginValue,
34
- resetMargin,
35
- useIsMarginDisabled,
36
- } from './margin';
37
- import {
38
- MinHeightEdit,
39
- hasMinHeightSupport,
40
- hasMinHeightValue,
41
- resetMinHeight,
42
- useIsMinHeightDisabled,
43
- } from './min-height';
44
- import {
45
- PaddingEdit,
46
- PaddingVisualizer,
47
- hasPaddingSupport,
48
- hasPaddingValue,
49
- resetPadding,
50
- useIsPaddingDisabled,
51
- } from './padding';
52
- import {
53
- ChildLayoutEdit,
54
- hasChildLayoutSupport,
55
- hasChildLayoutValue,
56
- resetChildLayout,
57
- useIsChildLayoutDisabled,
58
- childLayoutOrientation,
59
- } from './child-layout';
60
- import useSetting from '../components/use-setting';
14
+ DimensionsPanel as StylesDimensionsPanel,
15
+ useHasDimensionsPanel,
16
+ } from '../components/global-styles';
17
+ import { MarginVisualizer } from './margin';
18
+ import { PaddingVisualizer } from './padding';
61
19
  import { store as blockEditorStore } from '../store';
62
20
  import { unlock } from '../lock-unlock';
63
21
 
22
+ import { cleanEmptyObject, useBlockSettings } from './utils';
23
+
64
24
  export const DIMENSIONS_SUPPORT_KEY = 'dimensions';
65
25
  export const SPACING_SUPPORT_KEY = 'spacing';
66
26
  export const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];
67
27
  export const AXIAL_SIDES = [ 'vertical', 'horizontal' ];
68
28
 
69
- function useVisualizerMouseOver() {
70
- const [ isMouseOver, setIsMouseOver ] = useState( false );
29
+ function useVisualizer() {
30
+ const [ property, setProperty ] = useState( false );
71
31
  const { hideBlockInterface, showBlockInterface } = unlock(
72
32
  useDispatch( blockEditorStore )
73
33
  );
74
- const onMouseOver = ( e ) => {
75
- e.stopPropagation();
76
- hideBlockInterface();
77
- setIsMouseOver( true );
78
- };
79
- const onMouseOut = ( e ) => {
80
- e.stopPropagation();
81
- showBlockInterface();
82
- setIsMouseOver( false );
83
- };
84
- return { isMouseOver, onMouseOver, onMouseOut };
34
+ useEffect( () => {
35
+ if ( ! property ) {
36
+ showBlockInterface();
37
+ } else {
38
+ hideBlockInterface();
39
+ }
40
+ }, [ property, showBlockInterface, hideBlockInterface ] );
41
+
42
+ return [ property, setProperty ];
43
+ }
44
+
45
+ function DimensionsInspectorControl( { children, resetAllFilter } ) {
46
+ const attributesResetAllFilter = useCallback(
47
+ ( attributes ) => {
48
+ const existingStyle = attributes.style;
49
+ const updatedStyle = resetAllFilter( existingStyle );
50
+ return {
51
+ ...attributes,
52
+ style: updatedStyle,
53
+ };
54
+ },
55
+ [ resetAllFilter ]
56
+ );
57
+
58
+ return (
59
+ <InspectorControls
60
+ group="dimensions"
61
+ resetAllFilter={ attributesResetAllFilter }
62
+ >
63
+ { children }
64
+ </InspectorControls>
65
+ );
85
66
  }
86
67
 
87
- /**
88
- * Inspector controls for dimensions support.
89
- *
90
- * @param {Object} props Block props.
91
- *
92
- * @return {WPElement} Inspector controls for dimensions and spacing support features.
93
- */
94
68
  export function DimensionsPanel( props ) {
95
- const isGapDisabled = useIsGapDisabled( props );
96
- const isPaddingDisabled = useIsPaddingDisabled( props );
97
- const isMarginDisabled = useIsMarginDisabled( props );
98
- const isMinHeightDisabled = useIsMinHeightDisabled( props );
99
- const isChildLayoutDisabled = useIsChildLayoutDisabled( props );
100
- const isDisabled = useIsDimensionsDisabled( props );
101
- const isSupported = hasDimensionsSupport( props );
102
- const spacingSizes = useSetting( 'spacing.spacingSizes' );
103
- const paddingMouseOver = useVisualizerMouseOver();
104
- const marginMouseOver = useVisualizerMouseOver();
69
+ const {
70
+ clientId,
71
+ name,
72
+ attributes,
73
+ setAttributes,
74
+ __unstableParentLayout,
75
+ } = props;
76
+ const settings = useBlockSettings( name, __unstableParentLayout );
77
+ const isEnabled = useHasDimensionsPanel( settings );
78
+ const value = attributes.style;
79
+ const [ visualizedProperty, setVisualizedProperty ] = useVisualizer();
80
+ const onChange = ( newStyle ) => {
81
+ setAttributes( {
82
+ style: cleanEmptyObject( newStyle ),
83
+ } );
84
+ };
105
85
 
106
- if ( isDisabled || ! isSupported ) {
86
+ if ( ! isEnabled ) {
107
87
  return null;
108
88
  }
109
89
 
@@ -111,133 +91,36 @@ export function DimensionsPanel( props ) {
111
91
  DIMENSIONS_SUPPORT_KEY,
112
92
  '__experimentalDefaultControls',
113
93
  ] );
114
-
115
94
  const defaultSpacingControls = getBlockSupport( props.name, [
116
95
  SPACING_SUPPORT_KEY,
117
96
  '__experimentalDefaultControls',
118
97
  ] );
119
-
120
- const createResetAllFilter =
121
- ( attribute, featureSet ) => ( newAttributes ) => ( {
122
- ...newAttributes,
123
- style: {
124
- ...newAttributes.style,
125
- [ featureSet ]: {
126
- ...newAttributes.style?.[ featureSet ],
127
- [ attribute ]: undefined,
128
- },
129
- },
130
- } );
131
-
132
- const spacingClassnames = classnames( {
133
- 'tools-panel-item-spacing': spacingSizes && spacingSizes.length > 0,
134
- } );
135
-
136
- const { __unstableParentLayout: parentLayout } = props;
98
+ const defaultControls = {
99
+ ...defaultDimensionsControls,
100
+ ...defaultSpacingControls,
101
+ };
137
102
 
138
103
  return (
139
104
  <>
140
- <InspectorControls group="dimensions">
141
- { ! isPaddingDisabled && (
142
- <ToolsPanelItem
143
- className={ spacingClassnames }
144
- hasValue={ () => hasPaddingValue( props ) }
145
- label={ __( 'Padding' ) }
146
- onDeselect={ () => resetPadding( props ) }
147
- resetAllFilter={ createResetAllFilter(
148
- 'padding',
149
- 'spacing'
150
- ) }
151
- isShownByDefault={ defaultSpacingControls?.padding }
152
- panelId={ props.clientId }
153
- >
154
- <PaddingEdit
155
- onMouseOver={ paddingMouseOver.onMouseOver }
156
- onMouseOut={ paddingMouseOver.onMouseOut }
157
- { ...props }
158
- />
159
- </ToolsPanelItem>
160
- ) }
161
- { ! isMarginDisabled && (
162
- <ToolsPanelItem
163
- className={ spacingClassnames }
164
- hasValue={ () => hasMarginValue( props ) }
165
- label={ __( 'Margin' ) }
166
- onDeselect={ () => resetMargin( props ) }
167
- resetAllFilter={ createResetAllFilter(
168
- 'margin',
169
- 'spacing'
170
- ) }
171
- isShownByDefault={ defaultSpacingControls?.margin }
172
- panelId={ props.clientId }
173
- >
174
- <MarginEdit
175
- onMouseOver={ marginMouseOver.onMouseOver }
176
- onMouseOut={ marginMouseOver.onMouseOut }
177
- { ...props }
178
- />
179
- </ToolsPanelItem>
180
- ) }
181
- { ! isGapDisabled && (
182
- <ToolsPanelItem
183
- className={ spacingClassnames }
184
- hasValue={ () => hasGapValue( props ) }
185
- label={ __( 'Block spacing' ) }
186
- onDeselect={ () => resetGap( props ) }
187
- resetAllFilter={ createResetAllFilter(
188
- 'blockGap',
189
- 'spacing'
190
- ) }
191
- isShownByDefault={ defaultSpacingControls?.blockGap }
192
- panelId={ props.clientId }
193
- >
194
- <GapEdit { ...props } />
195
- </ToolsPanelItem>
196
- ) }
197
- { ! isMinHeightDisabled && (
198
- <ToolsPanelItem
199
- hasValue={ () => hasMinHeightValue( props ) }
200
- label={ __( 'Min. height' ) }
201
- onDeselect={ () => resetMinHeight( props ) }
202
- resetAllFilter={ createResetAllFilter(
203
- 'minHeight',
204
- 'dimensions'
205
- ) }
206
- isShownByDefault={
207
- defaultDimensionsControls?.minHeight
208
- }
209
- panelId={ props.clientId }
210
- >
211
- <MinHeightEdit { ...props } />
212
- </ToolsPanelItem>
213
- ) }
214
- { ! isChildLayoutDisabled && (
215
- <VStack
216
- as={ ToolsPanelItem }
217
- spacing={ 2 }
218
- hasValue={ () => hasChildLayoutValue( props ) }
219
- label={ childLayoutOrientation( parentLayout ) }
220
- onDeselect={ () => resetChildLayout( props ) }
221
- resetAllFilter={ createResetAllFilter(
222
- 'selfStretch',
223
- 'layout'
224
- ) }
225
- isShownByDefault={ false }
226
- panelId={ props.clientId }
227
- >
228
- <ChildLayoutEdit { ...props } />
229
- </VStack>
230
- ) }
231
- </InspectorControls>
232
- { ! isPaddingDisabled && (
105
+ <StylesDimensionsPanel
106
+ as={ DimensionsInspectorControl }
107
+ panelId={ clientId }
108
+ name={ name }
109
+ settings={ settings }
110
+ value={ value }
111
+ onChange={ onChange }
112
+ defaultControls={ defaultControls }
113
+ onVisualize={ setVisualizedProperty }
114
+ />
115
+ { !! settings?.spacing?.padding && (
233
116
  <PaddingVisualizer
234
- forceShow={ paddingMouseOver.isMouseOver }
117
+ forceShow={ visualizedProperty === 'padding' }
235
118
  { ...props }
236
119
  />
237
120
  ) }
238
- { ! isMarginDisabled && (
121
+ { !! settings?.spacing?.margin && (
239
122
  <MarginVisualizer
240
- forceShow={ marginMouseOver.isMouseOver }
123
+ forceShow={ visualizedProperty === 'margin' }
241
124
  { ...props }
242
125
  />
243
126
  ) }
@@ -246,80 +129,13 @@ export function DimensionsPanel( props ) {
246
129
  }
247
130
 
248
131
  /**
249
- * Determine whether there is dimensions related block support.
250
- *
251
- * @param {Object} props Block props.
252
- *
253
- * @return {boolean} Whether there is support.
254
- */
255
- export function hasDimensionsSupport( props ) {
256
- if ( Platform.OS !== 'web' ) {
257
- return false;
258
- }
259
-
260
- const { name: blockName } = props;
261
-
262
- return (
263
- hasGapSupport( blockName ) ||
264
- hasMinHeightSupport( blockName ) ||
265
- hasPaddingSupport( blockName ) ||
266
- hasMarginSupport( blockName ) ||
267
- hasChildLayoutSupport( props )
268
- );
269
- }
270
-
271
- /**
272
- * Determines whether dimensions support has been disabled.
273
- *
274
- * @param {Object} props Block properties.
275
- *
276
- * @return {boolean} If spacing support is completely disabled.
277
- */
278
- const useIsDimensionsDisabled = ( props = {} ) => {
279
- const gapDisabled = useIsGapDisabled( props );
280
- const minHeightDisabled = useIsMinHeightDisabled( props );
281
- const paddingDisabled = useIsPaddingDisabled( props );
282
- const marginDisabled = useIsMarginDisabled( props );
283
- const childLayoutDisabled = useIsChildLayoutDisabled( props );
284
-
285
- return (
286
- gapDisabled &&
287
- minHeightDisabled &&
288
- paddingDisabled &&
289
- marginDisabled &&
290
- childLayoutDisabled
291
- );
292
- };
293
-
294
- /**
295
- * Custom hook to retrieve which padding/margin/blockGap is supported
296
- * e.g. top, right, bottom or left.
297
- *
298
- * Sides are opted into by default. It is only if a specific side is set to
299
- * false that it is omitted.
300
- *
301
- * @param {string} blockName Block name.
302
- * @param {string} feature The feature custom sides relate to e.g. padding or margins.
303
- *
304
- * @return {string[] | undefined} Strings representing the custom sides available.
132
+ * @deprecated
305
133
  */
306
- export function useCustomSides( blockName, feature ) {
307
- const support = getBlockSupport( blockName, SPACING_SUPPORT_KEY );
308
-
309
- // Skip when setting is boolean as theme isn't setting arbitrary sides.
310
- if ( ! support || typeof support[ feature ] === 'boolean' ) {
311
- return;
312
- }
313
-
314
- // Return if the setting is an array of sides (e.g. `[ 'top', 'bottom' ]`).
315
- if ( Array.isArray( support[ feature ] ) ) {
316
- return support[ feature ];
317
- }
318
-
319
- // Finally, attempt to return `.sides` if the setting is an object.
320
- if ( support[ feature ]?.sides ) {
321
- return support[ feature ].sides;
322
- }
134
+ export function useCustomSides() {
135
+ deprecated( 'wp.blockEditor.__experimentalUseCustomSides', {
136
+ since: '6.3',
137
+ version: '6.4',
138
+ } );
323
139
  }
324
140
 
325
141
  /**
@@ -75,9 +75,34 @@ function useMultiOriginPresets( { presetSetting, defaultSetting } ) {
75
75
  );
76
76
  }
77
77
 
78
+ export function getColorsFromDuotonePreset( duotone, duotonePalette ) {
79
+ if ( ! duotone ) {
80
+ return;
81
+ }
82
+ const preset = duotonePalette?.find( ( { slug } ) => {
83
+ return duotone === `var:preset|duotone|${ slug }`;
84
+ } );
85
+
86
+ return preset ? preset.colors : undefined;
87
+ }
88
+
89
+ export function getDuotonePresetFromColors( colors, duotonePalette ) {
90
+ if ( ! colors || ! Array.isArray( colors ) ) {
91
+ return;
92
+ }
93
+
94
+ const preset = duotonePalette?.find( ( duotonePreset ) => {
95
+ return duotonePreset?.colors?.every(
96
+ ( val, index ) => val === colors[ index ]
97
+ );
98
+ } );
99
+
100
+ return preset ? `var:preset|duotone|${ preset.slug }` : undefined;
101
+ }
102
+
78
103
  function DuotonePanel( { attributes, setAttributes } ) {
79
104
  const style = attributes?.style;
80
- const duotone = style?.color?.duotone;
105
+ const duotoneStyle = style?.color?.duotone;
81
106
 
82
107
  const duotonePalette = useMultiOriginPresets( {
83
108
  presetSetting: 'color.duotone',
@@ -96,6 +121,10 @@ function DuotonePanel( { attributes, setAttributes } ) {
96
121
  return null;
97
122
  }
98
123
 
124
+ const duotonePresetOrColors = ! Array.isArray( duotoneStyle )
125
+ ? getColorsFromDuotonePreset( duotoneStyle, duotonePalette )
126
+ : duotoneStyle;
127
+
99
128
  return (
100
129
  <BlockControls group="block" __experimentalShareWithChildBlocks>
101
130
  <DuotoneControl
@@ -103,13 +132,18 @@ function DuotonePanel( { attributes, setAttributes } ) {
103
132
  colorPalette={ colorPalette }
104
133
  disableCustomDuotone={ disableCustomDuotone }
105
134
  disableCustomColors={ disableCustomColors }
106
- value={ duotone }
135
+ value={ duotonePresetOrColors }
107
136
  onChange={ ( newDuotone ) => {
137
+ const maybePreset = getDuotonePresetFromColors(
138
+ newDuotone,
139
+ duotonePalette
140
+ );
141
+
108
142
  const newStyle = {
109
143
  ...style,
110
144
  color: {
111
145
  ...style?.color,
112
- duotone: newDuotone,
146
+ duotone: maybePreset ?? newDuotone, // use preset or fallback to custom colors.
113
147
  },
114
148
  };
115
149
  setAttributes( { style: newStyle } );
@@ -168,12 +202,16 @@ const withDuotoneControls = createHigherOrderComponent(
168
202
  [ props.clientId ]
169
203
  );
170
204
 
205
+ // CAUTION: code added before this line will be executed
206
+ // for all blocks, not just those that support duotone. Code added
207
+ // above this line should be carefully evaluated for its impact on
208
+ // performance.
171
209
  return (
172
210
  <>
173
- <BlockEdit { ...props } />
174
211
  { hasDuotoneSupport && ! isContentLocked && (
175
212
  <DuotonePanel { ...props } />
176
213
  ) }
214
+ <BlockEdit { ...props } />
177
215
  </>
178
216
  );
179
217
  },
@@ -211,6 +249,49 @@ function scopeSelector( scope, selector ) {
211
249
  return selectorsScoped.join( ', ' );
212
250
  }
213
251
 
252
+ function BlockDuotoneStyles( { name, duotoneStyle, id } ) {
253
+ const duotonePalette = useMultiOriginPresets( {
254
+ presetSetting: 'color.duotone',
255
+ defaultSetting: 'color.defaultDuotone',
256
+ } );
257
+
258
+ const element = useContext( BlockList.__unstableElementContext );
259
+
260
+ // Portals cannot exist without a container.
261
+ // Guard against empty Duotone styles.
262
+ if ( ! element || ! duotoneStyle ) {
263
+ return null;
264
+ }
265
+
266
+ let colors = duotoneStyle;
267
+
268
+ if ( ! Array.isArray( colors ) && colors !== 'unset' ) {
269
+ colors = getColorsFromDuotonePreset( colors, duotonePalette );
270
+ }
271
+
272
+ const duotoneSupportSelectors = getBlockSupport(
273
+ name,
274
+ 'color.__experimentalDuotone'
275
+ );
276
+
277
+ // Extra .editor-styles-wrapper specificity is needed in the editor
278
+ // since we're not using inline styles to apply the filter. We need to
279
+ // override duotone applied by global styles and theme.json.
280
+ const selectorsGroup = scopeSelector(
281
+ `.editor-styles-wrapper .${ id }`,
282
+ duotoneSupportSelectors
283
+ );
284
+
285
+ return createPortal(
286
+ <InlineDuotone
287
+ selector={ selectorsGroup }
288
+ id={ id }
289
+ colors={ colors }
290
+ />,
291
+ element
292
+ );
293
+ }
294
+
214
295
  /**
215
296
  * Override the default block element to include duotone styles.
216
297
  *
@@ -224,37 +305,26 @@ const withDuotoneStyles = createHigherOrderComponent(
224
305
  props.name,
225
306
  'color.__experimentalDuotone'
226
307
  );
227
- const colors = props?.attributes?.style?.color?.duotone;
228
-
229
- if ( ! duotoneSupport || ! colors ) {
230
- return <BlockListBlock { ...props } />;
231
- }
232
308
 
233
309
  const id = `wp-duotone-${ useInstanceId( BlockListBlock ) }`;
310
+ const className = duotoneSupport
311
+ ? classnames( props?.className, id )
312
+ : props?.className;
313
+ const duotoneStyle = props?.attributes?.style?.color?.duotone;
234
314
 
235
- // Extra .editor-styles-wrapper specificity is needed in the editor
236
- // since we're not using inline styles to apply the filter. We need to
237
- // override duotone applied by global styles and theme.json.
238
- const selectorsGroup = scopeSelector(
239
- `.editor-styles-wrapper .${ id }`,
240
- duotoneSupport
241
- );
242
-
243
- const className = classnames( props?.className, id );
244
-
245
- const element = useContext( BlockList.__unstableElementContext );
246
-
315
+ // CAUTION: code added before this line will be executed
316
+ // for all blocks, not just those that support duotone. Code added
317
+ // above this line should be carefully evaluated for its impact on
318
+ // performance.
247
319
  return (
248
320
  <>
249
- { element &&
250
- createPortal(
251
- <InlineDuotone
252
- selector={ selectorsGroup }
253
- id={ id }
254
- colors={ colors }
255
- />,
256
- element
257
- ) }
321
+ { duotoneSupport && duotoneStyle && (
322
+ <BlockDuotoneStyles
323
+ name={ props?.name }
324
+ duotoneStyle={ duotoneStyle }
325
+ id={ id }
326
+ />
327
+ ) }
258
328
  <BlockListBlock { ...props } className={ className } />
259
329
  </>
260
330
  );