@wordpress/block-editor 9.6.0 → 9.8.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 (462) 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-popover/inbetween.js +5 -3
  11. package/build/components/block-popover/inbetween.js.map +1 -1
  12. package/build/components/block-popover/index.js +10 -4
  13. package/build/components/block-popover/index.js.map +1 -1
  14. package/build/components/block-settings-menu/index.js +2 -6
  15. package/build/components/block-settings-menu/index.js.map +1 -1
  16. package/build/components/block-styles/index.js +3 -6
  17. package/build/components/block-styles/index.js.map +1 -1
  18. package/build/components/block-switcher/index.js +10 -16
  19. package/build/components/block-switcher/index.js.map +1 -1
  20. package/build/components/block-toolbar/index.js +5 -1
  21. package/build/components/block-toolbar/index.js.map +1 -1
  22. package/build/components/block-tools/selected-block-popover.js +10 -2
  23. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  24. package/build/components/block-tools/use-block-toolbar-popover-props.js +126 -0
  25. package/build/components/block-tools/use-block-toolbar-popover-props.js.map +1 -0
  26. package/build/components/block-types-list/index.js +1 -1
  27. package/build/components/block-types-list/index.js.map +1 -1
  28. package/build/components/border-radius-control/all-input-control.js +31 -3
  29. package/build/components/border-radius-control/all-input-control.js.map +1 -1
  30. package/build/components/border-radius-control/index.js +23 -7
  31. package/build/components/border-radius-control/index.js.map +1 -1
  32. package/build/components/border-radius-control/input-controls.js +21 -6
  33. package/build/components/border-radius-control/input-controls.js.map +1 -1
  34. package/build/components/border-radius-control/utils.js +13 -16
  35. package/build/components/border-radius-control/utils.js.map +1 -1
  36. package/build/components/colors/utils.js +6 -2
  37. package/build/components/colors/utils.js.map +1 -1
  38. package/build/components/colors/with-colors.js +17 -4
  39. package/build/components/colors/with-colors.js.map +1 -1
  40. package/build/components/colors-gradients/control.js +7 -4
  41. package/build/components/colors-gradients/control.js.map +1 -1
  42. package/build/components/colors-gradients/dropdown.js +5 -2
  43. package/build/components/colors-gradients/dropdown.js.map +1 -1
  44. package/build/components/copy-handler/index.js +6 -0
  45. package/build/components/copy-handler/index.js.map +1 -1
  46. package/build/components/date-format-picker/index.js +2 -7
  47. package/build/components/date-format-picker/index.js.map +1 -1
  48. package/build/components/duotone/components.js +5 -5
  49. package/build/components/duotone/components.js.map +1 -1
  50. package/build/components/font-appearance-control/index.js +10 -4
  51. package/build/components/font-appearance-control/index.js.map +1 -1
  52. package/build/components/font-family/index.js +1 -1
  53. package/build/components/font-family/index.js.map +1 -1
  54. package/build/components/font-sizes/with-font-sizes.js +17 -4
  55. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  56. package/build/components/image-size-control/index.js +3 -1
  57. package/build/components/image-size-control/index.js.map +1 -1
  58. package/build/components/index.js +22 -6
  59. package/build/components/index.js.map +1 -1
  60. package/build/components/index.native.js +11 -4
  61. package/build/components/index.native.js.map +1 -1
  62. package/build/components/inserter/index.native.js +8 -3
  63. package/build/components/inserter/index.native.js.map +1 -1
  64. package/build/components/inserter/search-items.js +22 -4
  65. package/build/components/inserter/search-items.js.map +1 -1
  66. package/build/components/inserter-list-item/index.js +2 -19
  67. package/build/components/inserter-list-item/index.js.map +1 -1
  68. package/build/components/letter-spacing-control/index.js +6 -3
  69. package/build/components/letter-spacing-control/index.js.map +1 -1
  70. package/build/components/line-height-control/index.js +6 -3
  71. package/build/components/line-height-control/index.js.map +1 -1
  72. package/build/components/link-control/is-url-like.js +1 -7
  73. package/build/components/link-control/is-url-like.js.map +1 -1
  74. package/build/components/link-control/link-preview.js +0 -1
  75. package/build/components/link-control/link-preview.js.map +1 -1
  76. package/build/components/link-control/use-search-handler.js +1 -7
  77. package/build/components/link-control/use-search-handler.js.map +1 -1
  78. package/build/components/list-view/block-select-button.js +5 -2
  79. package/build/components/list-view/block-select-button.js.map +1 -1
  80. package/build/components/list-view/expander.js +3 -1
  81. package/build/components/list-view/expander.js.map +1 -1
  82. package/build/components/list-view/use-block-selection.js +1 -7
  83. package/build/components/list-view/use-block-selection.js.map +1 -1
  84. package/build/components/media-upload/index.native.js +8 -3
  85. package/build/components/media-upload/index.native.js.map +1 -1
  86. package/build/components/preview-options/index.js +2 -2
  87. package/build/components/preview-options/index.js.map +1 -1
  88. package/build/components/{use-no-recursive-renders → recursion-provider}/index.js +40 -18
  89. package/build/components/recursion-provider/index.js.map +1 -0
  90. package/build/components/rich-text/index.js +6 -1
  91. package/build/components/rich-text/index.js.map +1 -1
  92. package/build/components/rich-text/index.native.js +3 -1
  93. package/build/components/rich-text/index.native.js.map +1 -1
  94. package/build/components/rich-text/use-before-input-rules.js +110 -0
  95. package/build/components/rich-text/use-before-input-rules.js.map +1 -0
  96. package/build/components/rich-text/use-enter.js +0 -4
  97. package/build/components/rich-text/use-enter.js.map +1 -1
  98. package/build/components/rich-text/use-format-types.js +8 -11
  99. package/build/components/rich-text/use-format-types.js.map +1 -1
  100. package/build/components/spacing-sizes-control/all-input-control.js +53 -0
  101. package/build/components/spacing-sizes-control/all-input-control.js.map +1 -0
  102. package/build/components/spacing-sizes-control/axial-input-controls.js +69 -0
  103. package/build/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
  104. package/build/components/spacing-sizes-control/index.js +100 -0
  105. package/build/components/spacing-sizes-control/index.js.map +1 -0
  106. package/build/components/spacing-sizes-control/input-controls.js +52 -0
  107. package/build/components/spacing-sizes-control/input-controls.js.map +1 -0
  108. package/build/components/spacing-sizes-control/linked-button.js +38 -0
  109. package/build/components/spacing-sizes-control/linked-button.js.map +1 -0
  110. package/build/components/spacing-sizes-control/spacing-input-control.js +208 -0
  111. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
  112. package/build/components/spacing-sizes-control/utils.js +202 -0
  113. package/build/components/spacing-sizes-control/utils.js.map +1 -0
  114. package/build/components/text-decoration-control/index.js +3 -1
  115. package/build/components/text-decoration-control/index.js.map +1 -1
  116. package/build/components/text-transform-control/index.js +3 -1
  117. package/build/components/text-transform-control/index.js.map +1 -1
  118. package/build/components/url-input/index.js +1 -1
  119. package/build/components/url-input/index.js.map +1 -1
  120. package/build/components/url-popover/image-url-input-ui.js +4 -1
  121. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  122. package/build/components/writing-flow/use-arrow-nav.js +4 -25
  123. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  124. package/build/components/writing-flow/use-drag-selection.js +9 -2
  125. package/build/components/writing-flow/use-drag-selection.js.map +1 -1
  126. package/build/components/writing-flow/use-multi-selection.js +4 -2
  127. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  128. package/build/components/writing-flow/use-select-all.js +3 -1
  129. package/build/components/writing-flow/use-select-all.js.map +1 -1
  130. package/build/components/writing-flow/use-selection-observer.js +10 -2
  131. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  132. package/build/hooks/border-radius.js +2 -7
  133. package/build/hooks/border-radius.js.map +1 -1
  134. package/build/hooks/border.js +2 -2
  135. package/build/hooks/border.js.map +1 -1
  136. package/build/hooks/color.js +4 -1
  137. package/build/hooks/color.js.map +1 -1
  138. package/build/hooks/dimensions.js +15 -0
  139. package/build/hooks/dimensions.js.map +1 -1
  140. package/build/hooks/duotone.js +4 -4
  141. package/build/hooks/duotone.js.map +1 -1
  142. package/build/hooks/gap.js +6 -4
  143. package/build/hooks/gap.js.map +1 -1
  144. package/build/hooks/generated-class-name.js +1 -7
  145. package/build/hooks/generated-class-name.js.map +1 -1
  146. package/build/hooks/layout.js +29 -14
  147. package/build/hooks/layout.js.map +1 -1
  148. package/build/hooks/margin.js +28 -12
  149. package/build/hooks/margin.js.map +1 -1
  150. package/build/hooks/padding.js +19 -8
  151. package/build/hooks/padding.js.map +1 -1
  152. package/build/hooks/style.js +4 -50
  153. package/build/hooks/style.js.map +1 -1
  154. package/build/layouts/constrained.js +215 -0
  155. package/build/layouts/constrained.js.map +1 -0
  156. package/build/layouts/flex.js +1 -1
  157. package/build/layouts/flex.js.map +1 -1
  158. package/build/layouts/flow.js +7 -151
  159. package/build/layouts/flow.js.map +1 -1
  160. package/build/layouts/index.js +3 -1
  161. package/build/layouts/index.js.map +1 -1
  162. package/build/layouts/utils.js +43 -0
  163. package/build/layouts/utils.js.map +1 -1
  164. package/build/store/actions.js +25 -3
  165. package/build/store/actions.js.map +1 -1
  166. package/build/store/selectors.js +4 -6
  167. package/build/store/selectors.js.map +1 -1
  168. package/build/utils/block-variation-transforms.js +15 -9
  169. package/build/utils/block-variation-transforms.js.map +1 -1
  170. package/build/utils/pasting.js +9 -1
  171. package/build/utils/pasting.js.map +1 -1
  172. package/build-module/components/block-alignment-control/use-available-alignments.js +1 -1
  173. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  174. package/build-module/components/block-edit-visually-button/index.js +35 -0
  175. package/build-module/components/block-edit-visually-button/index.js.map +1 -0
  176. package/build-module/components/block-list/block.js +13 -3
  177. package/build-module/components/block-list/block.js.map +1 -1
  178. package/build-module/components/block-list/index.native.js +1 -1
  179. package/build-module/components/block-list/index.native.js.map +1 -1
  180. package/build-module/components/block-popover/inbetween.js +5 -3
  181. package/build-module/components/block-popover/inbetween.js.map +1 -1
  182. package/build-module/components/block-popover/index.js +8 -4
  183. package/build-module/components/block-popover/index.js.map +1 -1
  184. package/build-module/components/block-settings-menu/index.js +3 -6
  185. package/build-module/components/block-settings-menu/index.js.map +1 -1
  186. package/build-module/components/block-styles/index.js +4 -7
  187. package/build-module/components/block-styles/index.js.map +1 -1
  188. package/build-module/components/block-switcher/index.js +10 -16
  189. package/build-module/components/block-switcher/index.js.map +1 -1
  190. package/build-module/components/block-toolbar/index.js +4 -1
  191. package/build-module/components/block-toolbar/index.js.map +1 -1
  192. package/build-module/components/block-tools/selected-block-popover.js +8 -2
  193. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  194. package/build-module/components/block-tools/use-block-toolbar-popover-props.js +114 -0
  195. package/build-module/components/block-tools/use-block-toolbar-popover-props.js.map +1 -0
  196. package/build-module/components/block-types-list/index.js +1 -1
  197. package/build-module/components/block-types-list/index.js.map +1 -1
  198. package/build-module/components/border-radius-control/all-input-control.js +32 -4
  199. package/build-module/components/border-radius-control/all-input-control.js.map +1 -1
  200. package/build-module/components/border-radius-control/index.js +24 -8
  201. package/build-module/components/border-radius-control/index.js.map +1 -1
  202. package/build-module/components/border-radius-control/input-controls.js +22 -7
  203. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  204. package/build-module/components/border-radius-control/utils.js +13 -16
  205. package/build-module/components/border-radius-control/utils.js.map +1 -1
  206. package/build-module/components/colors/utils.js +7 -3
  207. package/build-module/components/colors/utils.js.map +1 -1
  208. package/build-module/components/colors/with-colors.js +16 -3
  209. package/build-module/components/colors/with-colors.js.map +1 -1
  210. package/build-module/components/colors-gradients/control.js +7 -4
  211. package/build-module/components/colors-gradients/control.js.map +1 -1
  212. package/build-module/components/colors-gradients/dropdown.js +5 -2
  213. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  214. package/build-module/components/copy-handler/index.js +7 -1
  215. package/build-module/components/copy-handler/index.js.map +1 -1
  216. package/build-module/components/date-format-picker/index.js +2 -6
  217. package/build-module/components/date-format-picker/index.js.map +1 -1
  218. package/build-module/components/duotone/components.js +5 -5
  219. package/build-module/components/duotone/components.js.map +1 -1
  220. package/build-module/components/font-appearance-control/index.js +7 -4
  221. package/build-module/components/font-appearance-control/index.js.map +1 -1
  222. package/build-module/components/font-family/index.js +1 -1
  223. package/build-module/components/font-family/index.js.map +1 -1
  224. package/build-module/components/font-sizes/with-font-sizes.js +16 -3
  225. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  226. package/build-module/components/image-size-control/index.js +3 -1
  227. package/build-module/components/image-size-control/index.js.map +1 -1
  228. package/build-module/components/index.js +2 -1
  229. package/build-module/components/index.js.map +1 -1
  230. package/build-module/components/index.native.js +1 -1
  231. package/build-module/components/index.native.js.map +1 -1
  232. package/build-module/components/inserter/index.native.js +9 -2
  233. package/build-module/components/inserter/index.native.js.map +1 -1
  234. package/build-module/components/inserter/search-items.js +19 -5
  235. package/build-module/components/inserter/search-items.js.map +1 -1
  236. package/build-module/components/inserter-list-item/index.js +1 -17
  237. package/build-module/components/inserter-list-item/index.js.map +1 -1
  238. package/build-module/components/letter-spacing-control/index.js +5 -3
  239. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  240. package/build-module/components/line-height-control/index.js +5 -3
  241. package/build-module/components/line-height-control/index.js.map +1 -1
  242. package/build-module/components/link-control/is-url-like.js +1 -6
  243. package/build-module/components/link-control/is-url-like.js.map +1 -1
  244. package/build-module/components/link-control/link-preview.js +0 -1
  245. package/build-module/components/link-control/link-preview.js.map +1 -1
  246. package/build-module/components/link-control/use-search-handler.js +1 -6
  247. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  248. package/build-module/components/list-view/block-select-button.js +5 -2
  249. package/build-module/components/list-view/block-select-button.js.map +1 -1
  250. package/build-module/components/list-view/expander.js +3 -2
  251. package/build-module/components/list-view/expander.js.map +1 -1
  252. package/build-module/components/list-view/use-block-selection.js +1 -6
  253. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  254. package/build-module/components/media-upload/index.native.js +9 -2
  255. package/build-module/components/media-upload/index.native.js.map +1 -1
  256. package/build-module/components/preview-options/index.js +2 -2
  257. package/build-module/components/preview-options/index.js.map +1 -1
  258. package/build-module/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -19
  259. package/build-module/components/recursion-provider/index.js.map +1 -0
  260. package/build-module/components/rich-text/index.js +5 -1
  261. package/build-module/components/rich-text/index.js.map +1 -1
  262. package/build-module/components/rich-text/index.native.js +3 -1
  263. package/build-module/components/rich-text/index.native.js.map +1 -1
  264. package/build-module/components/rich-text/use-before-input-rules.js +96 -0
  265. package/build-module/components/rich-text/use-before-input-rules.js.map +1 -0
  266. package/build-module/components/rich-text/use-enter.js +0 -4
  267. package/build-module/components/rich-text/use-enter.js.map +1 -1
  268. package/build-module/components/rich-text/use-format-types.js +8 -10
  269. package/build-module/components/rich-text/use-format-types.js.map +1 -1
  270. package/build-module/components/spacing-sizes-control/all-input-control.js +41 -0
  271. package/build-module/components/spacing-sizes-control/all-input-control.js.map +1 -0
  272. package/build-module/components/spacing-sizes-control/axial-input-controls.js +57 -0
  273. package/build-module/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
  274. package/build-module/components/spacing-sizes-control/index.js +83 -0
  275. package/build-module/components/spacing-sizes-control/index.js.map +1 -0
  276. package/build-module/components/spacing-sizes-control/input-controls.js +41 -0
  277. package/build-module/components/spacing-sizes-control/input-controls.js.map +1 -0
  278. package/build-module/components/spacing-sizes-control/linked-button.js +28 -0
  279. package/build-module/components/spacing-sizes-control/linked-button.js.map +1 -0
  280. package/build-module/components/spacing-sizes-control/spacing-input-control.js +192 -0
  281. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
  282. package/build-module/components/spacing-sizes-control/utils.js +174 -0
  283. package/build-module/components/spacing-sizes-control/utils.js.map +1 -0
  284. package/build-module/components/text-decoration-control/index.js +4 -2
  285. package/build-module/components/text-decoration-control/index.js.map +1 -1
  286. package/build-module/components/text-transform-control/index.js +4 -2
  287. package/build-module/components/text-transform-control/index.js.map +1 -1
  288. package/build-module/components/url-input/index.js +1 -1
  289. package/build-module/components/url-input/index.js.map +1 -1
  290. package/build-module/components/url-popover/image-url-input-ui.js +4 -1
  291. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  292. package/build-module/components/writing-flow/use-arrow-nav.js +5 -26
  293. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  294. package/build-module/components/writing-flow/use-drag-selection.js +9 -2
  295. package/build-module/components/writing-flow/use-drag-selection.js.map +1 -1
  296. package/build-module/components/writing-flow/use-multi-selection.js +4 -2
  297. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  298. package/build-module/components/writing-flow/use-select-all.js +3 -1
  299. package/build-module/components/writing-flow/use-select-all.js.map +1 -1
  300. package/build-module/components/writing-flow/use-selection-observer.js +10 -2
  301. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  302. package/build-module/hooks/border-radius.js +2 -7
  303. package/build-module/hooks/border-radius.js.map +1 -1
  304. package/build-module/hooks/border.js +2 -2
  305. package/build-module/hooks/border.js.map +1 -1
  306. package/build-module/hooks/color.js +4 -1
  307. package/build-module/hooks/color.js.map +1 -1
  308. package/build-module/hooks/dimensions.js +13 -0
  309. package/build-module/hooks/dimensions.js.map +1 -1
  310. package/build-module/hooks/duotone.js +4 -4
  311. package/build-module/hooks/duotone.js.map +1 -1
  312. package/build-module/hooks/gap.js +3 -2
  313. package/build-module/hooks/gap.js.map +1 -1
  314. package/build-module/hooks/generated-class-name.js +1 -6
  315. package/build-module/hooks/generated-class-name.js.map +1 -1
  316. package/build-module/hooks/layout.js +29 -14
  317. package/build-module/hooks/layout.js.map +1 -1
  318. package/build-module/hooks/margin.js +26 -12
  319. package/build-module/hooks/margin.js.map +1 -1
  320. package/build-module/hooks/padding.js +17 -8
  321. package/build-module/hooks/padding.js.map +1 -1
  322. package/build-module/hooks/style.js +7 -53
  323. package/build-module/hooks/style.js.map +1 -1
  324. package/build-module/layouts/constrained.js +197 -0
  325. package/build-module/layouts/constrained.js.map +1 -0
  326. package/build-module/layouts/flex.js +1 -1
  327. package/build-module/layouts/flex.js.map +1 -1
  328. package/build-module/layouts/flow.js +8 -145
  329. package/build-module/layouts/flow.js.map +1 -1
  330. package/build-module/layouts/index.js +2 -1
  331. package/build-module/layouts/index.js.map +1 -1
  332. package/build-module/layouts/utils.js +40 -0
  333. package/build-module/layouts/utils.js.map +1 -1
  334. package/build-module/store/actions.js +25 -3
  335. package/build-module/store/actions.js.map +1 -1
  336. package/build-module/store/selectors.js +5 -7
  337. package/build-module/store/selectors.js.map +1 -1
  338. package/build-module/utils/block-variation-transforms.js +14 -7
  339. package/build-module/utils/block-variation-transforms.js.map +1 -1
  340. package/build-module/utils/pasting.js +9 -1
  341. package/build-module/utils/pasting.js.map +1 -1
  342. package/build-style/style-rtl.css +154 -27
  343. package/build-style/style.css +154 -27
  344. package/package.json +30 -28
  345. package/src/components/block-alignment-control/use-available-alignments.js +1 -1
  346. package/src/components/block-edit-visually-button/index.js +39 -0
  347. package/src/components/block-list/block.js +13 -2
  348. package/src/components/block-list/index.native.js +1 -1
  349. package/src/components/block-popover/inbetween.js +5 -1
  350. package/src/components/block-popover/index.js +22 -13
  351. package/src/components/block-popover/style.scss +25 -2
  352. package/src/components/block-settings-menu/index.js +11 -15
  353. package/src/components/block-styles/index.js +4 -7
  354. package/src/components/block-styles/style.scss +10 -0
  355. package/src/components/block-switcher/index.js +9 -13
  356. package/src/components/block-switcher/test/index.js +1 -0
  357. package/src/components/block-toolbar/index.js +2 -0
  358. package/src/components/block-tools/selected-block-popover.js +7 -0
  359. package/src/components/block-tools/use-block-toolbar-popover-props.js +123 -0
  360. package/src/components/block-types-list/index.js +1 -1
  361. package/src/components/border-radius-control/all-input-control.js +41 -4
  362. package/src/components/border-radius-control/index.js +29 -6
  363. package/src/components/border-radius-control/input-controls.js +40 -13
  364. package/src/components/border-radius-control/test/utils.js +22 -60
  365. package/src/components/border-radius-control/utils.js +12 -16
  366. package/src/components/color-palette/test/__snapshots__/control.js.snap +93 -77
  367. package/src/components/colors/utils.js +5 -2
  368. package/src/components/colors/with-colors.js +11 -1
  369. package/src/components/colors-gradients/control.js +12 -8
  370. package/src/components/colors-gradients/dropdown.js +7 -2
  371. package/src/components/colors-gradients/style.scss +27 -5
  372. package/src/components/colors-gradients/test/control.js +3 -3
  373. package/src/components/copy-handler/index.js +18 -0
  374. package/src/components/date-format-picker/index.js +12 -14
  375. package/src/components/date-format-picker/style.scss +0 -4
  376. package/src/components/duotone/components.js +5 -5
  377. package/src/components/duotone-control/style.scss +0 -4
  378. package/src/components/font-appearance-control/index.js +3 -0
  379. package/src/components/font-appearance-control/style.scss +0 -2
  380. package/src/components/font-family/index.js +1 -1
  381. package/src/components/font-sizes/with-font-sizes.js +11 -1
  382. package/src/components/image-size-control/README.md +7 -0
  383. package/src/components/image-size-control/index.js +2 -0
  384. package/src/components/index.js +5 -1
  385. package/src/components/index.native.js +4 -1
  386. package/src/components/inserter/index.native.js +7 -2
  387. package/src/components/inserter/search-items.js +17 -5
  388. package/src/components/inserter-list-item/index.js +1 -17
  389. package/src/components/letter-spacing-control/index.js +2 -0
  390. package/src/components/line-height-control/index.js +2 -0
  391. package/src/components/link-control/is-url-like.js +1 -6
  392. package/src/components/link-control/link-preview.js +0 -1
  393. package/src/components/link-control/test/index.js +540 -893
  394. package/src/components/link-control/use-search-handler.js +1 -6
  395. package/src/components/list-view/block-select-button.js +7 -2
  396. package/src/components/list-view/expander.js +4 -2
  397. package/src/components/list-view/style.scss +11 -4
  398. package/src/components/list-view/use-block-selection.js +2 -8
  399. package/src/components/media-replace-flow/style.scss +1 -0
  400. package/src/components/media-upload/index.native.js +7 -3
  401. package/src/components/preview-options/index.js +2 -2
  402. package/src/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -28
  403. package/src/components/{use-no-recursive-renders/test/use-no-recursive-renders.js → recursion-provider/test/index.js} +5 -6
  404. package/src/components/rich-text/README.md +13 -1
  405. package/src/components/rich-text/index.js +2 -0
  406. package/src/components/rich-text/index.native.js +2 -0
  407. package/src/components/rich-text/use-before-input-rules.js +91 -0
  408. package/src/components/rich-text/use-enter.js +0 -3
  409. package/src/components/rich-text/use-format-types.js +6 -6
  410. package/src/components/spacing-sizes-control/all-input-control.js +40 -0
  411. package/src/components/spacing-sizes-control/axial-input-controls.js +62 -0
  412. package/src/components/spacing-sizes-control/index.js +91 -0
  413. package/src/components/spacing-sizes-control/input-controls.js +46 -0
  414. package/src/components/spacing-sizes-control/linked-button.js +25 -0
  415. package/src/components/spacing-sizes-control/spacing-input-control.js +280 -0
  416. package/src/components/spacing-sizes-control/style.scss +122 -0
  417. package/src/components/spacing-sizes-control/test/utils.js +156 -0
  418. package/src/components/spacing-sizes-control/utils.js +195 -0
  419. package/src/components/text-decoration-control/index.js +4 -2
  420. package/src/components/text-transform-control/index.js +4 -2
  421. package/src/components/url-input/index.js +1 -1
  422. package/src/components/url-input/style.scss +2 -2
  423. package/src/components/url-popover/image-url-input-ui.js +3 -0
  424. package/src/components/url-popover/style.scss +0 -3
  425. package/src/components/writing-flow/use-arrow-nav.js +4 -33
  426. package/src/components/writing-flow/use-drag-selection.js +7 -1
  427. package/src/components/writing-flow/use-multi-selection.js +4 -1
  428. package/src/components/writing-flow/use-select-all.js +2 -1
  429. package/src/components/writing-flow/use-selection-observer.js +10 -2
  430. package/src/hooks/border-radius.js +2 -6
  431. package/src/hooks/border.js +2 -2
  432. package/src/hooks/color.js +13 -3
  433. package/src/hooks/dimensions.js +15 -0
  434. package/src/hooks/duotone.js +4 -4
  435. package/src/hooks/gap.js +7 -2
  436. package/src/hooks/generated-class-name.js +6 -9
  437. package/src/hooks/layout.js +53 -16
  438. package/src/hooks/margin.js +49 -17
  439. package/src/hooks/padding.js +41 -14
  440. package/src/hooks/style.js +5 -56
  441. package/src/hooks/test/gap.js +22 -0
  442. package/src/hooks/typography.scss +0 -1
  443. package/src/layouts/constrained.js +217 -0
  444. package/src/layouts/flex.js +1 -1
  445. package/src/layouts/flow.js +6 -164
  446. package/src/layouts/index.js +2 -1
  447. package/src/layouts/test/constrained.js +21 -0
  448. package/src/layouts/utils.js +34 -0
  449. package/src/store/actions.js +32 -4
  450. package/src/store/selectors.js +5 -4
  451. package/src/style.scss +1 -0
  452. package/src/utils/block-variation-transforms.js +13 -6
  453. package/src/utils/pasting.js +10 -1
  454. package/src/utils/test/block-variation-transforms.js +24 -0
  455. package/src/utils/test/pasting.js +10 -0
  456. package/build/components/block-settings-menu/block-edit-visually-button.js +0 -70
  457. package/build/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
  458. package/build/components/use-no-recursive-renders/index.js.map +0 -1
  459. package/build-module/components/block-settings-menu/block-edit-visually-button.js +0 -56
  460. package/build-module/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
  461. package/build-module/components/use-no-recursive-renders/index.js.map +0 -1
  462. package/src/components/block-settings-menu/block-edit-visually-button.js +0 -52
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/hooks/dimensions.js"],"names":["__experimentalToolsPanelItem","ToolsPanelItem","Platform","__","getBlockSupport","InspectorControls","GapEdit","hasGapSupport","hasGapValue","resetGap","useIsGapDisabled","MarginEdit","MarginVisualizer","hasMarginSupport","hasMarginValue","resetMargin","useIsMarginDisabled","PaddingEdit","PaddingVisualizer","hasPaddingSupport","hasPaddingValue","resetPadding","useIsPaddingDisabled","SPACING_SUPPORT_KEY","ALL_SIDES","AXIAL_SIDES","DimensionsPanel","props","isGapDisabled","isPaddingDisabled","isMarginDisabled","isDisabled","useIsDimensionsDisabled","isSupported","hasDimensionsSupport","name","defaultSpacingControls","createResetAllFilter","attribute","newAttributes","style","spacing","undefined","padding","clientId","margin","blockGap","blockName","OS","gapDisabled","paddingDisabled","marginDisabled","useCustomSides","feature","support","Array","isArray","sides","useIsDimensionsSupportValid","some","side","includes","console","warn"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __experimentalToolsPanelItem as ToolsPanelItem } from '@wordpress/components';\nimport { Platform } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { getBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tGapEdit,\n\thasGapSupport,\n\thasGapValue,\n\tresetGap,\n\tuseIsGapDisabled,\n} from './gap';\nimport {\n\tMarginEdit,\n\tMarginVisualizer,\n\thasMarginSupport,\n\thasMarginValue,\n\tresetMargin,\n\tuseIsMarginDisabled,\n} from './margin';\nimport {\n\tPaddingEdit,\n\tPaddingVisualizer,\n\thasPaddingSupport,\n\thasPaddingValue,\n\tresetPadding,\n\tuseIsPaddingDisabled,\n} from './padding';\n\nexport const SPACING_SUPPORT_KEY = 'spacing';\nexport const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];\nexport const AXIAL_SIDES = [ 'vertical', 'horizontal' ];\n\n/**\n * Inspector controls for dimensions support.\n *\n * @param {Object} props Block props.\n *\n * @return {WPElement} Inspector controls for spacing support features.\n */\nexport function DimensionsPanel( props ) {\n\tconst isGapDisabled = useIsGapDisabled( props );\n\tconst isPaddingDisabled = useIsPaddingDisabled( props );\n\tconst isMarginDisabled = useIsMarginDisabled( props );\n\tconst isDisabled = useIsDimensionsDisabled( props );\n\tconst isSupported = hasDimensionsSupport( props.name );\n\n\tif ( isDisabled || ! isSupported ) {\n\t\treturn null;\n\t}\n\n\tconst defaultSpacingControls = getBlockSupport( props.name, [\n\t\tSPACING_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\tconst createResetAllFilter = ( attribute ) => ( newAttributes ) => ( {\n\t\t...newAttributes,\n\t\tstyle: {\n\t\t\t...newAttributes.style,\n\t\t\tspacing: {\n\t\t\t\t...newAttributes.style?.spacing,\n\t\t\t\t[ attribute ]: undefined,\n\t\t\t},\n\t\t},\n\t} );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls __experimentalGroup=\"dimensions\">\n\t\t\t\t{ ! isPaddingDisabled && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\thasValue={ () => hasPaddingValue( props ) }\n\t\t\t\t\t\tlabel={ __( 'Padding' ) }\n\t\t\t\t\t\tonDeselect={ () => resetPadding( props ) }\n\t\t\t\t\t\tresetAllFilter={ createResetAllFilter( 'padding' ) }\n\t\t\t\t\t\tisShownByDefault={ defaultSpacingControls?.padding }\n\t\t\t\t\t\tpanelId={ props.clientId }\n\t\t\t\t\t>\n\t\t\t\t\t\t<PaddingEdit { ...props } />\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t\t{ ! isMarginDisabled && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\thasValue={ () => hasMarginValue( props ) }\n\t\t\t\t\t\tlabel={ __( 'Margin' ) }\n\t\t\t\t\t\tonDeselect={ () => resetMargin( props ) }\n\t\t\t\t\t\tresetAllFilter={ createResetAllFilter( 'margin' ) }\n\t\t\t\t\t\tisShownByDefault={ defaultSpacingControls?.margin }\n\t\t\t\t\t\tpanelId={ props.clientId }\n\t\t\t\t\t>\n\t\t\t\t\t\t<MarginEdit { ...props } />\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t\t{ ! isGapDisabled && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\thasValue={ () => hasGapValue( props ) }\n\t\t\t\t\t\tlabel={ __( 'Block spacing' ) }\n\t\t\t\t\t\tonDeselect={ () => resetGap( props ) }\n\t\t\t\t\t\tresetAllFilter={ createResetAllFilter( 'blockGap' ) }\n\t\t\t\t\t\tisShownByDefault={ defaultSpacingControls?.blockGap }\n\t\t\t\t\t\tpanelId={ props.clientId }\n\t\t\t\t\t>\n\t\t\t\t\t\t<GapEdit { ...props } />\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t</InspectorControls>\n\t\t\t{ ! isPaddingDisabled && <PaddingVisualizer { ...props } /> }\n\t\t\t{ ! isMarginDisabled && <MarginVisualizer { ...props } /> }\n\t\t</>\n\t);\n}\n\n/**\n * Determine whether there is dimensions related block support.\n *\n * @param {string} blockName Block name.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasDimensionsSupport( blockName ) {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\treturn (\n\t\thasGapSupport( blockName ) ||\n\t\thasPaddingSupport( blockName ) ||\n\t\thasMarginSupport( blockName )\n\t);\n}\n\n/**\n * Determines whether dimensions support has been disabled.\n *\n * @param {Object} props Block properties.\n *\n * @return {boolean} If spacing support is completely disabled.\n */\nconst useIsDimensionsDisabled = ( props = {} ) => {\n\tconst gapDisabled = useIsGapDisabled( props );\n\tconst paddingDisabled = useIsPaddingDisabled( props );\n\tconst marginDisabled = useIsMarginDisabled( props );\n\n\treturn gapDisabled && paddingDisabled && marginDisabled;\n};\n\n/**\n * Custom hook to retrieve which padding/margin/blockGap is supported\n * e.g. top, right, bottom or left.\n *\n * Sides are opted into by default. It is only if a specific side is set to\n * false that it is omitted.\n *\n * @param {string} blockName Block name.\n * @param {string} feature The feature custom sides relate to e.g. padding or margins.\n *\n * @return {?string[]} Strings representing the custom sides available.\n */\nexport function useCustomSides( blockName, feature ) {\n\tconst support = getBlockSupport( blockName, SPACING_SUPPORT_KEY );\n\n\t// Skip when setting is boolean as theme isn't setting arbitrary sides.\n\tif ( ! support || typeof support[ feature ] === 'boolean' ) {\n\t\treturn;\n\t}\n\n\t// Return if the setting is an array of sides (e.g. `[ 'top', 'bottom' ]`).\n\tif ( Array.isArray( support[ feature ] ) ) {\n\t\treturn support[ feature ];\n\t}\n\n\t// Finally, attempt to return `.sides` if the setting is an object.\n\tif ( support[ feature ]?.sides ) {\n\t\treturn support[ feature ].sides;\n\t}\n}\n\n/**\n * Custom hook to determine whether the sides configured in the\n * block support are valid. A dimension property cannot declare\n * support for a mix of axial and individual sides.\n *\n * @param {string} blockName Block name.\n * @param {string} feature The feature custom sides relate to e.g. padding or margins.\n *\n * @return {boolean} If the feature has a valid configuration of sides.\n */\nexport function useIsDimensionsSupportValid( blockName, feature ) {\n\tconst sides = useCustomSides( blockName, feature );\n\n\tif (\n\t\tsides &&\n\t\tsides.some( ( side ) => ALL_SIDES.includes( side ) ) &&\n\t\tsides.some( ( side ) => AXIAL_SIDES.includes( side ) )\n\t) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(\n\t\t\t`The ${ feature } support for the \"${ blockName }\" block can not be configured to support both axial and arbitrary sides.`\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/hooks/dimensions.js"],"names":["classnames","__experimentalToolsPanelItem","ToolsPanelItem","Platform","__","getBlockSupport","InspectorControls","GapEdit","hasGapSupport","hasGapValue","resetGap","useIsGapDisabled","MarginEdit","MarginVisualizer","hasMarginSupport","hasMarginValue","resetMargin","useIsMarginDisabled","PaddingEdit","PaddingVisualizer","hasPaddingSupport","hasPaddingValue","resetPadding","useIsPaddingDisabled","useSetting","SPACING_SUPPORT_KEY","ALL_SIDES","AXIAL_SIDES","DimensionsPanel","props","isGapDisabled","isPaddingDisabled","isMarginDisabled","isDisabled","useIsDimensionsDisabled","isSupported","hasDimensionsSupport","name","spacingSizes","defaultSpacingControls","createResetAllFilter","attribute","newAttributes","style","spacing","undefined","length","padding","clientId","margin","blockGap","blockName","OS","gapDisabled","paddingDisabled","marginDisabled","useCustomSides","feature","support","Array","isArray","sides","useIsDimensionsSupportValid","some","side","includes","console","warn"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { __experimentalToolsPanelItem as ToolsPanelItem } from '@wordpress/components';\nimport { Platform } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { getBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tGapEdit,\n\thasGapSupport,\n\thasGapValue,\n\tresetGap,\n\tuseIsGapDisabled,\n} from './gap';\nimport {\n\tMarginEdit,\n\tMarginVisualizer,\n\thasMarginSupport,\n\thasMarginValue,\n\tresetMargin,\n\tuseIsMarginDisabled,\n} from './margin';\nimport {\n\tPaddingEdit,\n\tPaddingVisualizer,\n\thasPaddingSupport,\n\thasPaddingValue,\n\tresetPadding,\n\tuseIsPaddingDisabled,\n} from './padding';\nimport useSetting from '../components/use-setting';\n\nexport const SPACING_SUPPORT_KEY = 'spacing';\nexport const ALL_SIDES = [ 'top', 'right', 'bottom', 'left' ];\nexport const AXIAL_SIDES = [ 'vertical', 'horizontal' ];\n\n/**\n * Inspector controls for dimensions support.\n *\n * @param {Object} props Block props.\n *\n * @return {WPElement} Inspector controls for spacing support features.\n */\nexport function DimensionsPanel( props ) {\n\tconst isGapDisabled = useIsGapDisabled( props );\n\tconst isPaddingDisabled = useIsPaddingDisabled( props );\n\tconst isMarginDisabled = useIsMarginDisabled( props );\n\tconst isDisabled = useIsDimensionsDisabled( props );\n\tconst isSupported = hasDimensionsSupport( props.name );\n\tconst spacingSizes = useSetting( 'spacing.spacingSizes' );\n\n\tif ( isDisabled || ! isSupported ) {\n\t\treturn null;\n\t}\n\n\tconst defaultSpacingControls = getBlockSupport( props.name, [\n\t\tSPACING_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\tconst createResetAllFilter = ( attribute ) => ( newAttributes ) => ( {\n\t\t...newAttributes,\n\t\tstyle: {\n\t\t\t...newAttributes.style,\n\t\t\tspacing: {\n\t\t\t\t...newAttributes.style?.spacing,\n\t\t\t\t[ attribute ]: undefined,\n\t\t\t},\n\t\t},\n\t} );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls __experimentalGroup=\"dimensions\">\n\t\t\t\t{ ! isPaddingDisabled && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tclassName={ classnames( {\n\t\t\t\t\t\t\t'tools-panel-item-spacing':\n\t\t\t\t\t\t\t\tspacingSizes && spacingSizes.length > 0,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t\thasValue={ () => hasPaddingValue( props ) }\n\t\t\t\t\t\tlabel={ __( 'Padding' ) }\n\t\t\t\t\t\tonDeselect={ () => resetPadding( props ) }\n\t\t\t\t\t\tresetAllFilter={ createResetAllFilter( 'padding' ) }\n\t\t\t\t\t\tisShownByDefault={ defaultSpacingControls?.padding }\n\t\t\t\t\t\tpanelId={ props.clientId }\n\t\t\t\t\t>\n\t\t\t\t\t\t<PaddingEdit { ...props } />\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t\t{ ! isMarginDisabled && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tclassName={ classnames( {\n\t\t\t\t\t\t\t'tools-panel-item-spacing':\n\t\t\t\t\t\t\t\tspacingSizes && spacingSizes.length > 0,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t\thasValue={ () => hasMarginValue( props ) }\n\t\t\t\t\t\tlabel={ __( 'Margin' ) }\n\t\t\t\t\t\tonDeselect={ () => resetMargin( props ) }\n\t\t\t\t\t\tresetAllFilter={ createResetAllFilter( 'margin' ) }\n\t\t\t\t\t\tisShownByDefault={ defaultSpacingControls?.margin }\n\t\t\t\t\t\tpanelId={ props.clientId }\n\t\t\t\t\t>\n\t\t\t\t\t\t<MarginEdit { ...props } />\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t\t{ ! isGapDisabled && (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\thasValue={ () => hasGapValue( props ) }\n\t\t\t\t\t\tlabel={ __( 'Block spacing' ) }\n\t\t\t\t\t\tonDeselect={ () => resetGap( props ) }\n\t\t\t\t\t\tresetAllFilter={ createResetAllFilter( 'blockGap' ) }\n\t\t\t\t\t\tisShownByDefault={ defaultSpacingControls?.blockGap }\n\t\t\t\t\t\tpanelId={ props.clientId }\n\t\t\t\t\t>\n\t\t\t\t\t\t<GapEdit { ...props } />\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t</InspectorControls>\n\t\t\t{ ! isPaddingDisabled && <PaddingVisualizer { ...props } /> }\n\t\t\t{ ! isMarginDisabled && <MarginVisualizer { ...props } /> }\n\t\t</>\n\t);\n}\n\n/**\n * Determine whether there is dimensions related block support.\n *\n * @param {string} blockName Block name.\n *\n * @return {boolean} Whether there is support.\n */\nexport function hasDimensionsSupport( blockName ) {\n\tif ( Platform.OS !== 'web' ) {\n\t\treturn false;\n\t}\n\n\treturn (\n\t\thasGapSupport( blockName ) ||\n\t\thasPaddingSupport( blockName ) ||\n\t\thasMarginSupport( blockName )\n\t);\n}\n\n/**\n * Determines whether dimensions support has been disabled.\n *\n * @param {Object} props Block properties.\n *\n * @return {boolean} If spacing support is completely disabled.\n */\nconst useIsDimensionsDisabled = ( props = {} ) => {\n\tconst gapDisabled = useIsGapDisabled( props );\n\tconst paddingDisabled = useIsPaddingDisabled( props );\n\tconst marginDisabled = useIsMarginDisabled( props );\n\n\treturn gapDisabled && paddingDisabled && marginDisabled;\n};\n\n/**\n * Custom hook to retrieve which padding/margin/blockGap is supported\n * e.g. top, right, bottom or left.\n *\n * Sides are opted into by default. It is only if a specific side is set to\n * false that it is omitted.\n *\n * @param {string} blockName Block name.\n * @param {string} feature The feature custom sides relate to e.g. padding or margins.\n *\n * @return {?string[]} Strings representing the custom sides available.\n */\nexport function useCustomSides( blockName, feature ) {\n\tconst support = getBlockSupport( blockName, SPACING_SUPPORT_KEY );\n\n\t// Skip when setting is boolean as theme isn't setting arbitrary sides.\n\tif ( ! support || typeof support[ feature ] === 'boolean' ) {\n\t\treturn;\n\t}\n\n\t// Return if the setting is an array of sides (e.g. `[ 'top', 'bottom' ]`).\n\tif ( Array.isArray( support[ feature ] ) ) {\n\t\treturn support[ feature ];\n\t}\n\n\t// Finally, attempt to return `.sides` if the setting is an object.\n\tif ( support[ feature ]?.sides ) {\n\t\treturn support[ feature ].sides;\n\t}\n}\n\n/**\n * Custom hook to determine whether the sides configured in the\n * block support are valid. A dimension property cannot declare\n * support for a mix of axial and individual sides.\n *\n * @param {string} blockName Block name.\n * @param {string} feature The feature custom sides relate to e.g. padding or margins.\n *\n * @return {boolean} If the feature has a valid configuration of sides.\n */\nexport function useIsDimensionsSupportValid( blockName, feature ) {\n\tconst sides = useCustomSides( blockName, feature );\n\n\tif (\n\t\tsides &&\n\t\tsides.some( ( side ) => ALL_SIDES.includes( side ) ) &&\n\t\tsides.some( ( side ) => AXIAL_SIDES.includes( side ) )\n\t) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(\n\t\t\t`The ${ feature } support for the \"${ blockName }\" block can not be configured to support both axial and arbitrary sides.`\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n"]}
@@ -27,10 +27,10 @@ extend([namesPlugin]);
27
27
  /**
28
28
  * SVG and stylesheet needed for rendering the duotone filter.
29
29
  *
30
- * @param {Object} props Duotone props.
31
- * @param {string} props.selector Selector to apply the filter to.
32
- * @param {string} props.id Unique id for this duotone filter.
33
- * @param {string[]|"unset"} props.colors Array of RGB color strings ordered from dark to light.
30
+ * @param {Object} props Duotone props.
31
+ * @param {string} props.selector Selector to apply the filter to.
32
+ * @param {string} props.id Unique id for this duotone filter.
33
+ * @param {string[]|"unset"} props.colors Array of RGB color strings ordered from dark to light.
34
34
  *
35
35
  * @return {WPElement} Duotone element.
36
36
  */
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/hooks/duotone.js"],"names":["classnames","extend","namesPlugin","getBlockSupport","hasBlockSupport","createHigherOrderComponent","useInstanceId","addFilter","useMemo","useContext","createPortal","BlockControls","__experimentalDuotoneControl","DuotoneControl","useSetting","BlockList","__unstableDuotoneFilter","DuotoneFilter","__unstableDuotoneStylesheet","DuotoneStylesheet","__unstableDuotoneUnsetStylesheet","DuotoneUnsetStylesheet","EMPTY_ARRAY","InlineDuotone","selector","id","colors","useMultiOriginPresets","presetSetting","defaultSetting","disableDefault","userPresets","themePresets","defaultPresets","DuotonePanel","attributes","setAttributes","style","duotone","color","duotonePalette","colorPalette","disableCustomColors","disableCustomDuotone","length","newDuotone","newStyle","addDuotoneAttributes","settings","Object","assign","type","withDuotoneControls","BlockEdit","props","hasDuotoneSupport","name","scopeSelector","scope","scopes","split","selectors","selectorsScoped","forEach","outer","inner","push","trim","join","withDuotoneStyles","BlockListBlock","duotoneSupport","selectorsGroup","className","element","__unstableElementContext"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { extend } from 'colord';\nimport namesPlugin from 'colord/plugins/names';\n\n/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { useMemo, useContext, createPortal } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBlockControls,\n\t__experimentalDuotoneControl as DuotoneControl,\n\tuseSetting,\n} from '../components';\nimport BlockList from '../components/block-list';\nimport {\n\t__unstableDuotoneFilter as DuotoneFilter,\n\t__unstableDuotoneStylesheet as DuotoneStylesheet,\n\t__unstableDuotoneUnsetStylesheet as DuotoneUnsetStylesheet,\n} from '../components/duotone';\n\nconst EMPTY_ARRAY = [];\n\nextend( [ namesPlugin ] );\n\n/**\n * SVG and stylesheet needed for rendering the duotone filter.\n *\n * @param {Object} props Duotone props.\n * @param {string} props.selector Selector to apply the filter to.\n * @param {string} props.id Unique id for this duotone filter.\n * @param {string[]|\"unset\"} props.colors Array of RGB color strings ordered from dark to light.\n *\n * @return {WPElement} Duotone element.\n */\nfunction InlineDuotone( { selector, id, colors } ) {\n\tif ( colors === 'unset' ) {\n\t\treturn <DuotoneUnsetStylesheet selector={ selector } />;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<DuotoneFilter id={ id } colors={ colors } />\n\t\t\t<DuotoneStylesheet id={ id } selector={ selector } />\n\t\t</>\n\t);\n}\n\nfunction useMultiOriginPresets( { presetSetting, defaultSetting } ) {\n\tconst disableDefault = ! useSetting( defaultSetting );\n\tconst userPresets =\n\t\tuseSetting( `${ presetSetting }.custom` ) || EMPTY_ARRAY;\n\tconst themePresets =\n\t\tuseSetting( `${ presetSetting }.theme` ) || EMPTY_ARRAY;\n\tconst defaultPresets =\n\t\tuseSetting( `${ presetSetting }.default` ) || EMPTY_ARRAY;\n\treturn useMemo(\n\t\t() => [\n\t\t\t...userPresets,\n\t\t\t...themePresets,\n\t\t\t...( disableDefault ? EMPTY_ARRAY : defaultPresets ),\n\t\t],\n\t\t[ disableDefault, userPresets, themePresets, defaultPresets ]\n\t);\n}\n\nfunction DuotonePanel( { attributes, setAttributes } ) {\n\tconst style = attributes?.style;\n\tconst duotone = style?.color?.duotone;\n\n\tconst duotonePalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.duotone',\n\t\tdefaultSetting: 'color.defaultDuotone',\n\t} );\n\tconst colorPalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.palette',\n\t\tdefaultSetting: 'color.defaultPalette',\n\t} );\n\tconst disableCustomColors = ! useSetting( 'color.custom' );\n\tconst disableCustomDuotone =\n\t\t! useSetting( 'color.customDuotone' ) ||\n\t\t( colorPalette?.length === 0 && disableCustomColors );\n\n\tif ( duotonePalette?.length === 0 && disableCustomDuotone ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<BlockControls group=\"block\" __experimentalShareWithChildBlocks>\n\t\t\t<DuotoneControl\n\t\t\t\tduotonePalette={ duotonePalette }\n\t\t\t\tcolorPalette={ colorPalette }\n\t\t\t\tdisableCustomDuotone={ disableCustomDuotone }\n\t\t\t\tdisableCustomColors={ disableCustomColors }\n\t\t\t\tvalue={ duotone }\n\t\t\t\tonChange={ ( newDuotone ) => {\n\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t...style,\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t...style?.color,\n\t\t\t\t\t\t\tduotone: newDuotone,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tsetAttributes( { style: newStyle } );\n\t\t\t\t} }\n\t\t\t/>\n\t\t</BlockControls>\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `duotone` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addDuotoneAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, 'color.__experimentalDuotone' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default\n\t// values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override the default edit UI to include toolbar controls for duotone if the\n * block supports duotone.\n *\n * @param {Function} BlockEdit Original component.\n *\n * @return {Function} Wrapped component.\n */\nconst withDuotoneControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst hasDuotoneSupport = hasBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BlockEdit { ...props } />\n\t\t\t\t{ hasDuotoneSupport && <DuotonePanel { ...props } /> }\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneControls'\n);\n\n/**\n * Function that scopes a selector with another one. This works a bit like\n * SCSS nesting except the `&` operator isn't supported.\n *\n * @example\n * ```js\n * const scope = '.a, .b .c';\n * const selector = '> .x, .y';\n * const merged = scopeSelector( scope, selector );\n * // merged is '.a > .x, .a .y, .b .c > .x, .b .c .y'\n * ```\n *\n * @param {string} scope Selector to scope to.\n * @param {string} selector Original selector.\n *\n * @return {string} Scoped selector.\n */\nfunction scopeSelector( scope, selector ) {\n\tconst scopes = scope.split( ',' );\n\tconst selectors = selector.split( ',' );\n\n\tconst selectorsScoped = [];\n\tscopes.forEach( ( outer ) => {\n\t\tselectors.forEach( ( inner ) => {\n\t\t\tselectorsScoped.push( `${ outer.trim() } ${ inner.trim() }` );\n\t\t} );\n\t} );\n\n\treturn selectorsScoped.join( ', ' );\n}\n\n/**\n * Override the default block element to include duotone styles.\n *\n * @param {Function} BlockListBlock Original component.\n *\n * @return {Function} Wrapped component.\n */\nconst withDuotoneStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst duotoneSupport = getBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\t\tconst colors = props?.attributes?.style?.color?.duotone;\n\n\t\tif ( ! duotoneSupport || ! colors ) {\n\t\t\treturn <BlockListBlock { ...props } />;\n\t\t}\n\n\t\tconst id = `wp-duotone-${ useInstanceId( BlockListBlock ) }`;\n\n\t\t// Extra .editor-styles-wrapper specificity is needed in the editor\n\t\t// since we're not using inline styles to apply the filter. We need to\n\t\t// override duotone applied by global styles and theme.json.\n\t\tconst selectorsGroup = scopeSelector(\n\t\t\t`.editor-styles-wrapper .${ id }`,\n\t\t\tduotoneSupport\n\t\t);\n\n\t\tconst className = classnames( props?.className, id );\n\n\t\tconst element = useContext( BlockList.__unstableElementContext );\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ element &&\n\t\t\t\t\tcreatePortal(\n\t\t\t\t\t\t<InlineDuotone\n\t\t\t\t\t\t\tselector={ selectorsGroup }\n\t\t\t\t\t\t\tid={ id }\n\t\t\t\t\t\t\tcolors={ colors }\n\t\t\t\t\t\t/>,\n\t\t\t\t\t\telement\n\t\t\t\t\t) }\n\t\t\t\t<BlockListBlock { ...props } className={ className } />\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneStyles'\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/duotone/add-attributes',\n\taddDuotoneAttributes\n);\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/duotone/with-editor-controls',\n\twithDuotoneControls\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/duotone/with-styles',\n\twithDuotoneStyles\n);\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/hooks/duotone.js"],"names":["classnames","extend","namesPlugin","getBlockSupport","hasBlockSupport","createHigherOrderComponent","useInstanceId","addFilter","useMemo","useContext","createPortal","BlockControls","__experimentalDuotoneControl","DuotoneControl","useSetting","BlockList","__unstableDuotoneFilter","DuotoneFilter","__unstableDuotoneStylesheet","DuotoneStylesheet","__unstableDuotoneUnsetStylesheet","DuotoneUnsetStylesheet","EMPTY_ARRAY","InlineDuotone","selector","id","colors","useMultiOriginPresets","presetSetting","defaultSetting","disableDefault","userPresets","themePresets","defaultPresets","DuotonePanel","attributes","setAttributes","style","duotone","color","duotonePalette","colorPalette","disableCustomColors","disableCustomDuotone","length","newDuotone","newStyle","addDuotoneAttributes","settings","Object","assign","type","withDuotoneControls","BlockEdit","props","hasDuotoneSupport","name","scopeSelector","scope","scopes","split","selectors","selectorsScoped","forEach","outer","inner","push","trim","join","withDuotoneStyles","BlockListBlock","duotoneSupport","selectorsGroup","className","element","__unstableElementContext"],"mappings":";;;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AACA,SAASC,MAAT,QAAuB,QAAvB;AACA,OAAOC,WAAP,MAAwB,sBAAxB;AAEA;AACA;AACA;;AACA,SAASC,eAAT,EAA0BC,eAA1B,QAAiD,mBAAjD;AACA,SAASC,0BAAT,EAAqCC,aAArC,QAA0D,oBAA1D;AACA,SAASC,SAAT,QAA0B,kBAA1B;AACA,SAASC,OAAT,EAAkBC,UAAlB,EAA8BC,YAA9B,QAAkD,oBAAlD;AAEA;AACA;AACA;;AACA,SACCC,aADD,EAECC,4BAA4B,IAAIC,cAFjC,EAGCC,UAHD,QAIO,eAJP;AAKA,OAAOC,SAAP,MAAsB,0BAAtB;AACA,SACCC,uBAAuB,IAAIC,aAD5B,EAECC,2BAA2B,IAAIC,iBAFhC,EAGCC,gCAAgC,IAAIC,sBAHrC,QAIO,uBAJP;AAMA,MAAMC,WAAW,GAAG,EAApB;AAEArB,MAAM,CAAE,CAAEC,WAAF,CAAF,CAAN;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASqB,aAAT,OAAmD;AAAA,MAA3B;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,EAAZ;AAAgBC,IAAAA;AAAhB,GAA2B;;AAClD,MAAKA,MAAM,KAAK,OAAhB,EAA0B;AACzB,WAAO,cAAC,sBAAD;AAAwB,MAAA,QAAQ,EAAGF;AAAnC,MAAP;AACA;;AAED,SACC,8BACC,cAAC,aAAD;AAAe,IAAA,EAAE,EAAGC,EAApB;AAAyB,IAAA,MAAM,EAAGC;AAAlC,IADD,EAEC,cAAC,iBAAD;AAAmB,IAAA,EAAE,EAAGD,EAAxB;AAA6B,IAAA,QAAQ,EAAGD;AAAxC,IAFD,CADD;AAMA;;AAED,SAASG,qBAAT,QAAoE;AAAA,MAApC;AAAEC,IAAAA,aAAF;AAAiBC,IAAAA;AAAjB,GAAoC;AACnE,QAAMC,cAAc,GAAG,CAAEhB,UAAU,CAAEe,cAAF,CAAnC;AACA,QAAME,WAAW,GAChBjB,UAAU,CAAG,GAAGc,aAAe,SAArB,CAAV,IAA6CN,WAD9C;AAEA,QAAMU,YAAY,GACjBlB,UAAU,CAAG,GAAGc,aAAe,QAArB,CAAV,IAA4CN,WAD7C;AAEA,QAAMW,cAAc,GACnBnB,UAAU,CAAG,GAAGc,aAAe,UAArB,CAAV,IAA8CN,WAD/C;AAEA,SAAOd,OAAO,CACb,MAAM,CACL,GAAGuB,WADE,EAEL,GAAGC,YAFE,EAGL,IAAKF,cAAc,GAAGR,WAAH,GAAiBW,cAApC,CAHK,CADO,EAMb,CAAEH,cAAF,EAAkBC,WAAlB,EAA+BC,YAA/B,EAA6CC,cAA7C,CANa,CAAd;AAQA;;AAED,SAASC,YAAT,QAAuD;AAAA;;AAAA,MAAhC;AAAEC,IAAAA,UAAF;AAAcC,IAAAA;AAAd,GAAgC;AACtD,QAAMC,KAAK,GAAGF,UAAH,aAAGA,UAAH,uBAAGA,UAAU,CAAEE,KAA1B;AACA,QAAMC,OAAO,GAAGD,KAAH,aAAGA,KAAH,uCAAGA,KAAK,CAAEE,KAAV,iDAAG,aAAcD,OAA9B;AAEA,QAAME,cAAc,GAAGb,qBAAqB,CAAE;AAC7CC,IAAAA,aAAa,EAAE,eAD8B;AAE7CC,IAAAA,cAAc,EAAE;AAF6B,GAAF,CAA5C;AAIA,QAAMY,YAAY,GAAGd,qBAAqB,CAAE;AAC3CC,IAAAA,aAAa,EAAE,eAD4B;AAE3CC,IAAAA,cAAc,EAAE;AAF2B,GAAF,CAA1C;AAIA,QAAMa,mBAAmB,GAAG,CAAE5B,UAAU,CAAE,cAAF,CAAxC;AACA,QAAM6B,oBAAoB,GACzB,CAAE7B,UAAU,CAAE,qBAAF,CAAZ,IACE,CAAA2B,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEG,MAAd,MAAyB,CAAzB,IAA8BF,mBAFjC;;AAIA,MAAK,CAAAF,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAEI,MAAhB,MAA2B,CAA3B,IAAgCD,oBAArC,EAA4D;AAC3D,WAAO,IAAP;AACA;;AAED,SACC,cAAC,aAAD;AAAe,IAAA,KAAK,EAAC,OAArB;AAA6B,IAAA,kCAAkC;AAA/D,KACC,cAAC,cAAD;AACC,IAAA,cAAc,EAAGH,cADlB;AAEC,IAAA,YAAY,EAAGC,YAFhB;AAGC,IAAA,oBAAoB,EAAGE,oBAHxB;AAIC,IAAA,mBAAmB,EAAGD,mBAJvB;AAKC,IAAA,KAAK,EAAGJ,OALT;AAMC,IAAA,QAAQ,EAAKO,UAAF,IAAkB;AAC5B,YAAMC,QAAQ,GAAG,EAChB,GAAGT,KADa;AAEhBE,QAAAA,KAAK,EAAE,EACN,IAAGF,KAAH,aAAGA,KAAH,uBAAGA,KAAK,CAAEE,KAAV,CADM;AAEND,UAAAA,OAAO,EAAEO;AAFH;AAFS,OAAjB;AAOAT,MAAAA,aAAa,CAAE;AAAEC,QAAAA,KAAK,EAAES;AAAT,OAAF,CAAb;AACA;AAfF,IADD,CADD;AAqBA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASC,oBAAT,CAA+BC,QAA/B,EAA0C;AACzC,MAAK,CAAE5C,eAAe,CAAE4C,QAAF,EAAY,6BAAZ,CAAtB,EAAoE;AACnE,WAAOA,QAAP;AACA,GAHwC,CAKzC;AACA;;;AACA,MAAK,CAAEA,QAAQ,CAACb,UAAT,CAAoBE,KAA3B,EAAmC;AAClCY,IAAAA,MAAM,CAACC,MAAP,CAAeF,QAAQ,CAACb,UAAxB,EAAoC;AACnCE,MAAAA,KAAK,EAAE;AACNc,QAAAA,IAAI,EAAE;AADA;AAD4B,KAApC;AAKA;;AAED,SAAOH,QAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMI,mBAAmB,GAAG/C,0BAA0B,CACnDgD,SAAF,IAAmBC,KAAF,IAAa;AAC7B,QAAMC,iBAAiB,GAAGnD,eAAe,CACxCkD,KAAK,CAACE,IADkC,EAExC,6BAFwC,CAAzC;AAKA,SACC,8BACC,cAAC,SAAD,EAAgBF,KAAhB,CADD,EAEGC,iBAAiB,IAAI,cAAC,YAAD,EAAmBD,KAAnB,CAFxB,CADD;AAMA,CAboD,EAcrD,qBAdqD,CAAtD;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASG,aAAT,CAAwBC,KAAxB,EAA+BlC,QAA/B,EAA0C;AACzC,QAAMmC,MAAM,GAAGD,KAAK,CAACE,KAAN,CAAa,GAAb,CAAf;AACA,QAAMC,SAAS,GAAGrC,QAAQ,CAACoC,KAAT,CAAgB,GAAhB,CAAlB;AAEA,QAAME,eAAe,GAAG,EAAxB;AACAH,EAAAA,MAAM,CAACI,OAAP,CAAkBC,KAAF,IAAa;AAC5BH,IAAAA,SAAS,CAACE,OAAV,CAAqBE,KAAF,IAAa;AAC/BH,MAAAA,eAAe,CAACI,IAAhB,CAAuB,GAAGF,KAAK,CAACG,IAAN,EAAc,IAAIF,KAAK,CAACE,IAAN,EAAc,EAA1D;AACA,KAFD;AAGA,GAJD;AAMA,SAAOL,eAAe,CAACM,IAAhB,CAAsB,IAAtB,CAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMC,iBAAiB,GAAGhE,0BAA0B,CACjDiE,cAAF,IAAwBhB,KAAF,IAAa;AAAA;;AAClC,QAAMiB,cAAc,GAAGpE,eAAe,CACrCmD,KAAK,CAACE,IAD+B,EAErC,6BAFqC,CAAtC;AAIA,QAAM9B,MAAM,GAAG4B,KAAH,aAAGA,KAAH,4CAAGA,KAAK,CAAEnB,UAAV,+EAAG,kBAAmBE,KAAtB,oFAAG,sBAA0BE,KAA7B,2DAAG,uBAAiCD,OAAhD;;AAEA,MAAK,CAAEiC,cAAF,IAAoB,CAAE7C,MAA3B,EAAoC;AACnC,WAAO,cAAC,cAAD,EAAqB4B,KAArB,CAAP;AACA;;AAED,QAAM7B,EAAE,GAAI,cAAcnB,aAAa,CAAEgE,cAAF,CAAoB,EAA3D,CAXkC,CAalC;AACA;AACA;;AACA,QAAME,cAAc,GAAGf,aAAa,CAClC,2BAA2BhC,EAAI,EADG,EAEnC8C,cAFmC,CAApC;AAKA,QAAME,SAAS,GAAGzE,UAAU,CAAEsD,KAAF,aAAEA,KAAF,uBAAEA,KAAK,CAAEmB,SAAT,EAAoBhD,EAApB,CAA5B;AAEA,QAAMiD,OAAO,GAAGjE,UAAU,CAAEM,SAAS,CAAC4D,wBAAZ,CAA1B;AAEA,SACC,8BACGD,OAAO,IACRhE,YAAY,CACX,cAAC,aAAD;AACC,IAAA,QAAQ,EAAG8D,cADZ;AAEC,IAAA,EAAE,EAAG/C,EAFN;AAGC,IAAA,MAAM,EAAGC;AAHV,IADW,EAMXgD,OANW,CAFd,EAUC,cAAC,cAAD,eAAqBpB,KAArB;AAA6B,IAAA,SAAS,EAAGmB;AAAzC,KAVD,CADD;AAcA,CAxCkD,EAyCnD,mBAzCmD,CAApD;AA4CAlE,SAAS,CACR,0BADQ,EAER,oCAFQ,EAGRwC,oBAHQ,CAAT;AAKAxC,SAAS,CACR,kBADQ,EAER,0CAFQ,EAGR6C,mBAHQ,CAAT;AAKA7C,SAAS,CACR,uBADQ,EAER,iCAFQ,EAGR8D,iBAHQ,CAAT","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { extend } from 'colord';\nimport namesPlugin from 'colord/plugins/names';\n\n/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { useMemo, useContext, createPortal } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBlockControls,\n\t__experimentalDuotoneControl as DuotoneControl,\n\tuseSetting,\n} from '../components';\nimport BlockList from '../components/block-list';\nimport {\n\t__unstableDuotoneFilter as DuotoneFilter,\n\t__unstableDuotoneStylesheet as DuotoneStylesheet,\n\t__unstableDuotoneUnsetStylesheet as DuotoneUnsetStylesheet,\n} from '../components/duotone';\n\nconst EMPTY_ARRAY = [];\n\nextend( [ namesPlugin ] );\n\n/**\n * SVG and stylesheet needed for rendering the duotone filter.\n *\n * @param {Object} props Duotone props.\n * @param {string} props.selector Selector to apply the filter to.\n * @param {string} props.id Unique id for this duotone filter.\n * @param {string[]|\"unset\"} props.colors Array of RGB color strings ordered from dark to light.\n *\n * @return {WPElement} Duotone element.\n */\nfunction InlineDuotone( { selector, id, colors } ) {\n\tif ( colors === 'unset' ) {\n\t\treturn <DuotoneUnsetStylesheet selector={ selector } />;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<DuotoneFilter id={ id } colors={ colors } />\n\t\t\t<DuotoneStylesheet id={ id } selector={ selector } />\n\t\t</>\n\t);\n}\n\nfunction useMultiOriginPresets( { presetSetting, defaultSetting } ) {\n\tconst disableDefault = ! useSetting( defaultSetting );\n\tconst userPresets =\n\t\tuseSetting( `${ presetSetting }.custom` ) || EMPTY_ARRAY;\n\tconst themePresets =\n\t\tuseSetting( `${ presetSetting }.theme` ) || EMPTY_ARRAY;\n\tconst defaultPresets =\n\t\tuseSetting( `${ presetSetting }.default` ) || EMPTY_ARRAY;\n\treturn useMemo(\n\t\t() => [\n\t\t\t...userPresets,\n\t\t\t...themePresets,\n\t\t\t...( disableDefault ? EMPTY_ARRAY : defaultPresets ),\n\t\t],\n\t\t[ disableDefault, userPresets, themePresets, defaultPresets ]\n\t);\n}\n\nfunction DuotonePanel( { attributes, setAttributes } ) {\n\tconst style = attributes?.style;\n\tconst duotone = style?.color?.duotone;\n\n\tconst duotonePalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.duotone',\n\t\tdefaultSetting: 'color.defaultDuotone',\n\t} );\n\tconst colorPalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.palette',\n\t\tdefaultSetting: 'color.defaultPalette',\n\t} );\n\tconst disableCustomColors = ! useSetting( 'color.custom' );\n\tconst disableCustomDuotone =\n\t\t! useSetting( 'color.customDuotone' ) ||\n\t\t( colorPalette?.length === 0 && disableCustomColors );\n\n\tif ( duotonePalette?.length === 0 && disableCustomDuotone ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<BlockControls group=\"block\" __experimentalShareWithChildBlocks>\n\t\t\t<DuotoneControl\n\t\t\t\tduotonePalette={ duotonePalette }\n\t\t\t\tcolorPalette={ colorPalette }\n\t\t\t\tdisableCustomDuotone={ disableCustomDuotone }\n\t\t\t\tdisableCustomColors={ disableCustomColors }\n\t\t\t\tvalue={ duotone }\n\t\t\t\tonChange={ ( newDuotone ) => {\n\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t...style,\n\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t...style?.color,\n\t\t\t\t\t\t\tduotone: newDuotone,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t\tsetAttributes( { style: newStyle } );\n\t\t\t\t} }\n\t\t\t/>\n\t\t</BlockControls>\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `duotone` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addDuotoneAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, 'color.__experimentalDuotone' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default\n\t// values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override the default edit UI to include toolbar controls for duotone if the\n * block supports duotone.\n *\n * @param {Function} BlockEdit Original component.\n *\n * @return {Function} Wrapped component.\n */\nconst withDuotoneControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst hasDuotoneSupport = hasBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BlockEdit { ...props } />\n\t\t\t\t{ hasDuotoneSupport && <DuotonePanel { ...props } /> }\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneControls'\n);\n\n/**\n * Function that scopes a selector with another one. This works a bit like\n * SCSS nesting except the `&` operator isn't supported.\n *\n * @example\n * ```js\n * const scope = '.a, .b .c';\n * const selector = '> .x, .y';\n * const merged = scopeSelector( scope, selector );\n * // merged is '.a > .x, .a .y, .b .c > .x, .b .c .y'\n * ```\n *\n * @param {string} scope Selector to scope to.\n * @param {string} selector Original selector.\n *\n * @return {string} Scoped selector.\n */\nfunction scopeSelector( scope, selector ) {\n\tconst scopes = scope.split( ',' );\n\tconst selectors = selector.split( ',' );\n\n\tconst selectorsScoped = [];\n\tscopes.forEach( ( outer ) => {\n\t\tselectors.forEach( ( inner ) => {\n\t\t\tselectorsScoped.push( `${ outer.trim() } ${ inner.trim() }` );\n\t\t} );\n\t} );\n\n\treturn selectorsScoped.join( ', ' );\n}\n\n/**\n * Override the default block element to include duotone styles.\n *\n * @param {Function} BlockListBlock Original component.\n *\n * @return {Function} Wrapped component.\n */\nconst withDuotoneStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst duotoneSupport = getBlockSupport(\n\t\t\tprops.name,\n\t\t\t'color.__experimentalDuotone'\n\t\t);\n\t\tconst colors = props?.attributes?.style?.color?.duotone;\n\n\t\tif ( ! duotoneSupport || ! colors ) {\n\t\t\treturn <BlockListBlock { ...props } />;\n\t\t}\n\n\t\tconst id = `wp-duotone-${ useInstanceId( BlockListBlock ) }`;\n\n\t\t// Extra .editor-styles-wrapper specificity is needed in the editor\n\t\t// since we're not using inline styles to apply the filter. We need to\n\t\t// override duotone applied by global styles and theme.json.\n\t\tconst selectorsGroup = scopeSelector(\n\t\t\t`.editor-styles-wrapper .${ id }`,\n\t\t\tduotoneSupport\n\t\t);\n\n\t\tconst className = classnames( props?.className, id );\n\n\t\tconst element = useContext( BlockList.__unstableElementContext );\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ element &&\n\t\t\t\t\tcreatePortal(\n\t\t\t\t\t\t<InlineDuotone\n\t\t\t\t\t\t\tselector={ selectorsGroup }\n\t\t\t\t\t\t\tid={ id }\n\t\t\t\t\t\t\tcolors={ colors }\n\t\t\t\t\t\t/>,\n\t\t\t\t\t\telement\n\t\t\t\t\t) }\n\t\t\t\t<BlockListBlock { ...props } className={ className } />\n\t\t\t</>\n\t\t);\n\t},\n\t'withDuotoneStyles'\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/duotone/add-attributes',\n\taddDuotoneAttributes\n);\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/duotone/with-editor-controls',\n\twithDuotoneControls\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/duotone/with-styles',\n\twithDuotoneStyles\n);\n"]}
@@ -12,6 +12,7 @@ import { __experimentalUseCustomUnits as useCustomUnits, __experimentalBoxContro
12
12
  */
13
13
 
14
14
  import { __unstableUseBlockRef as useBlockRef } from '../components/block-list/use-block-props/use-block-refs';
15
+ import { getSpacingPresetCssVar } from '../components/spacing-sizes-control/utils';
15
16
  import useSetting from '../components/use-setting';
16
17
  import { AXIAL_SIDES, SPACING_SUPPORT_KEY, useCustomSides } from './dimensions';
17
18
  import { cleanEmptyObject } from './utils';
@@ -54,8 +55,8 @@ export function getGapBoxControlValueFromStyle(blockGapValue) {
54
55
 
55
56
  const isValueString = typeof blockGapValue === 'string';
56
57
  return {
57
- top: isValueString ? blockGapValue : blockGapValue === null || blockGapValue === void 0 ? void 0 : blockGapValue.top,
58
- left: isValueString ? blockGapValue : blockGapValue === null || blockGapValue === void 0 ? void 0 : blockGapValue.left
58
+ top: isValueString ? getSpacingPresetCssVar(blockGapValue) : getSpacingPresetCssVar(blockGapValue === null || blockGapValue === void 0 ? void 0 : blockGapValue.top),
59
+ left: isValueString ? getSpacingPresetCssVar(blockGapValue) : getSpacingPresetCssVar(blockGapValue === null || blockGapValue === void 0 ? void 0 : blockGapValue.left)
59
60
  };
60
61
  }
61
62
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/hooks/gap.js"],"names":["__","Platform","getBlockSupport","__experimentalUseCustomUnits","useCustomUnits","__experimentalBoxControl","BoxControl","__experimentalUnitControl","UnitControl","__unstableUseBlockRef","useBlockRef","useSetting","AXIAL_SIDES","SPACING_SUPPORT_KEY","useCustomSides","cleanEmptyObject","hasGapSupport","blockType","support","blockGap","hasGapValue","props","attributes","style","spacing","undefined","getGapBoxControlValueFromStyle","blockGapValue","isValueString","top","left","getGapCSSValue","defaultValue","blockGapBoxControlValue","row","column","resetGap","setAttributes","useIsGapDisabled","name","blockName","isDisabled","GapEdit","clientId","units","availableUnits","sides","ref","splitOnAxis","some","side","includes","onChange","next","newStyle","isSafari","window","navigator","userAgent","current","parentNode","replaceChild","gapValue","boxControlGapValue","right","bottom","select","web","native"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Platform } from '@wordpress/element';\nimport { getBlockSupport } from '@wordpress/blocks';\nimport {\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalBoxControl as BoxControl,\n\t__experimentalUnitControl as UnitControl,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { __unstableUseBlockRef as useBlockRef } from '../components/block-list/use-block-props/use-block-refs';\nimport useSetting from '../components/use-setting';\nimport { AXIAL_SIDES, SPACING_SUPPORT_KEY, useCustomSides } from './dimensions';\nimport { cleanEmptyObject } from './utils';\n\n/**\n * Determines if there is gap support.\n *\n * @param {string|Object} blockType Block name or Block Type object.\n * @return {boolean} Whether there is support.\n */\nexport function hasGapSupport( blockType ) {\n\tconst support = getBlockSupport( blockType, SPACING_SUPPORT_KEY );\n\treturn !! ( true === support || support?.blockGap );\n}\n\n/**\n * Checks if there is a current value in the gap block support attributes.\n *\n * @param {Object} props Block props.\n * @return {boolean} Whether or not the block has a gap value set.\n */\nexport function hasGapValue( props ) {\n\treturn props.attributes.style?.spacing?.blockGap !== undefined;\n}\n\n/**\n * Returns a BoxControl object value from a given blockGap style value.\n * The string check is for backwards compatibility before Gutenberg supported\n * split gap values (row and column) and the value was a string n + unit.\n *\n * @param {string? | Object?} blockGapValue A block gap string or axial object value, e.g., '10px' or { top: '10px', left: '10px'}.\n * @return {Object|null} A value to pass to the BoxControl component.\n */\nexport function getGapBoxControlValueFromStyle( blockGapValue ) {\n\tif ( ! blockGapValue ) {\n\t\treturn null;\n\t}\n\n\tconst isValueString = typeof blockGapValue === 'string';\n\treturn {\n\t\ttop: isValueString ? blockGapValue : blockGapValue?.top,\n\t\tleft: isValueString ? blockGapValue : blockGapValue?.left,\n\t};\n}\n\n/**\n * Returns a CSS value for the `gap` property from a given blockGap style.\n *\n * @param {string? | Object?} blockGapValue A block gap string or axial object value, e.g., '10px' or { top: '10px', left: '10px'}.\n * @param {string?} defaultValue A default gap value.\n * @return {string|null} The concatenated gap value (row and column).\n */\nexport function getGapCSSValue( blockGapValue, defaultValue = '0' ) {\n\tconst blockGapBoxControlValue =\n\t\tgetGapBoxControlValueFromStyle( blockGapValue );\n\tif ( ! blockGapBoxControlValue ) {\n\t\treturn null;\n\t}\n\n\tconst row = blockGapBoxControlValue?.top || defaultValue;\n\tconst column = blockGapBoxControlValue?.left || defaultValue;\n\n\treturn row === column ? row : `${ row } ${ column }`;\n}\n\n/**\n * Resets the gap block support attribute. This can be used when disabling\n * the gap support controls for a block via a progressive discovery panel.\n *\n * @param {Object} props Block props.\n * @param {Object} props.attributes Block's attributes.\n * @param {Object} props.setAttributes Function to set block's attributes.\n */\nexport function resetGap( { attributes = {}, setAttributes } ) {\n\tconst { style } = attributes;\n\n\tsetAttributes( {\n\t\tstyle: {\n\t\t\t...style,\n\t\t\tspacing: {\n\t\t\t\t...style?.spacing,\n\t\t\t\tblockGap: undefined,\n\t\t\t},\n\t\t},\n\t} );\n}\n\n/**\n * Custom hook that checks if gap settings have been disabled.\n *\n * @param {string} name The name of the block.\n * @return {boolean} Whether the gap setting is disabled.\n */\nexport function useIsGapDisabled( { name: blockName } = {} ) {\n\tconst isDisabled = ! useSetting( 'spacing.blockGap' );\n\treturn ! hasGapSupport( blockName ) || isDisabled;\n}\n\n/**\n * Inspector control panel containing the gap related configuration\n *\n * @param {Object} props\n *\n * @return {WPElement} Gap edit element.\n */\nexport function GapEdit( props ) {\n\tconst {\n\t\tclientId,\n\t\tattributes: { style },\n\t\tname: blockName,\n\t\tsetAttributes,\n\t} = props;\n\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: useSetting( 'spacing.units' ) || [\n\t\t\t'%',\n\t\t\t'px',\n\t\t\t'em',\n\t\t\t'rem',\n\t\t\t'vw',\n\t\t],\n\t} );\n\tconst sides = useCustomSides( blockName, 'blockGap' );\n\tconst ref = useBlockRef( clientId );\n\n\tif ( useIsGapDisabled( props ) ) {\n\t\treturn null;\n\t}\n\n\tconst splitOnAxis =\n\t\tsides && sides.some( ( side ) => AXIAL_SIDES.includes( side ) );\n\n\tconst onChange = ( next ) => {\n\t\tlet blockGap = next;\n\n\t\t// If splitOnAxis activated we need to return a BoxControl object to the BoxControl component.\n\t\tif ( !! next && splitOnAxis ) {\n\t\t\tblockGap = { ...getGapBoxControlValueFromStyle( next ) };\n\t\t}\n\n\t\tconst newStyle = {\n\t\t\t...style,\n\t\t\tspacing: {\n\t\t\t\t...style?.spacing,\n\t\t\t\tblockGap,\n\t\t\t},\n\t\t};\n\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t} );\n\n\t\t// In Safari, changing the `gap` CSS value on its own will not trigger the layout\n\t\t// to be recalculated / re-rendered. To force the updated gap to re-render, here\n\t\t// we replace the block's node with itself.\n\t\tconst isSafari =\n\t\t\twindow?.navigator.userAgent &&\n\t\t\twindow.navigator.userAgent.includes( 'Safari' ) &&\n\t\t\t! window.navigator.userAgent.includes( 'Chrome ' ) &&\n\t\t\t! window.navigator.userAgent.includes( 'Chromium ' );\n\n\t\tif ( ref.current && isSafari ) {\n\t\t\tref.current.parentNode?.replaceChild( ref.current, ref.current );\n\t\t}\n\t};\n\n\tconst gapValue = getGapBoxControlValueFromStyle( style?.spacing?.blockGap );\n\n\t// The BoxControl component expects a full complement of side values.\n\t// Gap row and column values translate to top/bottom and left/right respectively.\n\tconst boxControlGapValue = splitOnAxis\n\t\t? {\n\t\t\t\t...gapValue,\n\t\t\t\tright: gapValue?.left,\n\t\t\t\tbottom: gapValue?.top,\n\t\t }\n\t\t: gapValue?.top;\n\n\treturn Platform.select( {\n\t\tweb: (\n\t\t\t<>\n\t\t\t\t{ splitOnAxis ? (\n\t\t\t\t\t<BoxControl\n\t\t\t\t\t\tlabel={ __( 'Block spacing' ) }\n\t\t\t\t\t\tmin={ 0 }\n\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\tsides={ sides }\n\t\t\t\t\t\tvalues={ boxControlGapValue }\n\t\t\t\t\t\tallowReset={ false }\n\t\t\t\t\t\tsplitOnAxis={ splitOnAxis }\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<UnitControl\n\t\t\t\t\t\tlabel={ __( 'Block spacing' ) }\n\t\t\t\t\t\t__unstableInputWidth=\"80px\"\n\t\t\t\t\t\tmin={ 0 }\n\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\t// Default to `row` for combined values.\n\t\t\t\t\t\tvalue={ boxControlGapValue }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</>\n\t\t),\n\t\tnative: null,\n\t} );\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/hooks/gap.js"],"names":["__","Platform","getBlockSupport","__experimentalUseCustomUnits","useCustomUnits","__experimentalBoxControl","BoxControl","__experimentalUnitControl","UnitControl","__unstableUseBlockRef","useBlockRef","getSpacingPresetCssVar","useSetting","AXIAL_SIDES","SPACING_SUPPORT_KEY","useCustomSides","cleanEmptyObject","hasGapSupport","blockType","support","blockGap","hasGapValue","props","attributes","style","spacing","undefined","getGapBoxControlValueFromStyle","blockGapValue","isValueString","top","left","getGapCSSValue","defaultValue","blockGapBoxControlValue","row","column","resetGap","setAttributes","useIsGapDisabled","name","blockName","isDisabled","GapEdit","clientId","units","availableUnits","sides","ref","splitOnAxis","some","side","includes","onChange","next","newStyle","isSafari","window","navigator","userAgent","current","parentNode","replaceChild","gapValue","boxControlGapValue","right","bottom","select","web","native"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Platform } from '@wordpress/element';\nimport { getBlockSupport } from '@wordpress/blocks';\nimport {\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalBoxControl as BoxControl,\n\t__experimentalUnitControl as UnitControl,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { __unstableUseBlockRef as useBlockRef } from '../components/block-list/use-block-props/use-block-refs';\nimport { getSpacingPresetCssVar } from '../components/spacing-sizes-control/utils';\nimport useSetting from '../components/use-setting';\nimport { AXIAL_SIDES, SPACING_SUPPORT_KEY, useCustomSides } from './dimensions';\nimport { cleanEmptyObject } from './utils';\n\n/**\n * Determines if there is gap support.\n *\n * @param {string|Object} blockType Block name or Block Type object.\n * @return {boolean} Whether there is support.\n */\nexport function hasGapSupport( blockType ) {\n\tconst support = getBlockSupport( blockType, SPACING_SUPPORT_KEY );\n\treturn !! ( true === support || support?.blockGap );\n}\n\n/**\n * Checks if there is a current value in the gap block support attributes.\n *\n * @param {Object} props Block props.\n * @return {boolean} Whether or not the block has a gap value set.\n */\nexport function hasGapValue( props ) {\n\treturn props.attributes.style?.spacing?.blockGap !== undefined;\n}\n\n/**\n * Returns a BoxControl object value from a given blockGap style value.\n * The string check is for backwards compatibility before Gutenberg supported\n * split gap values (row and column) and the value was a string n + unit.\n *\n * @param {string? | Object?} blockGapValue A block gap string or axial object value, e.g., '10px' or { top: '10px', left: '10px'}.\n * @return {Object|null} A value to pass to the BoxControl component.\n */\nexport function getGapBoxControlValueFromStyle( blockGapValue ) {\n\tif ( ! blockGapValue ) {\n\t\treturn null;\n\t}\n\n\tconst isValueString = typeof blockGapValue === 'string';\n\treturn {\n\t\ttop: isValueString\n\t\t\t? getSpacingPresetCssVar( blockGapValue )\n\t\t\t: getSpacingPresetCssVar( blockGapValue?.top ),\n\t\tleft: isValueString\n\t\t\t? getSpacingPresetCssVar( blockGapValue )\n\t\t\t: getSpacingPresetCssVar( blockGapValue?.left ),\n\t};\n}\n\n/**\n * Returns a CSS value for the `gap` property from a given blockGap style.\n *\n * @param {string? | Object?} blockGapValue A block gap string or axial object value, e.g., '10px' or { top: '10px', left: '10px'}.\n * @param {string?} defaultValue A default gap value.\n * @return {string|null} The concatenated gap value (row and column).\n */\nexport function getGapCSSValue( blockGapValue, defaultValue = '0' ) {\n\tconst blockGapBoxControlValue =\n\t\tgetGapBoxControlValueFromStyle( blockGapValue );\n\tif ( ! blockGapBoxControlValue ) {\n\t\treturn null;\n\t}\n\n\tconst row = blockGapBoxControlValue?.top || defaultValue;\n\tconst column = blockGapBoxControlValue?.left || defaultValue;\n\n\treturn row === column ? row : `${ row } ${ column }`;\n}\n\n/**\n * Resets the gap block support attribute. This can be used when disabling\n * the gap support controls for a block via a progressive discovery panel.\n *\n * @param {Object} props Block props.\n * @param {Object} props.attributes Block's attributes.\n * @param {Object} props.setAttributes Function to set block's attributes.\n */\nexport function resetGap( { attributes = {}, setAttributes } ) {\n\tconst { style } = attributes;\n\n\tsetAttributes( {\n\t\tstyle: {\n\t\t\t...style,\n\t\t\tspacing: {\n\t\t\t\t...style?.spacing,\n\t\t\t\tblockGap: undefined,\n\t\t\t},\n\t\t},\n\t} );\n}\n\n/**\n * Custom hook that checks if gap settings have been disabled.\n *\n * @param {string} name The name of the block.\n * @return {boolean} Whether the gap setting is disabled.\n */\nexport function useIsGapDisabled( { name: blockName } = {} ) {\n\tconst isDisabled = ! useSetting( 'spacing.blockGap' );\n\treturn ! hasGapSupport( blockName ) || isDisabled;\n}\n\n/**\n * Inspector control panel containing the gap related configuration\n *\n * @param {Object} props\n *\n * @return {WPElement} Gap edit element.\n */\nexport function GapEdit( props ) {\n\tconst {\n\t\tclientId,\n\t\tattributes: { style },\n\t\tname: blockName,\n\t\tsetAttributes,\n\t} = props;\n\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: useSetting( 'spacing.units' ) || [\n\t\t\t'%',\n\t\t\t'px',\n\t\t\t'em',\n\t\t\t'rem',\n\t\t\t'vw',\n\t\t],\n\t} );\n\tconst sides = useCustomSides( blockName, 'blockGap' );\n\tconst ref = useBlockRef( clientId );\n\n\tif ( useIsGapDisabled( props ) ) {\n\t\treturn null;\n\t}\n\n\tconst splitOnAxis =\n\t\tsides && sides.some( ( side ) => AXIAL_SIDES.includes( side ) );\n\n\tconst onChange = ( next ) => {\n\t\tlet blockGap = next;\n\n\t\t// If splitOnAxis activated we need to return a BoxControl object to the BoxControl component.\n\t\tif ( !! next && splitOnAxis ) {\n\t\t\tblockGap = { ...getGapBoxControlValueFromStyle( next ) };\n\t\t}\n\n\t\tconst newStyle = {\n\t\t\t...style,\n\t\t\tspacing: {\n\t\t\t\t...style?.spacing,\n\t\t\t\tblockGap,\n\t\t\t},\n\t\t};\n\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t} );\n\n\t\t// In Safari, changing the `gap` CSS value on its own will not trigger the layout\n\t\t// to be recalculated / re-rendered. To force the updated gap to re-render, here\n\t\t// we replace the block's node with itself.\n\t\tconst isSafari =\n\t\t\twindow?.navigator.userAgent &&\n\t\t\twindow.navigator.userAgent.includes( 'Safari' ) &&\n\t\t\t! window.navigator.userAgent.includes( 'Chrome ' ) &&\n\t\t\t! window.navigator.userAgent.includes( 'Chromium ' );\n\n\t\tif ( ref.current && isSafari ) {\n\t\t\tref.current.parentNode?.replaceChild( ref.current, ref.current );\n\t\t}\n\t};\n\n\tconst gapValue = getGapBoxControlValueFromStyle( style?.spacing?.blockGap );\n\n\t// The BoxControl component expects a full complement of side values.\n\t// Gap row and column values translate to top/bottom and left/right respectively.\n\tconst boxControlGapValue = splitOnAxis\n\t\t? {\n\t\t\t\t...gapValue,\n\t\t\t\tright: gapValue?.left,\n\t\t\t\tbottom: gapValue?.top,\n\t\t }\n\t\t: gapValue?.top;\n\n\treturn Platform.select( {\n\t\tweb: (\n\t\t\t<>\n\t\t\t\t{ splitOnAxis ? (\n\t\t\t\t\t<BoxControl\n\t\t\t\t\t\tlabel={ __( 'Block spacing' ) }\n\t\t\t\t\t\tmin={ 0 }\n\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\tsides={ sides }\n\t\t\t\t\t\tvalues={ boxControlGapValue }\n\t\t\t\t\t\tallowReset={ false }\n\t\t\t\t\t\tsplitOnAxis={ splitOnAxis }\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<UnitControl\n\t\t\t\t\t\tlabel={ __( 'Block spacing' ) }\n\t\t\t\t\t\t__unstableInputWidth=\"80px\"\n\t\t\t\t\t\tmin={ 0 }\n\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\t// Default to `row` for combined values.\n\t\t\t\t\t\tvalue={ boxControlGapValue }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</>\n\t\t),\n\t\tnative: null,\n\t} );\n}\n"]}
@@ -1,11 +1,6 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { uniq } from 'lodash';
5
1
  /**
6
2
  * WordPress dependencies
7
3
  */
8
-
9
4
  import { addFilter } from '@wordpress/hooks';
10
5
  import { hasBlockSupport, getBlockDefaultClassName } from '@wordpress/blocks';
11
6
  /**
@@ -25,7 +20,7 @@ export function addGeneratedClassName(extraProps, blockType) {
25
20
  if (typeof extraProps.className === 'string') {
26
21
  // We have some extra classes and want to add the default classname
27
22
  // We use uniq to prevent duplicate classnames.
28
- extraProps.className = uniq([getBlockDefaultClassName(blockType.name), ...extraProps.className.split(' ')]).join(' ').trim();
23
+ extraProps.className = [...new Set([getBlockDefaultClassName(blockType.name), ...extraProps.className.split(' ')])].join(' ').trim();
29
24
  } else {
30
25
  // There is no string in the className variable,
31
26
  // so we just dump the default name in there.
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/hooks/generated-class-name.js"],"names":["uniq","addFilter","hasBlockSupport","getBlockDefaultClassName","addGeneratedClassName","extraProps","blockType","className","name","split","join","trim"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,IAAT,QAAqB,QAArB;AAEA;AACA;AACA;;AACA,SAASC,SAAT,QAA0B,kBAA1B;AACA,SAASC,eAAT,EAA0BC,wBAA1B,QAA0D,mBAA1D;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,qBAAT,CAAgCC,UAAhC,EAA4CC,SAA5C,EAAwD;AAC9D;AACA,MAAKJ,eAAe,CAAEI,SAAF,EAAa,WAAb,EAA0B,IAA1B,CAApB,EAAuD;AACtD,QAAK,OAAOD,UAAU,CAACE,SAAlB,KAAgC,QAArC,EAAgD;AAC/C;AACA;AAEAF,MAAAA,UAAU,CAACE,SAAX,GAAuBP,IAAI,CAAE,CAC5BG,wBAAwB,CAAEG,SAAS,CAACE,IAAZ,CADI,EAE5B,GAAGH,UAAU,CAACE,SAAX,CAAqBE,KAArB,CAA4B,GAA5B,CAFyB,CAAF,CAAJ,CAIrBC,IAJqB,CAIf,GAJe,EAKrBC,IALqB,EAAvB;AAMA,KAVD,MAUO;AACN;AACA;AACAN,MAAAA,UAAU,CAACE,SAAX,GAAuBJ,wBAAwB,CAAEG,SAAS,CAACE,IAAZ,CAA/C;AACA;AACD;;AACD,SAAOH,UAAP;AACA;AAEDJ,SAAS,CACR,kCADQ,EAER,sCAFQ,EAGRG,qBAHQ,CAAT","sourcesContent":["/**\n * External dependencies\n */\nimport { uniq } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport, getBlockDefaultClassName } from '@wordpress/blocks';\n\n/**\n * Override props assigned to save component to inject generated className if\n * block supports it. This is only applied if the block's save result is an\n * element and not a markup string.\n *\n * @param {Object} extraProps Additional props applied to save element.\n * @param {Object} blockType Block type.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addGeneratedClassName( extraProps, blockType ) {\n\t// Adding the generated className.\n\tif ( hasBlockSupport( blockType, 'className', true ) ) {\n\t\tif ( typeof extraProps.className === 'string' ) {\n\t\t\t// We have some extra classes and want to add the default classname\n\t\t\t// We use uniq to prevent duplicate classnames.\n\n\t\t\textraProps.className = uniq( [\n\t\t\t\tgetBlockDefaultClassName( blockType.name ),\n\t\t\t\t...extraProps.className.split( ' ' ),\n\t\t\t] )\n\t\t\t\t.join( ' ' )\n\t\t\t\t.trim();\n\t\t} else {\n\t\t\t// There is no string in the className variable,\n\t\t\t// so we just dump the default name in there.\n\t\t\textraProps.className = getBlockDefaultClassName( blockType.name );\n\t\t}\n\t}\n\treturn extraProps;\n}\n\naddFilter(\n\t'blocks.getSaveContent.extraProps',\n\t'core/generated-class-name/save-props',\n\taddGeneratedClassName\n);\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/hooks/generated-class-name.js"],"names":["addFilter","hasBlockSupport","getBlockDefaultClassName","addGeneratedClassName","extraProps","blockType","className","Set","name","split","join","trim"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAT,QAA0B,kBAA1B;AACA,SAASC,eAAT,EAA0BC,wBAA1B,QAA0D,mBAA1D;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,qBAAT,CAAgCC,UAAhC,EAA4CC,SAA5C,EAAwD;AAC9D;AACA,MAAKJ,eAAe,CAAEI,SAAF,EAAa,WAAb,EAA0B,IAA1B,CAApB,EAAuD;AACtD,QAAK,OAAOD,UAAU,CAACE,SAAlB,KAAgC,QAArC,EAAgD;AAC/C;AACA;AAEAF,MAAAA,UAAU,CAACE,SAAX,GAAuB,CACtB,GAAG,IAAIC,GAAJ,CAAS,CACXL,wBAAwB,CAAEG,SAAS,CAACG,IAAZ,CADb,EAEX,GAAGJ,UAAU,CAACE,SAAX,CAAqBG,KAArB,CAA4B,GAA5B,CAFQ,CAAT,CADmB,EAMrBC,IANqB,CAMf,GANe,EAOrBC,IAPqB,EAAvB;AAQA,KAZD,MAYO;AACN;AACA;AACAP,MAAAA,UAAU,CAACE,SAAX,GAAuBJ,wBAAwB,CAAEG,SAAS,CAACG,IAAZ,CAA/C;AACA;AACD;;AACD,SAAOJ,UAAP;AACA;AAEDJ,SAAS,CACR,kCADQ,EAER,sCAFQ,EAGRG,qBAHQ,CAAT","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport, getBlockDefaultClassName } from '@wordpress/blocks';\n\n/**\n * Override props assigned to save component to inject generated className if\n * block supports it. This is only applied if the block's save result is an\n * element and not a markup string.\n *\n * @param {Object} extraProps Additional props applied to save element.\n * @param {Object} blockType Block type.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addGeneratedClassName( extraProps, blockType ) {\n\t// Adding the generated className.\n\tif ( hasBlockSupport( blockType, 'className', true ) ) {\n\t\tif ( typeof extraProps.className === 'string' ) {\n\t\t\t// We have some extra classes and want to add the default classname\n\t\t\t// We use uniq to prevent duplicate classnames.\n\n\t\t\textraProps.className = [\n\t\t\t\t...new Set( [\n\t\t\t\t\tgetBlockDefaultClassName( blockType.name ),\n\t\t\t\t\t...extraProps.className.split( ' ' ),\n\t\t\t\t] ),\n\t\t\t]\n\t\t\t\t.join( ' ' )\n\t\t\t\t.trim();\n\t\t} else {\n\t\t\t// There is no string in the className variable,\n\t\t\t// so we just dump the default name in there.\n\t\t\textraProps.className = getBlockDefaultClassName( blockType.name );\n\t\t}\n\t}\n\treturn extraProps;\n}\n\naddFilter(\n\t'blocks.getSaveContent.extraProps',\n\t'core/generated-class-name/save-props',\n\taddGeneratedClassName\n);\n"]}
@@ -108,26 +108,28 @@ function LayoutPanel(_ref) {
108
108
  return null;
109
109
  } // Only show the inherit toggle if it's supported,
110
110
  // a default theme layout is set (e.g. one that provides `contentSize` and/or `wideSize` values),
111
- // and that the default / flow layout type is in use, as this is the only one that supports inheritance.
111
+ // and either the default / flow or the constrained layout type is in use, as the toggle switches from one to the other.
112
112
 
113
113
 
114
- const showInheritToggle = !!(allowInheriting && !!defaultThemeLayout && (!(layout !== null && layout !== void 0 && layout.type) || (layout === null || layout === void 0 ? void 0 : layout.type) === 'default' || layout !== null && layout !== void 0 && layout.inherit));
114
+ const showInheritToggle = !!(allowInheriting && !!defaultThemeLayout && (!(layout !== null && layout !== void 0 && layout.type) || (layout === null || layout === void 0 ? void 0 : layout.type) === 'default' || (layout === null || layout === void 0 ? void 0 : layout.type) === 'constrained' || layout !== null && layout !== void 0 && layout.inherit));
115
115
  const usedLayout = layout || defaultBlockLayout || {};
116
116
  const {
117
117
  inherit = false,
118
- type = 'default'
118
+ type = 'default',
119
+ contentSize = null
119
120
  } = usedLayout;
120
121
  /**
121
- * `themeSupportsLayout` is only relevant to the `default/flow`
122
- * layout and it should not be taken into account when other
122
+ * `themeSupportsLayout` is only relevant to the `default/flow` or
123
+ * `constrained` layouts and it should not be taken into account when other
123
124
  * `layout` types are used.
124
125
  */
