@wordpress/block-editor 9.5.0 → 9.7.1-next.d6164808d3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (548) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/block-alignment-control/use-available-alignments.js +1 -1
  3. package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
  4. package/build/components/block-edit-visually-button/index.js +46 -0
  5. package/build/components/block-edit-visually-button/index.js.map +1 -0
  6. package/build/components/block-list/block.js +12 -2
  7. package/build/components/block-list/block.js.map +1 -1
  8. package/build/components/block-list/index.native.js +1 -1
  9. package/build/components/block-list/index.native.js.map +1 -1
  10. package/build/components/block-lock/modal.js +2 -2
  11. package/build/components/block-lock/modal.js.map +1 -1
  12. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  13. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  14. package/build/components/block-mover/mover-description.js +95 -32
  15. package/build/components/block-mover/mover-description.js.map +1 -1
  16. package/build/components/block-popover/inbetween.js +5 -3
  17. package/build/components/block-popover/inbetween.js.map +1 -1
  18. package/build/components/block-settings-menu/index.js +2 -6
  19. package/build/components/block-settings-menu/index.js.map +1 -1
  20. package/build/components/block-settings-menu-controls/index.js +1 -1
  21. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  22. package/build/components/block-styles/index.js +3 -6
  23. package/build/components/block-styles/index.js.map +1 -1
  24. package/build/components/block-styles/preview.native.js +1 -3
  25. package/build/components/block-styles/preview.native.js.map +1 -1
  26. package/build/components/block-switcher/index.js +10 -16
  27. package/build/components/block-switcher/index.js.map +1 -1
  28. package/build/components/block-toolbar/index.js +5 -1
  29. package/build/components/block-toolbar/index.js.map +1 -1
  30. package/build/components/block-tools/block-selection-button.js +1 -7
  31. package/build/components/block-tools/block-selection-button.js.map +1 -1
  32. package/build/components/block-tools/index.js +4 -1
  33. package/build/components/block-tools/index.js.map +1 -1
  34. package/build/components/block-types-list/index.js +1 -1
  35. package/build/components/block-types-list/index.js.map +1 -1
  36. package/build/components/block-types-list/index.native.js +65 -23
  37. package/build/components/block-types-list/index.native.js.map +1 -1
  38. package/build/components/border-radius-control/all-input-control.js +31 -3
  39. package/build/components/border-radius-control/all-input-control.js.map +1 -1
  40. package/build/components/border-radius-control/index.js +23 -7
  41. package/build/components/border-radius-control/index.js.map +1 -1
  42. package/build/components/border-radius-control/input-controls.js +21 -6
  43. package/build/components/border-radius-control/input-controls.js.map +1 -1
  44. package/build/components/border-radius-control/utils.js +13 -16
  45. package/build/components/border-radius-control/utils.js.map +1 -1
  46. package/build/components/colors/utils.js +6 -2
  47. package/build/components/colors/utils.js.map +1 -1
  48. package/build/components/colors/with-colors.js +17 -4
  49. package/build/components/colors/with-colors.js.map +1 -1
  50. package/build/components/colors-gradients/control.js +8 -4
  51. package/build/components/colors-gradients/control.js.map +1 -1
  52. package/build/components/colors-gradients/dropdown.js +9 -3
  53. package/build/components/colors-gradients/dropdown.js.map +1 -1
  54. package/build/components/copy-handler/index.js +6 -0
  55. package/build/components/copy-handler/index.js.map +1 -1
  56. package/build/components/date-format-picker/index.js +2 -7
  57. package/build/components/date-format-picker/index.js.map +1 -1
  58. package/build/components/duotone/components.js +5 -5
  59. package/build/components/duotone/components.js.map +1 -1
  60. package/build/components/font-appearance-control/index.js +10 -4
  61. package/build/components/font-appearance-control/index.js.map +1 -1
  62. package/build/components/font-family/index.js +1 -1
  63. package/build/components/font-family/index.js.map +1 -1
  64. package/build/components/font-sizes/with-font-sizes.js +17 -4
  65. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  66. package/build/components/image-editor/cropper.js +4 -3
  67. package/build/components/image-editor/cropper.js.map +1 -1
  68. package/build/components/image-editor/index.js +3 -1
  69. package/build/components/image-editor/index.js.map +1 -1
  70. package/build/components/image-size-control/index.js +3 -1
  71. package/build/components/image-size-control/index.js.map +1 -1
  72. package/build/components/index.js +22 -6
  73. package/build/components/index.js.map +1 -1
  74. package/build/components/index.native.js +11 -4
  75. package/build/components/index.native.js.map +1 -1
  76. package/build/components/inserter/block-types-tab.native.js +30 -16
  77. package/build/components/inserter/block-types-tab.native.js.map +1 -1
  78. package/build/components/inserter/index.native.js +8 -3
  79. package/build/components/inserter/index.native.js.map +1 -1
  80. package/build/components/inserter/preview-panel.js +8 -8
  81. package/build/components/inserter/preview-panel.js.map +1 -1
  82. package/build/components/inserter/reusable-blocks-tab.native.js +5 -1
  83. package/build/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  84. package/build/components/inserter/search-items.js +22 -4
  85. package/build/components/inserter/search-items.js.map +1 -1
  86. package/build/components/inserter/search-results.native.js +5 -2
  87. package/build/components/inserter/search-results.native.js.map +1 -1
  88. package/build/components/inserter/utils.native.js +21 -0
  89. package/build/components/inserter/utils.native.js.map +1 -1
  90. package/build/components/inserter-list-item/index.js +7 -20
  91. package/build/components/inserter-list-item/index.js.map +1 -1
  92. package/build/components/letter-spacing-control/index.js +6 -3
  93. package/build/components/letter-spacing-control/index.js.map +1 -1
  94. package/build/components/line-height-control/index.js +6 -3
  95. package/build/components/line-height-control/index.js.map +1 -1
  96. package/build/components/link-control/is-url-like.js +1 -7
  97. package/build/components/link-control/is-url-like.js.map +1 -1
  98. package/build/components/link-control/link-preview.js +0 -1
  99. package/build/components/link-control/link-preview.js.map +1 -1
  100. package/build/components/link-control/use-search-handler.js +1 -7
  101. package/build/components/link-control/use-search-handler.js.map +1 -1
  102. package/build/components/list-view/block-select-button.js +5 -2
  103. package/build/components/list-view/block-select-button.js.map +1 -1
  104. package/build/components/list-view/branch.js +1 -7
  105. package/build/components/list-view/branch.js.map +1 -1
  106. package/build/components/list-view/expander.js +3 -1
  107. package/build/components/list-view/expander.js.map +1 -1
  108. package/build/components/list-view/use-block-selection.js +1 -7
  109. package/build/components/list-view/use-block-selection.js.map +1 -1
  110. package/build/components/media-upload/index.native.js +8 -3
  111. package/build/components/media-upload/index.native.js.map +1 -1
  112. package/build/components/observe-typing/index.js +22 -8
  113. package/build/components/observe-typing/index.js.map +1 -1
  114. package/build/components/preview-options/index.js +2 -2
  115. package/build/components/preview-options/index.js.map +1 -1
  116. package/build/components/{use-no-recursive-renders → recursion-provider}/index.js +40 -18
  117. package/build/components/recursion-provider/index.js.map +1 -0
  118. package/build/components/rich-text/format-toolbar-container.js +61 -12
  119. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  120. package/build/components/rich-text/index.js +8 -2
  121. package/build/components/rich-text/index.js.map +1 -1
  122. package/build/components/rich-text/index.native.js +3 -1
  123. package/build/components/rich-text/index.native.js.map +1 -1
  124. package/build/components/rich-text/use-before-input-rules.js +110 -0
  125. package/build/components/rich-text/use-before-input-rules.js.map +1 -0
  126. package/build/components/rich-text/use-enter.js +0 -4
  127. package/build/components/rich-text/use-enter.js.map +1 -1
  128. package/build/components/rich-text/use-format-types.js +39 -22
  129. package/build/components/rich-text/use-format-types.js.map +1 -1
  130. package/build/components/spacing-sizes-control/all-input-control.js +53 -0
  131. package/build/components/spacing-sizes-control/all-input-control.js.map +1 -0
  132. package/build/components/spacing-sizes-control/axial-input-controls.js +69 -0
  133. package/build/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
  134. package/build/components/spacing-sizes-control/index.js +100 -0
  135. package/build/components/spacing-sizes-control/index.js.map +1 -0
  136. package/build/components/spacing-sizes-control/input-controls.js +52 -0
  137. package/build/components/spacing-sizes-control/input-controls.js.map +1 -0
  138. package/build/components/spacing-sizes-control/linked-button.js +38 -0
  139. package/build/components/spacing-sizes-control/linked-button.js.map +1 -0
  140. package/build/components/spacing-sizes-control/spacing-input-control.js +208 -0
  141. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
  142. package/build/components/spacing-sizes-control/utils.js +202 -0
  143. package/build/components/spacing-sizes-control/utils.js.map +1 -0
  144. package/build/components/text-decoration-control/index.js +3 -1
  145. package/build/components/text-decoration-control/index.js.map +1 -1
  146. package/build/components/text-transform-control/index.js +3 -1
  147. package/build/components/text-transform-control/index.js.map +1 -1
  148. package/build/components/url-input/index.js +1 -1
  149. package/build/components/url-input/index.js.map +1 -1
  150. package/build/components/url-popover/image-url-input-ui.js +4 -1
  151. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  152. package/build/components/writing-flow/use-arrow-nav.js +4 -25
  153. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  154. package/build/components/writing-flow/use-drag-selection.js +9 -2
  155. package/build/components/writing-flow/use-drag-selection.js.map +1 -1
  156. package/build/components/writing-flow/use-multi-selection.js +4 -2
  157. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  158. package/build/components/writing-flow/use-select-all.js +3 -1
  159. package/build/components/writing-flow/use-select-all.js.map +1 -1
  160. package/build/components/writing-flow/use-selection-observer.js +10 -2
  161. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  162. package/build/components/writing-flow/use-tab-nav.js +1 -1
  163. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  164. package/build/hooks/border-radius.js +2 -7
  165. package/build/hooks/border-radius.js.map +1 -1
  166. package/build/hooks/border.js +2 -2
  167. package/build/hooks/border.js.map +1 -1
  168. package/build/hooks/color.js +4 -1
  169. package/build/hooks/color.js.map +1 -1
  170. package/build/hooks/dimensions.js +15 -0
  171. package/build/hooks/dimensions.js.map +1 -1
  172. package/build/hooks/duotone.js +4 -4
  173. package/build/hooks/duotone.js.map +1 -1
  174. package/build/hooks/gap.js +6 -4
  175. package/build/hooks/gap.js.map +1 -1
  176. package/build/hooks/generated-class-name.js +1 -7
  177. package/build/hooks/generated-class-name.js.map +1 -1
  178. package/build/hooks/layout.js +42 -15
  179. package/build/hooks/layout.js.map +1 -1
  180. package/build/hooks/margin.js +28 -12
  181. package/build/hooks/margin.js.map +1 -1
  182. package/build/hooks/padding.js +19 -8
  183. package/build/hooks/padding.js.map +1 -1
  184. package/build/hooks/style.js +40 -76
  185. package/build/hooks/style.js.map +1 -1
  186. package/build/layouts/constrained.js +215 -0
  187. package/build/layouts/constrained.js.map +1 -0
  188. package/build/layouts/flex.js +1 -1
  189. package/build/layouts/flex.js.map +1 -1
  190. package/build/layouts/flow.js +6 -145
  191. package/build/layouts/flow.js.map +1 -1
  192. package/build/layouts/index.js +3 -1
  193. package/build/layouts/index.js.map +1 -1
  194. package/build/layouts/utils.js +43 -0
  195. package/build/layouts/utils.js.map +1 -1
  196. package/build/store/actions.js +25 -3
  197. package/build/store/actions.js.map +1 -1
  198. package/build/store/selectors.js +4 -6
  199. package/build/store/selectors.js.map +1 -1
  200. package/build/utils/block-variation-transforms.js +15 -9
  201. package/build/utils/block-variation-transforms.js.map +1 -1
  202. package/build/utils/pasting.js +9 -1
  203. package/build/utils/pasting.js.map +1 -1
  204. package/build-module/components/block-alignment-control/use-available-alignments.js +1 -1
  205. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  206. package/build-module/components/block-edit-visually-button/index.js +35 -0
  207. package/build-module/components/block-edit-visually-button/index.js.map +1 -0
  208. package/build-module/components/block-list/block.js +13 -3
  209. package/build-module/components/block-list/block.js.map +1 -1
  210. package/build-module/components/block-list/index.native.js +1 -1
  211. package/build-module/components/block-list/index.native.js.map +1 -1
  212. package/build-module/components/block-lock/modal.js +2 -2
  213. package/build-module/components/block-lock/modal.js.map +1 -1
  214. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +2 -2
  215. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  216. package/build-module/components/block-mover/mover-description.js +97 -33
  217. package/build-module/components/block-mover/mover-description.js.map +1 -1
  218. package/build-module/components/block-popover/inbetween.js +5 -3
  219. package/build-module/components/block-popover/inbetween.js.map +1 -1
  220. package/build-module/components/block-settings-menu/index.js +3 -6
  221. package/build-module/components/block-settings-menu/index.js.map +1 -1
  222. package/build-module/components/block-settings-menu-controls/index.js +2 -2
  223. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  224. package/build-module/components/block-styles/index.js +4 -7
  225. package/build-module/components/block-styles/index.js.map +1 -1
  226. package/build-module/components/block-styles/preview.native.js +2 -3
  227. package/build-module/components/block-styles/preview.native.js.map +1 -1
  228. package/build-module/components/block-switcher/index.js +10 -16
  229. package/build-module/components/block-switcher/index.js.map +1 -1
  230. package/build-module/components/block-toolbar/index.js +4 -1
  231. package/build-module/components/block-toolbar/index.js.map +1 -1
  232. package/build-module/components/block-tools/block-selection-button.js +1 -7
  233. package/build-module/components/block-tools/block-selection-button.js.map +1 -1
  234. package/build-module/components/block-tools/index.js +4 -1
  235. package/build-module/components/block-tools/index.js.map +1 -1
  236. package/build-module/components/block-types-list/index.js +1 -1
  237. package/build-module/components/block-types-list/index.js.map +1 -1
  238. package/build-module/components/block-types-list/index.native.js +67 -25
  239. package/build-module/components/block-types-list/index.native.js.map +1 -1
  240. package/build-module/components/border-radius-control/all-input-control.js +32 -4
  241. package/build-module/components/border-radius-control/all-input-control.js.map +1 -1
  242. package/build-module/components/border-radius-control/index.js +24 -8
  243. package/build-module/components/border-radius-control/index.js.map +1 -1
  244. package/build-module/components/border-radius-control/input-controls.js +22 -7
  245. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  246. package/build-module/components/border-radius-control/utils.js +13 -16
  247. package/build-module/components/border-radius-control/utils.js.map +1 -1
  248. package/build-module/components/colors/utils.js +7 -3
  249. package/build-module/components/colors/utils.js.map +1 -1
  250. package/build-module/components/colors/with-colors.js +16 -3
  251. package/build-module/components/colors/with-colors.js.map +1 -1
  252. package/build-module/components/colors-gradients/control.js +8 -4
  253. package/build-module/components/colors-gradients/control.js.map +1 -1
  254. package/build-module/components/colors-gradients/dropdown.js +10 -4
  255. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  256. package/build-module/components/copy-handler/index.js +7 -1
  257. package/build-module/components/copy-handler/index.js.map +1 -1
  258. package/build-module/components/date-format-picker/index.js +2 -6
  259. package/build-module/components/date-format-picker/index.js.map +1 -1
  260. package/build-module/components/duotone/components.js +5 -5
  261. package/build-module/components/duotone/components.js.map +1 -1
  262. package/build-module/components/font-appearance-control/index.js +7 -4
  263. package/build-module/components/font-appearance-control/index.js.map +1 -1
  264. package/build-module/components/font-family/index.js +1 -1
  265. package/build-module/components/font-family/index.js.map +1 -1
  266. package/build-module/components/font-sizes/with-font-sizes.js +16 -3
  267. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  268. package/build-module/components/image-editor/cropper.js +4 -3
  269. package/build-module/components/image-editor/cropper.js.map +1 -1
  270. package/build-module/components/image-editor/index.js +3 -1
  271. package/build-module/components/image-editor/index.js.map +1 -1
  272. package/build-module/components/image-size-control/index.js +3 -1
  273. package/build-module/components/image-size-control/index.js.map +1 -1
  274. package/build-module/components/index.js +2 -1
  275. package/build-module/components/index.js.map +1 -1
  276. package/build-module/components/index.native.js +1 -1
  277. package/build-module/components/index.native.js.map +1 -1
  278. package/build-module/components/inserter/block-types-tab.native.js +31 -15
  279. package/build-module/components/inserter/block-types-tab.native.js.map +1 -1
  280. package/build-module/components/inserter/index.native.js +9 -2
  281. package/build-module/components/inserter/index.native.js.map +1 -1
  282. package/build-module/components/inserter/preview-panel.js +9 -9
  283. package/build-module/components/inserter/preview-panel.js.map +1 -1
  284. package/build-module/components/inserter/reusable-blocks-tab.native.js +6 -2
  285. package/build-module/components/inserter/reusable-blocks-tab.native.js.map +1 -1
  286. package/build-module/components/inserter/search-items.js +19 -5
  287. package/build-module/components/inserter/search-items.js.map +1 -1
  288. package/build-module/components/inserter/search-results.native.js +6 -3
  289. package/build-module/components/inserter/search-results.native.js.map +1 -1
  290. package/build-module/components/inserter/utils.native.js +19 -0
  291. package/build-module/components/inserter/utils.native.js.map +1 -1
  292. package/build-module/components/inserter-list-item/index.js +5 -18
  293. package/build-module/components/inserter-list-item/index.js.map +1 -1
  294. package/build-module/components/letter-spacing-control/index.js +5 -3
  295. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  296. package/build-module/components/line-height-control/index.js +5 -3
  297. package/build-module/components/line-height-control/index.js.map +1 -1
  298. package/build-module/components/link-control/is-url-like.js +1 -6
  299. package/build-module/components/link-control/is-url-like.js.map +1 -1
  300. package/build-module/components/link-control/link-preview.js +0 -1
  301. package/build-module/components/link-control/link-preview.js.map +1 -1
  302. package/build-module/components/link-control/use-search-handler.js +1 -6
  303. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  304. package/build-module/components/list-view/block-select-button.js +5 -2
  305. package/build-module/components/list-view/block-select-button.js.map +1 -1
  306. package/build-module/components/list-view/branch.js +1 -6
  307. package/build-module/components/list-view/branch.js.map +1 -1
  308. package/build-module/components/list-view/expander.js +3 -2
  309. package/build-module/components/list-view/expander.js.map +1 -1
  310. package/build-module/components/list-view/use-block-selection.js +1 -6
  311. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  312. package/build-module/components/media-upload/index.native.js +9 -2
  313. package/build-module/components/media-upload/index.native.js.map +1 -1
  314. package/build-module/components/observe-typing/index.js +22 -8
  315. package/build-module/components/observe-typing/index.js.map +1 -1
  316. package/build-module/components/preview-options/index.js +2 -2
  317. package/build-module/components/preview-options/index.js.map +1 -1
  318. package/build-module/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -19
  319. package/build-module/components/recursion-provider/index.js.map +1 -0
  320. package/build-module/components/rich-text/format-toolbar-container.js +58 -12
  321. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  322. package/build-module/components/rich-text/index.js +7 -2
  323. package/build-module/components/rich-text/index.js.map +1 -1
  324. package/build-module/components/rich-text/index.native.js +3 -1
  325. package/build-module/components/rich-text/index.native.js.map +1 -1
  326. package/build-module/components/rich-text/use-before-input-rules.js +96 -0
  327. package/build-module/components/rich-text/use-before-input-rules.js.map +1 -0
  328. package/build-module/components/rich-text/use-enter.js +0 -4
  329. package/build-module/components/rich-text/use-enter.js.map +1 -1
  330. package/build-module/components/rich-text/use-format-types.js +39 -22
  331. package/build-module/components/rich-text/use-format-types.js.map +1 -1
  332. package/build-module/components/spacing-sizes-control/all-input-control.js +41 -0
  333. package/build-module/components/spacing-sizes-control/all-input-control.js.map +1 -0
  334. package/build-module/components/spacing-sizes-control/axial-input-controls.js +57 -0
  335. package/build-module/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
  336. package/build-module/components/spacing-sizes-control/index.js +83 -0
  337. package/build-module/components/spacing-sizes-control/index.js.map +1 -0
  338. package/build-module/components/spacing-sizes-control/input-controls.js +41 -0
  339. package/build-module/components/spacing-sizes-control/input-controls.js.map +1 -0
  340. package/build-module/components/spacing-sizes-control/linked-button.js +28 -0
  341. package/build-module/components/spacing-sizes-control/linked-button.js.map +1 -0
  342. package/build-module/components/spacing-sizes-control/spacing-input-control.js +192 -0
  343. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
  344. package/build-module/components/spacing-sizes-control/utils.js +174 -0
  345. package/build-module/components/spacing-sizes-control/utils.js.map +1 -0
  346. package/build-module/components/text-decoration-control/index.js +4 -2
  347. package/build-module/components/text-decoration-control/index.js.map +1 -1
  348. package/build-module/components/text-transform-control/index.js +4 -2
  349. package/build-module/components/text-transform-control/index.js.map +1 -1
  350. package/build-module/components/url-input/index.js +1 -1
  351. package/build-module/components/url-input/index.js.map +1 -1
  352. package/build-module/components/url-popover/image-url-input-ui.js +4 -1
  353. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  354. package/build-module/components/writing-flow/use-arrow-nav.js +5 -26
  355. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  356. package/build-module/components/writing-flow/use-drag-selection.js +9 -2
  357. package/build-module/components/writing-flow/use-drag-selection.js.map +1 -1
  358. package/build-module/components/writing-flow/use-multi-selection.js +4 -2
  359. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  360. package/build-module/components/writing-flow/use-select-all.js +3 -1
  361. package/build-module/components/writing-flow/use-select-all.js.map +1 -1
  362. package/build-module/components/writing-flow/use-selection-observer.js +10 -2
  363. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  364. package/build-module/components/writing-flow/use-tab-nav.js +1 -1
  365. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  366. package/build-module/hooks/border-radius.js +2 -7
  367. package/build-module/hooks/border-radius.js.map +1 -1
  368. package/build-module/hooks/border.js +2 -2
  369. package/build-module/hooks/border.js.map +1 -1
  370. package/build-module/hooks/color.js +4 -1
  371. package/build-module/hooks/color.js.map +1 -1
  372. package/build-module/hooks/dimensions.js +13 -0
  373. package/build-module/hooks/dimensions.js.map +1 -1
  374. package/build-module/hooks/duotone.js +4 -4
  375. package/build-module/hooks/duotone.js.map +1 -1
  376. package/build-module/hooks/gap.js +3 -2
  377. package/build-module/hooks/gap.js.map +1 -1
  378. package/build-module/hooks/generated-class-name.js +1 -6
  379. package/build-module/hooks/generated-class-name.js.map +1 -1
  380. package/build-module/hooks/layout.js +42 -15
  381. package/build-module/hooks/layout.js.map +1 -1
  382. package/build-module/hooks/margin.js +26 -12
  383. package/build-module/hooks/margin.js.map +1 -1
  384. package/build-module/hooks/padding.js +17 -8
  385. package/build-module/hooks/padding.js.map +1 -1
  386. package/build-module/hooks/style.js +44 -81
  387. package/build-module/hooks/style.js.map +1 -1
  388. package/build-module/layouts/constrained.js +197 -0
  389. package/build-module/layouts/constrained.js.map +1 -0
  390. package/build-module/layouts/flex.js +1 -1
  391. package/build-module/layouts/flex.js.map +1 -1
  392. package/build-module/layouts/flow.js +7 -140
  393. package/build-module/layouts/flow.js.map +1 -1
  394. package/build-module/layouts/index.js +2 -1
  395. package/build-module/layouts/index.js.map +1 -1
  396. package/build-module/layouts/utils.js +40 -0
  397. package/build-module/layouts/utils.js.map +1 -1
  398. package/build-module/store/actions.js +25 -3
  399. package/build-module/store/actions.js.map +1 -1
  400. package/build-module/store/selectors.js +5 -7
  401. package/build-module/store/selectors.js.map +1 -1
  402. package/build-module/utils/block-variation-transforms.js +14 -7
  403. package/build-module/utils/block-variation-transforms.js.map +1 -1
  404. package/build-module/utils/pasting.js +9 -1
  405. package/build-module/utils/pasting.js.map +1 -1
  406. package/build-style/style-rtl.css +154 -27
  407. package/build-style/style.css +154 -27
  408. package/package.json +30 -28
  409. package/src/components/block-alignment-control/use-available-alignments.js +1 -1
  410. package/src/components/block-edit-visually-button/index.js +39 -0
  411. package/src/components/block-list/block.js +13 -2
  412. package/src/components/block-list/index.native.js +1 -1
  413. package/src/components/block-lock/modal.js +5 -5
  414. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +3 -3
  415. package/src/components/block-mover/mover-description.js +131 -48
  416. package/src/components/block-mover/test/mover-description.js +55 -3
  417. package/src/components/block-popover/inbetween.js +5 -1
  418. package/src/components/block-popover/style.scss +25 -2
  419. package/src/components/block-settings-menu/index.js +11 -15
  420. package/src/components/block-settings-menu-controls/index.js +2 -2
  421. package/src/components/block-styles/index.js +4 -7
  422. package/src/components/block-styles/preview.native.js +2 -2
  423. package/src/components/block-styles/style.scss +10 -0
  424. package/src/components/block-switcher/index.js +9 -13
  425. package/src/components/block-switcher/test/index.js +1 -0
  426. package/src/components/block-toolbar/index.js +2 -0
  427. package/src/components/block-tools/block-selection-button.js +0 -5
  428. package/src/components/block-tools/index.js +4 -1
  429. package/src/components/block-types-list/index.js +1 -1
  430. package/src/components/block-types-list/index.native.js +76 -24
  431. package/src/components/block-types-list/style.native.scss +18 -0
  432. package/src/components/border-radius-control/all-input-control.js +41 -4
  433. package/src/components/border-radius-control/index.js +29 -6
  434. package/src/components/border-radius-control/input-controls.js +40 -13
  435. package/src/components/border-radius-control/test/utils.js +22 -60
  436. package/src/components/border-radius-control/utils.js +12 -16
  437. package/src/components/color-palette/test/__snapshots__/control.js.snap +91 -79
  438. package/src/components/colors/test/__snapshots__/with-colors.js.snap +1 -1
  439. package/src/components/colors/test/with-colors.js +1 -1
  440. package/src/components/colors/utils.js +5 -2
  441. package/src/components/colors/with-colors.js +11 -1
  442. package/src/components/colors-gradients/control.js +13 -8
  443. package/src/components/colors-gradients/dropdown.js +14 -3
  444. package/src/components/colors-gradients/style.scss +33 -12
  445. package/src/components/colors-gradients/test/control.js +3 -3
  446. package/src/components/copy-handler/index.js +18 -0
  447. package/src/components/date-format-picker/index.js +12 -14
  448. package/src/components/date-format-picker/style.scss +0 -4
  449. package/src/components/duotone/components.js +5 -5
  450. package/src/components/duotone-control/style.scss +0 -4
  451. package/src/components/font-appearance-control/index.js +3 -0
  452. package/src/components/font-appearance-control/style.scss +0 -2
  453. package/src/components/font-family/index.js +1 -1
  454. package/src/components/font-sizes/with-font-sizes.js +11 -1
  455. package/src/components/image-editor/cropper.js +9 -3
  456. package/src/components/image-editor/index.js +2 -0
  457. package/src/components/image-size-control/README.md +7 -0
  458. package/src/components/image-size-control/index.js +2 -0
  459. package/src/components/index.js +5 -1
  460. package/src/components/index.native.js +4 -1
  461. package/src/components/inserter/block-types-tab.native.js +42 -21
  462. package/src/components/inserter/index.native.js +7 -2
  463. package/src/components/inserter/preview-panel.js +6 -14
  464. package/src/components/inserter/reusable-blocks-tab.native.js +4 -2
  465. package/src/components/inserter/search-items.js +17 -5
  466. package/src/components/inserter/search-results.native.js +4 -2
  467. package/src/components/inserter/test/block-types-tab.native.js +2 -0
  468. package/src/components/inserter/test/utils.native.js +37 -0
  469. package/src/components/inserter/utils.native.js +11 -0
  470. package/src/components/inserter-list-item/index.js +5 -18
  471. package/src/components/letter-spacing-control/index.js +2 -0
  472. package/src/components/line-height-control/index.js +2 -0
  473. package/src/components/link-control/is-url-like.js +1 -6
  474. package/src/components/link-control/link-preview.js +0 -1
  475. package/src/components/link-control/test/index.js +540 -893
  476. package/src/components/link-control/use-search-handler.js +1 -6
  477. package/src/components/list-view/block-select-button.js +7 -2
  478. package/src/components/list-view/branch.js +1 -6
  479. package/src/components/list-view/expander.js +4 -2
  480. package/src/components/list-view/style.scss +11 -4
  481. package/src/components/list-view/use-block-selection.js +2 -8
  482. package/src/components/media-replace-flow/style.scss +1 -0
  483. package/src/components/media-upload/index.native.js +7 -3
  484. package/src/components/observe-typing/index.js +17 -14
  485. package/src/components/preview-options/index.js +2 -2
  486. package/src/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -28
  487. package/src/components/{use-no-recursive-renders/test/use-no-recursive-renders.js → recursion-provider/test/index.js} +5 -6
  488. package/src/components/rich-text/README.md +13 -1
  489. package/src/components/rich-text/format-toolbar-container.js +63 -14
  490. package/src/components/rich-text/index.js +3 -0
  491. package/src/components/rich-text/index.native.js +2 -0
  492. package/src/components/rich-text/use-before-input-rules.js +91 -0
  493. package/src/components/rich-text/use-enter.js +0 -3
  494. package/src/components/rich-text/use-format-types.js +38 -17
  495. package/src/components/spacing-sizes-control/all-input-control.js +40 -0
  496. package/src/components/spacing-sizes-control/axial-input-controls.js +62 -0
  497. package/src/components/spacing-sizes-control/index.js +91 -0
  498. package/src/components/spacing-sizes-control/input-controls.js +46 -0
  499. package/src/components/spacing-sizes-control/linked-button.js +25 -0
  500. package/src/components/spacing-sizes-control/spacing-input-control.js +280 -0
  501. package/src/components/spacing-sizes-control/style.scss +122 -0
  502. package/src/components/spacing-sizes-control/test/utils.js +156 -0
  503. package/src/components/spacing-sizes-control/utils.js +195 -0
  504. package/src/components/text-decoration-control/index.js +4 -2
  505. package/src/components/text-transform-control/index.js +4 -2
  506. package/src/components/url-input/index.js +1 -1
  507. package/src/components/url-input/style.scss +2 -2
  508. package/src/components/url-popover/image-url-input-ui.js +3 -0
  509. package/src/components/url-popover/style.scss +0 -3
  510. package/src/components/writing-flow/use-arrow-nav.js +4 -33
  511. package/src/components/writing-flow/use-drag-selection.js +7 -1
  512. package/src/components/writing-flow/use-multi-selection.js +4 -1
  513. package/src/components/writing-flow/use-select-all.js +2 -1
  514. package/src/components/writing-flow/use-selection-observer.js +10 -2
  515. package/src/components/writing-flow/use-tab-nav.js +1 -1
  516. package/src/hooks/border-radius.js +2 -6
  517. package/src/hooks/border.js +2 -2
  518. package/src/hooks/color.js +13 -3
  519. package/src/hooks/dimensions.js +15 -0
  520. package/src/hooks/duotone.js +4 -4
  521. package/src/hooks/gap.js +7 -2
  522. package/src/hooks/generated-class-name.js +6 -9
  523. package/src/hooks/layout.js +66 -18
  524. package/src/hooks/margin.js +49 -17
  525. package/src/hooks/padding.js +41 -14
  526. package/src/hooks/style.js +42 -86
  527. package/src/hooks/test/gap.js +22 -0
  528. package/src/hooks/typography.scss +0 -1
  529. package/src/layouts/constrained.js +217 -0
  530. package/src/layouts/flex.js +1 -1
  531. package/src/layouts/flow.js +6 -151
  532. package/src/layouts/index.js +2 -1
  533. package/src/layouts/test/constrained.js +21 -0
  534. package/src/layouts/utils.js +34 -0
  535. package/src/store/actions.js +32 -4
  536. package/src/store/selectors.js +5 -4
  537. package/src/style.scss +1 -0
  538. package/src/utils/block-variation-transforms.js +13 -6
  539. package/src/utils/pasting.js +10 -1
  540. package/src/utils/test/block-variation-transforms.js +24 -0
  541. package/src/utils/test/pasting.js +10 -0
  542. package/build/components/block-settings-menu/block-edit-visually-button.js +0 -70
  543. package/build/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
  544. package/build/components/use-no-recursive-renders/index.js.map +0 -1
  545. package/build-module/components/block-settings-menu/block-edit-visually-button.js +0 -56
  546. package/build-module/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
  547. package/build-module/components/use-no-recursive-renders/index.js.map +0 -1
  548. package/src/components/block-settings-menu/block-edit-visually-button.js +0 -52
