@wordpress/block-editor 11.4.0 → 11.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/build/components/block-inspector/index.js +11 -10
  3. package/build/components/block-inspector/index.js.map +1 -1
  4. package/build/components/block-inspector/useBlockInspectorAnimationSettings.js +46 -0
  5. package/build/components/block-inspector/useBlockInspectorAnimationSettings.js.map +1 -0
  6. package/build/components/block-list/block-invalid-warning.js +63 -80
  7. package/build/components/block-list/block-invalid-warning.js.map +1 -1
  8. package/build/components/block-lock/modal.js +1 -0
  9. package/build/components/block-lock/modal.js.map +1 -1
  10. package/build/components/block-settings-menu/block-settings-dropdown.js +2 -2
  11. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  12. package/build/components/block-settings-menu-controls/index.js +1 -1
  13. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  14. package/build/components/block-styles/index.js +2 -1
  15. package/build/components/block-styles/index.js.map +1 -1
  16. package/build/components/block-switcher/block-transformations-menu.native.js +1 -0
  17. package/build/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  18. package/build/components/child-layout-control/index.js +107 -0
  19. package/build/components/child-layout-control/index.js.map +1 -0
  20. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js +6 -3
  21. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  22. package/build/components/date-format-picker/index.js +3 -3
  23. package/build/components/date-format-picker/index.js.map +1 -1
  24. package/build/components/global-styles/border-panel.js +306 -0
  25. package/build/components/global-styles/border-panel.js.map +1 -0
  26. package/build/components/global-styles/dimensions-panel.js +594 -0
  27. package/build/components/global-styles/dimensions-panel.js.map +1 -0
  28. package/build/components/global-styles/hooks.js +127 -37
  29. package/build/components/global-styles/hooks.js.map +1 -1
  30. package/build/components/global-styles/index.js +36 -2
  31. package/build/components/global-styles/index.js.map +1 -1
  32. package/build/components/global-styles/typography-panel.js +87 -27
  33. package/build/components/global-styles/typography-panel.js.map +1 -1
  34. package/build/components/global-styles/use-global-styles-output.js +21 -14
  35. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  36. package/build/components/global-styles/utils.js +2 -0
  37. package/build/components/global-styles/utils.js.map +1 -1
  38. package/build/components/index.native.js +23 -0
  39. package/build/components/index.native.js.map +1 -1
  40. package/build/components/inserter/index.js +29 -17
  41. package/build/components/inserter/index.js.map +1 -1
  42. package/build/components/inserter/media-tab/hooks.js +10 -11
  43. package/build/components/inserter/media-tab/hooks.js.map +1 -1
  44. package/build/components/inserter/media-tab/media-list.js +5 -108
  45. package/build/components/inserter/media-tab/media-list.js.map +1 -1
  46. package/build/components/inserter/media-tab/media-preview.js +242 -0
  47. package/build/components/inserter/media-tab/media-preview.js.map +1 -0
  48. package/build/components/inserter/menu.js +1 -1
  49. package/build/components/inserter/menu.js.map +1 -1
  50. package/build/components/inserter/quick-inserter.js +4 -2
  51. package/build/components/inserter/quick-inserter.js.map +1 -1
  52. package/build/components/inserter/search-results.js +10 -3
  53. package/build/components/inserter/search-results.js.map +1 -1
  54. package/build/components/inserter/tabs.js +1 -1
  55. package/build/components/inserter/tabs.js.map +1 -1
  56. package/build/components/inspector-controls/block-support-tools-panel.js +1 -1
  57. package/build/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  58. package/build/components/inspector-controls/fill.js +38 -9
  59. package/build/components/inspector-controls/fill.js.map +1 -1
  60. package/build/components/link-control/index.js +1 -1
  61. package/build/components/link-control/index.js.map +1 -1
  62. package/build/components/link-control/search-item.js +5 -2
  63. package/build/components/link-control/search-item.js.map +1 -1
  64. package/build/components/link-control/settings-drawer.js +1 -1
  65. package/build/components/link-control/settings-drawer.js.map +1 -1
  66. package/build/components/link-control/settings.js +1 -0
  67. package/build/components/link-control/settings.js.map +1 -1
  68. package/build/components/list-view/block.js +17 -3
  69. package/build/components/list-view/block.js.map +1 -1
  70. package/build/components/list-view/branch.js +2 -2
  71. package/build/components/list-view/branch.js.map +1 -1
  72. package/build/components/list-view/expander.js +2 -1
  73. package/build/components/list-view/expander.js.map +1 -1
  74. package/build/components/list-view/leaf.js +10 -6
  75. package/build/components/list-view/leaf.js.map +1 -1
  76. package/build/components/list-view/use-block-selection.js +1 -2
  77. package/build/components/list-view/use-block-selection.js.map +1 -1
  78. package/build/components/list-view/use-list-view-scroll-into-view.js +51 -0
  79. package/build/components/list-view/use-list-view-scroll-into-view.js.map +1 -0
  80. package/build/components/off-canvas-editor/appender.js +33 -13
  81. package/build/components/off-canvas-editor/appender.js.map +1 -1
  82. package/build/components/off-canvas-editor/branch.js +6 -3
  83. package/build/components/off-canvas-editor/branch.js.map +1 -1
  84. package/build/components/off-canvas-editor/index.js +8 -2
  85. package/build/components/off-canvas-editor/index.js.map +1 -1
  86. package/build/components/off-canvas-editor/leaf-more-menu.js +34 -4
  87. package/build/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  88. package/build/components/provider/use-block-sync.js +17 -3
  89. package/build/components/provider/use-block-sync.js.map +1 -1
  90. package/build/components/responsive-block-control/index.js +1 -0
  91. package/build/components/responsive-block-control/index.js.map +1 -1
  92. package/build/components/rich-text/format-toolbar-container.js +0 -3
  93. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  94. package/build/components/rich-text/index.js +9 -43
  95. package/build/components/rich-text/index.js.map +1 -1
  96. package/build/components/rich-text/use-delete.js +73 -0
  97. package/build/components/rich-text/use-delete.js.map +1 -0
  98. package/build/components/rich-text/use-input-rules.js +14 -6
  99. package/build/components/rich-text/use-input-rules.js.map +1 -1
  100. package/build/components/writing-flow/use-selection-observer.js +4 -1
  101. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  102. package/build/hooks/align.js +3 -1
  103. package/build/hooks/align.js.map +1 -1
  104. package/build/hooks/border.js +91 -240
  105. package/build/hooks/border.js.map +1 -1
  106. package/build/hooks/custom-class-name.js +4 -4
  107. package/build/hooks/custom-class-name.js.map +1 -1
  108. package/build/hooks/custom-class-name.native.js +3 -4
  109. package/build/hooks/custom-class-name.native.js.map +1 -1
  110. package/build/hooks/dimensions.js +72 -190
  111. package/build/hooks/dimensions.js.map +1 -1
  112. package/build/hooks/duotone.js +94 -25
  113. package/build/hooks/duotone.js.map +1 -1
  114. package/build/hooks/gap.js +0 -202
  115. package/build/hooks/gap.js.map +1 -1
  116. package/build/hooks/layout.js +33 -27
  117. package/build/hooks/layout.js.map +1 -1
  118. package/build/hooks/margin.js +7 -163
  119. package/build/hooks/margin.js.map +1 -1
  120. package/build/hooks/padding.js +7 -163
  121. package/build/hooks/padding.js.map +1 -1
  122. package/build/hooks/supports.js +7 -1
  123. package/build/hooks/supports.js.map +1 -1
  124. package/build/hooks/typography.js +52 -66
  125. package/build/hooks/typography.js.map +1 -1
  126. package/build/hooks/utils.js +101 -0
  127. package/build/hooks/utils.js.map +1 -1
  128. package/build/layouts/constrained.js +6 -2
  129. package/build/layouts/constrained.js.map +1 -1
  130. package/build/layouts/flex.js +1 -0
  131. package/build/layouts/flex.js.map +1 -1
  132. package/build/private-apis.js +4 -1
  133. package/build/private-apis.js.map +1 -1
  134. package/build/store/actions.js +28 -14
  135. package/build/store/actions.js.map +1 -1
  136. package/build/store/defaults.js +28 -1
  137. package/build/store/defaults.js.map +1 -1
  138. package/build/store/reducer.js +53 -47
  139. package/build/store/reducer.js.map +1 -1
  140. package/build/store/selectors.js +24 -4
  141. package/build/store/selectors.js.map +1 -1
  142. package/build/utils/parse-css-unit-to-px.js +49 -10
  143. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  144. package/build-module/components/block-inspector/index.js +9 -9
  145. package/build-module/components/block-inspector/index.js.map +1 -1
  146. package/build-module/components/block-inspector/useBlockInspectorAnimationSettings.js +37 -0
  147. package/build-module/components/block-inspector/useBlockInspectorAnimationSettings.js.map +1 -0
  148. package/build-module/components/block-list/block-invalid-warning.js +66 -78
  149. package/build-module/components/block-list/block-invalid-warning.js.map +1 -1
  150. package/build-module/components/block-lock/modal.js +1 -0
  151. package/build-module/components/block-lock/modal.js.map +1 -1
  152. package/build-module/components/block-settings-menu/block-settings-dropdown.js +2 -2
  153. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  154. package/build-module/components/block-settings-menu-controls/index.js +1 -1
  155. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  156. package/build-module/components/block-styles/index.js +2 -1
  157. package/build-module/components/block-styles/index.js.map +1 -1
  158. package/build-module/components/block-switcher/block-transformations-menu.native.js +1 -0
  159. package/build-module/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  160. package/build-module/components/child-layout-control/index.js +98 -0
  161. package/build-module/components/child-layout-control/index.js.map +1 -0
  162. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js +6 -3
  163. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  164. package/build-module/components/date-format-picker/index.js +4 -4
  165. package/build-module/components/date-format-picker/index.js.map +1 -1
  166. package/build-module/components/global-styles/border-panel.js +291 -0
  167. package/build-module/components/global-styles/border-panel.js.map +1 -0
  168. package/build-module/components/global-styles/dimensions-panel.js +574 -0
  169. package/build-module/components/global-styles/dimensions-panel.js.map +1 -0
  170. package/build-module/components/global-styles/hooks.js +123 -34
  171. package/build-module/components/global-styles/hooks.js.map +1 -1
  172. package/build-module/components/global-styles/index.js +3 -1
  173. package/build-module/components/global-styles/index.js.map +1 -1
  174. package/build-module/components/global-styles/typography-panel.js +88 -27
  175. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  176. package/build-module/components/global-styles/use-global-styles-output.js +21 -14
  177. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  178. package/build-module/components/global-styles/utils.js +2 -0
  179. package/build-module/components/global-styles/utils.js.map +1 -1
  180. package/build-module/components/index.native.js +2 -1
  181. package/build-module/components/index.native.js.map +1 -1
  182. package/build-module/components/inserter/index.js +28 -16
  183. package/build-module/components/inserter/index.js.map +1 -1
  184. package/build-module/components/inserter/media-tab/hooks.js +10 -11
  185. package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
  186. package/build-module/components/inserter/media-tab/media-list.js +6 -105
  187. package/build-module/components/inserter/media-tab/media-list.js.map +1 -1
  188. package/build-module/components/inserter/media-tab/media-preview.js +222 -0
  189. package/build-module/components/inserter/media-tab/media-preview.js.map +1 -0
  190. package/build-module/components/inserter/menu.js +1 -1
  191. package/build-module/components/inserter/menu.js.map +1 -1
  192. package/build-module/components/inserter/quick-inserter.js +4 -2
  193. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  194. package/build-module/components/inserter/search-results.js +10 -3
  195. package/build-module/components/inserter/search-results.js.map +1 -1
  196. package/build-module/components/inserter/tabs.js +1 -1
  197. package/build-module/components/inserter/tabs.js.map +1 -1
  198. package/build-module/components/inspector-controls/block-support-tools-panel.js +1 -1
  199. package/build-module/components/inspector-controls/block-support-tools-panel.js.map +1 -1
  200. package/build-module/components/inspector-controls/fill.js +39 -9
  201. package/build-module/components/inspector-controls/fill.js.map +1 -1
  202. package/build-module/components/link-control/index.js +1 -1
  203. package/build-module/components/link-control/index.js.map +1 -1
  204. package/build-module/components/link-control/search-item.js +4 -2
  205. package/build-module/components/link-control/search-item.js.map +1 -1
  206. package/build-module/components/link-control/settings-drawer.js +1 -1
  207. package/build-module/components/link-control/settings-drawer.js.map +1 -1
  208. package/build-module/components/link-control/settings.js +1 -0
  209. package/build-module/components/link-control/settings.js.map +1 -1
  210. package/build-module/components/list-view/block.js +16 -3
  211. package/build-module/components/list-view/block.js.map +1 -1
  212. package/build-module/components/list-view/branch.js +2 -2
  213. package/build-module/components/list-view/branch.js.map +1 -1
  214. package/build-module/components/list-view/expander.js +2 -1
  215. package/build-module/components/list-view/expander.js.map +1 -1
  216. package/build-module/components/list-view/leaf.js +8 -4
  217. package/build-module/components/list-view/leaf.js.map +1 -1
  218. package/build-module/components/list-view/use-block-selection.js +1 -2
  219. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  220. package/build-module/components/list-view/use-list-view-scroll-into-view.js +42 -0
  221. package/build-module/components/list-view/use-list-view-scroll-into-view.js.map +1 -0
  222. package/build-module/components/off-canvas-editor/appender.js +33 -14
  223. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  224. package/build-module/components/off-canvas-editor/branch.js +6 -3
  225. package/build-module/components/off-canvas-editor/branch.js.map +1 -1
  226. package/build-module/components/off-canvas-editor/index.js +8 -2
  227. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  228. package/build-module/components/off-canvas-editor/leaf-more-menu.js +36 -7
  229. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  230. package/build-module/components/provider/use-block-sync.js +17 -3
  231. package/build-module/components/provider/use-block-sync.js.map +1 -1
  232. package/build-module/components/responsive-block-control/index.js +1 -0
  233. package/build-module/components/responsive-block-control/index.js.map +1 -1
  234. package/build-module/components/rich-text/format-toolbar-container.js +0 -3
  235. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  236. package/build-module/components/rich-text/index.js +9 -43
  237. package/build-module/components/rich-text/index.js.map +1 -1
  238. package/build-module/components/rich-text/use-delete.js +62 -0
  239. package/build-module/components/rich-text/use-delete.js.map +1 -0
  240. package/build-module/components/rich-text/use-input-rules.js +14 -6
  241. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  242. package/build-module/components/writing-flow/use-selection-observer.js +4 -1
  243. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  244. package/build-module/hooks/align.js +3 -1
  245. package/build-module/hooks/align.js.map +1 -1
  246. package/build-module/hooks/border.js +93 -240
  247. package/build-module/hooks/border.js.map +1 -1
  248. package/build-module/hooks/custom-class-name.js +4 -4
  249. package/build-module/hooks/custom-class-name.js.map +1 -1
  250. package/build-module/hooks/custom-class-name.native.js +3 -4
  251. package/build-module/hooks/custom-class-name.native.js.map +1 -1
  252. package/build-module/hooks/dimensions.js +75 -187
  253. package/build-module/hooks/dimensions.js.map +1 -1
  254. package/build-module/hooks/duotone.js +86 -24
  255. package/build-module/hooks/duotone.js.map +1 -1
  256. package/build-module/hooks/gap.js +0 -183
  257. package/build-module/hooks/gap.js.map +1 -1
  258. package/build-module/hooks/layout.js +33 -27
  259. package/build-module/hooks/layout.js.map +1 -1
  260. package/build-module/hooks/margin.js +4 -143
  261. package/build-module/hooks/margin.js.map +1 -1
  262. package/build-module/hooks/padding.js +4 -143
  263. package/build-module/hooks/padding.js.map +1 -1
  264. package/build-module/hooks/supports.js +7 -1
  265. package/build-module/hooks/supports.js.map +1 -1
  266. package/build-module/hooks/typography.js +54 -66
  267. package/build-module/hooks/typography.js.map +1 -1
  268. package/build-module/hooks/utils.js +96 -0
  269. package/build-module/hooks/utils.js.map +1 -1
  270. package/build-module/layouts/constrained.js +6 -2
  271. package/build-module/layouts/constrained.js.map +1 -1
  272. package/build-module/layouts/flex.js +1 -0
  273. package/build-module/layouts/flex.js.map +1 -1
  274. package/build-module/private-apis.js +3 -1
  275. package/build-module/private-apis.js.map +1 -1
  276. package/build-module/store/actions.js +28 -14
  277. package/build-module/store/actions.js.map +1 -1
  278. package/build-module/store/defaults.js +28 -1
  279. package/build-module/store/defaults.js.map +1 -1
  280. package/build-module/store/reducer.js +53 -45
  281. package/build-module/store/reducer.js.map +1 -1
  282. package/build-module/store/selectors.js +22 -4
  283. package/build-module/store/selectors.js.map +1 -1
  284. package/build-module/utils/parse-css-unit-to-px.js +49 -10
  285. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  286. package/build-style/style-rtl.css +39 -27
  287. package/build-style/style.css +39 -27
  288. package/package.json +31 -31
  289. package/src/components/block-draggable/test/__snapshots__/index.native.js.snap +24 -24
  290. package/src/components/block-inspector/index.js +11 -14
  291. package/src/components/block-inspector/style.scss +3 -0
  292. package/src/components/block-inspector/useBlockInspectorAnimationSettings.js +53 -0
  293. package/src/components/block-list/block-invalid-warning.js +72 -64
  294. package/src/components/block-lock/modal.js +1 -0
  295. package/src/components/block-lock/style.scss +0 -9
  296. package/src/components/block-mobile-toolbar/test/__snapshots__/block-actions-menu.native.js.snap +20 -20
  297. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +35 -17
  298. package/src/components/block-preview/test/index.js +0 -2
  299. package/src/components/block-settings-menu/block-settings-dropdown.js +4 -1
  300. package/src/components/block-settings-menu-controls/index.js +2 -1
  301. package/src/components/block-styles/index.js +5 -1
  302. package/src/components/block-styles/style.scss +2 -2
  303. package/src/components/block-switcher/block-transformations-menu.native.js +1 -0
  304. package/src/components/child-layout-control/index.js +106 -0
  305. package/src/components/color-palette/test/__snapshots__/control.js.snap +17 -15
  306. package/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js +48 -38
  307. package/src/components/date-format-picker/index.js +6 -8
  308. package/src/components/date-format-picker/style.scss +0 -5
  309. package/src/components/global-styles/border-panel.js +285 -0
  310. package/src/components/global-styles/dimensions-panel.js +627 -0
  311. package/src/components/global-styles/hooks.js +160 -44
  312. package/src/components/global-styles/index.js +7 -1
  313. package/src/components/global-styles/test/use-global-styles-output.js +1 -1
  314. package/src/components/global-styles/typography-panel.js +81 -9
  315. package/src/components/global-styles/use-global-styles-output.js +17 -16
  316. package/src/components/global-styles/utils.js +2 -0
  317. package/src/components/index.native.js +5 -0
  318. package/src/components/inner-blocks/test/__snapshots__/index.js.snap +1 -1
  319. package/src/components/inserter/index.js +30 -11
  320. package/src/components/inserter/media-tab/hooks.js +9 -8
  321. package/src/components/inserter/media-tab/media-list.js +3 -122
  322. package/src/components/inserter/media-tab/media-preview.js +268 -0
  323. package/src/components/inserter/menu.js +0 -1
  324. package/src/components/inserter/quick-inserter.js +2 -0
  325. package/src/components/inserter/search-results.js +7 -1
  326. package/src/components/inserter/style.scss +25 -0
  327. package/src/components/inserter/tabs.js +1 -9
  328. package/src/components/inserter/test/__snapshots__/index.native.js.snap +15 -15
  329. package/src/components/inspector-controls/block-support-tools-panel.js +0 -1
  330. package/src/components/inspector-controls/fill.js +32 -8
  331. package/src/components/link-control/index.js +1 -1
  332. package/src/components/link-control/search-item.js +3 -1
  333. package/src/components/link-control/settings-drawer.js +2 -1
  334. package/src/components/link-control/settings.js +1 -0
  335. package/src/components/link-control/style.scss +18 -12
  336. package/src/components/link-control/test/index.js +3 -5
  337. package/src/components/list-view/block.js +19 -1
  338. package/src/components/list-view/branch.js +1 -2
  339. package/src/components/list-view/expander.js +1 -0
  340. package/src/components/list-view/leaf.js +43 -29
  341. package/src/components/list-view/use-block-selection.js +0 -2
  342. package/src/components/list-view/use-list-view-scroll-into-view.js +48 -0
  343. package/src/components/media-replace-flow/style.scss +7 -9
  344. package/src/components/off-canvas-editor/appender.js +44 -21
  345. package/src/components/off-canvas-editor/branch.js +4 -1
  346. package/src/components/off-canvas-editor/index.js +7 -1
  347. package/src/components/off-canvas-editor/leaf-more-menu.js +57 -15
  348. package/src/components/provider/use-block-sync.js +21 -4
  349. package/src/components/responsive-block-control/index.js +1 -0
  350. package/src/components/rich-text/format-toolbar-container.js +1 -7
  351. package/src/components/rich-text/index.js +8 -44
  352. package/src/components/rich-text/use-delete.js +59 -0
  353. package/src/components/rich-text/use-input-rules.js +13 -5
  354. package/src/components/spacing-sizes-control/style.scss +1 -1
  355. package/src/components/url-popover/stories/index.js +1 -0
  356. package/src/components/url-popover/test/index.js +0 -2
  357. package/src/components/writing-flow/use-selection-observer.js +5 -1
  358. package/src/hooks/align.js +1 -1
  359. package/src/hooks/border.js +94 -225
  360. package/src/hooks/custom-class-name.js +4 -4
  361. package/src/hooks/custom-class-name.native.js +3 -4
  362. package/src/hooks/dimensions.js +85 -269
  363. package/src/hooks/duotone.js +100 -30
  364. package/src/hooks/gap.js +0 -208
  365. package/src/hooks/layout.js +38 -22
  366. package/src/hooks/margin.js +1 -164
  367. package/src/hooks/padding.js +1 -163
  368. package/src/hooks/supports.js +6 -0
  369. package/src/hooks/test/__snapshots__/align.native.js.snap +24 -24
  370. package/src/hooks/test/duotone.js +102 -0
  371. package/src/hooks/test/style.js +2 -1
  372. package/src/hooks/test/use-typography-props.js +2 -0
  373. package/src/hooks/typography.js +68 -88
  374. package/src/hooks/utils.js +126 -0
  375. package/src/layouts/constrained.js +23 -17
  376. package/src/layouts/flex.js +1 -0
  377. package/src/private-apis.js +2 -0
  378. package/src/store/actions.js +16 -6
  379. package/src/store/defaults.js +14 -1
  380. package/src/store/reducer.js +68 -43
  381. package/src/store/selectors.js +28 -4
  382. package/src/store/test/actions.js +4 -2
  383. package/src/utils/parse-css-unit-to-px.js +48 -13
  384. package/src/utils/test/parse-css-unit-to-px.js +13 -2
  385. package/tsconfig.tsbuildinfo +1 -1
  386. package/build/hooks/border-radius.js +0 -100
  387. package/build/hooks/border-radius.js.map +0 -1
  388. package/build/hooks/child-layout.js +0 -213
  389. package/build/hooks/child-layout.js.map +0 -1
  390. package/build/hooks/min-height.js +0 -139
  391. package/build/hooks/min-height.js.map +0 -1
  392. package/build-module/hooks/border-radius.js +0 -84
  393. package/build-module/hooks/border-radius.js.map +0 -1
  394. package/build-module/hooks/child-layout.js +0 -193
  395. package/build-module/hooks/child-layout.js.map +0 -1
  396. package/build-module/hooks/min-height.js +0 -116
  397. package/build-module/hooks/min-height.js.map +0 -1
  398. package/src/hooks/border-radius.js +0 -70
  399. package/src/hooks/child-layout.js +0 -195
  400. package/src/hooks/min-height.js +0 -104