125
126
 
126
- if (type === 'default' && !themeSupportsLayout) {
127
+ if ((type === 'default' || type === 'constrained') && !themeSupportsLayout) {
127
128
  return null;
128
129
  }
129
130
 
130
131
  const layoutType = getLayoutType(type);
132
+ const constrainedType = getLayoutType('constrained');
131
133
 
132
134
  const onChangeType = newType => setAttributes({
133
135
  layout: {
@@ -142,19 +144,23 @@ function LayoutPanel(_ref) {
142
144
  return createElement(Fragment, null, createElement(InspectorControls, null, createElement(PanelBody, {
143
145
  title: __('Layout')
144
146
  }, showInheritToggle && createElement(Fragment, null, createElement(ToggleControl, {
145
- label: __('Inner blocks use full width'),
146
- checked: !inherit,
147
+ label: __('Inner blocks respect content width'),
148
+ checked: (layoutType === null || layoutType === void 0 ? void 0 : layoutType.name) === 'constrained' || !!inherit || !!contentSize,
147
149
  onChange: () => setAttributes({
148
150
  layout: {
149
- inherit: !inherit
151
+ type: (layoutType === null || layoutType === void 0 ? void 0 : layoutType.name) === 'constrained' ? 'default' : 'constrained'
150
152
  }
151
153
  })
152
154
  }), createElement("p", {
153
155
  className: "block-editor-hooks__layout-controls-helptext"
154
- }, !!inherit ? __('Nested blocks use theme content width with options for full and wide widths.') : __('Nested blocks will fill the width of this container.'))), !inherit && allowSwitching && createElement(LayoutTypeSwitcher, {
156
+ }, !!inherit || (layoutType === null || layoutType === void 0 ? void 0 : layoutType.name) === 'constrained' ? __('Nested blocks use theme content width with options for full and wide widths.') : __('Nested blocks will fill the width of this container.'))), !inherit && allowSwitching && createElement(LayoutTypeSwitcher, {
155
157
  type: type,
156
158
  onChange: onChangeType
157
- }), !inherit && layoutType && createElement(layoutType.inspectorControls, {
159
+ }), layoutType && layoutType.name !== 'default' && createElement(layoutType.inspectorControls, {
160
+ layout: usedLayout,
161
+ onChange: onChangeLayout,
162
+ layoutBlockSupport: layoutBlockSupport
163
+ }), constrainedType && !!contentSize && createElement(constrainedType.inspectorControls, {
158
164
  layout: usedLayout,
159
165
  onChange: onChangeLayout,
160
166
  layoutBlockSupport: layoutBlockSupport
@@ -238,7 +244,14 @@ export const withLayoutStyles = createHigherOrderComponent(BlockListBlock => pro
238
244
  name,
239
245
  attributes
240
246
  } = props;
241
- const shouldRenderLayoutStyles = hasBlockSupport(name, layoutBlockSupportKey);
247
+ const hasLayoutBlockSupport = hasBlockSupport(name, layoutBlockSupportKey);
248
+ const disableLayoutStyles = useSelect(select => {
249
+ const {
250
+ getSettings
251
+ } = select(blockEditorStore);
252
+ return !!getSettings().disableLayoutStyles;
253
+ });
254
+ const shouldRenderLayoutStyles = hasLayoutBlockSupport && !disableLayoutStyles;
242
255
  const id = useInstanceId(BlockListBlock);
243
256
  const defaultThemeLayout = useSetting('layout') || {};
244
257
  const element = useContext(BlockList.__unstableElementContext);
@@ -248,8 +261,10 @@ export const withLayoutStyles = createHigherOrderComponent(BlockListBlock => pro
248
261
  const {
249
262
  default: defaultBlockLayout
250
263
  } = getBlockSupport(name, layoutBlockSupportKey) || {};
251
- const usedLayout = layout !== null && layout !== void 0 && layout.inherit ? defaultThemeLayout : layout || defaultBlockLayout || {};
252
- const layoutClasses = shouldRenderLayoutStyles ? useLayoutClasses(usedLayout, defaultThemeLayout === null || defaultThemeLayout === void 0 ? void 0 : defaultThemeLayout.definitions) : null;
264
+ const usedLayout = layout !== null && layout !== void 0 && layout.inherit || layout !== null && layout !== void 0 && layout.contentSize || layout !== null && layout !== void 0 && layout.wideSize ? { ...layout,
265
+ type: 'constrained'
266
+ } : layout || defaultBlockLayout || {};
267
+ const layoutClasses = hasLayoutBlockSupport ? useLayoutClasses(usedLayout, defaultThemeLayout === null || defaultThemeLayout === void 0 ? void 0 : defaultThemeLayout.definitions) : null;
253
268
  const selector = `.${getBlockDefaultClassName(name)}.wp-container-${id}`;
254
269
  const blockGapSupport = useSetting('spacing.blockGap');
255
270
  const hasBlockGapSupport = blockGapSupport !== null; // Get CSS string for the current layout type.
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/hooks/layout.js"],"names":["classnames","has","kebabCase","createHigherOrderComponent","useInstanceId","addFilter","getBlockDefaultClassName","getBlockSupport","hasBlockSupport","useSelect","Button","ButtonGroup","ToggleControl","PanelBody","__","useContext","createPortal","store","blockEditorStore","InspectorControls","useSetting","LayoutStyle","BlockList","getLayoutType","getLayoutTypes","layoutBlockSupportKey","useLayoutClasses","layout","layoutDefinitions","rootPaddingAlignment","select","getSettings","__experimentalFeatures","useRootPaddingAwareAlignments","layoutClassnames","type","className","push","inherit","contentSize","orientation","justifyContent","flexWrap","LayoutPanel","setAttributes","attributes","name","blockName","defaultThemeLayout","themeSupportsLayout","supportsLayout","layoutBlockSupport","allowSwitching","allowEditing","allowInheriting","default","defaultBlockLayout","showInheritToggle","usedLayout","layoutType","onChangeType","newType","onChangeLayout","newLayout","LayoutTypeSwitcher","onChange","map","label","addAttribute","settings","withInspectorControls","BlockEdit","props","supportLayout","withLayoutStyles","BlockListBlock","shouldRenderLayoutStyles","id","element","__unstableElementContext","layoutClasses","definitions","selector","blockGapSupport","hasBlockGapSupport","css","fullLayoutType","getLayoutStyle","style"],"mappings":";;;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AACA,SAASC,GAAT,EAAcC,SAAd,QAA+B,QAA/B;AAEA;AACA;AACA;;AACA,SAASC,0BAAT,EAAqCC,aAArC,QAA0D,oBAA1D;AACA,SAASC,SAAT,QAA0B,kBAA1B;AACA,SACCC,wBADD,EAECC,eAFD,EAGCC,eAHD,QAIO,mBAJP;AAKA,SAASC,SAAT,QAA0B,iBAA1B;AACA,SACCC,MADD,EAECC,WAFD,EAGCC,aAHD,EAICC,SAJD,QAKO,uBALP;AAMA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,UAAT,EAAqBC,YAArB,QAAyC,oBAAzC;AAEA;AACA;AACA;;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,UAA1C;AACA,SAASC,iBAAT,QAAkC,eAAlC;AACA,OAAOC,UAAP,MAAuB,2BAAvB;AACA,SAASC,WAAT,QAA4B,iCAA5B;AACA,OAAOC,SAAP,MAAsB,0BAAtB;AACA,SAASC,aAAT,EAAwBC,cAAxB,QAA8C,YAA9C;AAEA,MAAMC,qBAAqB,GAAG,sBAA9B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASC,gBAAT,CAA2BC,MAA3B,EAAmCC,iBAAnC,EAAuD;AAAA;;AACtD,QAAMC,oBAAoB,GAAGpB,SAAS,CAAIqB,MAAF,IAAc;AAAA;;AACrD,UAAM;AAAEC,MAAAA;AAAF,QAAkBD,MAAM,CAAEZ,gBAAF,CAA9B;AACA,oCAAOa,WAAW,GAAGC,sBAArB,0DAAO,sBACJC,6BADH;AAEA,GAJqC,EAInC,EAJmC,CAAtC;AAKA,QAAMC,gBAAgB,GAAG,EAAzB;;AAEA,MAAKN,iBAAL,aAAKA,iBAAL,qCAAKA,iBAAiB,CAAI,CAAAD,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEQ,IAAR,KAAgB,SAApB,CAAtB,+CAAK,mBAAkDC,SAAvD,EAAmE;AAAA;;AAClEF,IAAAA,gBAAgB,CAACG,IAAjB,CACCT,iBADD,aACCA,iBADD,8CACCA,iBAAiB,CAAI,CAAAD,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEQ,IAAR,KAAgB,SAApB,CADlB,wDACC,oBAAkDC,SADnD;AAGA;;AAED,MAAK,CAAET,MAAM,SAAN,IAAAA,MAAM,WAAN,IAAAA,MAAM,CAAEW,OAAR,IAAmBX,MAAnB,aAAmBA,MAAnB,eAAmBA,MAAM,CAAEY,WAA7B,KAA8CV,oBAAnD,EAA0E;AACzEK,IAAAA,gBAAgB,CAACG,IAAjB,CAAuB,oBAAvB;AACA;;AAED,MAAKV,MAAL,aAAKA,MAAL,eAAKA,MAAM,CAAEa,WAAb,EAA2B;AAC1BN,IAAAA,gBAAgB,CAACG,IAAjB,CAAwB,MAAMnC,SAAS,CAAEyB,MAAM,CAACa,WAAT,CAAwB,EAA/D;AACA;;AAED,MAAKb,MAAL,aAAKA,MAAL,eAAKA,MAAM,CAAEc,cAAb,EAA8B;AAC7BP,IAAAA,gBAAgB,CAACG,IAAjB,CACE,4BAA4BnC,SAAS,CAAEyB,MAAM,CAACc,cAAT,CAA2B,EADlE;AAGA;;AAED,MAAKd,MAAM,SAAN,IAAAA,MAAM,WAAN,IAAAA,MAAM,CAAEe,QAAR,IAAoBf,MAAM,CAACe,QAAP,KAAoB,QAA7C,EAAwD;AACvDR,IAAAA,gBAAgB,CAACG,IAAjB,CAAuB,WAAvB;AACA;;AAED,SAAOH,gBAAP;AACA;;AAED,SAASS,WAAT,OAAuE;AAAA,MAAjD;AAAEC,IAAAA,aAAF;AAAiBC,IAAAA,UAAjB;AAA6BC,IAAAA,IAAI,EAAEC;AAAnC,GAAiD;AACtE,QAAM;AAAEpB,IAAAA;AAAF,MAAakB,UAAnB;AACA,QAAMG,kBAAkB,GAAG5B,UAAU,CAAE,QAAF,CAArC;AACA,QAAM6B,mBAAmB,GAAGxC,SAAS,CAAIqB,MAAF,IAAc;AACpD,UAAM;AAAEC,MAAAA;AAAF,QAAkBD,MAAM,CAAEZ,gBAAF,CAA9B;AACA,WAAOa,WAAW,GAAGmB,cAArB;AACA,GAHoC,EAGlC,EAHkC,CAArC;AAKA,QAAMC,kBAAkB,GAAG5C,eAAe,CACzCwC,SADyC,EAEzCtB,qBAFyC,EAGzC,EAHyC,CAA1C;AAKA,QAAM;AACL2B,IAAAA,cADK;AAELC,IAAAA,YAAY,GAAG,IAFV;AAGLC,IAAAA,eAAe,GAAG,IAHb;AAILC,IAAAA,OAAO,EAAEC;AAJJ,MAKFL,kBALJ;;AAOA,MAAK,CAAEE,YAAP,EAAsB;AACrB,WAAO,IAAP;AACA,GAtBqE,CAwBtE;AACA;AACA;;;AACA,QAAMI,iBAAiB,GAAG,CAAC,EAC1BH,eAAe,IACf,CAAC,CAAEN,kBADH,KAEE,EAAErB,MAAF,aAAEA,MAAF,eAAEA,MAAM,CAAEQ,IAAV,KAAkB,CAAAR,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEQ,IAAR,MAAiB,SAAnC,IAAgDR,MAAhD,aAAgDA,MAAhD,eAAgDA,MAAM,CAAEW,OAF1D,CAD0B,CAA3B;AAMA,QAAMoB,UAAU,GAAG/B,MAAM,IAAI6B,kBAAV,IAAgC,EAAnD;AACA,QAAM;AAAElB,IAAAA,OAAO,GAAG,KAAZ;AAAmBH,IAAAA,IAAI,GAAG;AAA1B,MAAwCuB,UAA9C;AACA;AACD;AACA;AACA;AACA;;AACC,MAAKvB,IAAI,KAAK,SAAT,IAAsB,CAAEc,mBAA7B,EAAmD;AAClD,WAAO,IAAP;AACA;;AACD,QAAMU,UAAU,GAAGpC,aAAa,CAAEY,IAAF,CAAhC;;AAEA,QAAMyB,YAAY,GAAKC,OAAF,IACpBjB,aAAa,CAAE;AAAEjB,IAAAA,MAAM,EAAE;AAAEQ,MAAAA,IAAI,EAAE0B;AAAR;AAAV,GAAF,CADd;;AAEA,QAAMC,cAAc,GAAKC,SAAF,IACtBnB,aAAa,CAAE;AAAEjB,IAAAA,MAAM,EAAEoC;AAAV,GAAF,CADd;;AAGA,SACC,8BACC,cAAC,iBAAD,QACC,cAAC,SAAD;AAAW,IAAA,KAAK,EAAGjD,EAAE,CAAE,QAAF;AAArB,KACG2C,iBAAiB,IAClB,8BACC,cAAC,aAAD;AACC,IAAA,KAAK,EAAG3C,EAAE,CAAE,6BAAF,CADX;AAEC,IAAA,OAAO,EAAG,CAAEwB,OAFb;AAGC,IAAA,QAAQ,EAAG,MACVM,aAAa,CAAE;AACdjB,MAAAA,MAAM,EAAE;AACPW,QAAAA,OAAO,EAAE,CAAEA;AADJ;AADM,KAAF;AAJf,IADD,EAYC;AAAG,IAAA,SAAS,EAAC;AAAb,KACG,CAAC,CAAEA,OAAH,GACCxB,EAAE,CACF,8EADE,CADH,GAICA,EAAE,CACF,sDADE,CALN,CAZD,CAFF,EA0BG,CAAEwB,OAAF,IAAac,cAAb,IACD,cAAC,kBAAD;AACC,IAAA,IAAI,EAAGjB,IADR;AAEC,IAAA,QAAQ,EAAGyB;AAFZ,IA3BF,EAiCG,CAAEtB,OAAF,IAAaqB,UAAb,IACD,cAAC,UAAD,CAAY,iBAAZ;AACC,IAAA,MAAM,EAAGD,UADV;AAEC,IAAA,QAAQ,EAAGI,cAFZ;AAGC,IAAA,kBAAkB,EAAGX;AAHtB,IAlCF,CADD,CADD,EA4CG,CAAEb,OAAF,IAAaqB,UAAb,IACD,cAAC,UAAD,CAAY,eAAZ;AACC,IAAA,MAAM,EAAGD,UADV;AAEC,IAAA,QAAQ,EAAGI,cAFZ;AAGC,IAAA,kBAAkB,EAAGX;AAHtB,IA7CF,CADD;AAsDA;;AAED,SAASa,kBAAT,QAAkD;AAAA,MAArB;AAAE7B,IAAAA,IAAF;AAAQ8B,IAAAA;AAAR,GAAqB;AACjD,SACC,cAAC,WAAD,QACGzC,cAAc,GAAG0C,GAAjB,CAAsB,SAAuB;AAAA,QAArB;AAAEpB,MAAAA,IAAF;AAAQqB,MAAAA;AAAR,KAAqB;AAC9C,WACC,cAAC,MAAD;AACC,MAAA,GAAG,EAAGrB,IADP;AAEC,MAAA,SAAS,EAAGX,IAAI,KAAKW,IAFtB;AAGC,MAAA,OAAO,EAAG,MAAMmB,QAAQ,CAAEnB,IAAF;AAHzB,OAKGqB,KALH,CADD;AASA,GAVC,CADH,CADD;AAeA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,SAASC,YAAT,CAAuBC,QAAvB,EAAkC;AACxC,MAAKpE,GAAG,CAAEoE,QAAQ,CAACxB,UAAX,EAAuB,CAAE,QAAF,EAAY,MAAZ,CAAvB,CAAR,EAAwD;AACvD,WAAOwB,QAAP;AACA;;AACD,MAAK7D,eAAe,CAAE6D,QAAF,EAAY5C,qBAAZ,CAApB,EAA0D;AACzD4C,IAAAA,QAAQ,CAACxB,UAAT,GAAsB,EACrB,GAAGwB,QAAQ,CAACxB,UADS;AAErBlB,MAAAA,MAAM,EAAE;AACPQ,QAAAA,IAAI,EAAE;AADC;AAFa,KAAtB;AAMA;;AAED,SAAOkC,QAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,qBAAqB,GAAGnE,0BAA0B,CAC5DoE,SAAF,IAAmBC,KAAF,IAAa;AAC7B,QAAM;AAAE1B,IAAAA,IAAI,EAAEC;AAAR,MAAsByB,KAA5B;AACA,QAAMC,aAAa,GAAGjE,eAAe,CACpCuC,SADoC,EAEpCtB,qBAFoC,CAArC;AAKA,SAAO,CACNgD,aAAa,IAAI,cAAC,WAAD;AAAa,IAAA,GAAG,EAAC;AAAjB,KAA+BD,KAA/B,EADX,EAEN,cAAC,SAAD;AAAW,IAAA,GAAG,EAAC;AAAf,KAA2BA,KAA3B,EAFM,CAAP;AAIA,CAZ6D,EAa9D,uBAb8D,CAAxD;AAgBP;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAME,gBAAgB,GAAGvE,0BAA0B,CACvDwE,cAAF,IAAwBH,KAAF,IAAa;AAClC,QAAM;AAAE1B,IAAAA,IAAF;AAAQD,IAAAA;AAAR,MAAuB2B,KAA7B;AACA,QAAMI,wBAAwB,GAAGpE,eAAe,CAC/CsC,IAD+C,EAE/CrB,qBAF+C,CAAhD;AAIA,QAAMoD,EAAE,GAAGzE,aAAa,CAAEuE,cAAF,CAAxB;AACA,QAAM3B,kBAAkB,GAAG5B,UAAU,CAAE,QAAF,CAAV,IAA0B,EAArD;AACA,QAAM0D,OAAO,GAAG/D,UAAU,CAAEO,SAAS,CAACyD,wBAAZ,CAA1B;AACA,QAAM;AAAEpD,IAAAA;AAAF,MAAakB,UAAnB;AACA,QAAM;AAAEU,IAAAA,OAAO,EAAEC;AAAX,MACLjD,eAAe,CAAEuC,IAAF,EAAQrB,qBAAR,CAAf,IAAkD,EADnD;AAEA,QAAMiC,UAAU,GAAG/B,MAAM,SAAN,IAAAA,MAAM,WAAN,IAAAA,MAAM,CAAEW,OAAR,GAChBU,kBADgB,GAEhBrB,MAAM,IAAI6B,kBAAV,IAAgC,EAFnC;AAGA,QAAMwB,aAAa,GAAGJ,wBAAwB,GAC3ClD,gBAAgB,CAAEgC,UAAF,EAAcV,kBAAd,aAAcA,kBAAd,uBAAcA,kBAAkB,CAAEiC,WAAlC,CAD2B,GAE3C,IAFH;AAGA,QAAMC,QAAQ,GAAI,IAAI5E,wBAAwB,CAC7CwC,IAD6C,CAE3C,iBAAiB+B,EAAI,EAFxB;AAGA,QAAMM,eAAe,GAAG/D,UAAU,CAAE,kBAAF,CAAlC;AACA,QAAMgE,kBAAkB,GAAGD,eAAe,KAAK,IAA/C,CAtBkC,CAwBlC;AACA;;AACA,MAAIE,GAAJ;;AACA,MAAKT,wBAAL,EAAgC;AAAA;;AAC/B,UAAMU,cAAc,GAAG/D,aAAa,CACnC,CAAAmC,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAEvB,IAAZ,KAAoB,SADe,CAApC;AAGAkD,IAAAA,GAAG,GAAGC,cAAH,aAAGA,cAAH,gDAAGA,cAAc,CAAEC,cAAnB,0DAAG,2BAAAD,cAAc,EAAoB;AACvCvC,MAAAA,SAAS,EAAED,IAD4B;AAEvCoC,MAAAA,QAFuC;AAGvCvD,MAAAA,MAAM,EAAE+B,UAH+B;AAIvC9B,MAAAA,iBAAiB,EAAEoB,kBAAF,aAAEA,kBAAF,uBAAEA,kBAAkB,CAAEiC,WAJA;AAKvCO,MAAAA,KAAK,EAAE3C,UAAF,aAAEA,UAAF,uBAAEA,UAAU,CAAE2C,KALoB;AAMvCJ,MAAAA;AANuC,KAApB,CAApB;AAQA,GAvCiC,CAyClC;;;AACA,QAAMhD,SAAS,GAAGpC,UAAU,CAC3BwE,KAD2B,aAC3BA,KAD2B,uBAC3BA,KAAK,CAAEpC,SADoB,EAE3B;AACC,KAAG,gBAAgByC,EAAI,EAAvB,GAA4BD,wBAAwB,IAAI,CAAC,CAAES,GAD5D,CACiE;;AADjE,GAF2B,EAK3BL,aAL2B,CAA5B;AAQA,SACC,8BACGJ,wBAAwB,IACzBE,OADC,IAED,CAAC,CAAEO,GAFF,IAGDrE,YAAY,CACX,cAAC,WAAD;AACC,IAAA,SAAS,EAAG8B,IADb;AAEC,IAAA,QAAQ,EAAGoC,QAFZ;AAGC,IAAA,GAAG,EAAGG,GAHP;AAIC,IAAA,MAAM,EAAG3B,UAJV;AAKC,IAAA,KAAK,EAAGb,UAAH,aAAGA,UAAH,uBAAGA,UAAU,CAAE2C;AALrB,IADW,EAQXV,OARW,CAJd,EAcC,cAAC,cAAD,eAAqBN,KAArB;AAA6B,IAAA,SAAS,EAAGpC;AAAzC,KAdD,CADD;AAkBA,CArEwD,CAAnD;AAwEP/B,SAAS,CACR,0BADQ,EAER,0BAFQ,EAGR+D,YAHQ,CAAT;AAKA/D,SAAS,CACR,uBADQ,EAER,uCAFQ,EAGRqE,gBAHQ,CAAT;AAKArE,SAAS,CACR,kBADQ,EAER,4CAFQ,EAGRiE,qBAHQ,CAAT","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { has, kebabCase } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport {\n\tgetBlockDefaultClassName,\n\tgetBlockSupport,\n\thasBlockSupport,\n} from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tButton,\n\tButtonGroup,\n\tToggleControl,\n\tPanelBody,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useContext, createPortal } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { InspectorControls } from '../components';\nimport useSetting from '../components/use-setting';\nimport { LayoutStyle } from '../components/block-list/layout';\nimport BlockList from '../components/block-list';\nimport { getLayoutType, getLayoutTypes } from '../layouts';\n\nconst layoutBlockSupportKey = '__experimentalLayout';\n\n/**\n * Generates the utility classnames for the given blocks layout attributes.\n * This method was primarily added to reintroduce classnames that were removed\n * in the 5.9 release (https://github.com/WordPress/gutenberg/issues/38719), rather\n * than providing an extensive list of all possible layout classes. The plan is to\n * have the style engine generate a more extensive list of utility classnames which\n * will then replace this method.\n *\n * @param { Object } layout Layout object.\n * @param { Object } layoutDefinitions An object containing layout definitions, stored in theme.json.\n *\n * @return { Array } Array of CSS classname strings.\n */\nfunction useLayoutClasses( layout, layoutDefinitions ) {\n\tconst rootPaddingAlignment = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn getSettings().__experimentalFeatures\n\t\t\t?.useRootPaddingAwareAlignments;\n\t}, [] );\n\tconst layoutClassnames = [];\n\n\tif ( layoutDefinitions?.[ layout?.type || 'default' ]?.className ) {\n\t\tlayoutClassnames.push(\n\t\t\tlayoutDefinitions?.[ layout?.type || 'default' ]?.className\n\t\t);\n\t}\n\n\tif ( ( layout?.inherit || layout?.contentSize ) && rootPaddingAlignment ) {\n\t\tlayoutClassnames.push( 'has-global-padding' );\n\t}\n\n\tif ( layout?.orientation ) {\n\t\tlayoutClassnames.push( `is-${ kebabCase( layout.orientation ) }` );\n\t}\n\n\tif ( layout?.justifyContent ) {\n\t\tlayoutClassnames.push(\n\t\t\t`is-content-justification-${ kebabCase( layout.justifyContent ) }`\n\t\t);\n\t}\n\n\tif ( layout?.flexWrap && layout.flexWrap === 'nowrap' ) {\n\t\tlayoutClassnames.push( 'is-nowrap' );\n\t}\n\n\treturn layoutClassnames;\n}\n\nfunction LayoutPanel( { setAttributes, attributes, name: blockName } ) {\n\tconst { layout } = attributes;\n\tconst defaultThemeLayout = useSetting( 'layout' );\n\tconst themeSupportsLayout = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn getSettings().supportsLayout;\n\t}, [] );\n\n\tconst layoutBlockSupport = getBlockSupport(\n\t\tblockName,\n\t\tlayoutBlockSupportKey,\n\t\t{}\n\t);\n\tconst {\n\t\tallowSwitching,\n\t\tallowEditing = true,\n\t\tallowInheriting = true,\n\t\tdefault: defaultBlockLayout,\n\t} = layoutBlockSupport;\n\n\tif ( ! allowEditing ) {\n\t\treturn null;\n\t}\n\n\t// Only show the inherit toggle if it's supported,\n\t// a default theme layout is set (e.g. one that provides `contentSize` and/or `wideSize` values),\n\t// and that the default / flow layout type is in use, as this is the only one that supports inheritance.\n\tconst showInheritToggle = !! (\n\t\tallowInheriting &&\n\t\t!! defaultThemeLayout &&\n\t\t( ! layout?.type || layout?.type === 'default' || layout?.inherit )\n\t);\n\n\tconst usedLayout = layout || defaultBlockLayout || {};\n\tconst { inherit = false, type = 'default' } = usedLayout;\n\t/**\n\t * `themeSupportsLayout` is only relevant to the `default/flow`\n\t * layout and it should not be taken into account when other\n\t * `layout` types are used.\n\t */\n\tif ( type === 'default' && ! themeSupportsLayout ) {\n\t\treturn null;\n\t}\n\tconst layoutType = getLayoutType( type );\n\n\tconst onChangeType = ( newType ) =>\n\t\tsetAttributes( { layout: { type: newType } } );\n\tconst onChangeLayout = ( newLayout ) =>\n\t\tsetAttributes( { layout: newLayout } );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Layout' ) }>\n\t\t\t\t\t{ showInheritToggle && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Inner blocks use full width' ) }\n\t\t\t\t\t\t\t\tchecked={ ! inherit }\n\t\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t\t\t\t\tinherit: ! inherit,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<p className=\"block-editor-hooks__layout-controls-helptext\">\n\t\t\t\t\t\t\t\t{ !! inherit\n\t\t\t\t\t\t\t\t\t? __(\n\t\t\t\t\t\t\t\t\t\t\t'Nested blocks use theme content width with options for full and wide widths.'\n\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t\t: __(\n\t\t\t\t\t\t\t\t\t\t\t'Nested blocks will fill the width of this container.'\n\t\t\t\t\t\t\t\t\t ) }\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ ! inherit && allowSwitching && (\n\t\t\t\t\t\t<LayoutTypeSwitcher\n\t\t\t\t\t\t\ttype={ type }\n\t\t\t\t\t\t\tonChange={ onChangeType }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ ! inherit && layoutType && (\n\t\t\t\t\t\t<layoutType.inspectorControls\n\t\t\t\t\t\t\tlayout={ usedLayout }\n\t\t\t\t\t\t\tonChange={ onChangeLayout }\n\t\t\t\t\t\t\tlayoutBlockSupport={ layoutBlockSupport }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t{ ! inherit && layoutType && (\n\t\t\t\t<layoutType.toolBarControls\n\t\t\t\t\tlayout={ usedLayout }\n\t\t\t\t\tonChange={ onChangeLayout }\n\t\t\t\t\tlayoutBlockSupport={ layoutBlockSupport }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nfunction LayoutTypeSwitcher( { type, onChange } ) {\n\treturn (\n\t\t<ButtonGroup>\n\t\t\t{ getLayoutTypes().map( ( { name, label } ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tkey={ name }\n\t\t\t\t\t\tisPressed={ type === name }\n\t\t\t\t\t\tonClick={ () => onChange( name ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Button>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</ButtonGroup>\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include `layout`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\tif ( has( settings.attributes, [ 'layout', 'type' ] ) ) {\n\t\treturn settings;\n\t}\n\tif ( hasBlockSupport( settings, layoutBlockSupportKey ) ) {\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tlayout: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override the default edit UI to include layout controls\n *\n * @param {Function} BlockEdit Original component.\n *\n * @return {Function} Wrapped component.\n */\nexport const withInspectorControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst { name: blockName } = props;\n\t\tconst supportLayout = hasBlockSupport(\n\t\t\tblockName,\n\t\t\tlayoutBlockSupportKey\n\t\t);\n\n\t\treturn [\n\t\t\tsupportLayout && <LayoutPanel key=\"layout\" { ...props } />,\n\t\t\t<BlockEdit key=\"edit\" { ...props } />,\n\t\t];\n\t},\n\t'withInspectorControls'\n);\n\n/**\n * Override the default block element to add the layout styles.\n *\n * @param {Function} BlockListBlock Original component.\n *\n * @return {Function} Wrapped component.\n */\nexport const withLayoutStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst { name, attributes } = props;\n\t\tconst shouldRenderLayoutStyles = hasBlockSupport(\n\t\t\tname,\n\t\t\tlayoutBlockSupportKey\n\t\t);\n\t\tconst id = useInstanceId( BlockListBlock );\n\t\tconst defaultThemeLayout = useSetting( 'layout' ) || {};\n\t\tconst element = useContext( BlockList.__unstableElementContext );\n\t\tconst { layout } = attributes;\n\t\tconst { default: defaultBlockLayout } =\n\t\t\tgetBlockSupport( name, layoutBlockSupportKey ) || {};\n\t\tconst usedLayout = layout?.inherit\n\t\t\t? defaultThemeLayout\n\t\t\t: layout || defaultBlockLayout || {};\n\t\tconst layoutClasses = shouldRenderLayoutStyles\n\t\t\t? useLayoutClasses( usedLayout, defaultThemeLayout?.definitions )\n\t\t\t: null;\n\t\tconst selector = `.${ getBlockDefaultClassName(\n\t\t\tname\n\t\t) }.wp-container-${ id }`;\n\t\tconst blockGapSupport = useSetting( 'spacing.blockGap' );\n\t\tconst hasBlockGapSupport = blockGapSupport !== null;\n\n\t\t// Get CSS string for the current layout type.\n\t\t// The CSS and `style` element is only output if it is not empty.\n\t\tlet css;\n\t\tif ( shouldRenderLayoutStyles ) {\n\t\t\tconst fullLayoutType = getLayoutType(\n\t\t\t\tusedLayout?.type || 'default'\n\t\t\t);\n\t\t\tcss = fullLayoutType?.getLayoutStyle?.( {\n\t\t\t\tblockName: name,\n\t\t\t\tselector,\n\t\t\t\tlayout: usedLayout,\n\t\t\t\tlayoutDefinitions: defaultThemeLayout?.definitions,\n\t\t\t\tstyle: attributes?.style,\n\t\t\t\thasBlockGapSupport,\n\t\t\t} );\n\t\t}\n\n\t\t// Attach a `wp-container-` id-based class name as well as a layout class name such as `is-layout-flex`.\n\t\tconst className = classnames(\n\t\t\tprops?.className,\n\t\t\t{\n\t\t\t\t[ `wp-container-${ id }` ]: shouldRenderLayoutStyles && !! css, // Only attach a container class if there is generated CSS to be attached.\n\t\t\t},\n\t\t\tlayoutClasses\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ shouldRenderLayoutStyles &&\n\t\t\t\t\telement &&\n\t\t\t\t\t!! css &&\n\t\t\t\t\tcreatePortal(\n\t\t\t\t\t\t<LayoutStyle\n\t\t\t\t\t\t\tblockName={ name }\n\t\t\t\t\t\t\tselector={ selector }\n\t\t\t\t\t\t\tcss={ css }\n\t\t\t\t\t\t\tlayout={ usedLayout }\n\t\t\t\t\t\t\tstyle={ attributes?.style }\n\t\t\t\t\t\t/>,\n\t\t\t\t\t\telement\n\t\t\t\t\t) }\n\t\t\t\t<BlockListBlock { ...props } className={ className } />\n\t\t\t</>\n\t\t);\n\t}\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/layout/addAttribute',\n\taddAttribute\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/layout/with-layout-styles',\n\twithLayoutStyles\n);\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/layout/with-inspector-controls',\n\twithInspectorControls\n);\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/hooks/layout.js"],"names":["classnames","has","kebabCase","createHigherOrderComponent","useInstanceId","addFilter","getBlockDefaultClassName","getBlockSupport","hasBlockSupport","useSelect","Button","ButtonGroup","ToggleControl","PanelBody","__","useContext","createPortal","store","blockEditorStore","InspectorControls","useSetting","LayoutStyle","BlockList","getLayoutType","getLayoutTypes","layoutBlockSupportKey","useLayoutClasses","layout","layoutDefinitions","rootPaddingAlignment","select","getSettings","__experimentalFeatures","useRootPaddingAwareAlignments","layoutClassnames","type","className","push","inherit","contentSize","orientation","justifyContent","flexWrap","LayoutPanel","setAttributes","attributes","name","blockName","defaultThemeLayout","themeSupportsLayout","supportsLayout","layoutBlockSupport","allowSwitching","allowEditing","allowInheriting","default","defaultBlockLayout","showInheritToggle","usedLayout","layoutType","constrainedType","onChangeType","newType","onChangeLayout","newLayout","LayoutTypeSwitcher","onChange","map","label","addAttribute","settings","withInspectorControls","BlockEdit","props","supportLayout","withLayoutStyles","BlockListBlock","hasLayoutBlockSupport","disableLayoutStyles","shouldRenderLayoutStyles","id","element","__unstableElementContext","wideSize","layoutClasses","definitions","selector","blockGapSupport","hasBlockGapSupport","css","fullLayoutType","getLayoutStyle","style"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { has, kebabCase } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport {\n\tgetBlockDefaultClassName,\n\tgetBlockSupport,\n\thasBlockSupport,\n} from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tButton,\n\tButtonGroup,\n\tToggleControl,\n\tPanelBody,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useContext, createPortal } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { InspectorControls } from '../components';\nimport useSetting from '../components/use-setting';\nimport { LayoutStyle } from '../components/block-list/layout';\nimport BlockList from '../components/block-list';\nimport { getLayoutType, getLayoutTypes } from '../layouts';\n\nconst layoutBlockSupportKey = '__experimentalLayout';\n\n/**\n * Generates the utility classnames for the given blocks layout attributes.\n * This method was primarily added to reintroduce classnames that were removed\n * in the 5.9 release (https://github.com/WordPress/gutenberg/issues/38719), rather\n * than providing an extensive list of all possible layout classes. The plan is to\n * have the style engine generate a more extensive list of utility classnames which\n * will then replace this method.\n *\n * @param { Object } layout Layout object.\n * @param { Object } layoutDefinitions An object containing layout definitions, stored in theme.json.\n *\n * @return { Array } Array of CSS classname strings.\n */\nfunction useLayoutClasses( layout, layoutDefinitions ) {\n\tconst rootPaddingAlignment = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn getSettings().__experimentalFeatures\n\t\t\t?.useRootPaddingAwareAlignments;\n\t}, [] );\n\tconst layoutClassnames = [];\n\n\tif ( layoutDefinitions?.[ layout?.type || 'default' ]?.className ) {\n\t\tlayoutClassnames.push(\n\t\t\tlayoutDefinitions?.[ layout?.type || 'default' ]?.className\n\t\t);\n\t}\n\n\tif ( ( layout?.inherit || layout?.contentSize ) && rootPaddingAlignment ) {\n\t\tlayoutClassnames.push( 'has-global-padding' );\n\t}\n\n\tif ( layout?.orientation ) {\n\t\tlayoutClassnames.push( `is-${ kebabCase( layout.orientation ) }` );\n\t}\n\n\tif ( layout?.justifyContent ) {\n\t\tlayoutClassnames.push(\n\t\t\t`is-content-justification-${ kebabCase( layout.justifyContent ) }`\n\t\t);\n\t}\n\n\tif ( layout?.flexWrap && layout.flexWrap === 'nowrap' ) {\n\t\tlayoutClassnames.push( 'is-nowrap' );\n\t}\n\n\treturn layoutClassnames;\n}\n\nfunction LayoutPanel( { setAttributes, attributes, name: blockName } ) {\n\tconst { layout } = attributes;\n\tconst defaultThemeLayout = useSetting( 'layout' );\n\tconst themeSupportsLayout = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn getSettings().supportsLayout;\n\t}, [] );\n\n\tconst layoutBlockSupport = getBlockSupport(\n\t\tblockName,\n\t\tlayoutBlockSupportKey,\n\t\t{}\n\t);\n\tconst {\n\t\tallowSwitching,\n\t\tallowEditing = true,\n\t\tallowInheriting = true,\n\t\tdefault: defaultBlockLayout,\n\t} = layoutBlockSupport;\n\n\tif ( ! allowEditing ) {\n\t\treturn null;\n\t}\n\n\t// Only show the inherit toggle if it's supported,\n\t// a default theme layout is set (e.g. one that provides `contentSize` and/or `wideSize` values),\n\t// and either the default / flow or the constrained layout type is in use, as the toggle switches from one to the other.\n\tconst showInheritToggle = !! (\n\t\tallowInheriting &&\n\t\t!! defaultThemeLayout &&\n\t\t( ! layout?.type ||\n\t\t\tlayout?.type === 'default' ||\n\t\t\tlayout?.type === 'constrained' ||\n\t\t\tlayout?.inherit )\n\t);\n\n\tconst usedLayout = layout || defaultBlockLayout || {};\n\tconst {\n\t\tinherit = false,\n\t\ttype = 'default',\n\t\tcontentSize = null,\n\t} = usedLayout;\n\t/**\n\t * `themeSupportsLayout` is only relevant to the `default/flow` or\n\t * `constrained` layouts and it should not be taken into account when other\n\t * `layout` types are used.\n\t */\n\tif (\n\t\t( type === 'default' || type === 'constrained' ) &&\n\t\t! themeSupportsLayout\n\t) {\n\t\treturn null;\n\t}\n\tconst layoutType = getLayoutType( type );\n\n\tconst constrainedType = getLayoutType( 'constrained' );\n\n\tconst onChangeType = ( newType ) =>\n\t\tsetAttributes( { layout: { type: newType } } );\n\tconst onChangeLayout = ( newLayout ) =>\n\t\tsetAttributes( { layout: newLayout } );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Layout' ) }>\n\t\t\t\t\t{ showInheritToggle && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __(\n\t\t\t\t\t\t\t\t\t'Inner blocks respect content width'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\tchecked={\n\t\t\t\t\t\t\t\t\tlayoutType?.name === 'constrained' ||\n\t\t\t\t\t\t\t\t\t!! inherit ||\n\t\t\t\t\t\t\t\t\t!! contentSize\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlayout: {\n\t\t\t\t\t\t\t\t\t\t\ttype:\n\t\t\t\t\t\t\t\t\t\t\t\tlayoutType?.name ===\n\t\t\t\t\t\t\t\t\t\t\t\t'constrained'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'default'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: 'constrained',\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<p className=\"block-editor-hooks__layout-controls-helptext\">\n\t\t\t\t\t\t\t\t{ !! inherit ||\n\t\t\t\t\t\t\t\tlayoutType?.name === 'constrained'\n\t\t\t\t\t\t\t\t\t? __(\n\t\t\t\t\t\t\t\t\t\t\t'Nested blocks use theme content width with options for full and wide widths.'\n\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t\t: __(\n\t\t\t\t\t\t\t\t\t\t\t'Nested blocks will fill the width of this container.'\n\t\t\t\t\t\t\t\t\t ) }\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ ! inherit && allowSwitching && (\n\t\t\t\t\t\t<LayoutTypeSwitcher\n\t\t\t\t\t\t\ttype={ type }\n\t\t\t\t\t\t\tonChange={ onChangeType }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ layoutType && layoutType.name !== 'default' && (\n\t\t\t\t\t\t<layoutType.inspectorControls\n\t\t\t\t\t\t\tlayout={ usedLayout }\n\t\t\t\t\t\t\tonChange={ onChangeLayout }\n\t\t\t\t\t\t\tlayoutBlockSupport={ layoutBlockSupport }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ constrainedType && !! contentSize && (\n\t\t\t\t\t\t<constrainedType.inspectorControls\n\t\t\t\t\t\t\tlayout={ usedLayout }\n\t\t\t\t\t\t\tonChange={ onChangeLayout }\n\t\t\t\t\t\t\tlayoutBlockSupport={ layoutBlockSupport }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t{ ! inherit && layoutType && (\n\t\t\t\t<layoutType.toolBarControls\n\t\t\t\t\tlayout={ usedLayout }\n\t\t\t\t\tonChange={ onChangeLayout }\n\t\t\t\t\tlayoutBlockSupport={ layoutBlockSupport }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nfunction LayoutTypeSwitcher( { type, onChange } ) {\n\treturn (\n\t\t<ButtonGroup>\n\t\t\t{ getLayoutTypes().map( ( { name, label } ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tkey={ name }\n\t\t\t\t\t\tisPressed={ type === name }\n\t\t\t\t\t\tonClick={ () => onChange( name ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Button>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</ButtonGroup>\n\t);\n}\n\n/**\n * Filters registered block settings, extending attributes to include `layout`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\tif ( has( settings.attributes, [ 'layout', 'type' ] ) ) {\n\t\treturn settings;\n\t}\n\tif ( hasBlockSupport( settings, layoutBlockSupportKey ) ) {\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tlayout: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override the default edit UI to include layout controls\n *\n * @param {Function} BlockEdit Original component.\n *\n * @return {Function} Wrapped component.\n */\nexport const withInspectorControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst { name: blockName } = props;\n\t\tconst supportLayout = hasBlockSupport(\n\t\t\tblockName,\n\t\t\tlayoutBlockSupportKey\n\t\t);\n\n\t\treturn [\n\t\t\tsupportLayout && <LayoutPanel key=\"layout\" { ...props } />,\n\t\t\t<BlockEdit key=\"edit\" { ...props } />,\n\t\t];\n\t},\n\t'withInspectorControls'\n);\n\n/**\n * Override the default block element to add the layout styles.\n *\n * @param {Function} BlockListBlock Original component.\n *\n * @return {Function} Wrapped component.\n */\nexport const withLayoutStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst { name, attributes } = props;\n\t\tconst hasLayoutBlockSupport = hasBlockSupport(\n\t\t\tname,\n\t\t\tlayoutBlockSupportKey\n\t\t);\n\t\tconst disableLayoutStyles = useSelect( ( select ) => {\n\t\t\tconst { getSettings } = select( blockEditorStore );\n\t\t\treturn !! getSettings().disableLayoutStyles;\n\t\t} );\n\t\tconst shouldRenderLayoutStyles =\n\t\t\thasLayoutBlockSupport && ! disableLayoutStyles;\n\t\tconst id = useInstanceId( BlockListBlock );\n\t\tconst defaultThemeLayout = useSetting( 'layout' ) || {};\n\t\tconst element = useContext( BlockList.__unstableElementContext );\n\t\tconst { layout } = attributes;\n\t\tconst { default: defaultBlockLayout } =\n\t\t\tgetBlockSupport( name, layoutBlockSupportKey ) || {};\n\t\tconst usedLayout =\n\t\t\tlayout?.inherit || layout?.contentSize || layout?.wideSize\n\t\t\t\t? { ...layout, type: 'constrained' }\n\t\t\t\t: layout || defaultBlockLayout || {};\n\t\tconst layoutClasses = hasLayoutBlockSupport\n\t\t\t? useLayoutClasses( usedLayout, defaultThemeLayout?.definitions )\n\t\t\t: null;\n\t\tconst selector = `.${ getBlockDefaultClassName(\n\t\t\tname\n\t\t) }.wp-container-${ id }`;\n\t\tconst blockGapSupport = useSetting( 'spacing.blockGap' );\n\t\tconst hasBlockGapSupport = blockGapSupport !== null;\n\n\t\t// Get CSS string for the current layout type.\n\t\t// The CSS and `style` element is only output if it is not empty.\n\t\tlet css;\n\t\tif ( shouldRenderLayoutStyles ) {\n\t\t\tconst fullLayoutType = getLayoutType(\n\t\t\t\tusedLayout?.type || 'default'\n\t\t\t);\n\t\t\tcss = fullLayoutType?.getLayoutStyle?.( {\n\t\t\t\tblockName: name,\n\t\t\t\tselector,\n\t\t\t\tlayout: usedLayout,\n\t\t\t\tlayoutDefinitions: defaultThemeLayout?.definitions,\n\t\t\t\tstyle: attributes?.style,\n\t\t\t\thasBlockGapSupport,\n\t\t\t} );\n\t\t}\n\n\t\t// Attach a `wp-container-` id-based class name as well as a layout class name such as `is-layout-flex`.\n\t\tconst className = classnames(\n\t\t\tprops?.className,\n\t\t\t{\n\t\t\t\t[ `wp-container-${ id }` ]: shouldRenderLayoutStyles && !! css, // Only attach a container class if there is generated CSS to be attached.\n\t\t\t},\n\t\t\tlayoutClasses\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ shouldRenderLayoutStyles &&\n\t\t\t\t\telement &&\n\t\t\t\t\t!! css &&\n\t\t\t\t\tcreatePortal(\n\t\t\t\t\t\t<LayoutStyle\n\t\t\t\t\t\t\tblockName={ name }\n\t\t\t\t\t\t\tselector={ selector }\n\t\t\t\t\t\t\tcss={ css }\n\t\t\t\t\t\t\tlayout={ usedLayout }\n\t\t\t\t\t\t\tstyle={ attributes?.style }\n\t\t\t\t\t\t/>,\n\t\t\t\t\t\telement\n\t\t\t\t\t) }\n\t\t\t\t<BlockListBlock { ...props } className={ className } />\n\t\t\t</>\n\t\t);\n\t}\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/layout/addAttribute',\n\taddAttribute\n);\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/layout/with-layout-styles',\n\twithLayoutStyles\n);\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/layout/with-inspector-controls',\n\twithInspectorControls\n);\n"]}
@@ -16,6 +16,8 @@ import useSetting from '../components/use-setting';
16
16
  import { AXIAL_SIDES, SPACING_SUPPORT_KEY, useCustomSides, useIsDimensionsSupportValid } from './dimensions';
17
17
  import { cleanEmptyObject } from './utils';
18
18
  import BlockPopover from '../components/block-popover';
19
+ import SpacingSizesControl from '../components/spacing-sizes-control';
20
+ import { getCustomValueFromPreset } from '../components/spacing-sizes-control/utils';
19
21
  /**
20
22
  * Determines if there is margin support.
21
23
  *
@@ -90,7 +92,7 @@ export function useIsMarginDisabled() {
90
92
  */
91
93
 
92
94
  export function MarginEdit(props) {
93
- var _style$spacing;
95
+ var _style$spacing, _style$spacing2;
94
96
 
95
97
  const {
96
98
  name: blockName,
@@ -99,6 +101,7 @@ export function MarginEdit(props) {
99
101
  },
100
102
  setAttributes
101
103
  } = props;
104
+ const spacingSizes = useSetting('spacing.spacingSizes');
102
105
  const units = useCustomUnits({
103
106
  availableUnits: useSetting('spacing.units') || ['%', 'px', 'em', 'rem', 'vw']
104
107
  });
@@ -121,7 +124,7 @@ export function MarginEdit(props) {
121
124
  };
122
125
 
123
126
  return Platform.select({
124
- web: createElement(Fragment, null, createElement(BoxControl, {
127
+ web: createElement(Fragment, null, (!spacingSizes || (spacingSizes === null || spacingSizes === void 0 ? void 0 : spacingSizes.length) === 0) && createElement(BoxControl, {
125
128
  values: style === null || style === void 0 ? void 0 : (_style$spacing = style.spacing) === null || _style$spacing === void 0 ? void 0 : _style$spacing.margin,
126
129
  onChange: onChange,
127
130
  label: __('Margin'),
@@ -129,6 +132,14 @@ export function MarginEdit(props) {
129
132
  units: units,
130
133
  allowReset: false,
131
134
  splitOnAxis: splitOnAxis
135
+ }), (spacingSizes === null || spacingSizes === void 0 ? void 0 : spacingSizes.length) > 0 && createElement(SpacingSizesControl, {
136
+ values: style === null || style === void 0 ? void 0 : (_style$spacing2 = style.spacing) === null || _style$spacing2 === void 0 ? void 0 : _style$spacing2.margin,
137
+ onChange: onChange,
138
+ label: __('Margin'),
139
+ sides: sides,
140
+ units: units,
141
+ allowReset: false,
142
+ splitOnAxis: false
132
143
  })),
133
144
  native: null
134
145
  });
@@ -141,18 +152,21 @@ export function MarginVisualizer(_ref2) {
141
152
  attributes
142
153
  } = _ref2;
143
154
  const margin = attributes === null || attributes === void 0 ? void 0 : (_attributes$style = attributes.style) === null || _attributes$style === void 0 ? void 0 : (_attributes$style$spa = _attributes$style.spacing) === null || _attributes$style$spa === void 0 ? void 0 : _attributes$style$spa.margin;
155
+ const spacingSizes = useSetting('spacing.spacingSizes');
144
156
  const style = useMemo(() => {
145
- var _margin$top, _margin$right, _margin$bottom, _margin$left;
146
-
157
+ const marginTop = margin !== null && margin !== void 0 && margin.top ? getCustomValueFromPreset(margin === null || margin === void 0 ? void 0 : margin.top, spacingSizes) : 0;
158
+ const marginRight = margin !== null && margin !== void 0 && margin.right ? getCustomValueFromPreset(margin === null || margin === void 0 ? void 0 : margin.right, spacingSizes) : 0;
159
+ const marginBottom = margin !== null && margin !== void 0 && margin.bottom ? getCustomValueFromPreset(margin === null || margin === void 0 ? void 0 : margin.bottom, spacingSizes) : 0;
160
+ const marginLeft = margin !== null && margin !== void 0 && margin.left ? getCustomValueFromPreset(margin === null || margin === void 0 ? void 0 : margin.left, spacingSizes) : 0;
147
161
  return {
148
- borderTopWidth: (_margin$top = margin === null || margin === void 0 ? void 0 : margin.top) !== null && _margin$top !== void 0 ? _margin$top : 0,
149
- borderRightWidth: (_margin$right = margin === null || margin === void 0 ? void 0 : margin.right) !== null && _margin$right !== void 0 ? _margin$right : 0,
150
- borderBottomWidth: (_margin$bottom = margin === null || margin === void 0 ? void 0 : margin.bottom) !== null && _margin$bottom !== void 0 ? _margin$bottom : 0,
151
- borderLeftWidth: (_margin$left = margin === null || margin === void 0 ? void 0 : margin.left) !== null && _margin$left !== void 0 ? _margin$left : 0,
152
- top: margin !== null && margin !== void 0 && margin.top ? `-${margin.top}` : 0,
153
- right: margin !== null && margin !== void 0 && margin.right ? `-${margin.right}` : 0,
154
- bottom: margin !== null && margin !== void 0 && margin.bottom ? `-${margin.bottom}` : 0,
155
- left: margin !== null && margin !== void 0 && margin.left ? `-${margin.left}` : 0
162
+ borderTopWidth: marginTop,
163
+ borderRightWidth: marginRight,
164
+ borderBottomWidth: marginBottom,
165
+ borderLeftWidth: marginLeft,
166
+ top: marginTop !== 0 ? `-${marginTop}` : 0,
167
+ right: marginRight !== 0 ? `-${marginRight}` : 0,
168
+ bottom: marginBottom !== 0 ? `-${marginBottom}` : 0,
169
+ left: marginLeft !== 0 ? `-${marginLeft}` : 0
156
170
  };
157
171
  }, [margin]);
158
172
  const [isActive, setIsActive] = useState(false);