@wordpress/block-editor 11.5.0 → 11.7.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 (345) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +4 -0
  3. package/build/components/block-list/block-html.js +1 -3
  4. package/build/components/block-list/block-html.js.map +1 -1
  5. package/build/components/block-list/block-invalid-warning.js +63 -80
  6. package/build/components/block-list/block-invalid-warning.js.map +1 -1
  7. package/build/components/block-preview/auto.js +6 -23
  8. package/build/components/block-preview/auto.js.map +1 -1
  9. package/build/components/block-settings-menu-controls/index.js +1 -1
  10. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  11. package/build/components/block-switcher/block-transformations-menu.native.js +1 -0
  12. package/build/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  13. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js +6 -3
  14. package/build/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  15. package/build/components/editor-styles/index.js +20 -2
  16. package/build/components/editor-styles/index.js.map +1 -1
  17. package/build/components/global-styles/border-panel.js +306 -0
  18. package/build/components/global-styles/border-panel.js.map +1 -0
  19. package/build/components/global-styles/color-panel.js +583 -0
  20. package/build/components/global-styles/color-panel.js.map +1 -0
  21. package/build/components/global-styles/dimensions-panel.js +8 -30
  22. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  23. package/build/components/global-styles/get-block-css-selector.js +129 -0
  24. package/build/components/global-styles/get-block-css-selector.js.map +1 -0
  25. package/build/components/global-styles/hooks.js +109 -3
  26. package/build/components/global-styles/hooks.js.map +1 -1
  27. package/build/components/global-styles/index.js +36 -0
  28. package/build/components/global-styles/index.js.map +1 -1
  29. package/build/components/global-styles/typography-panel.js +66 -45
  30. package/build/components/global-styles/typography-panel.js.map +1 -1
  31. package/build/components/global-styles/use-global-styles-output.js +180 -99
  32. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  33. package/build/components/global-styles/utils.js +2 -1
  34. package/build/components/global-styles/utils.js.map +1 -1
  35. package/build/components/image-size-control/index.js +8 -5
  36. package/build/components/image-size-control/index.js.map +1 -1
  37. package/build/components/inserter/index.js +29 -17
  38. package/build/components/inserter/index.js.map +1 -1
  39. package/build/components/inserter/menu.js +1 -1
  40. package/build/components/inserter/menu.js.map +1 -1
  41. package/build/components/inserter/quick-inserter.js +4 -2
  42. package/build/components/inserter/quick-inserter.js.map +1 -1
  43. package/build/components/inserter/search-results.js +10 -3
  44. package/build/components/inserter/search-results.js.map +1 -1
  45. package/build/components/inserter/tabs.js +1 -1
  46. package/build/components/inserter/tabs.js.map +1 -1
  47. package/build/components/inspector-controls-tabs/position-controls-panel.js +43 -7
  48. package/build/components/inspector-controls-tabs/position-controls-panel.js.map +1 -1
  49. package/build/components/line-height-control/index.js +15 -1
  50. package/build/components/line-height-control/index.js.map +1 -1
  51. package/build/components/link-control/index.js +1 -1
  52. package/build/components/link-control/index.js.map +1 -1
  53. package/build/components/link-control/search-item.js +5 -2
  54. package/build/components/link-control/search-item.js.map +1 -1
  55. package/build/components/list-view/appender.js +105 -0
  56. package/build/components/list-view/appender.js.map +1 -0
  57. package/build/components/list-view/block.js +5 -5
  58. package/build/components/list-view/block.js.map +1 -1
  59. package/build/components/list-view/branch.js +25 -5
  60. package/build/components/list-view/branch.js.map +1 -1
  61. package/build/components/list-view/index.js +37 -13
  62. package/build/components/list-view/index.js.map +1 -1
  63. package/build/components/list-view/use-block-selection.js +1 -2
  64. package/build/components/list-view/use-block-selection.js.map +1 -1
  65. package/build/components/media-replace-flow/index.js +13 -4
  66. package/build/components/media-replace-flow/index.js.map +1 -1
  67. package/build/components/off-canvas-editor/appender.js +28 -3
  68. package/build/components/off-canvas-editor/appender.js.map +1 -1
  69. package/build/components/off-canvas-editor/branch.js +5 -3
  70. package/build/components/off-canvas-editor/branch.js.map +1 -1
  71. package/build/components/off-canvas-editor/index.js +9 -7
  72. package/build/components/off-canvas-editor/index.js.map +1 -1
  73. package/build/components/off-canvas-editor/link-ui.js +0 -1
  74. package/build/components/off-canvas-editor/link-ui.js.map +1 -1
  75. package/build/components/provider/use-block-sync.js +17 -3
  76. package/build/components/provider/use-block-sync.js.map +1 -1
  77. package/build/components/rich-text/format-edit.js +2 -30
  78. package/build/components/rich-text/format-edit.js.map +1 -1
  79. package/build/components/rich-text/format-toolbar-container.js +0 -3
  80. package/build/components/rich-text/format-toolbar-container.js.map +1 -1
  81. package/build/components/writing-flow/use-input.js +4 -8
  82. package/build/components/writing-flow/use-input.js.map +1 -1
  83. package/build/hooks/border.js +90 -240
  84. package/build/hooks/border.js.map +1 -1
  85. package/build/hooks/color.js +92 -229
  86. package/build/hooks/color.js.map +1 -1
  87. package/build/hooks/content-lock-ui.js +4 -2
  88. package/build/hooks/content-lock-ui.js.map +1 -1
  89. package/build/hooks/{color-panel.js → contrast-checker.js} +11 -49
  90. package/build/hooks/contrast-checker.js.map +1 -0
  91. package/build/hooks/custom-class-name.js +4 -4
  92. package/build/hooks/custom-class-name.js.map +1 -1
  93. package/build/hooks/custom-class-name.native.js +3 -4
  94. package/build/hooks/custom-class-name.native.js.map +1 -1
  95. package/build/hooks/dimensions.js +0 -1
  96. package/build/hooks/dimensions.js.map +1 -1
  97. package/build/hooks/duotone.js +3 -1
  98. package/build/hooks/duotone.js.map +1 -1
  99. package/build/hooks/layout.js +19 -22
  100. package/build/hooks/layout.js.map +1 -1
  101. package/build/hooks/position.js +2 -2
  102. package/build/hooks/position.js.map +1 -1
  103. package/build/hooks/style.js +23 -26
  104. package/build/hooks/style.js.map +1 -1
  105. package/build/hooks/supports.js +7 -1
  106. package/build/hooks/supports.js.map +1 -1
  107. package/build/hooks/typography.js +2 -2
  108. package/build/hooks/typography.js.map +1 -1
  109. package/build/hooks/utils.js +50 -75
  110. package/build/hooks/utils.js.map +1 -1
  111. package/build/layouts/constrained.js +6 -2
  112. package/build/layouts/constrained.js.map +1 -1
  113. package/build/layouts/grid.js +165 -0
  114. package/build/layouts/grid.js.map +1 -0
  115. package/build/layouts/index.js +3 -1
  116. package/build/layouts/index.js.map +1 -1
  117. package/build/private-apis.js +7 -1
  118. package/build/private-apis.js.map +1 -1
  119. package/build/store/actions.js +10 -8
  120. package/build/store/actions.js.map +1 -1
  121. package/build/store/selectors.js +19 -3
  122. package/build/store/selectors.js.map +1 -1
  123. package/build/utils/object.js +76 -0
  124. package/build/utils/object.js.map +1 -0
  125. package/build/utils/parse-css-unit-to-px.js +15 -9
  126. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  127. package/build-module/components/block-list/block-html.js +1 -3
  128. package/build-module/components/block-list/block-html.js.map +1 -1
  129. package/build-module/components/block-list/block-invalid-warning.js +66 -78
  130. package/build-module/components/block-list/block-invalid-warning.js.map +1 -1
  131. package/build-module/components/block-preview/auto.js +6 -22
  132. package/build-module/components/block-preview/auto.js.map +1 -1
  133. package/build-module/components/block-settings-menu-controls/index.js +1 -1
  134. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  135. package/build-module/components/block-switcher/block-transformations-menu.native.js +1 -0
  136. package/build-module/components/block-switcher/block-transformations-menu.native.js.map +1 -1
  137. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js +6 -3
  138. package/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js.map +1 -1
  139. package/build-module/components/editor-styles/index.js +19 -2
  140. package/build-module/components/editor-styles/index.js.map +1 -1
  141. package/build-module/components/global-styles/border-panel.js +291 -0
  142. package/build-module/components/global-styles/border-panel.js.map +1 -0
  143. package/build-module/components/global-styles/color-panel.js +554 -0
  144. package/build-module/components/global-styles/color-panel.js.map +1 -0
  145. package/build-module/components/global-styles/dimensions-panel.js +7 -30
  146. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  147. package/build-module/components/global-styles/get-block-css-selector.js +120 -0
  148. package/build-module/components/global-styles/get-block-css-selector.js.map +1 -0
  149. package/build-module/components/global-styles/hooks.js +104 -3
  150. package/build-module/components/global-styles/hooks.js.map +1 -1
  151. package/build-module/components/global-styles/index.js +3 -0
  152. package/build-module/components/global-styles/index.js.map +1 -1
  153. package/build-module/components/global-styles/typography-panel.js +65 -46
  154. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  155. package/build-module/components/global-styles/use-global-styles-output.js +181 -100
  156. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  157. package/build-module/components/global-styles/utils.js +2 -1
  158. package/build-module/components/global-styles/utils.js.map +1 -1
  159. package/build-module/components/image-size-control/index.js +8 -5
  160. package/build-module/components/image-size-control/index.js.map +1 -1
  161. package/build-module/components/inserter/index.js +28 -16
  162. package/build-module/components/inserter/index.js.map +1 -1
  163. package/build-module/components/inserter/menu.js +1 -1
  164. package/build-module/components/inserter/menu.js.map +1 -1
  165. package/build-module/components/inserter/quick-inserter.js +4 -2
  166. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  167. package/build-module/components/inserter/search-results.js +10 -3
  168. package/build-module/components/inserter/search-results.js.map +1 -1
  169. package/build-module/components/inserter/tabs.js +1 -1
  170. package/build-module/components/inserter/tabs.js.map +1 -1
  171. package/build-module/components/inspector-controls-tabs/position-controls-panel.js +42 -7
  172. package/build-module/components/inspector-controls-tabs/position-controls-panel.js.map +1 -1
  173. package/build-module/components/line-height-control/index.js +15 -1
  174. package/build-module/components/line-height-control/index.js.map +1 -1
  175. package/build-module/components/link-control/index.js +1 -1
  176. package/build-module/components/link-control/index.js.map +1 -1
  177. package/build-module/components/link-control/search-item.js +4 -2
  178. package/build-module/components/link-control/search-item.js.map +1 -1
  179. package/build-module/components/list-view/appender.js +88 -0
  180. package/build-module/components/list-view/appender.js.map +1 -0
  181. package/build-module/components/list-view/block.js +5 -4
  182. package/build-module/components/list-view/block.js.map +1 -1
  183. package/build-module/components/list-view/branch.js +22 -5
  184. package/build-module/components/list-view/branch.js.map +1 -1
  185. package/build-module/components/list-view/index.js +32 -12
  186. package/build-module/components/list-view/index.js.map +1 -1
  187. package/build-module/components/list-view/use-block-selection.js +1 -2
  188. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  189. package/build-module/components/media-replace-flow/index.js +12 -4
  190. package/build-module/components/media-replace-flow/index.js.map +1 -1
  191. package/build-module/components/off-canvas-editor/appender.js +28 -4
  192. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  193. package/build-module/components/off-canvas-editor/branch.js +5 -3
  194. package/build-module/components/off-canvas-editor/branch.js.map +1 -1
  195. package/build-module/components/off-canvas-editor/index.js +9 -7
  196. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  197. package/build-module/components/off-canvas-editor/link-ui.js +0 -1
  198. package/build-module/components/off-canvas-editor/link-ui.js.map +1 -1
  199. package/build-module/components/provider/use-block-sync.js +17 -3
  200. package/build-module/components/provider/use-block-sync.js.map +1 -1
  201. package/build-module/components/rich-text/format-edit.js +3 -31
  202. package/build-module/components/rich-text/format-edit.js.map +1 -1
  203. package/build-module/components/rich-text/format-toolbar-container.js +0 -3
  204. package/build-module/components/rich-text/format-toolbar-container.js.map +1 -1
  205. package/build-module/components/writing-flow/use-input.js +4 -8
  206. package/build-module/components/writing-flow/use-input.js.map +1 -1
  207. package/build-module/hooks/border.js +92 -240
  208. package/build-module/hooks/border.js.map +1 -1
  209. package/build-module/hooks/color.js +90 -232
  210. package/build-module/hooks/color.js.map +1 -1
  211. package/build-module/hooks/content-lock-ui.js +4 -2
  212. package/build-module/hooks/content-lock-ui.js.map +1 -1
  213. package/build-module/hooks/{color-panel.js → contrast-checker.js} +10 -44
  214. package/build-module/hooks/contrast-checker.js.map +1 -0
  215. package/build-module/hooks/custom-class-name.js +4 -4
  216. package/build-module/hooks/custom-class-name.js.map +1 -1
  217. package/build-module/hooks/custom-class-name.native.js +3 -4
  218. package/build-module/hooks/custom-class-name.native.js.map +1 -1
  219. package/build-module/hooks/dimensions.js +0 -1
  220. package/build-module/hooks/dimensions.js.map +1 -1
  221. package/build-module/hooks/duotone.js +4 -2
  222. package/build-module/hooks/duotone.js.map +1 -1
  223. package/build-module/hooks/layout.js +19 -22
  224. package/build-module/hooks/layout.js.map +1 -1
  225. package/build-module/hooks/position.js +3 -3
  226. package/build-module/hooks/position.js.map +1 -1
  227. package/build-module/hooks/style.js +23 -26
  228. package/build-module/hooks/style.js.map +1 -1
  229. package/build-module/hooks/supports.js +7 -1
  230. package/build-module/hooks/supports.js.map +1 -1
  231. package/build-module/hooks/typography.js +2 -2
  232. package/build-module/hooks/typography.js.map +1 -1
  233. package/build-module/hooks/utils.js +48 -72
  234. package/build-module/hooks/utils.js.map +1 -1
  235. package/build-module/layouts/constrained.js +6 -2
  236. package/build-module/layouts/constrained.js.map +1 -1
  237. package/build-module/layouts/grid.js +151 -0
  238. package/build-module/layouts/grid.js.map +1 -0
  239. package/build-module/layouts/index.js +2 -1
  240. package/build-module/layouts/index.js.map +1 -1
  241. package/build-module/private-apis.js +5 -1
  242. package/build-module/private-apis.js.map +1 -1
  243. package/build-module/store/actions.js +10 -8
  244. package/build-module/store/actions.js.map +1 -1
  245. package/build-module/store/selectors.js +17 -3
  246. package/build-module/store/selectors.js.map +1 -1
  247. package/build-module/utils/object.js +69 -0
  248. package/build-module/utils/object.js.map +1 -0
  249. package/build-module/utils/parse-css-unit-to-px.js +15 -9
  250. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  251. package/build-style/style-rtl.css +32 -12
  252. package/build-style/style.css +32 -12
  253. package/package.json +31 -31
  254. package/src/components/block-draggable/content.scss +1 -1
  255. package/src/components/block-inspector/style.scss +3 -0
  256. package/src/components/block-list/block-html.js +1 -1
  257. package/src/components/block-list/block-invalid-warning.js +72 -64
  258. package/src/components/block-mover/test/__snapshots__/index.native.js.snap +20 -2
  259. package/src/components/block-preview/auto.js +2 -17
  260. package/src/components/block-preview/test/index.js +0 -2
  261. package/src/components/block-settings-menu-controls/index.js +2 -1
  262. package/src/components/block-styles/style.scss +2 -2
  263. package/src/components/block-switcher/block-transformations-menu.native.js +1 -0
  264. package/src/components/color-palette/test/__snapshots__/control.js.snap +16 -14
  265. package/src/components/colors-gradients/style.scss +8 -8
  266. package/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js +48 -38
  267. package/src/components/editor-styles/index.js +29 -1
  268. package/src/components/global-styles/border-panel.js +285 -0
  269. package/src/components/global-styles/color-panel.js +706 -0
  270. package/src/components/global-styles/dimensions-panel.js +13 -42
  271. package/src/components/global-styles/get-block-css-selector.js +129 -0
  272. package/src/components/global-styles/hooks.js +154 -1
  273. package/src/components/global-styles/index.js +3 -0
  274. package/src/components/global-styles/test/use-global-styles-output.js +31 -2
  275. package/src/components/global-styles/typography-panel.js +67 -45
  276. package/src/components/global-styles/use-global-styles-output.js +176 -93
  277. package/src/components/global-styles/utils.js +3 -0
  278. package/src/components/image-size-control/index.js +4 -3
  279. package/src/components/image-size-control/test/index.js +2 -2
  280. package/src/components/inner-blocks/README.md +1 -1
  281. package/src/components/inserter/index.js +30 -11
  282. package/src/components/inserter/menu.js +0 -1
  283. package/src/components/inserter/quick-inserter.js +2 -0
  284. package/src/components/inserter/search-results.js +7 -1
  285. package/src/components/inserter/style.scss +3 -0
  286. package/src/components/inserter/tabs.js +1 -9
  287. package/src/components/inspector-controls-tabs/position-controls-panel.js +40 -9
  288. package/src/components/line-height-control/index.js +10 -1
  289. package/src/components/link-control/index.js +1 -1
  290. package/src/components/link-control/search-item.js +3 -1
  291. package/src/components/link-control/style.scss +0 -4
  292. package/src/components/link-control/test/index.js +0 -2
  293. package/src/components/list-view/appender.js +101 -0
  294. package/src/components/list-view/block.js +5 -4
  295. package/src/components/list-view/branch.js +30 -1
  296. package/src/components/list-view/index.js +43 -10
  297. package/src/components/list-view/style.scss +19 -0
  298. package/src/components/list-view/use-block-selection.js +0 -2
  299. package/src/components/media-replace-flow/index.js +36 -24
  300. package/src/components/media-replace-flow/style.scss +5 -2
  301. package/src/components/off-canvas-editor/appender.js +31 -5
  302. package/src/components/off-canvas-editor/branch.js +3 -1
  303. package/src/components/off-canvas-editor/index.js +7 -7
  304. package/src/components/off-canvas-editor/link-ui.js +0 -1
  305. package/src/components/provider/use-block-sync.js +21 -4
  306. package/src/components/rich-text/format-edit.js +2 -32
  307. package/src/components/rich-text/format-toolbar-container.js +1 -7
  308. package/src/components/url-popover/test/index.js +0 -2
  309. package/src/components/writing-flow/use-input.js +4 -5
  310. package/src/hooks/border.js +93 -225
  311. package/src/hooks/color.js +120 -296
  312. package/src/hooks/content-lock-ui.js +6 -2
  313. package/src/hooks/{color-panel.js → contrast-checker.js} +10 -46
  314. package/src/hooks/custom-class-name.js +4 -4
  315. package/src/hooks/custom-class-name.native.js +3 -4
  316. package/src/hooks/dimensions.js +0 -1
  317. package/src/hooks/duotone.js +8 -5
  318. package/src/hooks/layout.js +19 -16
  319. package/src/hooks/position.js +3 -3
  320. package/src/hooks/style.js +29 -28
  321. package/src/hooks/supports.js +6 -0
  322. package/src/hooks/test/style.js +2 -1
  323. package/src/hooks/test/use-typography-props.js +2 -0
  324. package/src/hooks/test/utils.js +0 -104
  325. package/src/hooks/typography.js +2 -1
  326. package/src/hooks/utils.js +63 -70
  327. package/src/layouts/constrained.js +23 -17
  328. package/src/layouts/grid.js +172 -0
  329. package/src/layouts/index.js +2 -1
  330. package/src/layouts/test/grid.js +21 -0
  331. package/src/private-apis.js +4 -0
  332. package/src/store/actions.js +10 -8
  333. package/src/store/selectors.js +20 -3
  334. package/src/utils/object.js +69 -0
  335. package/src/utils/parse-css-unit-to-px.js +14 -9
  336. package/src/utils/test/object.js +107 -0
  337. package/src/utils/test/parse-css-unit-to-px.js +1 -2
  338. package/tsconfig.tsbuildinfo +1 -1
  339. package/build/hooks/border-radius.js +0 -100
  340. package/build/hooks/border-radius.js.map +0 -1
  341. package/build/hooks/color-panel.js.map +0 -1
  342. package/build-module/hooks/border-radius.js +0 -84
  343. package/build-module/hooks/border-radius.js.map +0 -1
  344. package/build-module/hooks/color-panel.js.map +0 -1
  345. package/src/hooks/border-radius.js +0 -70
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/block-settings-menu-controls/index.js"],"names":["createSlotFill","MenuGroup","__experimentalStyleProvider","StyleProvider","useSelect","useConvertToGroupButtonProps","ConvertToGroupButton","BlockLockMenuItem","useBlockLock","store","blockEditorStore","Fill","Slot","BlockSettingsMenuControlsSlot","fillProps","clientIds","__unstableDisplayLocation","selectedBlocks","selectedClientIds","canRemove","select","getBlockNamesByClientId","getSelectedBlockClientIds","canRemoveBlocks","ids","canLock","showLockButton","length","convertToGroupButtonProps","isGroupable","isUngroupable","showConvertToGroupButton","fills","onClose","BlockSettingsMenuControls","props","document"],"mappings":";;;AAAA;AACA;AACA;AACA,SACCA,cADD,EAECC,SAFD,EAGCC,2BAA2B,IAAIC,aAHhC,QAIO,uBAJP;AAKA,SAASC,SAAT,QAA0B,iBAA1B;AAEA;AACA;AACA;;AACA,SACCC,4BADD,EAECC,oBAFD,QAGO,6BAHP;AAIA,SAASC,iBAAT,EAA4BC,YAA5B,QAAgD,eAAhD;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;AAEA,MAAM;AAAEC,EAAAA,IAAF;AAAQC,EAAAA;AAAR,IAAiBZ,cAAc,CAAE,2BAAF,CAArC;;AAEA,MAAMa,6BAA6B,GAAG,QAI/B;AAAA,MAJiC;AACvCC,IAAAA,SADuC;AAEvCC,IAAAA,SAAS,GAAG,IAF2B;AAGvCC,IAAAA;AAHuC,GAIjC;AACN,QAAM;AAAEC,IAAAA,cAAF;AAAkBC,IAAAA,iBAAlB;AAAqCC,IAAAA;AAArC,MAAmDf,SAAS,CAC/DgB,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,uBADK;AAELC,MAAAA,yBAFK;AAGLC,MAAAA;AAHK,QAIFH,MAAM,CAAEV,gBAAF,CAJV;AAKA,UAAMc,GAAG,GACRT,SAAS,KAAK,IAAd,GAAqBA,SAArB,GAAiCO,yBAAyB,EAD3D;AAEA,WAAO;AACNL,MAAAA,cAAc,EAAEI,uBAAuB,CAAEG,GAAF,CADjC;AAENN,MAAAA,iBAAiB,EAAEM,GAFb;AAGNL,MAAAA,SAAS,EAAEI,eAAe,CAAEC,GAAF;AAHpB,KAAP;AAKA,GAdgE,EAejE,CAAET,SAAF,CAfiE,CAAlE;AAkBA,QAAM;AAAEU,IAAAA;AAAF,MAAcjB,YAAY,CAAEU,iBAAiB,CAAE,CAAF,CAAnB,CAAhC;AACA,QAAMQ,cAAc,GAAGR,iBAAiB,CAACS,MAAlB,KAA6B,CAA7B,IAAkCF,OAAzD,CApBM,CAsBN;AACA;;AACA,QAAMG,yBAAyB,GAAGvB,4BAA4B,EAA9D;AACA,QAAM;AAAEwB,IAAAA,WAAF;AAAeC,IAAAA;AAAf,MAAiCF,yBAAvC;AACA,QAAMG,wBAAwB,GAC7B,CAAEF,WAAW,IAAIC,aAAjB,KAAoCX,SADrC;AAGA,SACC,cAAC,IAAD;AACC,IAAA,SAAS,EAAG,EACX,GAAGL,SADQ;AAEXE,MAAAA,yBAFW;AAGXC,MAAAA,cAHW;AAIXC,MAAAA;AAJW;AADb,KAQKc,KAAF,IAAa;AACd,QACC,EAAEA,KAAF,aAAEA,KAAF,eAAEA,KAAK,CAAEL,MAAT,IAAkB,CAAlB,IACA,CAAEI,wBADF,IAEA,CAAEL,cAHH,EAIE;AACD,aAAO,IAAP;AACA;;AAED,WACC,cAAC,SAAD,QACGA,cAAc,IACf,cAAC,iBAAD;AACC,MAAA,QAAQ,EAAGR,iBAAiB,CAAE,CAAF;AAD7B,MAFF,EAMGc,KANH,EAOGD,wBAAwB,IACzB,cAAC,oBAAD,eACMH,yBADN;AAEC,MAAA,OAAO,EAAGd,SAAH,aAAGA,SAAH,uBAAGA,SAAS,CAAEmB;AAFtB,OARF,CADD;AAgBA,GAjCF,CADD;AAqCA,CAtED;AAwEA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASC,yBAAT,QAAmD;AAAA,MAAf,EAAE,GAAGC;AAAL,GAAe;AAClD,SACC,cAAC,aAAD;AAAe,IAAA,QAAQ,EAAGC;AAA1B,KACC,cAAC,IAAD,EAAWD,KAAX,CADD,CADD;AAKA;;AAEDD,yBAAyB,CAACtB,IAA1B,GAAiCC,6BAAjC;AAEA,eAAeqB,yBAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tcreateSlotFill,\n\tMenuGroup,\n\t__experimentalStyleProvider as StyleProvider,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport {\n\tuseConvertToGroupButtonProps,\n\tConvertToGroupButton,\n} from '../convert-to-group-buttons';\nimport { BlockLockMenuItem, useBlockLock } from '../block-lock';\nimport { store as blockEditorStore } from '../../store';\n\nconst { Fill, Slot } = createSlotFill( 'BlockSettingsMenuControls' );\n\nconst BlockSettingsMenuControlsSlot = ( {\n\tfillProps,\n\tclientIds = null,\n\t__unstableDisplayLocation,\n} ) => {\n\tconst { selectedBlocks, selectedClientIds, canRemove } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockNamesByClientId,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\tcanRemoveBlocks,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst ids =\n\t\t\t\tclientIds !== null ? clientIds : getSelectedBlockClientIds();\n\t\t\treturn {\n\t\t\t\tselectedBlocks: getBlockNamesByClientId( ids ),\n\t\t\t\tselectedClientIds: ids,\n\t\t\t\tcanRemove: canRemoveBlocks( ids ),\n\t\t\t};\n\t\t},\n\t\t[ clientIds ]\n\t);\n\n\tconst { canLock } = useBlockLock( selectedClientIds[ 0 ] );\n\tconst showLockButton = selectedClientIds.length === 1 && canLock;\n\n\t// Check if current selection of blocks is Groupable or Ungroupable\n\t// and pass this props down to ConvertToGroupButton.\n\tconst convertToGroupButtonProps = useConvertToGroupButtonProps();\n\tconst { isGroupable, isUngroupable } = convertToGroupButtonProps;\n\tconst showConvertToGroupButton =\n\t\t( isGroupable || isUngroupable ) && canRemove;\n\n\treturn (\n\t\t<Slot\n\t\t\tfillProps={ {\n\t\t\t\t...fillProps,\n\t\t\t\t__unstableDisplayLocation,\n\t\t\t\tselectedBlocks,\n\t\t\t\tselectedClientIds,\n\t\t\t} }\n\t\t>\n\t\t\t{ ( fills ) => {\n\t\t\t\tif (\n\t\t\t\t\t! fills?.length > 0 &&\n\t\t\t\t\t! showConvertToGroupButton &&\n\t\t\t\t\t! showLockButton\n\t\t\t\t) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<MenuGroup>\n\t\t\t\t\t\t{ showLockButton && (\n\t\t\t\t\t\t\t<BlockLockMenuItem\n\t\t\t\t\t\t\t\tclientId={ selectedClientIds[ 0 ] }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ fills }\n\t\t\t\t\t\t{ showConvertToGroupButton && (\n\t\t\t\t\t\t\t<ConvertToGroupButton\n\t\t\t\t\t\t\t\t{ ...convertToGroupButtonProps }\n\t\t\t\t\t\t\t\tonClose={ fillProps?.onClose }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</MenuGroup>\n\t\t\t\t);\n\t\t\t} }\n\t\t</Slot>\n\t);\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-settings-menu-controls/README.md\n *\n * @param {Object} props Fill props.\n * @return {WPElement} Element.\n */\nfunction BlockSettingsMenuControls( { ...props } ) {\n\treturn (\n\t\t<StyleProvider document={ document }>\n\t\t\t<Fill { ...props } />\n\t\t</StyleProvider>\n\t);\n}\n\nBlockSettingsMenuControls.Slot = BlockSettingsMenuControlsSlot;\n\nexport default BlockSettingsMenuControls;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/block-settings-menu-controls/index.js"],"names":["createSlotFill","MenuGroup","__experimentalStyleProvider","StyleProvider","useSelect","useConvertToGroupButtonProps","ConvertToGroupButton","BlockLockMenuItem","useBlockLock","store","blockEditorStore","Fill","Slot","BlockSettingsMenuControlsSlot","fillProps","clientIds","__unstableDisplayLocation","selectedBlocks","selectedClientIds","canRemove","select","getBlockNamesByClientId","getSelectedBlockClientIds","canRemoveBlocks","ids","canLock","showLockButton","length","convertToGroupButtonProps","isGroupable","isUngroupable","showConvertToGroupButton","fills","onClose","BlockSettingsMenuControls","props","document"],"mappings":";;;AAAA;AACA;AACA;AACA,SACCA,cADD,EAECC,SAFD,EAGCC,2BAA2B,IAAIC,aAHhC,QAIO,uBAJP;AAKA,SAASC,SAAT,QAA0B,iBAA1B;AAEA;AACA;AACA;;AACA,SACCC,4BADD,EAECC,oBAFD,QAGO,6BAHP;AAIA,SAASC,iBAAT,EAA4BC,YAA5B,QAAgD,eAAhD;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;AAEA,MAAM;AAAEC,EAAAA,IAAF;AAAQC,EAAAA;AAAR,IAAiBZ,cAAc,CAAE,2BAAF,CAArC;;AAEA,MAAMa,6BAA6B,GAAG,QAI/B;AAAA,MAJiC;AACvCC,IAAAA,SADuC;AAEvCC,IAAAA,SAAS,GAAG,IAF2B;AAGvCC,IAAAA;AAHuC,GAIjC;AACN,QAAM;AAAEC,IAAAA,cAAF;AAAkBC,IAAAA,iBAAlB;AAAqCC,IAAAA;AAArC,MAAmDf,SAAS,CAC/DgB,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,uBADK;AAELC,MAAAA,yBAFK;AAGLC,MAAAA;AAHK,QAIFH,MAAM,CAAEV,gBAAF,CAJV;AAKA,UAAMc,GAAG,GACRT,SAAS,KAAK,IAAd,GAAqBA,SAArB,GAAiCO,yBAAyB,EAD3D;AAEA,WAAO;AACNL,MAAAA,cAAc,EAAEI,uBAAuB,CAAEG,GAAF,CADjC;AAENN,MAAAA,iBAAiB,EAAEM,GAFb;AAGNL,MAAAA,SAAS,EAAEI,eAAe,CAAEC,GAAF;AAHpB,KAAP;AAKA,GAdgE,EAejE,CAAET,SAAF,CAfiE,CAAlE;AAkBA,QAAM;AAAEU,IAAAA;AAAF,MAAcjB,YAAY,CAAEU,iBAAiB,CAAE,CAAF,CAAnB,CAAhC;AACA,QAAMQ,cAAc,GAAGR,iBAAiB,CAACS,MAAlB,KAA6B,CAA7B,IAAkCF,OAAzD,CApBM,CAsBN;AACA;;AACA,QAAMG,yBAAyB,GAC9BvB,4BAA4B,CAAEa,iBAAF,CAD7B;AAEA,QAAM;AAAEW,IAAAA,WAAF;AAAeC,IAAAA;AAAf,MAAiCF,yBAAvC;AACA,QAAMG,wBAAwB,GAC7B,CAAEF,WAAW,IAAIC,aAAjB,KAAoCX,SADrC;AAGA,SACC,cAAC,IAAD;AACC,IAAA,SAAS,EAAG,EACX,GAAGL,SADQ;AAEXE,MAAAA,yBAFW;AAGXC,MAAAA,cAHW;AAIXC,MAAAA;AAJW;AADb,KAQKc,KAAF,IAAa;AACd,QACC,EAAEA,KAAF,aAAEA,KAAF,eAAEA,KAAK,CAAEL,MAAT,IAAkB,CAAlB,IACA,CAAEI,wBADF,IAEA,CAAEL,cAHH,EAIE;AACD,aAAO,IAAP;AACA;;AAED,WACC,cAAC,SAAD,QACGA,cAAc,IACf,cAAC,iBAAD;AACC,MAAA,QAAQ,EAAGR,iBAAiB,CAAE,CAAF;AAD7B,MAFF,EAMGc,KANH,EAOGD,wBAAwB,IACzB,cAAC,oBAAD,eACMH,yBADN;AAEC,MAAA,OAAO,EAAGd,SAAH,aAAGA,SAAH,uBAAGA,SAAS,CAAEmB;AAFtB,OARF,CADD;AAgBA,GAjCF,CADD;AAqCA,CAvED;AAyEA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASC,yBAAT,QAAmD;AAAA,MAAf,EAAE,GAAGC;AAAL,GAAe;AAClD,SACC,cAAC,aAAD;AAAe,IAAA,QAAQ,EAAGC;AAA1B,KACC,cAAC,IAAD,EAAWD,KAAX,CADD,CADD;AAKA;;AAEDD,yBAAyB,CAACtB,IAA1B,GAAiCC,6BAAjC;AAEA,eAAeqB,yBAAf","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tcreateSlotFill,\n\tMenuGroup,\n\t__experimentalStyleProvider as StyleProvider,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport {\n\tuseConvertToGroupButtonProps,\n\tConvertToGroupButton,\n} from '../convert-to-group-buttons';\nimport { BlockLockMenuItem, useBlockLock } from '../block-lock';\nimport { store as blockEditorStore } from '../../store';\n\nconst { Fill, Slot } = createSlotFill( 'BlockSettingsMenuControls' );\n\nconst BlockSettingsMenuControlsSlot = ( {\n\tfillProps,\n\tclientIds = null,\n\t__unstableDisplayLocation,\n} ) => {\n\tconst { selectedBlocks, selectedClientIds, canRemove } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockNamesByClientId,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t\tcanRemoveBlocks,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst ids =\n\t\t\t\tclientIds !== null ? clientIds : getSelectedBlockClientIds();\n\t\t\treturn {\n\t\t\t\tselectedBlocks: getBlockNamesByClientId( ids ),\n\t\t\t\tselectedClientIds: ids,\n\t\t\t\tcanRemove: canRemoveBlocks( ids ),\n\t\t\t};\n\t\t},\n\t\t[ clientIds ]\n\t);\n\n\tconst { canLock } = useBlockLock( selectedClientIds[ 0 ] );\n\tconst showLockButton = selectedClientIds.length === 1 && canLock;\n\n\t// Check if current selection of blocks is Groupable or Ungroupable\n\t// and pass this props down to ConvertToGroupButton.\n\tconst convertToGroupButtonProps =\n\t\tuseConvertToGroupButtonProps( selectedClientIds );\n\tconst { isGroupable, isUngroupable } = convertToGroupButtonProps;\n\tconst showConvertToGroupButton =\n\t\t( isGroupable || isUngroupable ) && canRemove;\n\n\treturn (\n\t\t<Slot\n\t\t\tfillProps={ {\n\t\t\t\t...fillProps,\n\t\t\t\t__unstableDisplayLocation,\n\t\t\t\tselectedBlocks,\n\t\t\t\tselectedClientIds,\n\t\t\t} }\n\t\t>\n\t\t\t{ ( fills ) => {\n\t\t\t\tif (\n\t\t\t\t\t! fills?.length > 0 &&\n\t\t\t\t\t! showConvertToGroupButton &&\n\t\t\t\t\t! showLockButton\n\t\t\t\t) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<MenuGroup>\n\t\t\t\t\t\t{ showLockButton && (\n\t\t\t\t\t\t\t<BlockLockMenuItem\n\t\t\t\t\t\t\t\tclientId={ selectedClientIds[ 0 ] }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ fills }\n\t\t\t\t\t\t{ showConvertToGroupButton && (\n\t\t\t\t\t\t\t<ConvertToGroupButton\n\t\t\t\t\t\t\t\t{ ...convertToGroupButtonProps }\n\t\t\t\t\t\t\t\tonClose={ fillProps?.onClose }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</MenuGroup>\n\t\t\t\t);\n\t\t\t} }\n\t\t</Slot>\n\t);\n};\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-settings-menu-controls/README.md\n *\n * @param {Object} props Fill props.\n * @return {WPElement} Element.\n */\nfunction BlockSettingsMenuControls( { ...props } ) {\n\treturn (\n\t\t<StyleProvider document={ document }>\n\t\t\t<Fill { ...props } />\n\t\t</StyleProvider>\n\t);\n}\n\nBlockSettingsMenuControls.Slot = BlockSettingsMenuControlsSlot;\n\nexport default BlockSettingsMenuControls;\n"]}
@@ -65,6 +65,7 @@ const BlockTransformationsMenu = _ref => {
65
65
  }