@@ -0,0 +1,306 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = BorderPanel;
9
+ exports.useHasBorderPanel = useHasBorderPanel;
10
+
11
+ var _element = require("@wordpress/element");
12
+
13
+ var _components = require("@wordpress/components");
14
+
15
+ var _i18n = require("@wordpress/i18n");
16
+
17
+ var _borderRadiusControl = _interopRequireDefault(require("../border-radius-control"));
18
+
19
+ var _hooks = require("./hooks");
20
+
21
+ var _utils = require("./utils");
22
+
23
+ /**
24
+ * WordPress dependencies
25
+ */
26
+
27
+ /**
28
+ * Internal dependencies
29
+ */
30
+ function useHasBorderPanel(settings) {
31
+ const controls = [useHasBorderColorControl(settings), useHasBorderRadiusControl(settings), useHasBorderStyleControl(settings), useHasBorderWidthControl(settings)];
32
+ return controls.some(Boolean);
33
+ }
34
+
35
+ function useHasBorderColorControl(settings) {
36
+ var _settings$border;
37
+
38
+ return settings === null || settings === void 0 ? void 0 : (_settings$border = settings.border) === null || _settings$border === void 0 ? void 0 : _settings$border.color;
39
+ }
40
+
41
+ function useHasBorderRadiusControl(settings) {
42
+ var _settings$border2;
43
+
44
+ return settings === null || settings === void 0 ? void 0 : (_settings$border2 = settings.border) === null || _settings$border2 === void 0 ? void 0 : _settings$border2.radius;
45
+ }
46
+
47
+ function useHasBorderStyleControl(settings) {
48
+ var _settings$border3;
49
+
50
+ return settings === null || settings === void 0 ? void 0 : (_settings$border3 = settings.border) === null || _settings$border3 === void 0 ? void 0 : _settings$border3.style;
51
+ }
52
+
53
+ function useHasBorderWidthControl(settings) {
54
+ var _settings$border4;
55
+
56
+ return settings === null || settings === void 0 ? void 0 : (_settings$border4 = settings.border) === null || _settings$border4 === void 0 ? void 0 : _settings$border4.width;
57
+ }
58
+
59
+ function applyFallbackStyle(border) {
60
+ if (!border) {
61
+ return border;
62
+ }
63
+
64
+ if (!border.style && (border.color || border.width)) {
65
+ return { ...border,
66
+ style: 'solid'
67
+ };
68
+ }
69
+
70
+ return border;
71
+ }
72
+
73
+ function applyAllFallbackStyles(border) {
74
+ if (!border) {
75
+ return border;
76
+ }
77
+
78
+ if ((0, _components.__experimentalHasSplitBorders)(border)) {
79
+ return {
80
+ top: applyFallbackStyle(border.top),
81
+ right: applyFallbackStyle(border.right),
82
+ bottom: applyFallbackStyle(border.bottom),
83
+ left: applyFallbackStyle(border.left)
84
+ };
85
+ }
86
+
87
+ return applyFallbackStyle(border);
88
+ }
89
+
90
+ function BorderToolsPanel(_ref) {
91
+ let {
92
+ resetAllFilter,
93
+ onChange,
94
+ value,
95
+ panelId,
96
+ children
97
+ } = _ref;
98
+
99
+ const resetAll = () => {
100
+ const updatedValue = resetAllFilter(value);
101
+ onChange(updatedValue);
102
+ };
103
+
104
+ return (0, _element.createElement)(_components.__experimentalToolsPanel, {
105
+ label: (0, _i18n.__)('Border'),
106
+ resetAll: resetAll,
107
+ panelId: panelId
108
+ }, children);
109
+ }
110
+
111
+ const DEFAULT_CONTROLS = {
112
+ radius: true,
113
+ color: true,
114
+ width: true
115
+ };
116
+
117
+ function BorderPanel(_ref2) {
118
+ let {
119
+ as: Wrapper = BorderToolsPanel,
120
+ value,
121
+ onChange,
122
+ inheritedValue = value,
123
+ settings,
124
+ panelId,
125
+ defaultControls = DEFAULT_CONTROLS
126
+ } = _ref2;
127
+ const colors = (0, _hooks.useColorsPerOrigin)(settings);
128
+
129
+ const decodeValue = rawValue => (0, _utils.getValueFromVariable)({
130
+ settings
131
+ }, '', rawValue);
132
+
133
+ const encodeColorValue = colorValue => {
134
+ const allColors = colors.flatMap(_ref3 => {
135
+ let {
136
+ colors: originColors
137
+ } = _ref3;
138
+ return originColors;
139
+ });
140
+ const colorObject = allColors.find(_ref4 => {
141
+ let {
142
+ color
143
+ } = _ref4;
144
+ return color === colorValue;
145
+ });
146
+ return colorObject ? 'var:preset|color|' + colorObject.slug : colorValue;
147
+ };
148
+
149
+ const decodeColorValue = (0, _element.useCallback)(colorValue => {
150
+ const allColors = colors.flatMap(_ref5 => {
151
+ let {
152
+ colors: originColors
153
+ } = _ref5;
154
+ return originColors;
155
+ });
156
+ const colorObject = allColors.find(_ref6 => {
157
+ let {
158
+ slug
159
+ } = _ref6;
160
+ return colorValue === 'var:preset|color|' + slug;
161
+ });
162
+ return colorObject ? colorObject.color : colorValue;
163
+ }, [colors]);
164
+ const border = (0, _element.useMemo)(() => {
165
+ var _inheritedValue$borde, _inheritedValue$borde2;
166
+
167
+ if ((0, _components.__experimentalHasSplitBorders)(inheritedValue === null || inheritedValue === void 0 ? void 0 : inheritedValue.border)) {
168
+ const borderValue = { ...(inheritedValue === null || inheritedValue === void 0 ? void 0 : inheritedValue.border)
169
+ };
170
+ ['top', 'right', 'bottom', 'left'].forEach(side => {
171
+ var _borderValue$side;
172
+
173
+ borderValue[side] = { ...borderValue[side],
174
+ color: decodeColorValue((_borderValue$side = borderValue[side]) === null || _borderValue$side === void 0 ? void 0 : _borderValue$side.color)
175
+ };
176
+ });
177
+ return borderValue;
178
+ }
179
+
180
+ return { ...(inheritedValue === null || inheritedValue === void 0 ? void 0 : inheritedValue.border),
181
+ color: inheritedValue !== null && inheritedValue !== void 0 && (_inheritedValue$borde = inheritedValue.border) !== null && _inheritedValue$borde !== void 0 && _inheritedValue$borde.color ? decodeColorValue(inheritedValue === null || inheritedValue === void 0 ? void 0 : (_inheritedValue$borde2 = inheritedValue.border) === null || _inheritedValue$borde2 === void 0 ? void 0 : _inheritedValue$borde2.color) : undefined
182
+ };
183
+ }, [inheritedValue === null || inheritedValue === void 0 ? void 0 : inheritedValue.border, decodeColorValue]);
184
+
185
+ const setBorder = newBorder => onChange({ ...value,
186
+ border: newBorder
187
+ });
188
+
189
+ const showBorderColor = useHasBorderColorControl(settings);
190
+ const showBorderStyle = useHasBorderStyleControl(settings);
191
+ const showBorderWidth = useHasBorderWidthControl(settings); // Border radius.
192
+
193
+ const showBorderRadius = useHasBorderRadiusControl(settings);
194
+ const borderRadiusValues = decodeValue(border === null || border === void 0 ? void 0 : border.radius);
195
+
196
+ const setBorderRadius = newBorderRadius => setBorder({ ...border,
197
+ radius: newBorderRadius
198
+ });
199
+
200
+ const hasBorderRadius = () => {
201
+ var _value$border;
202
+
203
+ const borderValues = value === null || value === void 0 ? void 0 : (_value$border = value.border) === null || _value$border === void 0 ? void 0 : _value$border.radius;
204
+
205
+ if (typeof borderValues === 'object') {
206
+ return Object.entries(borderValues).some(Boolean);
207
+ }
208
+
209
+ return !!borderValues;
210
+ };
211
+
212
+ const resetBorder = () => {
213
+ if (hasBorderRadius()) {
214
+ var _value$border2;
215
+
216
+ return setBorder({
217
+ radius: value === null || value === void 0 ? void 0 : (_value$border2 = value.border) === null || _value$border2 === void 0 ? void 0 : _value$border2.radius
218
+ });
219
+ }
220
+
221
+ setBorder(undefined);
222
+ };
223
+
224
+ const onBorderChange = newBorder => {
225
+ // Ensure we have a visible border style when a border width or
226
+ // color is being selected.
227
+ const newBorderWithStyle = applyAllFallbackStyles(newBorder); // As we can't conditionally generate styles based on if other
228
+ // style properties have been set we need to force split border
229
+ // definitions for user set border styles. Border radius is derived
230
+ // from the same property i.e. `border.radius` if it is a string
231
+ // that is used. The longhand border radii styles are only generated
232
+ // if that property is an object.
233
+ //
234
+ // For borders (color, style, and width) those are all properties on
235
+ // the `border` style property. This means if the theme.json defined
236
+ // split borders and the user condenses them into a flat border or
237
+ // vice-versa we'd get both sets of styles which would conflict.
238
+
239
+ const updatedBorder = !(0, _components.__experimentalHasSplitBorders)(newBorderWithStyle) ? {
240
+ top: newBorderWithStyle,
241
+ right: newBorderWithStyle,
242
+ bottom: newBorderWithStyle,
243
+ left: newBorderWithStyle
244
+ } : {
245
+ color: null,
246
+ style: null,
247
+ width: null,
248
+ ...newBorderWithStyle
249
+ };
250
+ ['top', 'right', 'bottom', 'left'].forEach(side => {
251
+ var _updatedBorder$side;
252
+
253
+ updatedBorder[side] = { ...updatedBorder[side],
254
+ color: encodeColorValue((_updatedBorder$side = updatedBorder[side]) === null || _updatedBorder$side === void 0 ? void 0 : _updatedBorder$side.color)
255
+ };
256
+ }); // As radius is maintained separately to color, style, and width
257
+ // maintain its value. Undefined values here will be cleaned when
258
+ // global styles are saved.
259
+
260
+ setBorder({
261
+ radius: border === null || border === void 0 ? void 0 : border.radius,
262
+ ...updatedBorder
263
+ });
264
+ };
265
+
266
+ const resetAllFilter = (0, _element.useCallback)(previousValue => {
267
+ return { ...previousValue,
268
+ border: undefined
269
+ };
270
+ }, []);
271
+ const showBorderByDefault = (defaultControls === null || defaultControls === void 0 ? void 0 : defaultControls.color) || (defaultControls === null || defaultControls === void 0 ? void 0 : defaultControls.width);
272
+ return (0, _element.createElement)(Wrapper, {
273
+ resetAllFilter: resetAllFilter,
274
+ value: value,
275
+ onChange: onChange,
276
+ panelId: panelId
277
+ }, (showBorderWidth || showBorderColor) && (0, _element.createElement)(_components.__experimentalToolsPanelItem, {
278
+ hasValue: () => (0, _components.__experimentalIsDefinedBorder)(value === null || value === void 0 ? void 0 : value.border),
279
+ label: (0, _i18n.__)('Border'),
280
+ onDeselect: () => resetBorder(),
281
+ isShownByDefault: showBorderByDefault,
282
+ panelId: panelId
283
+ }, (0, _element.createElement)(_components.__experimentalBorderBoxControl, {
284
+ colors: colors,
285
+ enableAlpha: true,
286
+ enableStyle: showBorderStyle,
287
+ onChange: onBorderChange,
288
+ popoverOffset: 40,
289
+ popoverPlacement: "left-start",
290
+ value: border,
291
+ __experimentalIsRenderedInSidebar: true,
292
+ size: '__unstable-large'
293
+ })), showBorderRadius && (0, _element.createElement)(_components.__experimentalToolsPanelItem, {
294
+ hasValue: hasBorderRadius,
295
+ label: (0, _i18n.__)('Radius'),
296
+ onDeselect: () => setBorderRadius(undefined),
297
+ isShownByDefault: defaultControls.radius,
298
+ panelId: panelId
299
+ }, (0, _element.createElement)(_borderRadiusControl.default, {
300
+ values: borderRadiusValues,
301
+ onChange: newValue => {
302
+ setBorderRadius(newValue || undefined);
303
+ }
304
+ })));
305
+ }
306
+ //# sourceMappingURL=border-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/global-styles/border-panel.js"],"names":["useHasBorderPanel","settings","controls","useHasBorderColorControl","useHasBorderRadiusControl","useHasBorderStyleControl","useHasBorderWidthControl","some","Boolean","border","color","radius","style","width","applyFallbackStyle","applyAllFallbackStyles","top","right","bottom","left","BorderToolsPanel","resetAllFilter","onChange","value","panelId","children","resetAll","updatedValue","DEFAULT_CONTROLS","BorderPanel","as","Wrapper","inheritedValue","defaultControls","colors","decodeValue","rawValue","encodeColorValue","colorValue","allColors","flatMap","originColors","colorObject","find","slug","decodeColorValue","borderValue","forEach","side","undefined","setBorder","newBorder","showBorderColor","showBorderStyle","showBorderWidth","showBorderRadius","borderRadiusValues","setBorderRadius","newBorderRadius","hasBorderRadius","borderValues","Object","entries","resetBorder","onBorderChange","newBorderWithStyle","updatedBorder","previousValue","showBorderByDefault","newValue"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalBorderBoxControl as BorderBoxControl,\n\t__experimentalHasSplitBorders as hasSplitBorders,\n\t__experimentalIsDefinedBorder as isDefinedBorder,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BorderRadiusControl from '../border-radius-control';\nimport { useColorsPerOrigin } from './hooks';\nimport { getValueFromVariable } from './utils';\n\nexport function useHasBorderPanel( settings ) {\n\tconst controls = [\n\t\tuseHasBorderColorControl( settings ),\n\t\tuseHasBorderRadiusControl( settings ),\n\t\tuseHasBorderStyleControl( settings ),\n\t\tuseHasBorderWidthControl( settings ),\n\t];\n\n\treturn controls.some( Boolean );\n}\n\nfunction useHasBorderColorControl( settings ) {\n\treturn settings?.border?.color;\n}\n\nfunction useHasBorderRadiusControl( settings ) {\n\treturn settings?.border?.radius;\n}\n\nfunction useHasBorderStyleControl( settings ) {\n\treturn settings?.border?.style;\n}\n\nfunction useHasBorderWidthControl( settings ) {\n\treturn settings?.border?.width;\n}\n\nfunction applyFallbackStyle( border ) {\n\tif ( ! border ) {\n\t\treturn border;\n\t}\n\n\tif ( ! border.style && ( border.color || border.width ) ) {\n\t\treturn { ...border, style: 'solid' };\n\t}\n\n\treturn border;\n}\n\nfunction applyAllFallbackStyles( border ) {\n\tif ( ! border ) {\n\t\treturn border;\n\t}\n\n\tif ( hasSplitBorders( border ) ) {\n\t\treturn {\n\t\t\ttop: applyFallbackStyle( border.top ),\n\t\t\tright: applyFallbackStyle( border.right ),\n\t\t\tbottom: applyFallbackStyle( border.bottom ),\n\t\t\tleft: applyFallbackStyle( border.left ),\n\t\t};\n\t}\n\n\treturn applyFallbackStyle( border );\n}\n\nfunction BorderToolsPanel( {\n\tresetAllFilter,\n\tonChange,\n\tvalue,\n\tpanelId,\n\tchildren,\n} ) {\n\tconst resetAll = () => {\n\t\tconst updatedValue = resetAllFilter( value );\n\t\tonChange( updatedValue );\n\t};\n\n\treturn (\n\t\t<ToolsPanel\n\t\t\tlabel={ __( 'Border' ) }\n\t\t\tresetAll={ resetAll }\n\t\t\tpanelId={ panelId }\n\t\t>\n\t\t\t{ children }\n\t\t</ToolsPanel>\n\t);\n}\n\nconst DEFAULT_CONTROLS = {\n\tradius: true,\n\tcolor: true,\n\twidth: true,\n};\n\nexport default function BorderPanel( {\n\tas: Wrapper = BorderToolsPanel,\n\tvalue,\n\tonChange,\n\tinheritedValue = value,\n\tsettings,\n\tpanelId,\n\tdefaultControls = DEFAULT_CONTROLS,\n} ) {\n\tconst colors = useColorsPerOrigin( settings );\n\tconst decodeValue = ( rawValue ) =>\n\t\tgetValueFromVariable( { settings }, '', rawValue );\n\tconst encodeColorValue = ( colorValue ) => {\n\t\tconst allColors = colors.flatMap(\n\t\t\t( { colors: originColors } ) => originColors\n\t\t);\n\t\tconst colorObject = allColors.find(\n\t\t\t( { color } ) => color === colorValue\n\t\t);\n\t\treturn colorObject\n\t\t\t? 'var:preset|color|' + colorObject.slug\n\t\t\t: colorValue;\n\t};\n\tconst decodeColorValue = useCallback(\n\t\t( colorValue ) => {\n\t\t\tconst allColors = colors.flatMap(\n\t\t\t\t( { colors: originColors } ) => originColors\n\t\t\t);\n\t\t\tconst colorObject = allColors.find(\n\t\t\t\t( { slug } ) => colorValue === 'var:preset|color|' + slug\n\t\t\t);\n\t\t\treturn colorObject ? colorObject.color : colorValue;\n\t\t},\n\t\t[ colors ]\n\t);\n\tconst border = useMemo( () => {\n\t\tif ( hasSplitBorders( inheritedValue?.border ) ) {\n\t\t\tconst borderValue = { ...inheritedValue?.border };\n\t\t\t[ 'top', 'right', 'bottom', 'left' ].forEach( ( side ) => {\n\t\t\t\tborderValue[ side ] = {\n\t\t\t\t\t...borderValue[ side ],\n\t\t\t\t\tcolor: decodeColorValue( borderValue[ side ]?.color ),\n\t\t\t\t};\n\t\t\t} );\n\t\t\treturn borderValue;\n\t\t}\n\t\treturn {\n\t\t\t...inheritedValue?.border,\n\t\t\tcolor: inheritedValue?.border?.color\n\t\t\t\t? decodeColorValue( inheritedValue?.border?.color )\n\t\t\t\t: undefined,\n\t\t};\n\t}, [ inheritedValue?.border, decodeColorValue ] );\n\tconst setBorder = ( newBorder ) =>\n\t\tonChange( { ...value, border: newBorder } );\n\tconst showBorderColor = useHasBorderColorControl( settings );\n\tconst showBorderStyle = useHasBorderStyleControl( settings );\n\tconst showBorderWidth = useHasBorderWidthControl( settings );\n\n\t// Border radius.\n\tconst showBorderRadius = useHasBorderRadiusControl( settings );\n\tconst borderRadiusValues = decodeValue( border?.radius );\n\tconst setBorderRadius = ( newBorderRadius ) =>\n\t\tsetBorder( { ...border, radius: newBorderRadius } );\n\tconst hasBorderRadius = () => {\n\t\tconst borderValues = value?.border?.radius;\n\t\tif ( typeof borderValues === 'object' ) {\n\t\t\treturn Object.entries( borderValues ).some( Boolean );\n\t\t}\n\t\treturn !! borderValues;\n\t};\n\n\tconst resetBorder = () => {\n\t\tif ( hasBorderRadius() ) {\n\t\t\treturn setBorder( { radius: value?.border?.radius } );\n\t\t}\n\n\t\tsetBorder( undefined );\n\t};\n\n\tconst onBorderChange = ( newBorder ) => {\n\t\t// Ensure we have a visible border style when a border width or\n\t\t// color is being selected.\n\t\tconst newBorderWithStyle = applyAllFallbackStyles( newBorder );\n\n\t\t// As we can't conditionally generate styles based on if other\n\t\t// style properties have been set we need to force split border\n\t\t// definitions for user set border styles. Border radius is derived\n\t\t// from the same property i.e. `border.radius` if it is a string\n\t\t// that is used. The longhand border radii styles are only generated\n\t\t// if that property is an object.\n\t\t//\n\t\t// For borders (color, style, and width) those are all properties on\n\t\t// the `border` style property. This means if the theme.json defined\n\t\t// split borders and the user condenses them into a flat border or\n\t\t// vice-versa we'd get both sets of styles which would conflict.\n\t\tconst updatedBorder = ! hasSplitBorders( newBorderWithStyle )\n\t\t\t? {\n\t\t\t\t\ttop: newBorderWithStyle,\n\t\t\t\t\tright: newBorderWithStyle,\n\t\t\t\t\tbottom: newBorderWithStyle,\n\t\t\t\t\tleft: newBorderWithStyle,\n\t\t\t }\n\t\t\t: {\n\t\t\t\t\tcolor: null,\n\t\t\t\t\tstyle: null,\n\t\t\t\t\twidth: null,\n\t\t\t\t\t...newBorderWithStyle,\n\t\t\t };\n\n\t\t[ 'top', 'right', 'bottom', 'left' ].forEach( ( side ) => {\n\t\t\tupdatedBorder[ side ] = {\n\t\t\t\t...updatedBorder[ side ],\n\t\t\t\tcolor: encodeColorValue( updatedBorder[ side ]?.color ),\n\t\t\t};\n\t\t} );\n\n\t\t// As radius is maintained separately to color, style, and width\n\t\t// maintain its value. Undefined values here will be cleaned when\n\t\t// global styles are saved.\n\t\tsetBorder( { radius: border?.radius, ...updatedBorder } );\n\t};\n\n\tconst resetAllFilter = useCallback( ( previousValue ) => {\n\t\treturn {\n\t\t\t...previousValue,\n\t\t\tborder: undefined,\n\t\t};\n\t}, [] );\n\n\tconst showBorderByDefault =\n\t\tdefaultControls?.color || defaultControls?.width;\n\n\treturn (\n\t\t<Wrapper\n\t\t\tresetAllFilter={ resetAllFilter }\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChange }\n\t\t\tpanelId={ panelId }\n\t\t>\n\t\t\t{ ( showBorderWidth || showBorderColor ) && (\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\thasValue={ () => isDefinedBorder( value?.border ) }\n\t\t\t\t\tlabel={ __( 'Border' ) }\n\t\t\t\t\tonDeselect={ () => resetBorder() }\n\t\t\t\t\tisShownByDefault={ showBorderByDefault }\n\t\t\t\t\tpanelId={ panelId }\n\t\t\t\t>\n\t\t\t\t\t<BorderBoxControl\n\t\t\t\t\t\tcolors={ colors }\n\t\t\t\t\t\tenableAlpha={ true }\n\t\t\t\t\t\tenableStyle={ showBorderStyle }\n\t\t\t\t\t\tonChange={ onBorderChange }\n\t\t\t\t\t\tpopoverOffset={ 40 }\n\t\t\t\t\t\tpopoverPlacement=\"left-start\"\n\t\t\t\t\t\tvalue={ border }\n\t\t\t\t\t\t__experimentalIsRenderedInSidebar={ true }\n\t\t\t\t\t\tsize={ '__unstable-large' }\n\t\t\t\t\t/>\n\t\t\t\t</ToolsPanelItem>\n\t\t\t) }\n\t\t\t{ showBorderRadius && (\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\thasValue={ hasBorderRadius }\n\t\t\t\t\tlabel={ __( 'Radius' ) }\n\t\t\t\t\tonDeselect={ () => setBorderRadius( undefined ) }\n\t\t\t\t\tisShownByDefault={ defaultControls.radius }\n\t\t\t\t\tpanelId={ panelId }\n\t\t\t\t>\n\t\t\t\t\t<BorderRadiusControl\n\t\t\t\t\t\tvalues={ borderRadiusValues }\n\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\tsetBorderRadius( newValue || undefined );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</ToolsPanelItem>\n\t\t\t) }\n\t\t</Wrapper>\n\t);\n}\n"]}