@@ -4,17 +4,17 @@ import { createElement, Fragment } from "@wordpress/element";
4
4
  /**
5
5
  * External dependencies
6
6
  */
7
- import { get, has, isEmpty, kebabCase, omit } from 'lodash';
7
+ import { omit } from 'lodash';
8
8
  import classnames from 'classnames';
9
9
  /**
10
10
  * WordPress dependencies
11
11
  */
12
12
 
13
- import { useContext, createPortal } from '@wordpress/element';
13
+ import { useContext, useMemo, createPortal } from '@wordpress/element';
14
14
  import { addFilter } from '@wordpress/hooks';
15
- import { getBlockSupport, hasBlockSupport, __EXPERIMENTAL_STYLE_PROPERTY as STYLE_PROPERTY, __EXPERIMENTAL_ELEMENTS as ELEMENTS } from '@wordpress/blocks';
15
+ import { getBlockSupport, hasBlockSupport, __EXPERIMENTAL_ELEMENTS as ELEMENTS } from '@wordpress/blocks';
16
16
  import { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';
17
- import { getCSSRules } from '@wordpress/style-engine';
17
+ import { getCSSRules, compileCSS } from '@wordpress/style-engine';
18
18
  /**
19
19
  * Internal dependencies
20
20
  */
@@ -29,21 +29,6 @@ import { shouldSkipSerialization } from './utils';
29
29
  const styleSupportKeys = [...TYPOGRAPHY_SUPPORT_KEYS, BORDER_SUPPORT_KEY, COLOR_SUPPORT_KEY, SPACING_SUPPORT_KEY];
30
30
 
31
31
  const hasStyleSupport = blockType => styleSupportKeys.some(key => hasBlockSupport(blockType, key));
32
-
33
- const VARIABLE_REFERENCE_PREFIX = 'var:';
34
- const VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE = '|';
35
- const VARIABLE_PATH_SEPARATOR_TOKEN_STYLE = '--';
36
-
37
- function compileStyleValue(uncompiledValue) {
38
- var _uncompiledValue$star;
39
-
40
- if (uncompiledValue !== null && uncompiledValue !== void 0 && (_uncompiledValue$star = uncompiledValue.startsWith) !== null && _uncompiledValue$star !== void 0 && _uncompiledValue$star.call(uncompiledValue, VARIABLE_REFERENCE_PREFIX)) {
41
- const variable = uncompiledValue.slice(VARIABLE_REFERENCE_PREFIX.length).split(VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE).join(VARIABLE_PATH_SEPARATOR_TOKEN_STYLE);
42
- return `var(--wp--${variable})`;
43
- }
44
-
45
- return uncompiledValue;
46
- }
47
32
  /**
48
33
  * Returns the inline styles to add depending on the style object
49
34
  *
@@ -55,61 +40,14 @@ function compileStyleValue(uncompiledValue) {
55
40
 
56
41
  export function getInlineStyles() {
57
42
  let styles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
58
- const ignoredStyles = ['spacing.blockGap'];
59
- const output = {};
60
- Object.keys(STYLE_PROPERTY).forEach(propKey => {
61
- const path = STYLE_PROPERTY[propKey].value;
62
- const subPaths = STYLE_PROPERTY[propKey].properties; // Ignore styles on elements because they are handled on the server.
63
-
64
- if (has(styles, path) && 'elements' !== (path === null || path === void 0 ? void 0 : path[0])) {
65
- // Checking if style value is a string allows for shorthand css
66
- // option and backwards compatibility for border radius support.
67
- const styleValue = get(styles, path);
68
-
69
- if (!STYLE_PROPERTY[propKey].useEngine) {
70
- if (!!subPaths && typeof styleValue !== 'string') {
71
- Object.entries(subPaths).forEach(entry => {
72
- const [name, subPath] = entry;
73
- const value = get(styleValue, [subPath]);
74
-
75
- if (value) {
76
- output[name] = compileStyleValue(value);
77
- }
78
- });
79
- } else if (!ignoredStyles.includes(path.join('.'))) {
80
- output[propKey] = compileStyleValue(get(styles, path));
81
- }
82
- }
83
- }
84
- }); // The goal is to move everything to server side generated engine styles
43
+ const output = {}; // The goal is to move everything to server side generated engine styles
85
44
  // This is temporary as we absorb more and more styles into the engine.
86
45
 
87
- const extraRules = getCSSRules(styles);
88
- extraRules.forEach(rule => {
46
+ getCSSRules(styles).forEach(rule => {
89
47
  output[rule.key] = rule.value;
90
48
  });
91
49
  return output;
92
50
  }
93
-
94
- function compileElementsStyles(selector) {
95
- let elements = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
96
- return Object.entries(elements).map(_ref => {
97
- let [element, styles] = _ref;
98
- const elementStyles = getInlineStyles(styles);
99
-
100
- if (!isEmpty(elementStyles)) {
101
- // The .editor-styles-wrapper selector is required on elements styles. As it is
102
- // added to all other editor styles, not providing it causes reset and global
103
- // styles to override element styles because of higher specificity.
104
- return [`.editor-styles-wrapper .${selector} ${ELEMENTS[element]}{`, ...Object.entries(elementStyles).map(_ref2 => {
105
- let [cssProperty, value] = _ref2;
106
- return `\t${kebabCase(cssProperty)}: ${value};`;
107
- }), '}'].join('\n');
108
- }
109
-
110
- return '';
111
- }).join('\n');
112
- }
113
51
  /**
114
52
  * Filters registered block settings, extending attributes to include `style` attribute.
115
53
  *
@@ -118,7 +56,6 @@ function compileElementsStyles(selector) {
118
56
  * @return {Object} Filtered block settings.
119
57
  */
120
58
 
121
-
122
59
  function addAttribute(settings) {
123
60
  if (!hasStyleSupport(settings)) {
124
61
  return settings;
@@ -202,8 +139,8 @@ export function addSaveProps(props, blockType, attributes) {
202
139
  let {
203
140
  style
204
141
  } = attributes;
205
- Object.entries(skipPaths).forEach(_ref3 => {
206
- let [indicator, path] = _ref3;
142
+ Object.entries(skipPaths).forEach(_ref => {
143
+ let [indicator, path] = _ref;
207
144
  const skipSerialization = getBlockSupport(blockType, indicator);
208
145
 
209
146
  if (skipSerialization === true) {
@@ -264,30 +201,56 @@ export const withBlockControls = createHigherOrderComponent(BlockEdit => props =
264
201
  return createElement(Fragment, null, shouldDisplayControls && createElement(Fragment, null, createElement(ColorEdit, props), createElement(TypographyPanel, props), createElement(BorderPanel, props), createElement(DimensionsPanel, props)), createElement(BlockEdit, props));
265
202
  }, 'withToolbarControls');
266
203
  /**
267
- * Override the default block element to include duotone styles.
204
+ * Override the default block element to include elements styles.
268
205
  *
269
206
  * @param {Function} BlockListBlock Original component
270
207
  * @return {Function} Wrapped component
271
208
  */
272
209
 
273
210
  const withElementsStyles = createHigherOrderComponent(BlockListBlock => props => {
274
- var _props$attributes$sty, _props$attributes$sty2;
211
+ var _props$attributes$sty2, _props$attributes$sty3;
275
212
 
276
213
  const blockElementsContainerIdentifier = `wp-elements-${useInstanceId(BlockListBlock)}`;
277
- const skipLinkColorSerialization = shouldSkipSerialization(props.name, COLOR_SUPPORT_KEY, 'link'); // The Elements API only supports link colors for now,
278
- // hence the specific omission of `link` in the elements styles.
279
- // This might need to be refactored or removed if the Elements API
280
- // changes or `link` supports styles beyond `color`.
214
+ const skipLinkColorSerialization = shouldSkipSerialization(props.name, COLOR_SUPPORT_KEY, 'link');
215
+ const styles = useMemo(() => {
216
+ var _props$attributes$sty;
217
+
218
+ const rawElementsStyles = (_props$attributes$sty = props.attributes.style) === null || _props$attributes$sty === void 0 ? void 0 : _props$attributes$sty.elements;
219
+ const elementCssRules = [];
220
+
221
+ if (rawElementsStyles && Object.keys(rawElementsStyles).length > 0) {
222
+ var _rawElementsStyles$li;
223
+
224
+ // Remove values based on whether serialization has been skipped for a specific style.
225
+ const filteredElementsStyles = { ...rawElementsStyles,
226
+ link: { ...rawElementsStyles.link,
227
+ color: !skipLinkColorSerialization ? (_rawElementsStyles$li = rawElementsStyles.link) === null || _rawElementsStyles$li === void 0 ? void 0 : _rawElementsStyles$li.color : undefined
228
+ }
229
+ };
230
+
231
+ for (const [elementName, elementStyles] of Object.entries(filteredElementsStyles)) {
232
+ const cssRule = compileCSS(elementStyles, {
233
+ // The .editor-styles-wrapper selector is required on elements styles. As it is
234
+ // added to all other editor styles, not providing it causes reset and global
235
+ // styles to override element styles because of higher specificity.
236
+ selector: `.editor-styles-wrapper .${blockElementsContainerIdentifier} ${ELEMENTS[elementName]}`
237
+ });
238
+
239
+ if (!!cssRule) {
240
+ elementCssRules.push(cssRule);
241
+ }
242
+ }
243
+ }
281
244
 
282
- const elements = skipLinkColorSerialization ? omit((_props$attributes$sty = props.attributes.style) === null || _props$attributes$sty === void 0 ? void 0 : _props$attributes$sty.elements, ['link']) : (_props$attributes$sty2 = props.attributes.style) === null || _props$attributes$sty2 === void 0 ? void 0 : _props$attributes$sty2.elements;
283
- const styles = compileElementsStyles(blockElementsContainerIdentifier, elements);
245
+ return elementCssRules.length > 0 ? elementCssRules : undefined;
246
+ }, [(_props$attributes$sty2 = props.attributes.style) === null || _props$attributes$sty2 === void 0 ? void 0 : _props$attributes$sty2.elements]);
284
247
  const element = useContext(BlockList.__unstableElementContext);
285
- return createElement(Fragment, null, elements && element && createPortal(createElement("style", {
248
+ return createElement(Fragment, null, styles && element && createPortal(createElement("style", {
286
249
  dangerouslySetInnerHTML: {
287
250
  __html: styles
288
251
  }
289
252
  }), element), createElement(BlockListBlock, _extends({}, props, {
290
- className: elements ? classnames(props.className, blockElementsContainerIdentifier) : props.className
253
+ className: (_props$attributes$sty3 = props.attributes.style) !== null && _props$attributes$sty3 !== void 0 && _props$attributes$sty3.elements ? classnames(props.className, blockElementsContainerIdentifier) : props.className
291
254
  })));
292
255
  });
293
256
  addFilter('blocks.registerBlockType', 'core/style/addAttribute', addAttribute);
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/hooks/style.js"],"names":["get","has","isEmpty","kebabCase","omit","classnames","useContext","createPortal","addFilter","getBlockSupport","hasBlockSupport","__EXPERIMENTAL_STYLE_PROPERTY","STYLE_PROPERTY","__EXPERIMENTAL_ELEMENTS","ELEMENTS","createHigherOrderComponent","useInstanceId","getCSSRules","BlockList","BORDER_SUPPORT_KEY","BorderPanel","COLOR_SUPPORT_KEY","ColorEdit","TypographyPanel","TYPOGRAPHY_SUPPORT_KEY","TYPOGRAPHY_SUPPORT_KEYS","SPACING_SUPPORT_KEY","DimensionsPanel","useDisplayBlockControls","shouldSkipSerialization","styleSupportKeys","hasStyleSupport","blockType","some","key","VARIABLE_REFERENCE_PREFIX","VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE","VARIABLE_PATH_SEPARATOR_TOKEN_STYLE","compileStyleValue","uncompiledValue","startsWith","variable","slice","length","split","join","getInlineStyles","styles","ignoredStyles","output","Object","keys","forEach","propKey","path","value","subPaths","properties","styleValue","useEngine","entries","entry","name","subPath","includes","extraRules","rule","compileElementsStyles","selector","elements","map","element","elementStyles","cssProperty","addAttribute","settings","attributes","style","assign","type","skipSerializationPathsEdit","skipSerializationPathsSave","renamedFeatures","gradients","addSaveProps","props","skipPaths","indicator","skipSerialization","Array","isArray","featureName","feature","addEditProps","existingGetEditWrapperProps","getEditWrapperProps","withBlockControls","BlockEdit","shouldDisplayControls","withElementsStyles","BlockListBlock","blockElementsContainerIdentifier","skipLinkColorSerialization","__unstableElementContext","__html","className"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { get, has, isEmpty, kebabCase, omit } from 'lodash';\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { useContext, createPortal } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\nimport {\n\tgetBlockSupport,\n\thasBlockSupport,\n\t__EXPERIMENTAL_STYLE_PROPERTY as STYLE_PROPERTY,\n\t__EXPERIMENTAL_ELEMENTS as ELEMENTS,\n} from '@wordpress/blocks';\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { getCSSRules } from '@wordpress/style-engine';\n\n/**\n * Internal dependencies\n */\nimport BlockList from '../components/block-list';\nimport { BORDER_SUPPORT_KEY, BorderPanel } from './border';\nimport { COLOR_SUPPORT_KEY, ColorEdit } from './color';\nimport {\n\tTypographyPanel,\n\tTYPOGRAPHY_SUPPORT_KEY,\n\tTYPOGRAPHY_SUPPORT_KEYS,\n} from './typography';\nimport { SPACING_SUPPORT_KEY, DimensionsPanel } from './dimensions';\nimport useDisplayBlockControls from '../components/use-display-block-controls';\nimport { shouldSkipSerialization } from './utils';\n\nconst styleSupportKeys = [\n\t...TYPOGRAPHY_SUPPORT_KEYS,\n\tBORDER_SUPPORT_KEY,\n\tCOLOR_SUPPORT_KEY,\n\tSPACING_SUPPORT_KEY,\n];\n\nconst hasStyleSupport = ( blockType ) =>\n\tstyleSupportKeys.some( ( key ) => hasBlockSupport( blockType, key ) );\n\nconst VARIABLE_REFERENCE_PREFIX = 'var:';\nconst VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE = '|';\nconst VARIABLE_PATH_SEPARATOR_TOKEN_STYLE = '--';\nfunction compileStyleValue( uncompiledValue ) {\n\tif ( uncompiledValue?.startsWith?.( VARIABLE_REFERENCE_PREFIX ) ) {\n\t\tconst variable = uncompiledValue\n\t\t\t.slice( VARIABLE_REFERENCE_PREFIX.length )\n\t\t\t.split( VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE )\n\t\t\t.join( VARIABLE_PATH_SEPARATOR_TOKEN_STYLE );\n\t\treturn `var(--wp--${ variable })`;\n\t}\n\treturn uncompiledValue;\n}\n\n/**\n * Returns the inline styles to add depending on the style object\n *\n * @param {Object} styles Styles configuration.\n *\n * @return {Object} Flattened CSS variables declaration.\n */\nexport function getInlineStyles( styles = {} ) {\n\tconst ignoredStyles = [ 'spacing.blockGap' ];\n\tconst output = {};\n\tObject.keys( STYLE_PROPERTY ).forEach( ( propKey ) => {\n\t\tconst path = STYLE_PROPERTY[ propKey ].value;\n\t\tconst subPaths = STYLE_PROPERTY[ propKey ].properties;\n\t\t// Ignore styles on elements because they are handled on the server.\n\t\tif ( has( styles, path ) && 'elements' !== path?.[ 0 ] ) {\n\t\t\t// Checking if style value is a string allows for shorthand css\n\t\t\t// option and backwards compatibility for border radius support.\n\t\t\tconst styleValue = get( styles, path );\n\n\t\t\tif ( ! STYLE_PROPERTY[ propKey ].useEngine ) {\n\t\t\t\tif ( !! subPaths && typeof styleValue !== 'string' ) {\n\t\t\t\t\tObject.entries( subPaths ).forEach( ( entry ) => {\n\t\t\t\t\t\tconst [ name, subPath ] = entry;\n\t\t\t\t\t\tconst value = get( styleValue, [ subPath ] );\n\n\t\t\t\t\t\tif ( value ) {\n\t\t\t\t\t\t\toutput[ name ] = compileStyleValue( value );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} else if ( ! ignoredStyles.includes( path.join( '.' ) ) ) {\n\t\t\t\t\toutput[ propKey ] = compileStyleValue(\n\t\t\t\t\t\tget( styles, path )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\n\t// The goal is to move everything to server side generated engine styles\n\t// This is temporary as we absorb more and more styles into the engine.\n\tconst extraRules = getCSSRules( styles );\n\textraRules.forEach( ( rule ) => {\n\t\toutput[ rule.key ] = rule.value;\n\t} );\n\n\treturn output;\n}\n\nfunction compileElementsStyles( selector, elements = {} ) {\n\treturn Object.entries( elements )\n\t\t.map( ( [ element, styles ] ) => {\n\t\t\tconst elementStyles = getInlineStyles( styles );\n\t\t\tif ( ! isEmpty( elementStyles ) ) {\n\t\t\t\t// The .editor-styles-wrapper selector is required on elements styles. As it is\n\t\t\t\t// added to all other editor styles, not providing it causes reset and global\n\t\t\t\t// styles to override element styles because of higher specificity.\n\t\t\t\treturn [\n\t\t\t\t\t`.editor-styles-wrapper .${ selector } ${ ELEMENTS[ element ] }{`,\n\t\t\t\t\t...Object.entries( elementStyles ).map(\n\t\t\t\t\t\t( [ cssProperty, value ] ) =>\n\t\t\t\t\t\t\t`\\t${ kebabCase( cssProperty ) }: ${ value };`\n\t\t\t\t\t),\n\t\t\t\t\t'}',\n\t\t\t\t].join( '\\n' );\n\t\t\t}\n\t\t\treturn '';\n\t\t} )\n\t\t.join( '\\n' );\n}\n\n/**\n * Filters registered block settings, extending attributes to include `style` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addAttribute( settings ) {\n\tif ( ! hasStyleSupport( settings ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default 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 * A dictionary of paths to flag skipping block support serialization as the key,\n * with values providing the style paths to be omitted from serialization.\n *\n * @constant\n * @type {Record<string, string[]>}\n */\nconst skipSerializationPathsEdit = {\n\t[ `${ BORDER_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [ 'border' ],\n\t[ `${ COLOR_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tCOLOR_SUPPORT_KEY,\n\t],\n\t[ `${ TYPOGRAPHY_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t],\n\t[ `${ SPACING_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\t'spacing',\n\t],\n};\n\n/**\n * A dictionary of paths to flag skipping block support serialization as the key,\n * with values providing the style paths to be omitted from serialization.\n *\n * Extends the Edit skip paths to enable skipping additional paths in just\n * the Save component. This allows a block support to be serialized within the\n * editor, while using an alternate approach, such as server-side rendering, when\n * the support is saved.\n *\n * @constant\n * @type {Record<string, string[]>}\n */\nconst skipSerializationPathsSave = {\n\t...skipSerializationPathsEdit,\n\t[ `${ SPACING_SUPPORT_KEY }` ]: [ 'spacing.blockGap' ],\n};\n\n/**\n * A dictionary used to normalize feature names between support flags, style\n * object properties and __experimentSkipSerialization configuration arrays.\n *\n * This allows not having to provide a migration for a support flag and possible\n * backwards compatibility bridges, while still achieving consistency between\n * the support flag and the skip serialization array.\n *\n * @constant\n * @type {Record<string, string>}\n */\nconst renamedFeatures = { gradients: 'gradient' };\n\n/**\n * Override props assigned to save component to inject the CSS variables definition.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Block attributes.\n * @param {?Record<string, string[]>} skipPaths An object of keys and paths to skip serialization.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps(\n\tprops,\n\tblockType,\n\tattributes,\n\tskipPaths = skipSerializationPathsSave\n) {\n\tif ( ! hasStyleSupport( blockType ) ) {\n\t\treturn props;\n\t}\n\n\tlet { style } = attributes;\n\tObject.entries( skipPaths ).forEach( ( [ indicator, path ] ) => {\n\t\tconst skipSerialization = getBlockSupport( blockType, indicator );\n\n\t\tif ( skipSerialization === true ) {\n\t\t\tstyle = omit( style, path );\n\t\t}\n\n\t\tif ( Array.isArray( skipSerialization ) ) {\n\t\t\tskipSerialization.forEach( ( featureName ) => {\n\t\t\t\tconst feature = renamedFeatures[ featureName ] || featureName;\n\t\t\t\tstyle = omit( style, [ [ ...path, feature ] ] );\n\t\t\t} );\n\t\t}\n\t} );\n\n\tprops.style = {\n\t\t...getInlineStyles( style ),\n\t\t...props.style,\n\t};\n\n\treturn props;\n}\n\n/**\n * Filters registered block settings to extend the block edit wrapper\n * to apply the desired styles and classnames properly.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object}.Filtered block settings.\n */\nexport function addEditProps( settings ) {\n\tif ( ! hasStyleSupport( settings ) ) {\n\t\treturn settings;\n\t}\n\n\tconst existingGetEditWrapperProps = settings.getEditWrapperProps;\n\tsettings.getEditWrapperProps = ( attributes ) => {\n\t\tlet props = {};\n\t\tif ( existingGetEditWrapperProps ) {\n\t\t\tprops = existingGetEditWrapperProps( attributes );\n\t\t}\n\n\t\treturn addSaveProps(\n\t\t\tprops,\n\t\t\tsettings,\n\t\t\tattributes,\n\t\t\tskipSerializationPathsEdit\n\t\t);\n\t};\n\n\treturn settings;\n}\n\n/**\n * Override the default edit UI to include new inspector controls for\n * all the custom styles configs.\n *\n * @param {Function} BlockEdit Original component.\n *\n * @return {Function} Wrapped component.\n */\nexport const withBlockControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst shouldDisplayControls = useDisplayBlockControls();\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ shouldDisplayControls && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ColorEdit { ...props } />\n\t\t\t\t\t\t<TypographyPanel { ...props } />\n\t\t\t\t\t\t<BorderPanel { ...props } />\n\t\t\t\t\t\t<DimensionsPanel { ...props } />\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t\t<BlockEdit { ...props } />\n\t\t\t</>\n\t\t);\n\t},\n\t'withToolbarControls'\n);\n\n/**\n * Override the default block element to include duotone styles.\n *\n * @param {Function} BlockListBlock Original component\n * @return {Function} Wrapped component\n */\nconst withElementsStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst blockElementsContainerIdentifier = `wp-elements-${ useInstanceId(\n\t\t\tBlockListBlock\n\t\t) }`;\n\n\t\tconst skipLinkColorSerialization = shouldSkipSerialization(\n\t\t\tprops.name,\n\t\t\tCOLOR_SUPPORT_KEY,\n\t\t\t'link'\n\t\t);\n\n\t\t// The Elements API only supports link colors for now,\n\t\t// hence the specific omission of `link` in the elements styles.\n\t\t// This might need to be refactored or removed if the Elements API\n\t\t// changes or `link` supports styles beyond `color`.\n\t\tconst elements = skipLinkColorSerialization\n\t\t\t? omit( props.attributes.style?.elements, [ 'link' ] )\n\t\t\t: props.attributes.style?.elements;\n\n\t\tconst styles = compileElementsStyles(\n\t\t\tblockElementsContainerIdentifier,\n\t\t\telements\n\t\t);\n\t\tconst element = useContext( BlockList.__unstableElementContext );\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ elements &&\n\t\t\t\t\telement &&\n\t\t\t\t\tcreatePortal(\n\t\t\t\t\t\t<style\n\t\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n\t\t\t\t\t\t\t\t__html: styles,\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>,\n\t\t\t\t\t\telement\n\t\t\t\t\t) }\n\n\t\t\t\t<BlockListBlock\n\t\t\t\t\t{ ...props }\n\t\t\t\t\tclassName={\n\t\t\t\t\t\telements\n\t\t\t\t\t\t\t? classnames(\n\t\t\t\t\t\t\t\t\tprops.className,\n\t\t\t\t\t\t\t\t\tblockElementsContainerIdentifier\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t: props.className\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</>\n\t\t);\n\t}\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/style/addAttribute',\n\taddAttribute\n);\n\naddFilter(\n\t'blocks.getSaveContent.extraProps',\n\t'core/style/addSaveProps',\n\taddSaveProps\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/style/addEditProps',\n\taddEditProps\n);\n\naddFilter(\n\t'editor.BlockEdit',\n\t'core/style/with-block-controls',\n\twithBlockControls\n);\n\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/with-elements-styles',\n\twithElementsStyles\n);\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/hooks/style.js"],"names":["omit","classnames","useContext","useMemo","createPortal","addFilter","getBlockSupport","hasBlockSupport","__EXPERIMENTAL_ELEMENTS","ELEMENTS","createHigherOrderComponent","useInstanceId","getCSSRules","compileCSS","BlockList","BORDER_SUPPORT_KEY","BorderPanel","COLOR_SUPPORT_KEY","ColorEdit","TypographyPanel","TYPOGRAPHY_SUPPORT_KEY","TYPOGRAPHY_SUPPORT_KEYS","SPACING_SUPPORT_KEY","DimensionsPanel","useDisplayBlockControls","shouldSkipSerialization","styleSupportKeys","hasStyleSupport","blockType","some","key","getInlineStyles","styles","output","forEach","rule","value","addAttribute","settings","attributes","style","Object","assign","type","skipSerializationPathsEdit","skipSerializationPathsSave","renamedFeatures","gradients","addSaveProps","props","skipPaths","entries","indicator","path","skipSerialization","Array","isArray","featureName","feature","addEditProps","existingGetEditWrapperProps","getEditWrapperProps","withBlockControls","BlockEdit","shouldDisplayControls","withElementsStyles","BlockListBlock","blockElementsContainerIdentifier","skipLinkColorSerialization","name","rawElementsStyles","elements","elementCssRules","keys","length","filteredElementsStyles","link","color","undefined","elementName","elementStyles","cssRule","selector","push","element","__unstableElementContext","__html","className"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { omit } from 'lodash';\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { useContext, useMemo, createPortal } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\nimport {\n\tgetBlockSupport,\n\thasBlockSupport,\n\t__EXPERIMENTAL_ELEMENTS as ELEMENTS,\n} from '@wordpress/blocks';\nimport { createHigherOrderComponent, useInstanceId } from '@wordpress/compose';\nimport { getCSSRules, compileCSS } from '@wordpress/style-engine';\n\n/**\n * Internal dependencies\n */\nimport BlockList from '../components/block-list';\nimport { BORDER_SUPPORT_KEY, BorderPanel } from './border';\nimport { COLOR_SUPPORT_KEY, ColorEdit } from './color';\nimport {\n\tTypographyPanel,\n\tTYPOGRAPHY_SUPPORT_KEY,\n\tTYPOGRAPHY_SUPPORT_KEYS,\n} from './typography';\nimport { SPACING_SUPPORT_KEY, DimensionsPanel } from './dimensions';\nimport useDisplayBlockControls from '../components/use-display-block-controls';\nimport { shouldSkipSerialization } from './utils';\n\nconst styleSupportKeys = [\n\t...TYPOGRAPHY_SUPPORT_KEYS,\n\tBORDER_SUPPORT_KEY,\n\tCOLOR_SUPPORT_KEY,\n\tSPACING_SUPPORT_KEY,\n];\n\nconst hasStyleSupport = ( blockType ) =>\n\tstyleSupportKeys.some( ( key ) => hasBlockSupport( blockType, key ) );\n\n/**\n * Returns the inline styles to add depending on the style object\n *\n * @param {Object} styles Styles configuration.\n *\n * @return {Object} Flattened CSS variables declaration.\n */\nexport function getInlineStyles( styles = {} ) {\n\tconst output = {};\n\t// The goal is to move everything to server side generated engine styles\n\t// This is temporary as we absorb more and more styles into the engine.\n\tgetCSSRules( styles ).forEach( ( rule ) => {\n\t\toutput[ rule.key ] = rule.value;\n\t} );\n\n\treturn output;\n}\n\n/**\n * Filters registered block settings, extending attributes to include `style` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addAttribute( settings ) {\n\tif ( ! hasStyleSupport( settings ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default 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 * A dictionary of paths to flag skipping block support serialization as the key,\n * with values providing the style paths to be omitted from serialization.\n *\n * @constant\n * @type {Record<string, string[]>}\n */\nconst skipSerializationPathsEdit = {\n\t[ `${ BORDER_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [ 'border' ],\n\t[ `${ COLOR_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tCOLOR_SUPPORT_KEY,\n\t],\n\t[ `${ TYPOGRAPHY_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t],\n\t[ `${ SPACING_SUPPORT_KEY }.__experimentalSkipSerialization` ]: [\n\t\t'spacing',\n\t],\n};\n\n/**\n * A dictionary of paths to flag skipping block support serialization as the key,\n * with values providing the style paths to be omitted from serialization.\n *\n * Extends the Edit skip paths to enable skipping additional paths in just\n * the Save component. This allows a block support to be serialized within the\n * editor, while using an alternate approach, such as server-side rendering, when\n * the support is saved.\n *\n * @constant\n * @type {Record<string, string[]>}\n */\nconst skipSerializationPathsSave = {\n\t...skipSerializationPathsEdit,\n\t[ `${ SPACING_SUPPORT_KEY }` ]: [ 'spacing.blockGap' ],\n};\n\n/**\n * A dictionary used to normalize feature names between support flags, style\n * object properties and __experimentSkipSerialization configuration arrays.\n *\n * This allows not having to provide a migration for a support flag and possible\n * backwards compatibility bridges, while still achieving consistency between\n * the support flag and the skip serialization array.\n *\n * @constant\n * @type {Record<string, string>}\n */\nconst renamedFeatures = { gradients: 'gradient' };\n\n/**\n * Override props assigned to save component to inject the CSS variables definition.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Block attributes.\n * @param {?Record<string, string[]>} skipPaths An object of keys and paths to skip serialization.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps(\n\tprops,\n\tblockType,\n\tattributes,\n\tskipPaths = skipSerializationPathsSave\n) {\n\tif ( ! hasStyleSupport( blockType ) ) {\n\t\treturn props;\n\t}\n\n\tlet { style } = attributes;\n\tObject.entries( skipPaths ).forEach( ( [ indicator, path ] ) => {\n\t\tconst skipSerialization = getBlockSupport( blockType, indicator );\n\n\t\tif ( skipSerialization === true ) {\n\t\t\tstyle = omit( style, path );\n\t\t}\n\n\t\tif ( Array.isArray( skipSerialization ) ) {\n\t\t\tskipSerialization.forEach( ( featureName ) => {\n\t\t\t\tconst feature = renamedFeatures[ featureName ] || featureName;\n\t\t\t\tstyle = omit( style, [ [ ...path, feature ] ] );\n\t\t\t} );\n\t\t}\n\t} );\n\n\tprops.style = {\n\t\t...getInlineStyles( style ),\n\t\t...props.style,\n\t};\n\n\treturn props;\n}\n\n/**\n * Filters registered block settings to extend the block edit wrapper\n * to apply the desired styles and classnames properly.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object}.Filtered block settings.\n */\nexport function addEditProps( settings ) {\n\tif ( ! hasStyleSupport( settings ) ) {\n\t\treturn settings;\n\t}\n\n\tconst existingGetEditWrapperProps = settings.getEditWrapperProps;\n\tsettings.getEditWrapperProps = ( attributes ) => {\n\t\tlet props = {};\n\t\tif ( existingGetEditWrapperProps ) {\n\t\t\tprops = existingGetEditWrapperProps( attributes );\n\t\t}\n\n\t\treturn addSaveProps(\n\t\t\tprops,\n\t\t\tsettings,\n\t\t\tattributes,\n\t\t\tskipSerializationPathsEdit\n\t\t);\n\t};\n\n\treturn settings;\n}\n\n/**\n * Override the default edit UI to include new inspector controls for\n * all the custom styles configs.\n *\n * @param {Function} BlockEdit Original component.\n *\n * @return {Function} Wrapped component.\n */\nexport const withBlockControls = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst shouldDisplayControls = useDisplayBlockControls();\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ shouldDisplayControls && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ColorEdit { ...props } />\n\t\t\t\t\t\t<TypographyPanel { ...props } />\n\t\t\t\t\t\t<BorderPanel { ...props } />\n\t\t\t\t\t\t<DimensionsPanel { ...props } />\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t\t<BlockEdit { ...props } />\n\t\t\t</>\n\t\t);\n\t},\n\t'withToolbarControls'\n);\n\n/**\n * Override the default block element to include elements styles.\n *\n * @param {Function} BlockListBlock Original component\n * @return {Function} Wrapped component\n */\nconst withElementsStyles = createHigherOrderComponent(\n\t( BlockListBlock ) => ( props ) => {\n\t\tconst blockElementsContainerIdentifier = `wp-elements-${ useInstanceId(\n\t\t\tBlockListBlock\n\t\t) }`;\n\n\t\tconst skipLinkColorSerialization = shouldSkipSerialization(\n\t\t\tprops.name,\n\t\t\tCOLOR_SUPPORT_KEY,\n\t\t\t'link'\n\t\t);\n\n\t\tconst styles = useMemo( () => {\n\t\t\tconst rawElementsStyles = props.attributes.style?.elements;\n\t\t\tconst elementCssRules = [];\n\t\t\tif (\n\t\t\t\trawElementsStyles &&\n\t\t\t\tObject.keys( rawElementsStyles ).length > 0\n\t\t\t) {\n\t\t\t\t// Remove values based on whether serialization has been skipped for a specific style.\n\t\t\t\tconst filteredElementsStyles = {\n\t\t\t\t\t...rawElementsStyles,\n\t\t\t\t\tlink: {\n\t\t\t\t\t\t...rawElementsStyles.link,\n\t\t\t\t\t\tcolor: ! skipLinkColorSerialization\n\t\t\t\t\t\t\t? rawElementsStyles.link?.color\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tfor ( const [ elementName, elementStyles ] of Object.entries(\n\t\t\t\t\tfilteredElementsStyles\n\t\t\t\t) ) {\n\t\t\t\t\tconst cssRule = compileCSS( elementStyles, {\n\t\t\t\t\t\t// The .editor-styles-wrapper selector is required on elements styles. As it is\n\t\t\t\t\t\t// added to all other editor styles, not providing it causes reset and global\n\t\t\t\t\t\t// styles to override element styles because of higher specificity.\n\t\t\t\t\t\tselector: `.editor-styles-wrapper .${ blockElementsContainerIdentifier } ${ ELEMENTS[ elementName ] }`,\n\t\t\t\t\t} );\n\t\t\t\t\tif ( !! cssRule ) {\n\t\t\t\t\t\telementCssRules.push( cssRule );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn elementCssRules.length > 0 ? elementCssRules : undefined;\n\t\t}, [ props.attributes.style?.elements ] );\n\n\t\tconst element = useContext( BlockList.__unstableElementContext );\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ styles &&\n\t\t\t\t\telement &&\n\t\t\t\t\tcreatePortal(\n\t\t\t\t\t\t<style\n\t\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n\t\t\t\t\t\t\t\t__html: styles,\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>,\n\t\t\t\t\t\telement\n\t\t\t\t\t) }\n\n\t\t\t\t<BlockListBlock\n\t\t\t\t\t{ ...props }\n\t\t\t\t\tclassName={\n\t\t\t\t\t\tprops.attributes.style?.elements\n\t\t\t\t\t\t\t? classnames(\n\t\t\t\t\t\t\t\t\tprops.className,\n\t\t\t\t\t\t\t\t\tblockElementsContainerIdentifier\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t: props.className\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</>\n\t\t);\n\t}\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/style/addAttribute',\n\taddAttribute\n);\n\naddFilter(\n\t'blocks.getSaveContent.extraProps',\n\t'core/style/addSaveProps',\n\taddSaveProps\n);\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/style/addEditProps',\n\taddEditProps\n);\n\naddFilter(\n\t'editor.BlockEdit',\n\t'core/style/with-block-controls',\n\twithBlockControls\n);\n\naddFilter(\n\t'editor.BlockListBlock',\n\t'core/editor/with-elements-styles',\n\twithElementsStyles\n);\n"]}
@@ -0,0 +1,197 @@
1
+ import { createElement, Fragment } from "@wordpress/element";
2
+
3
+ /**
4
+ * WordPress dependencies
5
+ */
6
+ import { Button, __experimentalUseCustomUnits as useCustomUnits, __experimentalUnitControl as UnitControl } from '@wordpress/components';
7
+ import { __ } from '@wordpress/i18n';
8
+ import { Icon, positionCenter, stretchWide } from '@wordpress/icons';
9
+ import { getCSSRules } from '@wordpress/style-engine';
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+
14
+ import useSetting from '../components/use-setting';
15
+ import { appendSelectors, getBlockGapCSS, getAlignmentsInfo } from './utils';
16
+ import { getGapBoxControlValueFromStyle } from '../hooks/gap';
17
+ import { shouldSkipSerialization } from '../hooks/utils';
18
+ export default {
19
+ name: 'constrained',
20
+ label: __('Constrained'),
21
+ inspectorControls: function DefaultLayoutInspectorControls(_ref) {
22
+ let {
23
+ layout,
24
+ onChange
25
+ } = _ref;
26
+ const {
27
+ wideSize,
28
+ contentSize
29
+ } = layout;
30
+ const units = useCustomUnits({
31
+ availableUnits: useSetting('spacing.units') || ['%', 'px', 'em', 'rem', 'vw']
32
+ });
33
+ return createElement(Fragment, null, createElement("div", {
34
+ className: "block-editor-hooks__layout-controls"
35
+ }, createElement("div", {
36
+ className: "block-editor-hooks__layout-controls-unit"
37
+ }, createElement(UnitControl, {
38
+ label: __('Content'),
39
+ labelPosition: "top",
40
+ __unstableInputWidth: "80px",
41
+ value: contentSize || wideSize || '',
42
+ onChange: nextWidth => {
43
+ nextWidth = 0 > parseFloat(nextWidth) ? '0' : nextWidth;
44
+ onChange({ ...layout,
45
+ contentSize: nextWidth
46
+ });
47
+ },
48
+ units: units
49
+ }), createElement(Icon, {
50
+ icon: positionCenter
51
+ })), createElement("div", {
52
+ className: "block-editor-hooks__layout-controls-unit"
53
+ }, createElement(UnitControl, {
54
+ label: __('Wide'),
55
+ labelPosition: "top",
56
+ __unstableInputWidth: "80px",
57
+ value: wideSize || contentSize || '',
58
+ onChange: nextWidth => {
59
+ nextWidth = 0 > parseFloat(nextWidth) ? '0' : nextWidth;
60
+ onChange({ ...layout,
61
+ wideSize: nextWidth
62
+ });
63
+ },
64
+ units: units
65
+ }), createElement(Icon, {
66
+ icon: stretchWide
67
+ }))), createElement("div", {
68
+ className: "block-editor-hooks__layout-controls-reset"
69
+ }, createElement(Button, {
70
+ variant: "secondary",
71
+ isSmall: true,
72
+ disabled: !contentSize && !wideSize,
73
+ onClick: () => onChange({
74
+ contentSize: undefined,
75
+ wideSize: undefined,
76
+ inherit: false
77
+ })
78
+ }, __('Reset'))), createElement("p", {
79
+ className: "block-editor-hooks__layout-controls-helptext"
80
+ }, __('Customize the width for all elements that are assigned to the center or wide columns.')));
81
+ },
82
+ toolBarControls: function DefaultLayoutToolbarControls() {
83
+ return null;
84
+ },
85
+ getLayoutStyle: function getLayoutStyle(_ref2) {
86
+ var _style$spacing, _style$spacing2;
87
+
88
+ let {
89
+ selector,
90
+ layout = {},
91
+ style,
92
+ blockName,
93
+ hasBlockGapSupport,
94
+ layoutDefinitions
95
+ } = _ref2;
96
+ const {
97
+ contentSize,
98
+ wideSize
99
+ } = layout;
100
+ const blockGapStyleValue = getGapBoxControlValueFromStyle(style === null || style === void 0 ? void 0 : (_style$spacing = style.spacing) === null || _style$spacing === void 0 ? void 0 : _style$spacing.blockGap); // If a block's block.json skips serialization for spacing or
101
+ // spacing.blockGap, don't apply the user-defined value to the styles.
102
+
103
+ const blockGapValue = blockGapStyleValue !== null && blockGapStyleValue !== void 0 && blockGapStyleValue.top && !shouldSkipSerialization(blockName, 'spacing', 'blockGap') ? blockGapStyleValue === null || blockGapStyleValue === void 0 ? void 0 : blockGapStyleValue.top : '';
104
+ let output = !!contentSize || !!wideSize ? `
105
+ ${appendSelectors(selector, '> :where(:not(.alignleft):not(.alignright):not(.alignfull))')} {
106
+ max-width: ${contentSize !== null && contentSize !== void 0 ? contentSize : wideSize};
107
+ margin-left: auto !important;
108
+ margin-right: auto !important;
109
+ }
110
+ ${appendSelectors(selector, '> .alignwide')} {
111
+ max-width: ${wideSize !== null && wideSize !== void 0 ? wideSize : contentSize};
112
+ }
113
+ ${appendSelectors(selector, '> .alignfull')} {
114
+ max-width: none;
115
+ }
116
+ ` : ''; // If there is custom padding, add negative margins for alignfull blocks.
117
+
118
+ if (style !== null && style !== void 0 && (_style$spacing2 = style.spacing) !== null && _style$spacing2 !== void 0 && _style$spacing2.padding) {
119
+ // The style object might be storing a preset so we need to make sure we get a usable value.
120
+ const paddingValues = getCSSRules(style);
121
+ paddingValues.forEach(rule => {
122
+ if (rule.key === 'paddingRight') {
123
+ output += `
124
+ ${appendSelectors(selector, '> .alignfull')} {
125
+ margin-right: calc(${rule.value} * -1);
126
+ }
127
+ `;
128
+ } else if (rule.key === 'paddingLeft') {
129
+ output += `
130
+ ${appendSelectors(selector, '> .alignfull')} {
131
+ margin-left: calc(${rule.value} * -1);
132
+ }
133
+ `;
134
+ }
135
+ });
136
+ } // Output blockGap styles based on rules contained in layout definitions in theme.json.
137
+
138
+
139
+ if (hasBlockGapSupport && blockGapValue) {
140
+ output += getBlockGapCSS(selector, layoutDefinitions, 'constrained', blockGapValue);
141
+ }
142
+
143
+ return output;
144
+ },
145
+
146
+ getOrientation() {
147
+ return 'vertical';
148
+ },
149
+
150
+ getAlignments(layout) {
151
+ const alignmentInfo = getAlignmentsInfo(layout);
152
+
153
+ if (layout.alignments !== undefined) {
154
+ if (!layout.alignments.includes('none')) {
155
+ layout.alignments.unshift('none');
156
+ }
157
+
158
+ return layout.alignments.map(alignment => ({
159
+ name: alignment,
160
+ info: alignmentInfo[alignment]
161
+ }));
162
+ }
163
+
164
+ const {
165
+ contentSize,
166
+ wideSize
167
+ } = layout;
168
+ const alignments = [{
169
+ name: 'left'
170
+ }, {
171
+ name: 'center'
172
+ }, {
173
+ name: 'right'
174
+ }];
175
+
176
+ if (contentSize) {
177
+ alignments.unshift({
178
+ name: 'full'
179
+ });
180
+ }
181
+
182
+ if (wideSize) {
183
+ alignments.unshift({
184
+ name: 'wide',
185
+ info: alignmentInfo.wide
186
+ });
187
+ }
188
+
189
+ alignments.unshift({
190
+ name: 'none',
191
+ info: alignmentInfo.none
192
+ });
193
+ return alignments;
194
+ }
195
+
196
+ };
197
+ //# sourceMappingURL=constrained.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-editor/src/layouts/constrained.js"],"names":["Button","__experimentalUseCustomUnits","useCustomUnits","__experimentalUnitControl","UnitControl","__","Icon","positionCenter","stretchWide","getCSSRules","useSetting","appendSelectors","getBlockGapCSS","getAlignmentsInfo","getGapBoxControlValueFromStyle","shouldSkipSerialization","name","label","inspectorControls","DefaultLayoutInspectorControls","layout","onChange","wideSize","contentSize","units","availableUnits","nextWidth","parseFloat","undefined","inherit","toolBarControls","DefaultLayoutToolbarControls","getLayoutStyle","selector","style","blockName","hasBlockGapSupport","layoutDefinitions","blockGapStyleValue","spacing","blockGap","blockGapValue","top","output","padding","paddingValues","forEach","rule","key","value","getOrientation","getAlignments","alignmentInfo","alignments","includes","unshift","map","alignment","info","wide","none"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalUnitControl as UnitControl,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { Icon, positionCenter, stretchWide } from '@wordpress/icons';\nimport { getCSSRules } from '@wordpress/style-engine';\n\n/**\n * Internal dependencies\n */\nimport useSetting from '../components/use-setting';\nimport { appendSelectors, getBlockGapCSS, getAlignmentsInfo } from './utils';\nimport { getGapBoxControlValueFromStyle } from '../hooks/gap';\nimport { shouldSkipSerialization } from '../hooks/utils';\n\nexport default {\n\tname: 'constrained',\n\tlabel: __( 'Constrained' ),\n\tinspectorControls: function DefaultLayoutInspectorControls( {\n\t\tlayout,\n\t\tonChange,\n\t} ) {\n\t\tconst { wideSize, contentSize } = layout;\n\t\tconst units = useCustomUnits( {\n\t\t\tavailableUnits: useSetting( 'spacing.units' ) || [\n\t\t\t\t'%',\n\t\t\t\t'px',\n\t\t\t\t'em',\n\t\t\t\t'rem',\n\t\t\t\t'vw',\n\t\t\t],\n\t\t} );\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<div className=\"block-editor-hooks__layout-controls\">\n\t\t\t\t\t<div className=\"block-editor-hooks__layout-controls-unit\">\n\t\t\t\t\t\t<UnitControl\n\t\t\t\t\t\t\tlabel={ __( 'Content' ) }\n\t\t\t\t\t\t\tlabelPosition=\"top\"\n\t\t\t\t\t\t\t__unstableInputWidth=\"80px\"\n\t\t\t\t\t\t\tvalue={ contentSize || wideSize || '' }\n\t\t\t\t\t\t\tonChange={ ( nextWidth ) => {\n\t\t\t\t\t\t\t\tnextWidth =\n\t\t\t\t\t\t\t\t\t0 > parseFloat( nextWidth )\n\t\t\t\t\t\t\t\t\t\t? '0'\n\t\t\t\t\t\t\t\t\t\t: nextWidth;\n\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\tcontentSize: nextWidth,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Icon icon={ positionCenter } />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"block-editor-hooks__layout-controls-unit\">\n\t\t\t\t\t\t<UnitControl\n\t\t\t\t\t\t\tlabel={ __( 'Wide' ) }\n\t\t\t\t\t\t\tlabelPosition=\"top\"\n\t\t\t\t\t\t\t__unstableInputWidth=\"80px\"\n\t\t\t\t\t\t\tvalue={ wideSize || contentSize || '' }\n\t\t\t\t\t\t\tonChange={ ( nextWidth ) => {\n\t\t\t\t\t\t\t\tnextWidth =\n\t\t\t\t\t\t\t\t\t0 > parseFloat( nextWidth )\n\t\t\t\t\t\t\t\t\t\t? '0'\n\t\t\t\t\t\t\t\t\t\t: nextWidth;\n\t\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\t\t...layout,\n\t\t\t\t\t\t\t\t\twideSize: nextWidth,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Icon icon={ stretchWide } />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"block-editor-hooks__layout-controls-reset\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tisSmall\n\t\t\t\t\t\tdisabled={ ! contentSize && ! wideSize }\n\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\tonChange( {\n\t\t\t\t\t\t\t\tcontentSize: undefined,\n\t\t\t\t\t\t\t\twideSize: undefined,\n\t\t\t\t\t\t\t\tinherit: false,\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Reset' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\n\t\t\t\t<p className=\"block-editor-hooks__layout-controls-helptext\">\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Customize the width for all elements that are assigned to the center or wide columns.'\n\t\t\t\t\t) }\n\t\t\t\t</p>\n\t\t\t</>\n\t\t);\n\t},\n\ttoolBarControls: function DefaultLayoutToolbarControls() {\n\t\treturn null;\n\t},\n\tgetLayoutStyle: function getLayoutStyle( {\n\t\tselector,\n\t\tlayout = {},\n\t\tstyle,\n\t\tblockName,\n\t\thasBlockGapSupport,\n\t\tlayoutDefinitions,\n\t} ) {\n\t\tconst { contentSize, wideSize } = layout;\n\t\tconst blockGapStyleValue = getGapBoxControlValueFromStyle(\n\t\t\tstyle?.spacing?.blockGap\n\t\t);\n\t\t// If a block's block.json skips serialization for spacing or\n\t\t// spacing.blockGap, don't apply the user-defined value to the styles.\n\t\tconst blockGapValue =\n\t\t\tblockGapStyleValue?.top &&\n\t\t\t! shouldSkipSerialization( blockName, 'spacing', 'blockGap' )\n\t\t\t\t? blockGapStyleValue?.top\n\t\t\t\t: '';\n\n\t\tlet output =\n\t\t\t!! contentSize || !! wideSize\n\t\t\t\t? `\n\t\t\t\t\t${ appendSelectors(\n\t\t\t\t\t\tselector,\n\t\t\t\t\t\t'> :where(:not(.alignleft):not(.alignright):not(.alignfull))'\n\t\t\t\t\t) } {\n\t\t\t\t\t\tmax-width: ${ contentSize ?? wideSize };\n\t\t\t\t\t\tmargin-left: auto !important;\n\t\t\t\t\t\tmargin-right: auto !important;\n\t\t\t\t\t}\n\t\t\t\t\t${ appendSelectors( selector, '> .alignwide' ) } {\n\t\t\t\t\t\tmax-width: ${ wideSize ?? contentSize };\n\t\t\t\t\t}\n\t\t\t\t\t${ appendSelectors( selector, '> .alignfull' ) } {\n\t\t\t\t\t\tmax-width: none;\n\t\t\t\t\t}\n\t\t\t\t`\n\t\t\t\t: '';\n\n\t\t// If there is custom padding, add negative margins for alignfull blocks.\n\t\tif ( style?.spacing?.padding ) {\n\t\t\t// The style object might be storing a preset so we need to make sure we get a usable value.\n\t\t\tconst paddingValues = getCSSRules( style );\n\t\t\tpaddingValues.forEach( ( rule ) => {\n\t\t\t\tif ( rule.key === 'paddingRight' ) {\n\t\t\t\t\toutput += `\n\t\t\t\t\t${ appendSelectors( selector, '> .alignfull' ) } {\n\t\t\t\t\t\tmargin-right: calc(${ rule.value } * -1);\n\t\t\t\t\t}\n\t\t\t\t\t`;\n\t\t\t\t} else if ( rule.key === 'paddingLeft' ) {\n\t\t\t\t\toutput += `\n\t\t\t\t\t${ appendSelectors( selector, '> .alignfull' ) } {\n\t\t\t\t\t\tmargin-left: calc(${ rule.value } * -1);\n\t\t\t\t\t}\n\t\t\t\t\t`;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Output blockGap styles based on rules contained in layout definitions in theme.json.\n\t\tif ( hasBlockGapSupport && blockGapValue ) {\n\t\t\toutput += getBlockGapCSS(\n\t\t\t\tselector,\n\t\t\t\tlayoutDefinitions,\n\t\t\t\t'constrained',\n\t\t\t\tblockGapValue\n\t\t\t);\n\t\t}\n\t\treturn output;\n\t},\n\tgetOrientation() {\n\t\treturn 'vertical';\n\t},\n\tgetAlignments( layout ) {\n\t\tconst alignmentInfo = getAlignmentsInfo( layout );\n\t\tif ( layout.alignments !== undefined ) {\n\t\t\tif ( ! layout.alignments.includes( 'none' ) ) {\n\t\t\t\tlayout.alignments.unshift( 'none' );\n\t\t\t}\n\t\t\treturn layout.alignments.map( ( alignment ) => ( {\n\t\t\t\tname: alignment,\n\t\t\t\tinfo: alignmentInfo[ alignment ],\n\t\t\t} ) );\n\t\t}\n\t\tconst { contentSize, wideSize } = layout;\n\n\t\tconst alignments = [\n\t\t\t{ name: 'left' },\n\t\t\t{ name: 'center' },\n\t\t\t{ name: 'right' },\n\t\t];\n\n\t\tif ( contentSize ) {\n\t\t\talignments.unshift( { name: 'full' } );\n\t\t}\n\n\t\tif ( wideSize ) {\n\t\t\talignments.unshift( { name: 'wide', info: alignmentInfo.wide } );\n\t\t}\n\n\t\talignments.unshift( { name: 'none', info: alignmentInfo.none } );\n\n\t\treturn alignments;\n\t},\n};\n"]}
@@ -99,7 +99,7 @@ export default {
99
99
  } = layout; // If a block's block.json skips serialization for spacing or spacing.blockGap,
100
100
  // don't apply the user-defined value to the styles.
101
101
 
102
- const blockGapValue = style !== null && style !== void 0 && (_style$spacing = style.spacing) !== null && _style$spacing !== void 0 && _style$spacing.blockGap && !shouldSkipSerialization(blockName, 'spacing', 'blockGap') ? getGapCSSValue(style === null || style === void 0 ? void 0 : (_style$spacing2 = style.spacing) === null || _style$spacing2 === void 0 ? void 0 : _style$spacing2.blockGap) : undefined;
102
+ const blockGapValue = style !== null && style !== void 0 && (_style$spacing = style.spacing) !== null && _style$spacing !== void 0 && _style$spacing.blockGap && !shouldSkipSerialization(blockName, 'spacing', 'blockGap') ? getGapCSSValue(style === null || style === void 0 ? void 0 : (_style$spacing2 = style.spacing) === null || _style$spacing2 === void 0 ? void 0 : _style$spacing2.blockGap, '0.5em') : undefined;
103
103
  const justifyContent = justifyContentMap[layout.justifyContent];
104
104
  const flexWrap = flexWrapOptions.includes(layout.flexWrap) ? layout.flexWrap : 'wrap';
105
105
  const verticalAlignment = verticalAlignmentMap[layout.verticalAlignment];
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/layouts/flex.js"],"names":["__","justifyLeft","justifyCenter","justifyRight","justifySpaceBetween","arrowRight","arrowDown","Button","ToggleControl","Flex","FlexItem","appendSelectors","getBlockGapCSS","getGapCSSValue","BlockControls","JustifyContentControl","BlockVerticalAlignmentControl","shouldSkipSerialization","justifyContentMap","left","right","center","alignItemsMap","verticalAlignmentMap","top","bottom","flexWrapOptions","name","label","inspectorControls","FlexLayoutInspectorControls","layout","onChange","layoutBlockSupport","allowOrientation","toolBarControls","FlexLayoutToolbarControls","allowSwitching","allowVerticalAlignment","orientation","getLayoutStyle","selector","style","blockName","hasBlockGapSupport","layoutDefinitions","blockGapValue","spacing","blockGap","undefined","justifyContent","flexWrap","includes","verticalAlignment","alignItems","output","rules","push","length","join","getOrientation","getAlignments","FlexLayoutVerticalAlignmentControl","isToolbar","onVerticalAlignmentChange","value","verticalAlignmentOptions","map","icon","FlexLayoutJustifyContentControl","onJustificationChange","allowedControls","position","isAlternate","justificationOptions","FlexWrapControl","OrientationControl"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tjustifyLeft,\n\tjustifyCenter,\n\tjustifyRight,\n\tjustifySpaceBetween,\n\tarrowRight,\n\tarrowDown,\n} from '@wordpress/icons';\nimport { Button, ToggleControl, Flex, FlexItem } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { appendSelectors, getBlockGapCSS } from './utils';\nimport { getGapCSSValue } from '../hooks/gap';\nimport {\n\tBlockControls,\n\tJustifyContentControl,\n\tBlockVerticalAlignmentControl,\n} from '../components';\nimport { shouldSkipSerialization } from '../hooks/utils';\n\n// Used with the default, horizontal flex orientation.\nconst justifyContentMap = {\n\tleft: 'flex-start',\n\tright: 'flex-end',\n\tcenter: 'center',\n\t'space-between': 'space-between',\n};\n\n// Used with the vertical (column) flex orientation.\nconst alignItemsMap = {\n\tleft: 'flex-start',\n\tright: 'flex-end',\n\tcenter: 'center',\n};\n\nconst verticalAlignmentMap = {\n\ttop: 'flex-start',\n\tcenter: 'center',\n\tbottom: 'flex-end',\n};\n\nconst flexWrapOptions = [ 'wrap', 'nowrap' ];\n\nexport default {\n\tname: 'flex',\n\tlabel: __( 'Flex' ),\n\tinspectorControls: function FlexLayoutInspectorControls( {\n\t\tlayout = {},\n\t\tonChange,\n\t\tlayoutBlockSupport = {},\n\t} ) {\n\t\tconst { allowOrientation = true } = layoutBlockSupport;\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<Flex>\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<FlexLayoutJustifyContentControl\n\t\t\t\t\t\t\tlayout={ layout }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t{ allowOrientation && (\n\t\t\t\t\t\t\t<OrientationControl\n\t\t\t\t\t\t\t\tlayout={ layout }\n\t\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</FlexItem>\n\t\t\t\t</Flex>\n\t\t\t\t<FlexWrapControl layout={ layout } onChange={ onChange } />\n\t\t\t</>\n\t\t);\n\t},\n\ttoolBarControls: function FlexLayoutToolbarControls( {\n\t\tlayout = {},\n\t\tonChange,\n\t\tlayoutBlockSupport,\n\t} ) {\n\t\tif ( layoutBlockSupport?.allowSwitching ) {\n\t\t\treturn null;\n\t\t}\n\t\tconst { allowVerticalAlignment = true } = layoutBlockSupport;\n\t\treturn (\n\t\t\t<BlockControls group=\"block\" __experimentalShareWithChildBlocks>\n\t\t\t\t<FlexLayoutJustifyContentControl\n\t\t\t\t\tlayout={ layout }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tisToolbar\n\t\t\t\t/>\n\t\t\t\t{ allowVerticalAlignment &&\n\t\t\t\t\tlayout?.orientation !== 'vertical' && (\n\t\t\t\t\t\t<FlexLayoutVerticalAlignmentControl\n\t\t\t\t\t\t\tlayout={ layout }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\tisToolbar\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t);\n\t},\n\tgetLayoutStyle: function getLayoutStyle( {\n\t\tselector,\n\t\tlayout,\n\t\tstyle,\n\t\tblockName,\n\t\thasBlockGapSupport,\n\t\tlayoutDefinitions,\n\t} ) {\n\t\tconst { orientation = 'horizontal' } = layout;\n\n\t\t// If a block's block.json skips serialization for spacing or spacing.blockGap,\n\t\t// don't apply the user-defined value to the styles.\n\t\tconst blockGapValue =\n\t\t\tstyle?.spacing?.blockGap &&\n\t\t\t! shouldSkipSerialization( blockName, 'spacing', 'blockGap' )\n\t\t\t\t? getGapCSSValue( style?.spacing?.blockGap )\n\t\t\t\t: undefined;\n\t\tconst justifyContent = justifyContentMap[ layout.justifyContent ];\n\t\tconst flexWrap = flexWrapOptions.includes( layout.flexWrap )\n\t\t\t? layout.flexWrap\n\t\t\t: 'wrap';\n\t\tconst verticalAlignment =\n\t\t\tverticalAlignmentMap[ layout.verticalAlignment ];\n\t\tconst alignItems =\n\t\t\talignItemsMap[ layout.justifyContent ] || alignItemsMap.left;\n\n\t\tlet output = '';\n\t\tconst rules = [];\n\n\t\tif ( flexWrap && flexWrap !== 'wrap' ) {\n\t\t\trules.push( `flex-wrap: ${ flexWrap }` );\n\t\t}\n\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\tif ( verticalAlignment ) {\n\t\t\t\trules.push( `align-items: ${ verticalAlignment }` );\n\t\t\t}\n\t\t\tif ( justifyContent ) {\n\t\t\t\trules.push( `justify-content: ${ justifyContent }` );\n\t\t\t}\n\t\t} else {\n\t\t\trules.push( 'flex-direction: column' );\n\t\t\trules.push( `align-items: ${ alignItems }` );\n\t\t}\n\n\t\tif ( rules.length ) {\n\t\t\toutput = `${ appendSelectors( selector ) } {\n\t\t\t\t${ rules.join( '; ' ) };\n\t\t\t}`;\n\t\t}\n\n\t\t// Output blockGap styles based on rules contained in layout definitions in theme.json.\n\t\tif ( hasBlockGapSupport && blockGapValue ) {\n\t\t\toutput += getBlockGapCSS(\n\t\t\t\tselector,\n\t\t\t\tlayoutDefinitions,\n\t\t\t\t'flex',\n\t\t\t\tblockGapValue\n\t\t\t);\n\t\t}\n\t\treturn output;\n\t},\n\tgetOrientation( layout ) {\n\t\tconst { orientation = 'horizontal' } = layout;\n\t\treturn orientation;\n\t},\n\tgetAlignments() {\n\t\treturn [];\n\t},\n};\n\nfunction FlexLayoutVerticalAlignmentControl( {\n\tlayout,\n\tonChange,\n\tisToolbar = false,\n} ) {\n\tconst { verticalAlignment = verticalAlignmentMap.center } = layout;\n\n\tconst onVerticalAlignmentChange = ( value ) => {\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tverticalAlignment: value,\n\t\t} );\n\t};\n\tif ( isToolbar ) {\n\t\treturn (\n\t\t\t<BlockVerticalAlignmentControl\n\t\t\t\tonChange={ onVerticalAlignmentChange }\n\t\t\t\tvalue={ verticalAlignment }\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst verticalAlignmentOptions = [\n\t\t{\n\t\t\tvalue: 'flex-start',\n\t\t\tlabel: __( 'Align items top' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'center',\n\t\t\tlabel: __( 'Align items center' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'flex-end',\n\t\t\tlabel: __( 'Align items bottom' ),\n\t\t},\n\t];\n\n\treturn (\n\t\t<fieldset className=\"block-editor-hooks__flex-layout-vertical-alignment-control\">\n\t\t\t<legend>{ __( 'Vertical alignment' ) }</legend>\n\t\t\t<div>\n\t\t\t\t{ verticalAlignmentOptions.map( ( value, icon, label ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tkey={ value }\n\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\ticon={ icon }\n\t\t\t\t\t\t\tisPressed={ verticalAlignment === value }\n\t\t\t\t\t\t\tonClick={ () => onVerticalAlignmentChange( value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</div>\n\t\t</fieldset>\n\t);\n}\n\nfunction FlexLayoutJustifyContentControl( {\n\tlayout,\n\tonChange,\n\tisToolbar = false,\n} ) {\n\tconst { justifyContent = 'left', orientation = 'horizontal' } = layout;\n\tconst onJustificationChange = ( value ) => {\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tjustifyContent: value,\n\t\t} );\n\t};\n\tconst allowedControls = [ 'left', 'center', 'right' ];\n\tif ( orientation === 'horizontal' ) {\n\t\tallowedControls.push( 'space-between' );\n\t}\n\tif ( isToolbar ) {\n\t\treturn (\n\t\t\t<JustifyContentControl\n\t\t\t\tallowedControls={ allowedControls }\n\t\t\t\tvalue={ justifyContent }\n\t\t\t\tonChange={ onJustificationChange }\n\t\t\t\tpopoverProps={ {\n\t\t\t\t\tposition: 'bottom right',\n\t\t\t\t\tisAlternate: true,\n\t\t\t\t} }\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst justificationOptions = [\n\t\t{\n\t\t\tvalue: 'left',\n\t\t\ticon: justifyLeft,\n\t\t\tlabel: __( 'Justify items left' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'center',\n\t\t\ticon: justifyCenter,\n\t\t\tlabel: __( 'Justify items center' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'right',\n\t\t\ticon: justifyRight,\n\t\t\tlabel: __( 'Justify items right' ),\n\t\t},\n\t];\n\tif ( orientation === 'horizontal' ) {\n\t\tjustificationOptions.push( {\n\t\t\tvalue: 'space-between',\n\t\t\ticon: justifySpaceBetween,\n\t\t\tlabel: __( 'Space between items' ),\n\t\t} );\n\t}\n\n\treturn (\n\t\t<fieldset className=\"block-editor-hooks__flex-layout-justification-controls\">\n\t\t\t<legend>{ __( 'Justification' ) }</legend>\n\t\t\t<div>\n\t\t\t\t{ justificationOptions.map( ( { value, icon, label } ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tkey={ value }\n\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\ticon={ icon }\n\t\t\t\t\t\t\tisPressed={ justifyContent === value }\n\t\t\t\t\t\t\tonClick={ () => onJustificationChange( value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</div>\n\t\t</fieldset>\n\t);\n}\n\nfunction FlexWrapControl( { layout, onChange } ) {\n\tconst { flexWrap = 'wrap' } = layout;\n\treturn (\n\t\t<ToggleControl\n\t\t\tlabel={ __( 'Allow to wrap to multiple lines' ) }\n\t\t\tonChange={ ( value ) => {\n\t\t\t\tonChange( {\n\t\t\t\t\t...layout,\n\t\t\t\t\tflexWrap: value ? 'wrap' : 'nowrap',\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tchecked={ flexWrap === 'wrap' }\n\t\t/>\n\t);\n}\n\nfunction OrientationControl( { layout, onChange } ) {\n\tconst { orientation = 'horizontal' } = layout;\n\treturn (\n\t\t<fieldset className=\"block-editor-hooks__flex-layout-orientation-controls\">\n\t\t\t<legend>{ __( 'Orientation' ) }</legend>\n\t\t\t<Button\n\t\t\t\tlabel={ __( 'Horizontal' ) }\n\t\t\t\ticon={ arrowRight }\n\t\t\t\tisPressed={ orientation === 'horizontal' }\n\t\t\t\tonClick={ () =>\n\t\t\t\t\tonChange( {\n\t\t\t\t\t\t...layout,\n\t\t\t\t\t\torientation: 'horizontal',\n\t\t\t\t\t} )\n\t\t\t\t}\n\t\t\t/>\n\t\t\t<Button\n\t\t\t\tlabel={ __( 'Vertical' ) }\n\t\t\t\ticon={ arrowDown }\n\t\t\t\tisPressed={ orientation === 'vertical' }\n\t\t\t\tonClick={ () =>\n\t\t\t\t\tonChange( {\n\t\t\t\t\t\t...layout,\n\t\t\t\t\t\torientation: 'vertical',\n\t\t\t\t\t} )\n\t\t\t\t}\n\t\t\t/>\n\t\t</fieldset>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/layouts/flex.js"],"names":["__","justifyLeft","justifyCenter","justifyRight","justifySpaceBetween","arrowRight","arrowDown","Button","ToggleControl","Flex","FlexItem","appendSelectors","getBlockGapCSS","getGapCSSValue","BlockControls","JustifyContentControl","BlockVerticalAlignmentControl","shouldSkipSerialization","justifyContentMap","left","right","center","alignItemsMap","verticalAlignmentMap","top","bottom","flexWrapOptions","name","label","inspectorControls","FlexLayoutInspectorControls","layout","onChange","layoutBlockSupport","allowOrientation","toolBarControls","FlexLayoutToolbarControls","allowSwitching","allowVerticalAlignment","orientation","getLayoutStyle","selector","style","blockName","hasBlockGapSupport","layoutDefinitions","blockGapValue","spacing","blockGap","undefined","justifyContent","flexWrap","includes","verticalAlignment","alignItems","output","rules","push","length","join","getOrientation","getAlignments","FlexLayoutVerticalAlignmentControl","isToolbar","onVerticalAlignmentChange","value","verticalAlignmentOptions","map","icon","FlexLayoutJustifyContentControl","onJustificationChange","allowedControls","position","isAlternate","justificationOptions","FlexWrapControl","OrientationControl"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tjustifyLeft,\n\tjustifyCenter,\n\tjustifyRight,\n\tjustifySpaceBetween,\n\tarrowRight,\n\tarrowDown,\n} from '@wordpress/icons';\nimport { Button, ToggleControl, Flex, FlexItem } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { appendSelectors, getBlockGapCSS } from './utils';\nimport { getGapCSSValue } from '../hooks/gap';\nimport {\n\tBlockControls,\n\tJustifyContentControl,\n\tBlockVerticalAlignmentControl,\n} from '../components';\nimport { shouldSkipSerialization } from '../hooks/utils';\n\n// Used with the default, horizontal flex orientation.\nconst justifyContentMap = {\n\tleft: 'flex-start',\n\tright: 'flex-end',\n\tcenter: 'center',\n\t'space-between': 'space-between',\n};\n\n// Used with the vertical (column) flex orientation.\nconst alignItemsMap = {\n\tleft: 'flex-start',\n\tright: 'flex-end',\n\tcenter: 'center',\n};\n\nconst verticalAlignmentMap = {\n\ttop: 'flex-start',\n\tcenter: 'center',\n\tbottom: 'flex-end',\n};\n\nconst flexWrapOptions = [ 'wrap', 'nowrap' ];\n\nexport default {\n\tname: 'flex',\n\tlabel: __( 'Flex' ),\n\tinspectorControls: function FlexLayoutInspectorControls( {\n\t\tlayout = {},\n\t\tonChange,\n\t\tlayoutBlockSupport = {},\n\t} ) {\n\t\tconst { allowOrientation = true } = layoutBlockSupport;\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<Flex>\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<FlexLayoutJustifyContentControl\n\t\t\t\t\t\t\tlayout={ layout }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t{ allowOrientation && (\n\t\t\t\t\t\t\t<OrientationControl\n\t\t\t\t\t\t\t\tlayout={ layout }\n\t\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</FlexItem>\n\t\t\t\t</Flex>\n\t\t\t\t<FlexWrapControl layout={ layout } onChange={ onChange } />\n\t\t\t</>\n\t\t);\n\t},\n\ttoolBarControls: function FlexLayoutToolbarControls( {\n\t\tlayout = {},\n\t\tonChange,\n\t\tlayoutBlockSupport,\n\t} ) {\n\t\tif ( layoutBlockSupport?.allowSwitching ) {\n\t\t\treturn null;\n\t\t}\n\t\tconst { allowVerticalAlignment = true } = layoutBlockSupport;\n\t\treturn (\n\t\t\t<BlockControls group=\"block\" __experimentalShareWithChildBlocks>\n\t\t\t\t<FlexLayoutJustifyContentControl\n\t\t\t\t\tlayout={ layout }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tisToolbar\n\t\t\t\t/>\n\t\t\t\t{ allowVerticalAlignment &&\n\t\t\t\t\tlayout?.orientation !== 'vertical' && (\n\t\t\t\t\t\t<FlexLayoutVerticalAlignmentControl\n\t\t\t\t\t\t\tlayout={ layout }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\tisToolbar\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t);\n\t},\n\tgetLayoutStyle: function getLayoutStyle( {\n\t\tselector,\n\t\tlayout,\n\t\tstyle,\n\t\tblockName,\n\t\thasBlockGapSupport,\n\t\tlayoutDefinitions,\n\t} ) {\n\t\tconst { orientation = 'horizontal' } = layout;\n\n\t\t// If a block's block.json skips serialization for spacing or spacing.blockGap,\n\t\t// don't apply the user-defined value to the styles.\n\t\tconst blockGapValue =\n\t\t\tstyle?.spacing?.blockGap &&\n\t\t\t! shouldSkipSerialization( blockName, 'spacing', 'blockGap' )\n\t\t\t\t? getGapCSSValue( style?.spacing?.blockGap, '0.5em' )\n\t\t\t\t: undefined;\n\t\tconst justifyContent = justifyContentMap[ layout.justifyContent ];\n\t\tconst flexWrap = flexWrapOptions.includes( layout.flexWrap )\n\t\t\t? layout.flexWrap\n\t\t\t: 'wrap';\n\t\tconst verticalAlignment =\n\t\t\tverticalAlignmentMap[ layout.verticalAlignment ];\n\t\tconst alignItems =\n\t\t\talignItemsMap[ layout.justifyContent ] || alignItemsMap.left;\n\n\t\tlet output = '';\n\t\tconst rules = [];\n\n\t\tif ( flexWrap && flexWrap !== 'wrap' ) {\n\t\t\trules.push( `flex-wrap: ${ flexWrap }` );\n\t\t}\n\n\t\tif ( orientation === 'horizontal' ) {\n\t\t\tif ( verticalAlignment ) {\n\t\t\t\trules.push( `align-items: ${ verticalAlignment }` );\n\t\t\t}\n\t\t\tif ( justifyContent ) {\n\t\t\t\trules.push( `justify-content: ${ justifyContent }` );\n\t\t\t}\n\t\t} else {\n\t\t\trules.push( 'flex-direction: column' );\n\t\t\trules.push( `align-items: ${ alignItems }` );\n\t\t}\n\n\t\tif ( rules.length ) {\n\t\t\toutput = `${ appendSelectors( selector ) } {\n\t\t\t\t${ rules.join( '; ' ) };\n\t\t\t}`;\n\t\t}\n\n\t\t// Output blockGap styles based on rules contained in layout definitions in theme.json.\n\t\tif ( hasBlockGapSupport && blockGapValue ) {\n\t\t\toutput += getBlockGapCSS(\n\t\t\t\tselector,\n\t\t\t\tlayoutDefinitions,\n\t\t\t\t'flex',\n\t\t\t\tblockGapValue\n\t\t\t);\n\t\t}\n\t\treturn output;\n\t},\n\tgetOrientation( layout ) {\n\t\tconst { orientation = 'horizontal' } = layout;\n\t\treturn orientation;\n\t},\n\tgetAlignments() {\n\t\treturn [];\n\t},\n};\n\nfunction FlexLayoutVerticalAlignmentControl( {\n\tlayout,\n\tonChange,\n\tisToolbar = false,\n} ) {\n\tconst { verticalAlignment = verticalAlignmentMap.center } = layout;\n\n\tconst onVerticalAlignmentChange = ( value ) => {\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tverticalAlignment: value,\n\t\t} );\n\t};\n\tif ( isToolbar ) {\n\t\treturn (\n\t\t\t<BlockVerticalAlignmentControl\n\t\t\t\tonChange={ onVerticalAlignmentChange }\n\t\t\t\tvalue={ verticalAlignment }\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst verticalAlignmentOptions = [\n\t\t{\n\t\t\tvalue: 'flex-start',\n\t\t\tlabel: __( 'Align items top' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'center',\n\t\t\tlabel: __( 'Align items center' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'flex-end',\n\t\t\tlabel: __( 'Align items bottom' ),\n\t\t},\n\t];\n\n\treturn (\n\t\t<fieldset className=\"block-editor-hooks__flex-layout-vertical-alignment-control\">\n\t\t\t<legend>{ __( 'Vertical alignment' ) }</legend>\n\t\t\t<div>\n\t\t\t\t{ verticalAlignmentOptions.map( ( value, icon, label ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tkey={ value }\n\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\ticon={ icon }\n\t\t\t\t\t\t\tisPressed={ verticalAlignment === value }\n\t\t\t\t\t\t\tonClick={ () => onVerticalAlignmentChange( value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</div>\n\t\t</fieldset>\n\t);\n}\n\nfunction FlexLayoutJustifyContentControl( {\n\tlayout,\n\tonChange,\n\tisToolbar = false,\n} ) {\n\tconst { justifyContent = 'left', orientation = 'horizontal' } = layout;\n\tconst onJustificationChange = ( value ) => {\n\t\tonChange( {\n\t\t\t...layout,\n\t\t\tjustifyContent: value,\n\t\t} );\n\t};\n\tconst allowedControls = [ 'left', 'center', 'right' ];\n\tif ( orientation === 'horizontal' ) {\n\t\tallowedControls.push( 'space-between' );\n\t}\n\tif ( isToolbar ) {\n\t\treturn (\n\t\t\t<JustifyContentControl\n\t\t\t\tallowedControls={ allowedControls }\n\t\t\t\tvalue={ justifyContent }\n\t\t\t\tonChange={ onJustificationChange }\n\t\t\t\tpopoverProps={ {\n\t\t\t\t\tposition: 'bottom right',\n\t\t\t\t\tisAlternate: true,\n\t\t\t\t} }\n\t\t\t/>\n\t\t);\n\t}\n\n\tconst justificationOptions = [\n\t\t{\n\t\t\tvalue: 'left',\n\t\t\ticon: justifyLeft,\n\t\t\tlabel: __( 'Justify items left' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'center',\n\t\t\ticon: justifyCenter,\n\t\t\tlabel: __( 'Justify items center' ),\n\t\t},\n\t\t{\n\t\t\tvalue: 'right',\n\t\t\ticon: justifyRight,\n\t\t\tlabel: __( 'Justify items right' ),\n\t\t},\n\t];\n\tif ( orientation === 'horizontal' ) {\n\t\tjustificationOptions.push( {\n\t\t\tvalue: 'space-between',\n\t\t\ticon: justifySpaceBetween,\n\t\t\tlabel: __( 'Space between items' ),\n\t\t} );\n\t}\n\n\treturn (\n\t\t<fieldset className=\"block-editor-hooks__flex-layout-justification-controls\">\n\t\t\t<legend>{ __( 'Justification' ) }</legend>\n\t\t\t<div>\n\t\t\t\t{ justificationOptions.map( ( { value, icon, label } ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tkey={ value }\n\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\ticon={ icon }\n\t\t\t\t\t\t\tisPressed={ justifyContent === value }\n\t\t\t\t\t\t\tonClick={ () => onJustificationChange( value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</div>\n\t\t</fieldset>\n\t);\n}\n\nfunction FlexWrapControl( { layout, onChange } ) {\n\tconst { flexWrap = 'wrap' } = layout;\n\treturn (\n\t\t<ToggleControl\n\t\t\tlabel={ __( 'Allow to wrap to multiple lines' ) }\n\t\t\tonChange={ ( value ) => {\n\t\t\t\tonChange( {\n\t\t\t\t\t...layout,\n\t\t\t\t\tflexWrap: value ? 'wrap' : 'nowrap',\n\t\t\t\t} );\n\t\t\t} }\n\t\t\tchecked={ flexWrap === 'wrap' }\n\t\t/>\n\t);\n}\n\nfunction OrientationControl( { layout, onChange } ) {\n\tconst { orientation = 'horizontal' } = layout;\n\treturn (\n\t\t<fieldset className=\"block-editor-hooks__flex-layout-orientation-controls\">\n\t\t\t<legend>{ __( 'Orientation' ) }</legend>\n\t\t\t<Button\n\t\t\t\tlabel={ __( 'Horizontal' ) }\n\t\t\t\ticon={ arrowRight }\n\t\t\t\tisPressed={ orientation === 'horizontal' }\n\t\t\t\tonClick={ () =>\n\t\t\t\t\tonChange( {\n\t\t\t\t\t\t...layout,\n\t\t\t\t\t\torientation: 'horizontal',\n\t\t\t\t\t} )\n\t\t\t\t}\n\t\t\t/>\n\t\t\t<Button\n\t\t\t\tlabel={ __( 'Vertical' ) }\n\t\t\t\ticon={ arrowDown }\n\t\t\t\tisPressed={ orientation === 'vertical' }\n\t\t\t\tonClick={ () =>\n\t\t\t\t\tonChange( {\n\t\t\t\t\t\t...layout,\n\t\t\t\t\t\torientation: 'vertical',\n\t\t\t\t\t} )\n\t\t\t\t}\n\t\t\t/>\n\t\t</fieldset>\n\t);\n}\n"]}