66
66
 
67
67
  return createElement(Picker, {
68
+ testID: "block-transformations-menu",
68
69
  ref: pickerRef,
69
70
  options: pickerOptions(),
70
71
  onChange: onPickerSelect,
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/block-switcher/block-transformations-menu.native.js"],"names":["findNodeHandle","Platform","__","sprintf","switchToBlockType","Picker","useDispatch","store","noticesStore","blockEditorStore","BlockTransformationsMenu","anchorNodeRef","blockTitle","pickerRef","possibleTransformations","selectedBlock","selectedBlockClientId","replaceBlocks","createSuccessNotice","pickerOptions","selectedBlockName","name","blocksThatSplitWhenTransformed","map","item","label","length","includes","id","title","value","getAnchor","undefined","onPickerSelect","selectedItem","find","successNotice","OS"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,cAAT,EAAyBC,QAAzB,QAAyC,cAAzC;AAEA;AACA;AACA;;AACA,SAASC,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AACA,SAASC,iBAAT,QAAkC,mBAAlC;AACA,SAASC,MAAT,QAAuB,uBAAvB;AACA,SAASC,WAAT,QAA4B,iBAA5B;AACA,SAASC,KAAK,IAAIC,YAAlB,QAAsC,oBAAtC;AAEA;AACA;AACA;;AACA,SAASD,KAAK,IAAIE,gBAAlB,QAA0C,aAA1C;;AAEA,MAAMC,wBAAwB,GAAG,QAO1B;AAAA,MAP4B;AAClCC,IAAAA,aADkC;AAElCC,IAAAA,UAFkC;AAGlCC,IAAAA,SAHkC;AAIlCC,IAAAA,uBAJkC;AAKlCC,IAAAA,aALkC;AAMlCC,IAAAA;AANkC,GAO5B;AACN,QAAM;AAAEC,IAAAA;AAAF,MAAoBX,WAAW,CAAEG,gBAAF,CAArC;AACA,QAAM;AAAES,IAAAA;AAAF,MAA0BZ,WAAW,CAAEE,YAAF,CAA3C;;AAEA,QAAMW,aAAa,GAAG,MAAM;AAAA;;AAC3B,UAAMC,iBAAiB,0BAAGL,aAAH,aAAGA,aAAH,uBAAGA,aAAa,CAAEM,IAAlB,qEAA0B,EAAjD;AACA,UAAMC,8BAA8B,GAAG;AACtC,mBAAa,CAAE,gBAAF,EAAoB,cAApB,CADyB;AAEtC,oBAAc,CAAE,gBAAF,CAFwB;AAGtC,wBAAkB,CAAE,gBAAF;AAHoB,KAAvC;AAMA,WAAOR,uBAAuB,CAACS,GAAxB,CAA+BC,IAAF,IAAY;AAC/C,YAAMC,KAAK,GACVL,iBAAiB,CAACM,MAAlB,IACAJ,8BAA8B,CAAEF,iBAAF,CAD9B,IAEAE,8BAA8B,CAAEF,iBAAF,CAA9B,CAAoDO,QAApD,CACCH,IAAI,CAACI,EADN,CAFA,GAKI,GAAGJ,IAAI,CAACK,KAAO,SALnB,GAMGL,IAAI,CAACK,KAPT;AAQA,aAAO;AACNJ,QAAAA,KADM;AAENK,QAAAA,KAAK,EAAEN,IAAI,CAACI;AAFN,OAAP;AAIA,KAbM,CAAP;AAcA,GAtBD;;AAwBA,QAAMG,SAAS,GAAG,MACjBpB,aAAa,GAAGX,cAAc,CAAEW,aAAF,CAAjB,GAAqCqB,SADnD;;AAGA,WAASC,cAAT,CAAyBH,KAAzB,EAAiC;AAChCb,IAAAA,aAAa,CACZD,qBADY,EAEZZ,iBAAiB,CAAEW,aAAF,EAAiBe,KAAjB,CAFL,CAAb;AAKA,UAAMI,YAAY,GAAGf,aAAa,GAAGgB,IAAhB,CAClBX,IAAF,IAAYA,IAAI,CAACM,KAAL,KAAeA,KADP,CAArB;AAGA,UAAMM,aAAa,GAAGjC,OAAO;AAC5B;AACAD,IAAAA,EAAE,CAAE,0BAAF,CAF0B,EAG5BU,UAH4B,EAI5BsB,YAAY,CAACT,KAJe,CAA7B;AAMAP,IAAAA,mBAAmB,CAAEkB,aAAF,CAAnB;AACA;;AAED,SACC,cAAC,MAAD;AACC,IAAA,GAAG,EAAGvB,SADP;AAEC,IAAA,OAAO,EAAGM,aAAa,EAFxB;AAGC,IAAA,QAAQ,EAAGc,cAHZ;AAIC,IAAA,gBAAgB,EAAGhC,QAAQ,CAACoC,EAAT,KAAgB,KAJpC;AAKC,IAAA,SAAS,EAAG,IALb;AAMC,IAAA,SAAS,EAAGN,SANb,CAOC;AAPD;AAQC,IAAA,KAAK,EAAG5B,OAAO,CAAED,EAAE,CAAE,iBAAF,CAAJ,EAA2BU,UAA3B;AARhB,IADD;AAYA,CApED;;AAsEA,eAAeF,wBAAf","sourcesContent":["/**\n * External dependencies\n */\nimport { findNodeHandle, Platform } from 'react-native';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { switchToBlockType } from '@wordpress/blocks';\nimport { Picker } from '@wordpress/components';\nimport { useDispatch } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nconst BlockTransformationsMenu = ( {\n\tanchorNodeRef,\n\tblockTitle,\n\tpickerRef,\n\tpossibleTransformations,\n\tselectedBlock,\n\tselectedBlockClientId,\n} ) => {\n\tconst { replaceBlocks } = useDispatch( blockEditorStore );\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\n\tconst pickerOptions = () => {\n\t\tconst selectedBlockName = selectedBlock?.name ?? '';\n\t\tconst blocksThatSplitWhenTransformed = {\n\t\t\t'core/list': [ 'core/paragraph', 'core/heading' ],\n\t\t\t'core/quote': [ 'core/paragraph' ],\n\t\t\t'core/pullquote': [ 'core/paragraph' ],\n\t\t};\n\n\t\treturn possibleTransformations.map( ( item ) => {\n\t\t\tconst label =\n\t\t\t\tselectedBlockName.length &&\n\t\t\t\tblocksThatSplitWhenTransformed[ selectedBlockName ] &&\n\t\t\t\tblocksThatSplitWhenTransformed[ selectedBlockName ].includes(\n\t\t\t\t\titem.id\n\t\t\t\t)\n\t\t\t\t\t? `${ item.title } blocks`\n\t\t\t\t\t: item.title;\n\t\t\treturn {\n\t\t\t\tlabel,\n\t\t\t\tvalue: item.id,\n\t\t\t};\n\t\t} );\n\t};\n\n\tconst getAnchor = () =>\n\t\tanchorNodeRef ? findNodeHandle( anchorNodeRef ) : undefined;\n\n\tfunction onPickerSelect( value ) {\n\t\treplaceBlocks(\n\t\t\tselectedBlockClientId,\n\t\t\tswitchToBlockType( selectedBlock, value )\n\t\t);\n\n\t\tconst selectedItem = pickerOptions().find(\n\t\t\t( item ) => item.value === value\n\t\t);\n\t\tconst successNotice = sprintf(\n\t\t\t/* translators: 1: From block title, e.g. Paragraph. 2: To block title, e.g. Header. */\n\t\t\t__( '%1$s transformed to %2$s' ),\n\t\t\tblockTitle,\n\t\t\tselectedItem.label\n\t\t);\n\t\tcreateSuccessNotice( successNotice );\n\t}\n\n\treturn (\n\t\t<Picker\n\t\t\tref={ pickerRef }\n\t\t\toptions={ pickerOptions() }\n\t\t\tonChange={ onPickerSelect }\n\t\t\thideCancelButton={ Platform.OS !== 'ios' }\n\t\t\tleftAlign={ true }\n\t\t\tgetAnchor={ getAnchor }\n\t\t\t// translators: %s: block title e.g: \"Paragraph\".\n\t\t\ttitle={ sprintf( __( 'Transform %s to' ), blockTitle ) }\n\t\t/>\n\t);\n};\n\nexport default BlockTransformationsMenu;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/block-switcher/block-transformations-menu.native.js"],"names":["findNodeHandle","Platform","__","sprintf","switchToBlockType","Picker","useDispatch","store","noticesStore","blockEditorStore","BlockTransformationsMenu","anchorNodeRef","blockTitle","pickerRef","possibleTransformations","selectedBlock","selectedBlockClientId","replaceBlocks","createSuccessNotice","pickerOptions","selectedBlockName","name","blocksThatSplitWhenTransformed","map","item","label","length","includes","id","title","value","getAnchor","undefined","onPickerSelect","selectedItem","find","successNotice","OS"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,cAAT,EAAyBC,QAAzB,QAAyC,cAAzC;AAEA;AACA;AACA;;AACA,SAASC,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AACA,SAASC,iBAAT,QAAkC,mBAAlC;AACA,SAASC,MAAT,QAAuB,uBAAvB;AACA,SAASC,WAAT,QAA4B,iBAA5B;AACA,SAASC,KAAK,IAAIC,YAAlB,QAAsC,oBAAtC;AAEA;AACA;AACA;;AACA,SAASD,KAAK,IAAIE,gBAAlB,QAA0C,aAA1C;;AAEA,MAAMC,wBAAwB,GAAG,QAO1B;AAAA,MAP4B;AAClCC,IAAAA,aADkC;AAElCC,IAAAA,UAFkC;AAGlCC,IAAAA,SAHkC;AAIlCC,IAAAA,uBAJkC;AAKlCC,IAAAA,aALkC;AAMlCC,IAAAA;AANkC,GAO5B;AACN,QAAM;AAAEC,IAAAA;AAAF,MAAoBX,WAAW,CAAEG,gBAAF,CAArC;AACA,QAAM;AAAES,IAAAA;AAAF,MAA0BZ,WAAW,CAAEE,YAAF,CAA3C;;AAEA,QAAMW,aAAa,GAAG,MAAM;AAAA;;AAC3B,UAAMC,iBAAiB,0BAAGL,aAAH,aAAGA,aAAH,uBAAGA,aAAa,CAAEM,IAAlB,qEAA0B,EAAjD;AACA,UAAMC,8BAA8B,GAAG;AACtC,mBAAa,CAAE,gBAAF,EAAoB,cAApB,CADyB;AAEtC,oBAAc,CAAE,gBAAF,CAFwB;AAGtC,wBAAkB,CAAE,gBAAF;AAHoB,KAAvC;AAMA,WAAOR,uBAAuB,CAACS,GAAxB,CAA+BC,IAAF,IAAY;AAC/C,YAAMC,KAAK,GACVL,iBAAiB,CAACM,MAAlB,IACAJ,8BAA8B,CAAEF,iBAAF,CAD9B,IAEAE,8BAA8B,CAAEF,iBAAF,CAA9B,CAAoDO,QAApD,CACCH,IAAI,CAACI,EADN,CAFA,GAKI,GAAGJ,IAAI,CAACK,KAAO,SALnB,GAMGL,IAAI,CAACK,KAPT;AAQA,aAAO;AACNJ,QAAAA,KADM;AAENK,QAAAA,KAAK,EAAEN,IAAI,CAACI;AAFN,OAAP;AAIA,KAbM,CAAP;AAcA,GAtBD;;AAwBA,QAAMG,SAAS,GAAG,MACjBpB,aAAa,GAAGX,cAAc,CAAEW,aAAF,CAAjB,GAAqCqB,SADnD;;AAGA,WAASC,cAAT,CAAyBH,KAAzB,EAAiC;AAChCb,IAAAA,aAAa,CACZD,qBADY,EAEZZ,iBAAiB,CAAEW,aAAF,EAAiBe,KAAjB,CAFL,CAAb;AAKA,UAAMI,YAAY,GAAGf,aAAa,GAAGgB,IAAhB,CAClBX,IAAF,IAAYA,IAAI,CAACM,KAAL,KAAeA,KADP,CAArB;AAGA,UAAMM,aAAa,GAAGjC,OAAO;AAC5B;AACAD,IAAAA,EAAE,CAAE,0BAAF,CAF0B,EAG5BU,UAH4B,EAI5BsB,YAAY,CAACT,KAJe,CAA7B;AAMAP,IAAAA,mBAAmB,CAAEkB,aAAF,CAAnB;AACA;;AAED,SACC,cAAC,MAAD;AACC,IAAA,MAAM,EAAC,4BADR;AAEC,IAAA,GAAG,EAAGvB,SAFP;AAGC,IAAA,OAAO,EAAGM,aAAa,EAHxB;AAIC,IAAA,QAAQ,EAAGc,cAJZ;AAKC,IAAA,gBAAgB,EAAGhC,QAAQ,CAACoC,EAAT,KAAgB,KALpC;AAMC,IAAA,SAAS,EAAG,IANb;AAOC,IAAA,SAAS,EAAGN,SAPb,CAQC;AARD;AASC,IAAA,KAAK,EAAG5B,OAAO,CAAED,EAAE,CAAE,iBAAF,CAAJ,EAA2BU,UAA3B;AAThB,IADD;AAaA,CArED;;AAuEA,eAAeF,wBAAf","sourcesContent":["/**\n * External dependencies\n */\nimport { findNodeHandle, Platform } from 'react-native';\n\n/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { switchToBlockType } from '@wordpress/blocks';\nimport { Picker } from '@wordpress/components';\nimport { useDispatch } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nconst BlockTransformationsMenu = ( {\n\tanchorNodeRef,\n\tblockTitle,\n\tpickerRef,\n\tpossibleTransformations,\n\tselectedBlock,\n\tselectedBlockClientId,\n} ) => {\n\tconst { replaceBlocks } = useDispatch( blockEditorStore );\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\n\tconst pickerOptions = () => {\n\t\tconst selectedBlockName = selectedBlock?.name ?? '';\n\t\tconst blocksThatSplitWhenTransformed = {\n\t\t\t'core/list': [ 'core/paragraph', 'core/heading' ],\n\t\t\t'core/quote': [ 'core/paragraph' ],\n\t\t\t'core/pullquote': [ 'core/paragraph' ],\n\t\t};\n\n\t\treturn possibleTransformations.map( ( item ) => {\n\t\t\tconst label =\n\t\t\t\tselectedBlockName.length &&\n\t\t\t\tblocksThatSplitWhenTransformed[ selectedBlockName ] &&\n\t\t\t\tblocksThatSplitWhenTransformed[ selectedBlockName ].includes(\n\t\t\t\t\titem.id\n\t\t\t\t)\n\t\t\t\t\t? `${ item.title } blocks`\n\t\t\t\t\t: item.title;\n\t\t\treturn {\n\t\t\t\tlabel,\n\t\t\t\tvalue: item.id,\n\t\t\t};\n\t\t} );\n\t};\n\n\tconst getAnchor = () =>\n\t\tanchorNodeRef ? findNodeHandle( anchorNodeRef ) : undefined;\n\n\tfunction onPickerSelect( value ) {\n\t\treplaceBlocks(\n\t\t\tselectedBlockClientId,\n\t\t\tswitchToBlockType( selectedBlock, value )\n\t\t);\n\n\t\tconst selectedItem = pickerOptions().find(\n\t\t\t( item ) => item.value === value\n\t\t);\n\t\tconst successNotice = sprintf(\n\t\t\t/* translators: 1: From block title, e.g. Paragraph. 2: To block title, e.g. Header. */\n\t\t\t__( '%1$s transformed to %2$s' ),\n\t\t\tblockTitle,\n\t\t\tselectedItem.label\n\t\t);\n\t\tcreateSuccessNotice( successNotice );\n\t}\n\n\treturn (\n\t\t<Picker\n\t\t\ttestID=\"block-transformations-menu\"\n\t\t\tref={ pickerRef }\n\t\t\toptions={ pickerOptions() }\n\t\t\tonChange={ onPickerSelect }\n\t\t\thideCancelButton={ Platform.OS !== 'ios' }\n\t\t\tleftAlign={ true }\n\t\t\tgetAnchor={ getAnchor }\n\t\t\t// translators: %s: block title e.g: \"Paragraph\".\n\t\t\ttitle={ sprintf( __( 'Transform %s to' ), blockTitle ) }\n\t\t/>\n\t);\n};\n\nexport default BlockTransformationsMenu;\n"]}
@@ -24,10 +24,13 @@ import { store as blockEditorStore } from '../../store';
24
24
  * It is used in `BlockSettingsMenuControls` to know if `ConvertToGroupButton`
25
25
  * should be rendered, to avoid ending up with an empty MenuGroup.
26
26
  *
27
+ * @param {?string[]} selectedClientIds An optional array of clientIds to group. The selected blocks
28
+ * from the block editor store are used if this is not provided.
29
+ *
27
30
  * @return {ConvertToGroupButtonProps} Returns the properties needed by `ConvertToGroupButton`.
28
31
  */
29
32
 
30
- export default function useConvertToGroupButtonProps() {
33
+ export default function useConvertToGroupButtonProps(selectedClientIds) {
31
34
  const {
32
35
  clientIds,
33
36
  isGroupable,
@@ -47,7 +50,7 @@ export default function useConvertToGroupButtonProps() {
47
50
  getGroupingBlockName
48
51
  } = select(blocksStore);
49
52
 
50
- const _clientIds = getSelectedBlockClientIds();
53
+ const _clientIds = selectedClientIds !== null && selectedClientIds !== void 0 && selectedClientIds.length ? selectedClientIds : getSelectedBlockClientIds();
51
54
 
52
55
  const _groupingBlockName = getGroupingBlockName();
53
56
 
@@ -72,7 +75,7 @@ export default function useConvertToGroupButtonProps() {
72
75
  blocksSelection: _blocksSelection,
73
76
  groupingBlockName: _groupingBlockName
74
77
  };
75
- }, []);
78
+ }, [selectedClientIds]);
76
79
  return {
77
80
  clientIds,
78
81
  isGroupable,
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js"],"names":["store","blocksStore","useSelect","blockEditorStore","useConvertToGroupButtonProps","clientIds","isGroupable","isUngroupable","blocksSelection","groupingBlockName","select","getBlockRootClientId","getBlocksByClientId","canInsertBlockType","getSelectedBlockClientIds","getGroupingBlockName","_clientIds","_groupingBlockName","rootClientId","length","undefined","groupingBlockAvailable","_blocksSelection","isSingleGroupingBlock","name","_isGroupable","_isUngroupable","innerBlocks"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,KAAK,IAAIC,WAAlB,QAAqC,mBAArC;AACA,SAASC,SAAT,QAA0B,iBAA1B;AAEA;AACA;AACA;;AACA,SAASF,KAAK,IAAIG,gBAAlB,QAA0C,aAA1C;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASC,4BAAT,GAAwC;AACtD,QAAM;AACLC,IAAAA,SADK;AAELC,IAAAA,WAFK;AAGLC,IAAAA,aAHK;AAILC,IAAAA,eAJK;AAKLC,IAAAA;AALK,MAMFP,SAAS,CAAIQ,MAAF,IAAc;AAAA;;AAC5B,UAAM;AACLC,MAAAA,oBADK;AAELC,MAAAA,mBAFK;AAGLC,MAAAA,kBAHK;AAILC,MAAAA;AAJK,QAKFJ,MAAM,CAAEP,gBAAF,CALV;AAMA,UAAM;AAAEY,MAAAA;AAAF,QAA2BL,MAAM,CAAET,WAAF,CAAvC;;AAEA,UAAMe,UAAU,GAAGF,yBAAyB,EAA5C;;AACA,UAAMG,kBAAkB,GAAGF,oBAAoB,EAA/C;;AAEA,UAAMG,YAAY,GAAG,CAAC,EAAEF,UAAF,aAAEA,UAAF,eAAEA,UAAU,CAAEG,MAAd,CAAD,GAClBR,oBAAoB,CAAEK,UAAU,CAAE,CAAF,CAAZ,CADF,GAElBI,SAFH;AAIA,UAAMC,sBAAsB,GAAGR,kBAAkB,CAChDI,kBADgD,EAEhDC,YAFgD,CAAjD;;AAKA,UAAMI,gBAAgB,GAAGV,mBAAmB,CAAEI,UAAF,CAA5C;;AAEA,UAAMO,qBAAqB,GAC1BD,gBAAgB,CAACH,MAAjB,KAA4B,CAA5B,IACA,sBAAAG,gBAAgB,CAAE,CAAF,CAAhB,wEAAuBE,IAAvB,MAAgCP,kBAFjC,CAvB4B,CA2B5B;AACA;AACA;;AACA,UAAMQ,YAAY,GAAGJ,sBAAsB,IAAIC,gBAAgB,CAACH,MAAhE,CA9B4B,CAgC5B;;;AACA,UAAMO,cAAc,GACnBH,qBAAqB,IACrB,CAAC,CAAED,gBAAgB,CAAE,CAAF,CAAhB,CAAsBK,WAAtB,CAAkCR,MAFtC;;AAGA,WAAO;AACNd,MAAAA,SAAS,EAAEW,UADL;AAENV,MAAAA,WAAW,EAAEmB,YAFP;AAGNlB,MAAAA,aAAa,EAAEmB,cAHT;AAINlB,MAAAA,eAAe,EAAEc,gBAJX;AAKNb,MAAAA,iBAAiB,EAAEQ;AALb,KAAP;AAOA,GA3CY,EA2CV,EA3CU,CANb;AAkDA,SAAO;AACNZ,IAAAA,SADM;AAENC,IAAAA,WAFM;AAGNC,IAAAA,aAHM;AAINC,IAAAA,eAJM;AAKNC,IAAAA;AALM,GAAP;AAOA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Contains the properties `ConvertToGroupButton` component needs.\n *\n * @typedef {Object} ConvertToGroupButtonProps\n * @property {string[]} clientIds An array of the selected client ids.\n * @property {boolean} isGroupable Indicates if the selected blocks can be grouped.\n * @property {boolean} isUngroupable Indicates if the selected blocks can be ungrouped.\n * @property {WPBlock[]} blocksSelection An array of the selected blocks.\n * @property {string} groupingBlockName The name of block used for handling grouping interactions.\n */\n\n/**\n * Returns the properties `ConvertToGroupButton` component needs to work properly.\n * It is used in `BlockSettingsMenuControls` to know if `ConvertToGroupButton`\n * should be rendered, to avoid ending up with an empty MenuGroup.\n *\n * @return {ConvertToGroupButtonProps} Returns the properties needed by `ConvertToGroupButton`.\n */\nexport default function useConvertToGroupButtonProps() {\n\tconst {\n\t\tclientIds,\n\t\tisGroupable,\n\t\tisUngroupable,\n\t\tblocksSelection,\n\t\tgroupingBlockName,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockRootClientId,\n\t\t\tgetBlocksByClientId,\n\t\t\tcanInsertBlockType,\n\t\t\tgetSelectedBlockClientIds,\n\t\t} = select( blockEditorStore );\n\t\tconst { getGroupingBlockName } = select( blocksStore );\n\n\t\tconst _clientIds = getSelectedBlockClientIds();\n\t\tconst _groupingBlockName = getGroupingBlockName();\n\n\t\tconst rootClientId = !! _clientIds?.length\n\t\t\t? getBlockRootClientId( _clientIds[ 0 ] )\n\t\t\t: undefined;\n\n\t\tconst groupingBlockAvailable = canInsertBlockType(\n\t\t\t_groupingBlockName,\n\t\t\trootClientId\n\t\t);\n\n\t\tconst _blocksSelection = getBlocksByClientId( _clientIds );\n\n\t\tconst isSingleGroupingBlock =\n\t\t\t_blocksSelection.length === 1 &&\n\t\t\t_blocksSelection[ 0 ]?.name === _groupingBlockName;\n\n\t\t// Do we have\n\t\t// 1. Grouping block available to be inserted?\n\t\t// 2. One or more blocks selected\n\t\tconst _isGroupable = groupingBlockAvailable && _blocksSelection.length;\n\n\t\t// Do we have a single Group Block selected and does that group have inner blocks?\n\t\tconst _isUngroupable =\n\t\t\tisSingleGroupingBlock &&\n\t\t\t!! _blocksSelection[ 0 ].innerBlocks.length;\n\t\treturn {\n\t\t\tclientIds: _clientIds,\n\t\t\tisGroupable: _isGroupable,\n\t\t\tisUngroupable: _isUngroupable,\n\t\t\tblocksSelection: _blocksSelection,\n\t\t\tgroupingBlockName: _groupingBlockName,\n\t\t};\n\t}, [] );\n\treturn {\n\t\tclientIds,\n\t\tisGroupable,\n\t\tisUngroupable,\n\t\tblocksSelection,\n\t\tgroupingBlockName,\n\t};\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/convert-to-group-buttons/use-convert-to-group-button-props.js"],"names":["store","blocksStore","useSelect","blockEditorStore","useConvertToGroupButtonProps","selectedClientIds","clientIds","isGroupable","isUngroupable","blocksSelection","groupingBlockName","select","getBlockRootClientId","getBlocksByClientId","canInsertBlockType","getSelectedBlockClientIds","getGroupingBlockName","_clientIds","length","_groupingBlockName","rootClientId","undefined","groupingBlockAvailable","_blocksSelection","isSingleGroupingBlock","name","_isGroupable","_isUngroupable","innerBlocks"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,KAAK,IAAIC,WAAlB,QAAqC,mBAArC;AACA,SAASC,SAAT,QAA0B,iBAA1B;AAEA;AACA;AACA;;AACA,SAASF,KAAK,IAAIG,gBAAlB,QAA0C,aAA1C;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASC,4BAAT,CAAuCC,iBAAvC,EAA2D;AACzE,QAAM;AACLC,IAAAA,SADK;AAELC,IAAAA,WAFK;AAGLC,IAAAA,aAHK;AAILC,IAAAA,eAJK;AAKLC,IAAAA;AALK,MAMFR,SAAS,CACVS,MAAF,IAAc;AAAA;;AACb,UAAM;AACLC,MAAAA,oBADK;AAELC,MAAAA,mBAFK;AAGLC,MAAAA,kBAHK;AAILC,MAAAA;AAJK,QAKFJ,MAAM,CAAER,gBAAF,CALV;AAMA,UAAM;AAAEa,MAAAA;AAAF,QAA2BL,MAAM,CAAEV,WAAF,CAAvC;;AAEA,UAAMgB,UAAU,GAAGZ,iBAAiB,SAAjB,IAAAA,iBAAiB,WAAjB,IAAAA,iBAAiB,CAAEa,MAAnB,GAChBb,iBADgB,GAEhBU,yBAAyB,EAF5B;;AAGA,UAAMI,kBAAkB,GAAGH,oBAAoB,EAA/C;;AAEA,UAAMI,YAAY,GAAG,CAAC,EAAEH,UAAF,aAAEA,UAAF,eAAEA,UAAU,CAAEC,MAAd,CAAD,GAClBN,oBAAoB,CAAEK,UAAU,CAAE,CAAF,CAAZ,CADF,GAElBI,SAFH;AAIA,UAAMC,sBAAsB,GAAGR,kBAAkB,CAChDK,kBADgD,EAEhDC,YAFgD,CAAjD;;AAKA,UAAMG,gBAAgB,GAAGV,mBAAmB,CAAEI,UAAF,CAA5C;;AAEA,UAAMO,qBAAqB,GAC1BD,gBAAgB,CAACL,MAAjB,KAA4B,CAA5B,IACA,sBAAAK,gBAAgB,CAAE,CAAF,CAAhB,wEAAuBE,IAAvB,MAAgCN,kBAFjC,CAzBa,CA6Bb;AACA;AACA;;AACA,UAAMO,YAAY,GACjBJ,sBAAsB,IAAIC,gBAAgB,CAACL,MAD5C,CAhCa,CAmCb;;;AACA,UAAMS,cAAc,GACnBH,qBAAqB,IACrB,CAAC,CAAED,gBAAgB,CAAE,CAAF,CAAhB,CAAsBK,WAAtB,CAAkCV,MAFtC;;AAGA,WAAO;AACNZ,MAAAA,SAAS,EAAEW,UADL;AAENV,MAAAA,WAAW,EAAEmB,YAFP;AAGNlB,MAAAA,aAAa,EAAEmB,cAHT;AAINlB,MAAAA,eAAe,EAAEc,gBAJX;AAKNb,MAAAA,iBAAiB,EAAES;AALb,KAAP;AAOA,GA/CW,EAgDZ,CAAEd,iBAAF,CAhDY,CANb;AAyDA,SAAO;AACNC,IAAAA,SADM;AAENC,IAAAA,WAFM;AAGNC,IAAAA,aAHM;AAINC,IAAAA,eAJM;AAKNC,IAAAA;AALM,GAAP;AAOA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Contains the properties `ConvertToGroupButton` component needs.\n *\n * @typedef {Object} ConvertToGroupButtonProps\n * @property {string[]} clientIds An array of the selected client ids.\n * @property {boolean} isGroupable Indicates if the selected blocks can be grouped.\n * @property {boolean} isUngroupable Indicates if the selected blocks can be ungrouped.\n * @property {WPBlock[]} blocksSelection An array of the selected blocks.\n * @property {string} groupingBlockName The name of block used for handling grouping interactions.\n */\n\n/**\n * Returns the properties `ConvertToGroupButton` component needs to work properly.\n * It is used in `BlockSettingsMenuControls` to know if `ConvertToGroupButton`\n * should be rendered, to avoid ending up with an empty MenuGroup.\n *\n * @param {?string[]} selectedClientIds An optional array of clientIds to group. The selected blocks\n * from the block editor store are used if this is not provided.\n *\n * @return {ConvertToGroupButtonProps} Returns the properties needed by `ConvertToGroupButton`.\n */\nexport default function useConvertToGroupButtonProps( selectedClientIds ) {\n\tconst {\n\t\tclientIds,\n\t\tisGroupable,\n\t\tisUngroupable,\n\t\tblocksSelection,\n\t\tgroupingBlockName,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlocksByClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t\tgetSelectedBlockClientIds,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst { getGroupingBlockName } = select( blocksStore );\n\n\t\t\tconst _clientIds = selectedClientIds?.length\n\t\t\t\t? selectedClientIds\n\t\t\t\t: getSelectedBlockClientIds();\n\t\t\tconst _groupingBlockName = getGroupingBlockName();\n\n\t\t\tconst rootClientId = !! _clientIds?.length\n\t\t\t\t? getBlockRootClientId( _clientIds[ 0 ] )\n\t\t\t\t: undefined;\n\n\t\t\tconst groupingBlockAvailable = canInsertBlockType(\n\t\t\t\t_groupingBlockName,\n\t\t\t\trootClientId\n\t\t\t);\n\n\t\t\tconst _blocksSelection = getBlocksByClientId( _clientIds );\n\n\t\t\tconst isSingleGroupingBlock =\n\t\t\t\t_blocksSelection.length === 1 &&\n\t\t\t\t_blocksSelection[ 0 ]?.name === _groupingBlockName;\n\n\t\t\t// Do we have\n\t\t\t// 1. Grouping block available to be inserted?\n\t\t\t// 2. One or more blocks selected\n\t\t\tconst _isGroupable =\n\t\t\t\tgroupingBlockAvailable && _blocksSelection.length;\n\n\t\t\t// Do we have a single Group Block selected and does that group have inner blocks?\n\t\t\tconst _isUngroupable =\n\t\t\t\tisSingleGroupingBlock &&\n\t\t\t\t!! _blocksSelection[ 0 ].innerBlocks.length;\n\t\t\treturn {\n\t\t\t\tclientIds: _clientIds,\n\t\t\t\tisGroupable: _isGroupable,\n\t\t\t\tisUngroupable: _isUngroupable,\n\t\t\t\tblocksSelection: _blocksSelection,\n\t\t\t\tgroupingBlockName: _groupingBlockName,\n\t\t\t};\n\t\t},\n\t\t[ selectedClientIds ]\n\t);\n\n\treturn {\n\t\tclientIds,\n\t\tisGroupable,\n\t\tisUngroupable,\n\t\tblocksSelection,\n\t\tgroupingBlockName,\n\t};\n}\n"]}
@@ -10,6 +10,7 @@ import a11yPlugin from 'colord/plugins/a11y';
10
10
  * WordPress dependencies
11
11
  */
12
12
 
13
+ import { SVG } from '@wordpress/components';
13
14
  import { useCallback, useMemo } from '@wordpress/element';
14
15
  /**
15
16
  * Internal dependencies
@@ -62,11 +63,27 @@ export default function EditorStyles(_ref) {
62
63
  let {
63
64
  styles
64
65
  } = _ref;
65
- const transformedStyles = useMemo(() => transformStyles(styles, EDITOR_STYLES_SELECTOR), [styles]);
66
+ const transformedStyles = useMemo(() => transformStyles(styles.filter(style => style === null || style === void 0 ? void 0 : style.css), EDITOR_STYLES_SELECTOR), [styles]);
67
+ const transformedSvgs = useMemo(() => styles.filter(style => style.__unstableType === 'svgs').map(style => style.assets).join(''), [styles]);
66
68
  return createElement(Fragment, null, createElement("style", {
67
69
  ref: useDarkThemeBodyClassName(styles)
68
70
  }), transformedStyles.map((css, index) => createElement("style", {
69
71
  key: index
70
- }, css)));
72
+ }, css)), createElement(SVG, {
73
+ xmlns: "http://www.w3.org/2000/svg",
74
+ viewBox: "0 0 0 0",
75
+ width: "0",
76
+ height: "0",
77
+ role: "none",
78
+ style: {
79
+ visibility: 'hidden',
80
+ position: 'absolute',
81
+ left: '-9999px',
82
+ overflow: 'hidden'
83
+ },
84
+ dangerouslySetInnerHTML: {
85
+ __html: transformedSvgs
86
+ }
87
+ }));
71
88
  }
72
89
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/editor-styles/index.js"],"names":["colord","extend","namesPlugin","a11yPlugin","useCallback","useMemo","transformStyles","EDITOR_STYLES_SELECTOR","useDarkThemeBodyClassName","styles","node","ownerDocument","defaultView","body","canvas","querySelector","backgroundColor","tempCanvas","createElement","classList","add","appendChild","getComputedStyle","getPropertyValue","removeChild","colordBackgroundColor","luminance","alpha","remove","EditorStyles","transformedStyles","map","css","index"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,MAAT,EAAiBC,MAAjB,QAA+B,QAA/B;AACA,OAAOC,WAAP,MAAwB,sBAAxB;AACA,OAAOC,UAAP,MAAuB,qBAAvB;AAEA;AACA;AACA;;AACA,SAASC,WAAT,EAAsBC,OAAtB,QAAqC,oBAArC;AAEA;AACA;AACA;;AACA,OAAOC,eAAP,MAA4B,8BAA5B;AAEA,MAAMC,sBAAsB,GAAG,wBAA/B;AACAN,MAAM,CAAE,CAAEC,WAAF,EAAeC,UAAf,CAAF,CAAN;;AAEA,SAASK,yBAAT,CAAoCC,MAApC,EAA6C;AAC5C,SAAOL,WAAW,CACfM,IAAF,IAAY;AACX,QAAK,CAAEA,IAAP,EAAc;AACb;AACA;;AAED,UAAM;AAAEC,MAAAA;AAAF,QAAoBD,IAA1B;AACA,UAAM;AAAEE,MAAAA,WAAF;AAAeC,MAAAA;AAAf,QAAwBF,aAA9B;AACA,UAAMG,MAAM,GAAGH,aAAa,CAACI,aAAd,CACdR,sBADc,CAAf;AAIA,QAAIS,eAAJ;;AAEA,QAAK,CAAEF,MAAP,EAAgB;AACf;AACA;AACA;AACA,YAAMG,UAAU,GAAGN,aAAa,CAACO,aAAd,CAA6B,KAA7B,CAAnB;AACAD,MAAAA,UAAU,CAACE,SAAX,CAAqBC,GAArB,CAA0B,uBAA1B;AACAP,MAAAA,IAAI,CAACQ,WAAL,CAAkBJ,UAAlB;AAEAD,MAAAA,eAAe,GAAGJ,WAAW,CAC3BU,gBADgB,CACEL,UADF,EACc,IADd,EAEhBM,gBAFgB,CAEE,kBAFF,CAAlB;AAIAV,MAAAA,IAAI,CAACW,WAAL,CAAkBP,UAAlB;AACA,KAbD,MAaO;AACND,MAAAA,eAAe,GAAGJ,WAAW,CAC3BU,gBADgB,CACER,MADF,EACU,IADV,EAEhBS,gBAFgB,CAEE,kBAFF,CAAlB;AAGA;;AACD,UAAME,qBAAqB,GAAGzB,MAAM,CAAEgB,eAAF,CAApC,CA/BW,CAgCX;;AACA,QACCS,qBAAqB,CAACC,SAAtB,KAAoC,GAApC,IACAD,qBAAqB,CAACE,KAAtB,OAAkC,CAFnC,EAGE;AACDd,MAAAA,IAAI,CAACM,SAAL,CAAeS,MAAf,CAAuB,eAAvB;AACA,KALD,MAKO;AACNf,MAAAA,IAAI,CAACM,SAAL,CAAeC,GAAf,CAAoB,eAApB;AACA;AACD,GA1CgB,EA2CjB,CAAEX,MAAF,CA3CiB,CAAlB;AA6CA;;AAED,eAAe,SAASoB,YAAT,OAAoC;AAAA,MAAb;AAAEpB,IAAAA;AAAF,GAAa;AAClD,QAAMqB,iBAAiB,GAAGzB,OAAO,CAChC,MAAMC,eAAe,CAAEG,MAAF,EAAUF,sBAAV,CADW,EAEhC,CAAEE,MAAF,CAFgC,CAAjC;AAKA,SACC,8BAGC;AAAO,IAAA,GAAG,EAAGD,yBAAyB,CAAEC,MAAF;AAAtC,IAHD,EAIGqB,iBAAiB,CAACC,GAAlB,CAAuB,CAAEC,GAAF,EAAOC,KAAP,KACxB;AAAO,IAAA,GAAG,EAAGA;AAAb,KAAuBD,GAAvB,CADC,CAJH,CADD;AAUA","sourcesContent":["/**\n * External dependencies\n */\nimport { colord, extend } from 'colord';\nimport namesPlugin from 'colord/plugins/names';\nimport a11yPlugin from 'colord/plugins/a11y';\n\n/**\n * WordPress dependencies\n */\nimport { useCallback, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport transformStyles from '../../utils/transform-styles';\n\nconst EDITOR_STYLES_SELECTOR = '.editor-styles-wrapper';\nextend( [ namesPlugin, a11yPlugin ] );\n\nfunction useDarkThemeBodyClassName( styles ) {\n\treturn useCallback(\n\t\t( node ) => {\n\t\t\tif ( ! node ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView, body } = ownerDocument;\n\t\t\tconst canvas = ownerDocument.querySelector(\n\t\t\t\tEDITOR_STYLES_SELECTOR\n\t\t\t);\n\n\t\t\tlet backgroundColor;\n\n\t\t\tif ( ! canvas ) {\n\t\t\t\t// The real .editor-styles-wrapper element might not exist in the\n\t\t\t\t// DOM, so calculate the background color by creating a fake\n\t\t\t\t// wrapper.\n\t\t\t\tconst tempCanvas = ownerDocument.createElement( 'div' );\n\t\t\t\ttempCanvas.classList.add( 'editor-styles-wrapper' );\n\t\t\t\tbody.appendChild( tempCanvas );\n\n\t\t\t\tbackgroundColor = defaultView\n\t\t\t\t\t.getComputedStyle( tempCanvas, null )\n\t\t\t\t\t.getPropertyValue( 'background-color' );\n\n\t\t\t\tbody.removeChild( tempCanvas );\n\t\t\t} else {\n\t\t\t\tbackgroundColor = defaultView\n\t\t\t\t\t.getComputedStyle( canvas, null )\n\t\t\t\t\t.getPropertyValue( 'background-color' );\n\t\t\t}\n\t\t\tconst colordBackgroundColor = colord( backgroundColor );\n\t\t\t// If background is transparent, it should be treated as light color.\n\t\t\tif (\n\t\t\t\tcolordBackgroundColor.luminance() > 0.5 ||\n\t\t\t\tcolordBackgroundColor.alpha() === 0\n\t\t\t) {\n\t\t\t\tbody.classList.remove( 'is-dark-theme' );\n\t\t\t} else {\n\t\t\t\tbody.classList.add( 'is-dark-theme' );\n\t\t\t}\n\t\t},\n\t\t[ styles ]\n\t);\n}\n\nexport default function EditorStyles( { styles } ) {\n\tconst transformedStyles = useMemo(\n\t\t() => transformStyles( styles, EDITOR_STYLES_SELECTOR ),\n\t\t[ styles ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t{ /* Use an empty style element to have a document reference,\n\t\t\t but this could be any element. */ }\n\t\t\t<style ref={ useDarkThemeBodyClassName( styles ) } />\n\t\t\t{ transformedStyles.map( ( css, index ) => (\n\t\t\t\t<style key={ index }>{ css }</style>\n\t\t\t) ) }\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/editor-styles/index.js"],"names":["colord","extend","namesPlugin","a11yPlugin","SVG","useCallback","useMemo","transformStyles","EDITOR_STYLES_SELECTOR","useDarkThemeBodyClassName","styles","node","ownerDocument","defaultView","body","canvas","querySelector","backgroundColor","tempCanvas","createElement","classList","add","appendChild","getComputedStyle","getPropertyValue","removeChild","colordBackgroundColor","luminance","alpha","remove","EditorStyles","transformedStyles","filter","style","css","transformedSvgs","__unstableType","map","assets","join","index","visibility","position","left","overflow","__html"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { colord, extend } from 'colord';\nimport namesPlugin from 'colord/plugins/names';\nimport a11yPlugin from 'colord/plugins/a11y';\n\n/**\n * WordPress dependencies\n */\nimport { SVG } from '@wordpress/components';\nimport { useCallback, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport transformStyles from '../../utils/transform-styles';\n\nconst EDITOR_STYLES_SELECTOR = '.editor-styles-wrapper';\nextend( [ namesPlugin, a11yPlugin ] );\n\nfunction useDarkThemeBodyClassName( styles ) {\n\treturn useCallback(\n\t\t( node ) => {\n\t\t\tif ( ! node ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { ownerDocument } = node;\n\t\t\tconst { defaultView, body } = ownerDocument;\n\t\t\tconst canvas = ownerDocument.querySelector(\n\t\t\t\tEDITOR_STYLES_SELECTOR\n\t\t\t);\n\n\t\t\tlet backgroundColor;\n\n\t\t\tif ( ! canvas ) {\n\t\t\t\t// The real .editor-styles-wrapper element might not exist in the\n\t\t\t\t// DOM, so calculate the background color by creating a fake\n\t\t\t\t// wrapper.\n\t\t\t\tconst tempCanvas = ownerDocument.createElement( 'div' );\n\t\t\t\ttempCanvas.classList.add( 'editor-styles-wrapper' );\n\t\t\t\tbody.appendChild( tempCanvas );\n\n\t\t\t\tbackgroundColor = defaultView\n\t\t\t\t\t.getComputedStyle( tempCanvas, null )\n\t\t\t\t\t.getPropertyValue( 'background-color' );\n\n\t\t\t\tbody.removeChild( tempCanvas );\n\t\t\t} else {\n\t\t\t\tbackgroundColor = defaultView\n\t\t\t\t\t.getComputedStyle( canvas, null )\n\t\t\t\t\t.getPropertyValue( 'background-color' );\n\t\t\t}\n\t\t\tconst colordBackgroundColor = colord( backgroundColor );\n\t\t\t// If background is transparent, it should be treated as light color.\n\t\t\tif (\n\t\t\t\tcolordBackgroundColor.luminance() > 0.5 ||\n\t\t\t\tcolordBackgroundColor.alpha() === 0\n\t\t\t) {\n\t\t\t\tbody.classList.remove( 'is-dark-theme' );\n\t\t\t} else {\n\t\t\t\tbody.classList.add( 'is-dark-theme' );\n\t\t\t}\n\t\t},\n\t\t[ styles ]\n\t);\n}\n\nexport default function EditorStyles( { styles } ) {\n\tconst transformedStyles = useMemo(\n\t\t() =>\n\t\t\ttransformStyles(\n\t\t\t\tstyles.filter( ( style ) => style?.css ),\n\t\t\t\tEDITOR_STYLES_SELECTOR\n\t\t\t),\n\t\t[ styles ]\n\t);\n\n\tconst transformedSvgs = useMemo(\n\t\t() =>\n\t\t\tstyles\n\t\t\t\t.filter( ( style ) => style.__unstableType === 'svgs' )\n\t\t\t\t.map( ( style ) => style.assets )\n\t\t\t\t.join( '' ),\n\t\t[ styles ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t{ /* Use an empty style element to have a document reference,\n\t\t\t but this could be any element. */ }\n\t\t\t<style ref={ useDarkThemeBodyClassName( styles ) } />\n\t\t\t{ transformedStyles.map( ( css, index ) => (\n\t\t\t\t<style key={ index }>{ css }</style>\n\t\t\t) ) }\n\t\t\t<SVG\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\tviewBox=\"0 0 0 0\"\n\t\t\t\twidth=\"0\"\n\t\t\t\theight=\"0\"\n\t\t\t\trole=\"none\"\n\t\t\t\tstyle={ {\n\t\t\t\t\tvisibility: 'hidden',\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tleft: '-9999px',\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t} }\n\t\t\t\tdangerouslySetInnerHTML={ { __html: transformedSvgs } }\n\t\t\t/>\n\t\t</>\n\t);\n}\n"]}
@@ -0,0 +1,291 @@
1
+ import { createElement } from "@wordpress/element";
2
+
3
+ /**
4
+ * WordPress dependencies
5
+ */
6
+ import { __experimentalBorderBoxControl as BorderBoxControl, __experimentalHasSplitBorders as hasSplitBorders, __experimentalIsDefinedBorder as isDefinedBorder, __experimentalToolsPanel as ToolsPanel, __experimentalToolsPanelItem as ToolsPanelItem } from '@wordpress/components';
7
+ import { useCallback, useMemo } from '@wordpress/element';
8
+ import { __ } from '@wordpress/i18n';
9
+ /**
10
+ * Internal dependencies
11
+ */
12
+
13
+ import BorderRadiusControl from '../border-radius-control';
14
+ import { useColorsPerOrigin } from './hooks';
15
+ import { getValueFromVariable } from './utils';
16
+ export function useHasBorderPanel(settings) {
17
+ const controls = [useHasBorderColorControl(settings), useHasBorderRadiusControl(settings), useHasBorderStyleControl(settings), useHasBorderWidthControl(settings)];
18
+ return controls.some(Boolean);
19
+ }
20
+
21
+ function useHasBorderColorControl(settings) {
22
+ var _settings$border;
23
+
24
+ return settings === null || settings === void 0 ? void 0 : (_settings$border = settings.border) === null || _settings$border === void 0 ? void 0 : _settings$border.color;
25
+ }
26
+
27
+ function useHasBorderRadiusControl(settings) {
28
+ var _settings$border2;
29
+
30
+ return settings === null || settings === void 0 ? void 0 : (_settings$border2 = settings.border) === null || _settings$border2 === void 0 ? void 0 : _settings$border2.radius;
31
+ }
32
+
33
+ function useHasBorderStyleControl(settings) {
34
+ var _settings$border3;
35
+
36
+ return settings === null || settings === void 0 ? void 0 : (_settings$border3 = settings.border) === null || _settings$border3 === void 0 ? void 0 : _settings$border3.style;
37
+ }
38
+
39
+ function useHasBorderWidthControl(settings) {
40
+ var _settings$border4;
41
+
42
+ return settings === null || settings === void 0 ? void 0 : (_settings$border4 = settings.border) === null || _settings$border4 === void 0 ? void 0 : _settings$border4.width;
43
+ }
44
+
45
+ function applyFallbackStyle(border) {
46
+ if (!border) {
47
+ return border;
48
+ }
49
+
50
+ if (!border.style && (border.color || border.width)) {
51
+ return { ...border,
52
+ style: 'solid'
53
+ };
54
+ }
55
+
56
+ return border;
57
+ }
58
+
59
+ function applyAllFallbackStyles(border) {
60
+ if (!border) {
61
+ return border;
62
+ }
63
+
64
+ if (hasSplitBorders(border)) {
65
+ return {
66
+ top: applyFallbackStyle(border.top),
67
+ right: applyFallbackStyle(border.right),
68
+ bottom: applyFallbackStyle(border.bottom),
69
+ left: applyFallbackStyle(border.left)
70
+ };
71
+ }
72
+
73
+ return applyFallbackStyle(border);
74
+ }
75
+
76
+ function BorderToolsPanel(_ref) {
77
+ let {
78
+ resetAllFilter,
79
+ onChange,
80
+ value,
81
+ panelId,
82
+ children
83
+ } = _ref;
84
+
85
+ const resetAll = () => {
86
+ const updatedValue = resetAllFilter(value);
87
+ onChange(updatedValue);
88
+ };
89
+
90
+ return createElement(ToolsPanel, {
91
+ label: __('Border'),
92
+ resetAll: resetAll,
93
+ panelId: panelId
94
+ }, children);
95
+ }
96
+
97
+ const DEFAULT_CONTROLS = {
98
+ radius: true,
99
+ color: true,
100
+ width: true
101
+ };
102
+ export default function BorderPanel(_ref2) {
103
+ let {
104
+ as: Wrapper = BorderToolsPanel,
105
+ value,
106
+ onChange,
107
+ inheritedValue = value,
108
+ settings,
109
+ panelId,
110
+ defaultControls = DEFAULT_CONTROLS
111
+ } = _ref2;
112
+ const colors = useColorsPerOrigin(settings);
113
+
114
+ const decodeValue = rawValue => getValueFromVariable({
115
+ settings
116
+ }, '', rawValue);
117
+
118
+ const encodeColorValue = colorValue => {
119
+ const allColors = colors.flatMap(_ref3 => {
120
+ let {
121
+ colors: originColors
122
+ } = _ref3;
123
+ return originColors;
124
+ });
125
+ const colorObject = allColors.find(_ref4 => {
126
+ let {
127
+ color
128
+ } = _ref4;
129
+ return color === colorValue;
130
+ });
131
+ return colorObject ? 'var:preset|color|' + colorObject.slug : colorValue;
132
+ };
133
+
134
+ const decodeColorValue = useCallback(colorValue => {
135
+ const allColors = colors.flatMap(_ref5 => {
136
+ let {
137
+ colors: originColors
138
+ } = _ref5;
139
+ return originColors;
140
+ });
141
+ const colorObject = allColors.find(_ref6 => {
142
+ let {
143
+ slug
144
+ } = _ref6;
145
+ return colorValue === 'var:preset|color|' + slug;
146
+ });
147
+ return colorObject ? colorObject.color : colorValue;
148
+ }, [colors]);
149
+ const border = useMemo(() => {
150
+ var _inheritedValue$borde, _inheritedValue$borde2;
151
+
152
+ if (hasSplitBorders(inheritedValue === null || inheritedValue === void 0 ? void 0 : inheritedValue.border)) {
153
+ const borderValue = { ...(inheritedValue === null || inheritedValue === void 0 ? void 0 : inheritedValue.border)
154
+ };
155
+ ['top', 'right', 'bottom', 'left'].forEach(side => {
156
+ var _borderValue$side;
157
+
158
+ borderValue[side] = { ...borderValue[side],
159
+ color: decodeColorValue((_borderValue$side = borderValue[side]) === null || _borderValue$side === void 0 ? void 0 : _borderValue$side.color)
160
+ };
161
+ });
162
+ return borderValue;
163
+ }
164
+
165
+ return { ...(inheritedValue === null || inheritedValue === void 0 ? void 0 : inheritedValue.border),
166
+ 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
167
+ };
168
+ }, [inheritedValue === null || inheritedValue === void 0 ? void 0 : inheritedValue.border, decodeColorValue]);
169
+
170
+ const setBorder = newBorder => onChange({ ...value,
171
+ border: newBorder
172
+ });
173
+
174
+ const showBorderColor = useHasBorderColorControl(settings);
175
+ const showBorderStyle = useHasBorderStyleControl(settings);
176
+ const showBorderWidth = useHasBorderWidthControl(settings); // Border radius.
177
+
178
+ const showBorderRadius = useHasBorderRadiusControl(settings);
179
+ const borderRadiusValues = decodeValue(border === null || border === void 0 ? void 0 : border.radius);
180
+
181
+ const setBorderRadius = newBorderRadius => setBorder({ ...border,
182
+ radius: newBorderRadius
183
+ });
184
+
185
+ const hasBorderRadius = () => {
186
+ var _value$border;
187
+
188
+ const borderValues = value === null || value === void 0 ? void 0 : (_value$border = value.border) === null || _value$border === void 0 ? void 0 : _value$border.radius;
189
+
190
+ if (typeof borderValues === 'object') {
191
+ return Object.entries(borderValues).some(Boolean);
192
+ }
193
+
194
+ return !!borderValues;
195
+ };
196
+
197
+ const resetBorder = () => {
198
+ if (hasBorderRadius()) {
199
+ var _value$border2;
200
+
201
+ return setBorder({
202
+ radius: value === null || value === void 0 ? void 0 : (_value$border2 = value.border) === null || _value$border2 === void 0 ? void 0 : _value$border2.radius
203
+ });
204
+ }
205
+
206
+ setBorder(undefined);
207
+ };
208
+
209
+ const onBorderChange = newBorder => {
210
+ // Ensure we have a visible border style when a border width or
211
+ // color is being selected.
212
+ const newBorderWithStyle = applyAllFallbackStyles(newBorder); // As we can't conditionally generate styles based on if other
213
+ // style properties have been set we need to force split border
214
+ // definitions for user set border styles. Border radius is derived
215
+ // from the same property i.e. `border.radius` if it is a string
216
+ // that is used. The longhand border radii styles are only generated
217
+ // if that property is an object.
218
+ //
219
+ // For borders (color, style, and width) those are all properties on
220
+ // the `border` style property. This means if the theme.json defined
221
+ // split borders and the user condenses them into a flat border or
222
+ // vice-versa we'd get both sets of styles which would conflict.
223
+
224
+ const updatedBorder = !hasSplitBorders(newBorderWithStyle) ? {
225
+ top: newBorderWithStyle,
226
+ right: newBorderWithStyle,
227
+ bottom: newBorderWithStyle,
228
+ left: newBorderWithStyle
229
+ } : {
230
+ color: null,
231
+ style: null,
232
+ width: null,
233
+ ...newBorderWithStyle
234
+ };
235
+ ['top', 'right', 'bottom', 'left'].forEach(side => {
236
+ var _updatedBorder$side;
237
+
238
+ updatedBorder[side] = { ...updatedBorder[side],
239
+ color: encodeColorValue((_updatedBorder$side = updatedBorder[side]) === null || _updatedBorder$side === void 0 ? void 0 : _updatedBorder$side.color)
240
+ };
241
+ }); // As radius is maintained separately to color, style, and width
242
+ // maintain its value. Undefined values here will be cleaned when
243
+ // global styles are saved.
244
+
245
+ setBorder({
246
+ radius: border === null || border === void 0 ? void 0 : border.radius,
247
+ ...updatedBorder
248
+ });
249
+ };
250
+
251
+ const resetAllFilter = useCallback(previousValue => {
252
+ return { ...previousValue,
253
+ border: undefined
254
+ };
255
+ }, []);
256
+ const showBorderByDefault = (defaultControls === null || defaultControls === void 0 ? void 0 : defaultControls.color) || (defaultControls === null || defaultControls === void 0 ? void 0 : defaultControls.width);
257
+ return createElement(Wrapper, {
258
+ resetAllFilter: resetAllFilter,
259
+ value: value,
260
+ onChange: onChange,
261
+ panelId: panelId
262
+ }, (showBorderWidth || showBorderColor) && createElement(ToolsPanelItem, {
263
+ hasValue: () => isDefinedBorder(value === null || value === void 0 ? void 0 : value.border),
264
+ label: __('Border'),
265
+ onDeselect: () => resetBorder(),
266
+ isShownByDefault: showBorderByDefault,
267
+ panelId: panelId
268
+ }, createElement(BorderBoxControl, {
269
+ colors: colors,
270
+ enableAlpha: true,
271
+ enableStyle: showBorderStyle,
272
+ onChange: onBorderChange,
273
+ popoverOffset: 40,
274
+ popoverPlacement: "left-start",
275
+ value: border,
276
+ __experimentalIsRenderedInSidebar: true,
277
+ size: '__unstable-large'
278
+ })), showBorderRadius && createElement(ToolsPanelItem, {
279
+ hasValue: hasBorderRadius,
280
+ label: __('Radius'),
281
+ onDeselect: () => setBorderRadius(undefined),
282
+ isShownByDefault: defaultControls.radius,
283
+ panelId: panelId
284
+ }, createElement(BorderRadiusControl, {
285
+ values: borderRadiusValues,
286
+ onChange: newValue => {
287
+ setBorderRadius(newValue || undefined);
288
+ }
289
+ })));
290
+ }
291
+ //# sourceMappingURL=border-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/global-styles/border-panel.js"],"names":["__experimentalBorderBoxControl","BorderBoxControl","__experimentalHasSplitBorders","hasSplitBorders","__experimentalIsDefinedBorder","isDefinedBorder","__experimentalToolsPanel","ToolsPanel","__experimentalToolsPanelItem","ToolsPanelItem","useCallback","useMemo","__","BorderRadiusControl","useColorsPerOrigin","getValueFromVariable","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"]}