@wordpress/block-editor 11.2.0 → 11.3.1

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 (675) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +28 -4
  3. package/build/components/alignment-control/ui.js +1 -1
  4. package/build/components/alignment-control/ui.js.map +1 -1
  5. package/build/components/autocomplete/index.js +2 -7
  6. package/build/components/autocomplete/index.js.map +1 -1
  7. package/build/components/block-actions/index.js +7 -2
  8. package/build/components/block-actions/index.js.map +1 -1
  9. package/build/components/block-alignment-matrix-control/index.js +2 -2
  10. package/build/components/block-alignment-matrix-control/index.js.map +1 -1
  11. package/build/components/block-card/index.js +2 -4
  12. package/build/components/block-card/index.js.map +1 -1
  13. package/build/components/block-edit/index.js +8 -0
  14. package/build/components/block-edit/index.js.map +1 -1
  15. package/build/components/block-inspector/index.js +15 -14
  16. package/build/components/block-inspector/index.js.map +1 -1
  17. package/build/components/block-list/use-in-between-inserter.js +5 -0
  18. package/build/components/block-list/use-in-between-inserter.js.map +1 -1
  19. package/build/components/block-lock/modal.js +0 -1
  20. package/build/components/block-lock/modal.js.map +1 -1
  21. package/build/components/block-mover/mover-description.js +2 -2
  22. package/build/components/block-mover/mover-description.js.map +1 -1
  23. package/build/components/block-navigation/dropdown.js +3 -1
  24. package/build/components/block-navigation/dropdown.js.map +1 -1
  25. package/build/components/block-pattern-setup/index.js +1 -1
  26. package/build/components/block-pattern-setup/index.js.map +1 -1
  27. package/build/components/block-pattern-setup/use-patterns-setup.js +2 -2
  28. package/build/components/block-pattern-setup/use-patterns-setup.js.map +1 -1
  29. package/build/components/block-patterns-list/index.js +31 -3
  30. package/build/components/block-patterns-list/index.js.map +1 -1
  31. package/build/components/block-preview/auto.js +9 -11
  32. package/build/components/block-preview/auto.js.map +1 -1
  33. package/build/components/block-preview/index.js +32 -8
  34. package/build/components/block-preview/index.js.map +1 -1
  35. package/build/components/block-selection-clearer/index.js +1 -1
  36. package/build/components/block-selection-clearer/index.js.map +1 -1
  37. package/build/components/block-settings/container.native.js +7 -33
  38. package/build/components/block-settings/container.native.js.map +1 -1
  39. package/build/components/block-settings-menu/block-settings-dropdown.js +12 -6
  40. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  41. package/build/components/block-settings-menu-controls/index.js +2 -8
  42. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  43. package/build/components/block-switcher/utils.js +1 -1
  44. package/build/components/block-switcher/utils.js.map +1 -1
  45. package/build/components/block-tools/selected-block-popover.js +55 -47
  46. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  47. package/build/components/block-vertical-alignment-control/icons.js +15 -1
  48. package/build/components/block-vertical-alignment-control/icons.js.map +1 -1
  49. package/build/components/block-vertical-alignment-control/ui.js +9 -4
  50. package/build/components/block-vertical-alignment-control/ui.js.map +1 -1
  51. package/build/components/color-style-selector/index.js +3 -1
  52. package/build/components/color-style-selector/index.js.map +1 -1
  53. package/build/components/date-format-picker/index.js +3 -4
  54. package/build/components/date-format-picker/index.js.map +1 -1
  55. package/build/components/font-family/index.js +1 -7
  56. package/build/components/font-family/index.js.map +1 -1
  57. package/build/components/font-sizes/fluid-utils.js +1 -1
  58. package/build/components/font-sizes/fluid-utils.js.map +1 -1
  59. package/build/components/font-sizes/utils.js +1 -1
  60. package/build/components/font-sizes/utils.js.map +1 -1
  61. package/build/components/global-styles/context.js +22 -0
  62. package/build/components/global-styles/context.js.map +1 -0
  63. package/build/components/global-styles/hooks.js +142 -0
  64. package/build/components/global-styles/hooks.js.map +1 -0
  65. package/build/components/global-styles/index.js +42 -0
  66. package/build/components/global-styles/index.js.map +1 -0
  67. package/build/components/global-styles/typography-utils.js +92 -0
  68. package/build/components/global-styles/typography-utils.js.map +1 -0
  69. package/build/components/global-styles/use-global-styles-output.js +974 -0
  70. package/build/components/global-styles/use-global-styles-output.js.map +1 -0
  71. package/build/components/global-styles/utils.js +340 -0
  72. package/build/components/global-styles/utils.js.map +1 -0
  73. package/build/components/height-control/index.js +13 -1
  74. package/build/components/height-control/index.js.map +1 -1
  75. package/build/components/iframe/index.js +5 -3
  76. package/build/components/iframe/index.js.map +1 -1
  77. package/build/components/image-editor/constants.js +1 -1
  78. package/build/components/image-editor/constants.js.map +1 -1
  79. package/build/components/image-editor/context.js +1 -2
  80. package/build/components/image-editor/context.js.map +1 -1
  81. package/build/components/image-editor/cropper.js +3 -1
  82. package/build/components/image-editor/cropper.js.map +1 -1
  83. package/build/components/image-editor/index.js +13 -9
  84. package/build/components/image-editor/index.js.map +1 -1
  85. package/build/components/image-editor/use-transform-image.js +11 -35
  86. package/build/components/image-editor/use-transform-image.js.map +1 -1
  87. package/build/components/image-size-control/index.js +1 -7
  88. package/build/components/image-size-control/index.js.map +1 -1
  89. package/build/components/index.js +8 -24
  90. package/build/components/index.js.map +1 -1
  91. package/build/components/inner-blocks/index.js +22 -32
  92. package/build/components/inner-blocks/index.js.map +1 -1
  93. package/build/components/inner-blocks/index.native.js +8 -23
  94. package/build/components/inner-blocks/index.native.js.map +1 -1
  95. package/build/components/inner-blocks/use-block-context.js +53 -0
  96. package/build/components/inner-blocks/use-block-context.js.map +1 -0
  97. package/build/components/inserter/block-patterns-explorer/explorer.js +0 -1
  98. package/build/components/inserter/block-patterns-explorer/explorer.js.map +1 -1
  99. package/build/components/inserter/block-patterns-tab.js +9 -2
  100. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  101. package/build/components/inserter/block-types-tab.js +2 -2
  102. package/build/components/inserter/block-types-tab.js.map +1 -1
  103. package/build/components/inserter/hooks/use-patterns-state.js +1 -7
  104. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  105. package/build/components/inserter/index.js +5 -4
  106. package/build/components/inserter/index.js.map +1 -1
  107. package/build/components/inserter/media-tab/hooks.js +142 -56
  108. package/build/components/inserter/media-tab/hooks.js.map +1 -1
  109. package/build/components/inserter/media-tab/media-list.js +74 -21
  110. package/build/components/inserter/media-tab/media-list.js.map +1 -1
  111. package/build/components/inserter/media-tab/media-panel.js +11 -13
  112. package/build/components/inserter/media-tab/media-panel.js.map +1 -1
  113. package/build/components/inserter/media-tab/media-tab.js +6 -3
  114. package/build/components/inserter/media-tab/media-tab.js.map +1 -1
  115. package/build/components/inserter/media-tab/utils.js +26 -15
  116. package/build/components/inserter/media-tab/utils.js.map +1 -1
  117. package/build/components/inserter/menu.js +4 -0
  118. package/build/components/inserter/menu.js.map +1 -1
  119. package/build/components/inserter/preview-panel.js +5 -3
  120. package/build/components/inserter/preview-panel.js.map +1 -1
  121. package/build/components/inserter/search-results.js +2 -7
  122. package/build/components/inserter/search-results.js.map +1 -1
  123. package/build/components/inserter-list-item/index.js +1 -9
  124. package/build/components/inserter-list-item/index.js.map +1 -1
  125. package/build/components/inspector-controls/fill.js +15 -2
  126. package/build/components/inspector-controls/fill.js.map +1 -1
  127. package/build/components/inspector-controls/fill.native.js +14 -1
  128. package/build/components/inspector-controls/fill.native.js.map +1 -1
  129. package/build/components/inspector-controls/groups.js +4 -0
  130. package/build/components/inspector-controls/groups.js.map +1 -1
  131. package/build/components/inspector-controls/index.js +2 -2
  132. package/build/components/inspector-controls/index.js.map +1 -1
  133. package/build/components/inspector-controls/slot.js +14 -1
  134. package/build/components/inspector-controls/slot.js.map +1 -1
  135. package/build/components/inspector-controls/slot.native.js +14 -1
  136. package/build/components/inspector-controls/slot.native.js.map +1 -1
  137. package/build/components/inspector-controls-tabs/advanced-controls-panel.js +1 -1
  138. package/build/components/inspector-controls-tabs/advanced-controls-panel.js.map +1 -1
  139. package/build/components/inspector-controls-tabs/index.js +2 -2
  140. package/build/components/inspector-controls-tabs/index.js.map +1 -1
  141. package/build/components/inspector-controls-tabs/position-controls-panel.js +1 -1
  142. package/build/components/inspector-controls-tabs/position-controls-panel.js.map +1 -1
  143. package/build/components/inspector-controls-tabs/styles-tab.js +6 -4
  144. package/build/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  145. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js +17 -12
  146. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  147. package/build/components/justify-content-control/ui.js +8 -1
  148. package/build/components/justify-content-control/ui.js.map +1 -1
  149. package/build/components/link-control/index.js +45 -17
  150. package/build/components/link-control/index.js.map +1 -1
  151. package/build/components/list-view/block.js +1 -1
  152. package/build/components/list-view/block.js.map +1 -1
  153. package/build/components/list-view/use-list-view-drop-zone.js +1 -1
  154. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  155. package/build/components/media-upload/index.native.js +4 -1
  156. package/build/components/media-upload/index.native.js.map +1 -1
  157. package/build/components/off-canvas-editor/appender.js +50 -3
  158. package/build/components/off-canvas-editor/appender.js.map +1 -1
  159. package/build/components/off-canvas-editor/block-contents.js +3 -1
  160. package/build/components/off-canvas-editor/block-contents.js.map +1 -1
  161. package/build/components/off-canvas-editor/block-select-button.js +10 -4
  162. package/build/components/off-canvas-editor/block-select-button.js.map +1 -1
  163. package/build/components/off-canvas-editor/block.js +6 -27
  164. package/build/components/off-canvas-editor/block.js.map +1 -1
  165. package/build/components/off-canvas-editor/branch.js +25 -10
  166. package/build/components/off-canvas-editor/branch.js.map +1 -1
  167. package/build/components/off-canvas-editor/index.js +27 -20
  168. package/build/components/off-canvas-editor/index.js.map +1 -1
  169. package/build/components/off-canvas-editor/link-ui.js +2 -2
  170. package/build/components/off-canvas-editor/link-ui.js.map +1 -1
  171. package/build/components/off-canvas-editor/use-list-view-drop-zone.js +1 -1
  172. package/build/components/off-canvas-editor/use-list-view-drop-zone.js.map +1 -1
  173. package/build/components/provider/index.js +21 -9
  174. package/build/components/provider/index.js.map +1 -1
  175. package/build/components/provider/index.native.js +5 -6
  176. package/build/components/provider/index.native.js.map +1 -1
  177. package/build/components/rich-text/use-before-input-rules.js +11 -3
  178. package/build/components/rich-text/use-before-input-rules.js.map +1 -1
  179. package/build/components/rich-text/utils.js +1 -1
  180. package/build/components/rich-text/utils.js.map +1 -1
  181. package/build/components/spacing-sizes-control/utils.js +2 -8
  182. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  183. package/build/components/tool-selector/index.js +3 -1
  184. package/build/components/tool-selector/index.js.map +1 -1
  185. package/build/components/url-popover/image-url-input-ui.js +7 -8
  186. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  187. package/build/components/use-block-display-information/index.js +1 -1
  188. package/build/components/use-block-display-information/index.js.map +1 -1
  189. package/build/experiments.js +45 -0
  190. package/build/experiments.js.map +1 -0
  191. package/build/experiments.native.js +40 -0
  192. package/build/experiments.native.js.map +1 -0
  193. package/build/hooks/anchor.js +2 -1
  194. package/build/hooks/anchor.js.map +1 -1
  195. package/build/hooks/border.js +1 -1
  196. package/build/hooks/border.js.map +1 -1
  197. package/build/hooks/child-layout.js +5 -1
  198. package/build/hooks/child-layout.js.map +1 -1
  199. package/build/hooks/color-panel.js +1 -1
  200. package/build/hooks/color-panel.js.map +1 -1
  201. package/build/hooks/color.js +3 -3
  202. package/build/hooks/color.js.map +1 -1
  203. package/build/hooks/custom-class-name.js +2 -1
  204. package/build/hooks/custom-class-name.js.map +1 -1
  205. package/build/hooks/dimensions.js +7 -5
  206. package/build/hooks/dimensions.js.map +1 -1
  207. package/build/hooks/margin.js +1 -0
  208. package/build/hooks/margin.js.map +1 -1
  209. package/build/hooks/padding.js +1 -0
  210. package/build/hooks/padding.js.map +1 -1
  211. package/build/hooks/position.js +39 -17
  212. package/build/hooks/position.js.map +1 -1
  213. package/build/hooks/typography.js +1 -1
  214. package/build/hooks/typography.js.map +1 -1
  215. package/build/hooks/use-color-props.js +3 -3
  216. package/build/hooks/use-color-props.js.map +1 -1
  217. package/build/hooks/utils.js +69 -3
  218. package/build/hooks/utils.js.map +1 -1
  219. package/build/index.js +10 -1
  220. package/build/index.js.map +1 -1
  221. package/build/layouts/constrained.js +3 -0
  222. package/build/layouts/constrained.js.map +1 -1
  223. package/build/layouts/flex.js +59 -9
  224. package/build/layouts/flex.js.map +1 -1
  225. package/build/layouts/flow.js +0 -18
  226. package/build/layouts/flow.js.map +1 -1
  227. package/build/store/actions.js +3 -30
  228. package/build/store/actions.js.map +1 -1
  229. package/build/store/defaults.js +5 -2
  230. package/build/store/defaults.js.map +1 -1
  231. package/build/store/index.js +11 -2
  232. package/build/store/index.js.map +1 -1
  233. package/build/store/private-actions.js +78 -0
  234. package/build/store/private-actions.js.map +1 -0
  235. package/build/store/private-selectors.js +32 -0
  236. package/build/store/private-selectors.js.map +1 -0
  237. package/build/store/reducer.js +1 -1
  238. package/build/store/reducer.js.map +1 -1
  239. package/build/store/selectors.js +60 -48
  240. package/build/store/selectors.js.map +1 -1
  241. package/build/utils/block-variation-transforms.js +1 -1
  242. package/build/utils/block-variation-transforms.js.map +1 -1
  243. package/build/utils/parse-css-unit-to-px.js +1 -1
  244. package/build/utils/parse-css-unit-to-px.js.map +1 -1
  245. package/build/utils/transform-styles/index.js +1 -7
  246. package/build/utils/transform-styles/index.js.map +1 -1
  247. package/build-module/components/alignment-control/ui.js +1 -1
  248. package/build-module/components/alignment-control/ui.js.map +1 -1
  249. package/build-module/components/autocomplete/index.js +2 -6
  250. package/build-module/components/autocomplete/index.js.map +1 -1
  251. package/build-module/components/block-actions/index.js +7 -2
  252. package/build-module/components/block-actions/index.js.map +1 -1
  253. package/build-module/components/block-alignment-matrix-control/index.js +2 -2
  254. package/build-module/components/block-alignment-matrix-control/index.js.map +1 -1
  255. package/build-module/components/block-card/index.js +2 -4
  256. package/build-module/components/block-card/index.js.map +1 -1
  257. package/build-module/components/block-edit/index.js +7 -0
  258. package/build-module/components/block-edit/index.js.map +1 -1
  259. package/build-module/components/block-inspector/index.js +15 -14
  260. package/build-module/components/block-inspector/index.js.map +1 -1
  261. package/build-module/components/block-list/use-in-between-inserter.js +5 -0
  262. package/build-module/components/block-list/use-in-between-inserter.js.map +1 -1
  263. package/build-module/components/block-lock/modal.js +0 -1
  264. package/build-module/components/block-lock/modal.js.map +1 -1
  265. package/build-module/components/block-mover/mover-description.js +2 -2
  266. package/build-module/components/block-mover/mover-description.js.map +1 -1
  267. package/build-module/components/block-navigation/dropdown.js +3 -1
  268. package/build-module/components/block-navigation/dropdown.js.map +1 -1
  269. package/build-module/components/block-pattern-setup/index.js +1 -1
  270. package/build-module/components/block-pattern-setup/index.js.map +1 -1
  271. package/build-module/components/block-pattern-setup/use-patterns-setup.js +2 -2
  272. package/build-module/components/block-pattern-setup/use-patterns-setup.js.map +1 -1
  273. package/build-module/components/block-patterns-list/index.js +32 -3
  274. package/build-module/components/block-patterns-list/index.js.map +1 -1
  275. package/build-module/components/block-preview/auto.js +9 -11
  276. package/build-module/components/block-preview/auto.js.map +1 -1
  277. package/build-module/components/block-preview/index.js +31 -8
  278. package/build-module/components/block-preview/index.js.map +1 -1
  279. package/build-module/components/block-selection-clearer/index.js +1 -1
  280. package/build-module/components/block-selection-clearer/index.js.map +1 -1
  281. package/build-module/components/block-settings/container.native.js +6 -30
  282. package/build-module/components/block-settings/container.native.js.map +1 -1
  283. package/build-module/components/block-settings-menu/block-settings-dropdown.js +12 -6
  284. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  285. package/build-module/components/block-settings-menu-controls/index.js +2 -7
  286. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  287. package/build-module/components/block-switcher/utils.js +1 -1
  288. package/build-module/components/block-switcher/utils.js.map +1 -1
  289. package/build-module/components/block-tools/selected-block-popover.js +55 -48
  290. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  291. package/build-module/components/block-vertical-alignment-control/icons.js +12 -0
  292. package/build-module/components/block-vertical-alignment-control/icons.js.map +1 -1
  293. package/build-module/components/block-vertical-alignment-control/ui.js +10 -5
  294. package/build-module/components/block-vertical-alignment-control/ui.js.map +1 -1
  295. package/build-module/components/color-style-selector/index.js +3 -1
  296. package/build-module/components/color-style-selector/index.js.map +1 -1
  297. package/build-module/components/date-format-picker/index.js +4 -5
  298. package/build-module/components/date-format-picker/index.js.map +1 -1
  299. package/build-module/components/font-family/index.js +1 -6
  300. package/build-module/components/font-family/index.js.map +1 -1
  301. package/build-module/components/font-sizes/fluid-utils.js +1 -1
  302. package/build-module/components/font-sizes/fluid-utils.js.map +1 -1
  303. package/build-module/components/font-sizes/utils.js +1 -1
  304. package/build-module/components/font-sizes/utils.js.map +1 -1
  305. package/build-module/components/global-styles/context.js +12 -0
  306. package/build-module/components/global-styles/context.js.map +1 -0
  307. package/build-module/components/global-styles/hooks.js +121 -0
  308. package/build-module/components/global-styles/hooks.js.map +1 -0
  309. package/build-module/components/global-styles/index.js +4 -0
  310. package/build-module/components/global-styles/index.js.map +1 -0
  311. package/build-module/components/global-styles/typography-utils.js +84 -0
  312. package/build-module/components/global-styles/typography-utils.js.map +1 -0
  313. package/build-module/components/global-styles/use-global-styles-output.js +930 -0
  314. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -0
  315. package/build-module/components/global-styles/utils.js +321 -0
  316. package/build-module/components/global-styles/utils.js.map +1 -0
  317. package/build-module/components/height-control/index.js +14 -1
  318. package/build-module/components/height-control/index.js.map +1 -1
  319. package/build-module/components/iframe/index.js +6 -4
  320. package/build-module/components/iframe/index.js.map +1 -1
  321. package/build-module/components/image-editor/constants.js +1 -1
  322. package/build-module/components/image-editor/constants.js.map +1 -1
  323. package/build-module/components/image-editor/context.js +1 -2
  324. package/build-module/components/image-editor/context.js.map +1 -1
  325. package/build-module/components/image-editor/cropper.js +3 -1
  326. package/build-module/components/image-editor/cropper.js.map +1 -1
  327. package/build-module/components/image-editor/index.js +13 -3
  328. package/build-module/components/image-editor/index.js.map +1 -1
  329. package/build-module/components/image-editor/use-transform-image.js +12 -37
  330. package/build-module/components/image-editor/use-transform-image.js.map +1 -1
  331. package/build-module/components/image-size-control/index.js +1 -6
  332. package/build-module/components/image-size-control/index.js.map +1 -1
  333. package/build-module/components/index.js +2 -3
  334. package/build-module/components/index.js.map +1 -1
  335. package/build-module/components/inner-blocks/index.js +21 -32
  336. package/build-module/components/inner-blocks/index.js.map +1 -1
  337. package/build-module/components/inner-blocks/index.native.js +9 -22
  338. package/build-module/components/inner-blocks/index.native.js.map +1 -1
  339. package/build-module/components/inner-blocks/use-block-context.js +43 -0
  340. package/build-module/components/inner-blocks/use-block-context.js.map +1 -0
  341. package/build-module/components/inserter/block-patterns-explorer/explorer.js +0 -1
  342. package/build-module/components/inserter/block-patterns-explorer/explorer.js.map +1 -1
  343. package/build-module/components/inserter/block-patterns-tab.js +9 -2
  344. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  345. package/build-module/components/inserter/block-types-tab.js +3 -3
  346. package/build-module/components/inserter/block-types-tab.js.map +1 -1
  347. package/build-module/components/inserter/hooks/use-patterns-state.js +1 -6
  348. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  349. package/build-module/components/inserter/index.js +5 -4
  350. package/build-module/components/inserter/index.js.map +1 -1
  351. package/build-module/components/inserter/media-tab/hooks.js +145 -56
  352. package/build-module/components/inserter/media-tab/hooks.js.map +1 -1
  353. package/build-module/components/inserter/media-tab/media-list.js +74 -24
  354. package/build-module/components/inserter/media-tab/media-list.js.map +1 -1
  355. package/build-module/components/inserter/media-tab/media-panel.js +14 -14
  356. package/build-module/components/inserter/media-tab/media-panel.js.map +1 -1
  357. package/build-module/components/inserter/media-tab/media-tab.js +7 -4
  358. package/build-module/components/inserter/media-tab/media-tab.js.map +1 -1
  359. package/build-module/components/inserter/media-tab/utils.js +27 -15
  360. package/build-module/components/inserter/media-tab/utils.js.map +1 -1
  361. package/build-module/components/inserter/menu.js +4 -0
  362. package/build-module/components/inserter/menu.js.map +1 -1
  363. package/build-module/components/inserter/preview-panel.js +5 -3
  364. package/build-module/components/inserter/preview-panel.js.map +1 -1
  365. package/build-module/components/inserter/search-results.js +2 -6
  366. package/build-module/components/inserter/search-results.js.map +1 -1
  367. package/build-module/components/inserter-list-item/index.js +1 -9
  368. package/build-module/components/inserter-list-item/index.js.map +1 -1
  369. package/build-module/components/inspector-controls/fill.js +14 -2
  370. package/build-module/components/inspector-controls/fill.js.map +1 -1
  371. package/build-module/components/inspector-controls/fill.native.js +13 -1
  372. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  373. package/build-module/components/inspector-controls/groups.js +4 -0
  374. package/build-module/components/inspector-controls/groups.js.map +1 -1
  375. package/build-module/components/inspector-controls/index.js +2 -2
  376. package/build-module/components/inspector-controls/index.js.map +1 -1
  377. package/build-module/components/inspector-controls/slot.js +13 -1
  378. package/build-module/components/inspector-controls/slot.js.map +1 -1
  379. package/build-module/components/inspector-controls/slot.native.js +13 -1
  380. package/build-module/components/inspector-controls/slot.native.js.map +1 -1
  381. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.js +1 -1
  382. package/build-module/components/inspector-controls-tabs/advanced-controls-panel.js.map +1 -1
  383. package/build-module/components/inspector-controls-tabs/index.js +2 -2
  384. package/build-module/components/inspector-controls-tabs/index.js.map +1 -1
  385. package/build-module/components/inspector-controls-tabs/position-controls-panel.js +1 -1
  386. package/build-module/components/inspector-controls-tabs/position-controls-panel.js.map +1 -1
  387. package/build-module/components/inspector-controls-tabs/styles-tab.js +6 -4
  388. package/build-module/components/inspector-controls-tabs/styles-tab.js.map +1 -1
  389. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js +17 -12
  390. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +1 -1
  391. package/build-module/components/justify-content-control/ui.js +9 -2
  392. package/build-module/components/justify-content-control/ui.js.map +1 -1
  393. package/build-module/components/link-control/index.js +45 -16
  394. package/build-module/components/link-control/index.js.map +1 -1
  395. package/build-module/components/list-view/block.js +1 -1
  396. package/build-module/components/list-view/block.js.map +1 -1
  397. package/build-module/components/list-view/use-list-view-drop-zone.js +1 -1
  398. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  399. package/build-module/components/media-upload/index.native.js +4 -1
  400. package/build-module/components/media-upload/index.native.js.map +1 -1
  401. package/build-module/components/off-canvas-editor/appender.js +47 -4
  402. package/build-module/components/off-canvas-editor/appender.js.map +1 -1
  403. package/build-module/components/off-canvas-editor/block-contents.js +2 -1
  404. package/build-module/components/off-canvas-editor/block-contents.js.map +1 -1
  405. package/build-module/components/off-canvas-editor/block-select-button.js +9 -4
  406. package/build-module/components/off-canvas-editor/block-select-button.js.map +1 -1
  407. package/build-module/components/off-canvas-editor/block.js +6 -25
  408. package/build-module/components/off-canvas-editor/block.js.map +1 -1
  409. package/build-module/components/off-canvas-editor/branch.js +23 -11
  410. package/build-module/components/off-canvas-editor/branch.js.map +1 -1
  411. package/build-module/components/off-canvas-editor/index.js +27 -19
  412. package/build-module/components/off-canvas-editor/index.js.map +1 -1
  413. package/build-module/components/off-canvas-editor/link-ui.js +2 -2
  414. package/build-module/components/off-canvas-editor/link-ui.js.map +1 -1
  415. package/build-module/components/off-canvas-editor/use-list-view-drop-zone.js +1 -1
  416. package/build-module/components/off-canvas-editor/use-list-view-drop-zone.js.map +1 -1
  417. package/build-module/components/provider/index.js +16 -9
  418. package/build-module/components/provider/index.js.map +1 -1
  419. package/build-module/components/provider/index.native.js +4 -4
  420. package/build-module/components/provider/index.native.js.map +1 -1
  421. package/build-module/components/rich-text/use-before-input-rules.js +10 -2
  422. package/build-module/components/rich-text/use-before-input-rules.js.map +1 -1
  423. package/build-module/components/rich-text/utils.js +1 -1
  424. package/build-module/components/rich-text/utils.js.map +1 -1
  425. package/build-module/components/spacing-sizes-control/utils.js +2 -7
  426. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  427. package/build-module/components/tool-selector/index.js +3 -1
  428. package/build-module/components/tool-selector/index.js.map +1 -1
  429. package/build-module/components/url-popover/image-url-input-ui.js +8 -8
  430. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  431. package/build-module/components/use-block-display-information/index.js +1 -1
  432. package/build-module/components/use-block-display-information/index.js.map +1 -1
  433. package/build-module/experiments.js +25 -0
  434. package/build-module/experiments.js.map +1 -0
  435. package/build-module/experiments.native.js +23 -0
  436. package/build-module/experiments.native.js.map +1 -0
  437. package/build-module/hooks/anchor.js +2 -1
  438. package/build-module/hooks/anchor.js.map +1 -1
  439. package/build-module/hooks/border.js +1 -1
  440. package/build-module/hooks/border.js.map +1 -1
  441. package/build-module/hooks/child-layout.js +5 -1
  442. package/build-module/hooks/child-layout.js.map +1 -1
  443. package/build-module/hooks/color-panel.js +1 -1
  444. package/build-module/hooks/color-panel.js.map +1 -1
  445. package/build-module/hooks/color.js +3 -3
  446. package/build-module/hooks/color.js.map +1 -1
  447. package/build-module/hooks/custom-class-name.js +2 -1
  448. package/build-module/hooks/custom-class-name.js.map +1 -1
  449. package/build-module/hooks/dimensions.js +6 -5
  450. package/build-module/hooks/dimensions.js.map +1 -1
  451. package/build-module/hooks/margin.js +1 -0
  452. package/build-module/hooks/margin.js.map +1 -1
  453. package/build-module/hooks/padding.js +1 -0
  454. package/build-module/hooks/padding.js.map +1 -1
  455. package/build-module/hooks/position.js +36 -16
  456. package/build-module/hooks/position.js.map +1 -1
  457. package/build-module/hooks/typography.js +1 -1
  458. package/build-module/hooks/typography.js.map +1 -1
  459. package/build-module/hooks/use-color-props.js +3 -3
  460. package/build-module/hooks/use-color-props.js.map +1 -1
  461. package/build-module/hooks/utils.js +70 -4
  462. package/build-module/hooks/utils.js.map +1 -1
  463. package/build-module/index.js +1 -0
  464. package/build-module/index.js.map +1 -1
  465. package/build-module/layouts/constrained.js +3 -0
  466. package/build-module/layouts/constrained.js.map +1 -1
  467. package/build-module/layouts/flex.js +60 -10
  468. package/build-module/layouts/flex.js.map +1 -1
  469. package/build-module/layouts/flow.js +0 -18
  470. package/build-module/layouts/flow.js.map +1 -1
  471. package/build-module/store/actions.js +2 -26
  472. package/build-module/store/actions.js.map +1 -1
  473. package/build-module/store/defaults.js +5 -2
  474. package/build-module/store/defaults.js.map +1 -1
  475. package/build-module/store/index.js +8 -2
  476. package/build-module/store/index.js.map +1 -1
  477. package/build-module/store/private-actions.js +66 -0
  478. package/build-module/store/private-actions.js.map +1 -0
  479. package/build-module/store/private-selectors.js +23 -0
  480. package/build-module/store/private-selectors.js.map +1 -0
  481. package/build-module/store/reducer.js +1 -1
  482. package/build-module/store/reducer.js.map +1 -1
  483. package/build-module/store/selectors.js +48 -37
  484. package/build-module/store/selectors.js.map +1 -1
  485. package/build-module/utils/block-variation-transforms.js +1 -1
  486. package/build-module/utils/block-variation-transforms.js.map +1 -1
  487. package/build-module/utils/parse-css-unit-to-px.js +1 -1
  488. package/build-module/utils/parse-css-unit-to-px.js.map +1 -1
  489. package/build-module/utils/transform-styles/index.js +1 -6
  490. package/build-module/utils/transform-styles/index.js.map +1 -1
  491. package/build-style/content-rtl.css +283 -3
  492. package/build-style/content.css +283 -3
  493. package/build-style/style-rtl.css +105 -221
  494. package/build-style/style.css +105 -221
  495. package/package.json +30 -29
  496. package/src/components/alignment-control/test/__snapshots__/index.js.snap +3 -3
  497. package/src/components/alignment-control/test/index.js +5 -15
  498. package/src/components/alignment-control/ui.js +1 -1
  499. package/src/components/autocomplete/index.js +3 -6
  500. package/src/components/block-actions/index.js +9 -0
  501. package/src/components/block-alignment-control/test/index.js +3 -11
  502. package/src/components/block-alignment-matrix-control/index.js +1 -2
  503. package/src/components/block-card/index.js +1 -4
  504. package/src/components/block-content-overlay/content.scss +4 -4
  505. package/src/components/block-edit/index.js +15 -1
  506. package/src/components/block-icon/content.scss +31 -0
  507. package/src/components/block-inspector/index.js +13 -17
  508. package/src/components/block-list/use-in-between-inserter.js +5 -0
  509. package/src/components/block-lock/modal.js +0 -1
  510. package/src/components/block-mover/mover-description.js +2 -2
  511. package/src/components/block-mover/stories/index.js +3 -3
  512. package/src/components/block-navigation/dropdown.js +1 -1
  513. package/src/components/block-pattern-setup/index.js +1 -4
  514. package/src/components/block-pattern-setup/use-patterns-setup.js +2 -5
  515. package/src/components/block-patterns-list/index.js +29 -3
  516. package/src/components/block-preview/README.md +9 -9
  517. package/src/components/block-preview/auto.js +9 -11
  518. package/src/components/block-preview/content.scss +23 -0
  519. package/src/components/block-preview/index.js +40 -10
  520. package/src/components/block-preview/style.scss +0 -23
  521. package/src/components/block-selection-clearer/index.js +1 -1
  522. package/src/components/block-selection-clearer/test/index.js +6 -6
  523. package/src/components/block-settings/container.native.js +7 -26
  524. package/src/components/block-settings-menu/block-settings-dropdown.js +13 -5
  525. package/src/components/block-settings-menu-controls/index.js +2 -10
  526. package/src/components/block-switcher/test/index.js +43 -44
  527. package/src/components/block-switcher/utils.js +1 -1
  528. package/src/components/block-tools/selected-block-popover.js +77 -80
  529. package/src/components/block-tools/style.scss +0 -1
  530. package/src/components/block-variation-picker/{style.scss → content.scss} +0 -0
  531. package/src/components/block-vertical-alignment-control/icons.js +12 -0
  532. package/src/components/block-vertical-alignment-control/test/index.js +3 -11
  533. package/src/components/block-vertical-alignment-control/ui.js +16 -6
  534. package/src/components/color-style-selector/index.js +1 -1
  535. package/src/components/colors/test/with-colors.js +2 -8
  536. package/src/components/date-format-picker/index.js +23 -24
  537. package/src/components/date-format-picker/style.scss +0 -6
  538. package/src/components/default-block-appender/content.scss +18 -0
  539. package/src/components/default-block-appender/test/index.js +2 -8
  540. package/src/components/font-family/index.js +1 -6
  541. package/src/components/font-sizes/fluid-utils.js +1 -1
  542. package/src/components/font-sizes/utils.js +1 -1
  543. package/src/components/global-styles/README.md +77 -0
  544. package/src/components/global-styles/context.js +15 -0
  545. package/src/components/global-styles/hooks.js +145 -0
  546. package/src/components/global-styles/index.js +7 -0
  547. package/src/components/global-styles/test/typography-utils.js +393 -0
  548. package/src/components/global-styles/test/use-global-styles-output.js +814 -0
  549. package/src/components/global-styles/test/utils.js +206 -0
  550. package/src/components/global-styles/typography-utils.js +87 -0
  551. package/src/components/global-styles/use-global-styles-output.js +1088 -0
  552. package/src/components/global-styles/utils.js +373 -0
  553. package/src/components/height-control/README.md +55 -0
  554. package/src/components/height-control/index.js +13 -1
  555. package/src/components/iframe/index.js +8 -2
  556. package/src/components/image-editor/constants.js +1 -1
  557. package/src/components/image-editor/context.js +5 -9
  558. package/src/components/image-editor/cropper.js +3 -1
  559. package/src/components/image-editor/index.js +13 -4
  560. package/src/components/image-editor/use-transform-image.js +14 -55
  561. package/src/components/image-size-control/index.js +1 -6
  562. package/src/components/index.js +2 -6
  563. package/src/components/inner-blocks/index.js +29 -33
  564. package/src/components/inner-blocks/index.native.js +27 -47
  565. package/src/components/inner-blocks/use-block-context.js +47 -0
  566. package/src/components/inserter/block-patterns-explorer/explorer.js +0 -1
  567. package/src/components/inserter/block-patterns-tab.js +9 -1
  568. package/src/components/inserter/block-types-tab.js +3 -4
  569. package/src/components/inserter/hooks/use-patterns-state.js +1 -6
  570. package/src/components/inserter/index.js +3 -4
  571. package/src/components/inserter/media-tab/hooks.js +167 -65
  572. package/src/components/inserter/media-tab/media-list.js +94 -26
  573. package/src/components/inserter/media-tab/media-panel.js +9 -20
  574. package/src/components/inserter/media-tab/media-tab.js +12 -4
  575. package/src/components/inserter/media-tab/utils.js +20 -10
  576. package/src/components/inserter/menu.js +8 -0
  577. package/src/components/inserter/preview-panel.js +4 -2
  578. package/src/components/inserter/search-results.js +2 -6
  579. package/src/components/inserter/stories/index.js +9 -9
  580. package/src/components/inserter/style.scss +58 -11
  581. package/src/components/inserter-list-item/index.js +0 -7
  582. package/src/components/inspector-controls/README.md +3 -7
  583. package/src/components/inspector-controls/fill.js +15 -1
  584. package/src/components/inspector-controls/fill.native.js +14 -1
  585. package/src/components/inspector-controls/groups.js +3 -0
  586. package/src/components/inspector-controls/index.js +2 -6
  587. package/src/components/inspector-controls/slot.js +14 -1
  588. package/src/components/inspector-controls/slot.native.js +14 -1
  589. package/src/components/inspector-controls-tabs/advanced-controls-panel.js +1 -1
  590. package/src/components/inspector-controls-tabs/index.js +2 -4
  591. package/src/components/inspector-controls-tabs/position-controls-panel.js +1 -1
  592. package/src/components/inspector-controls-tabs/styles-tab.js +5 -7
  593. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +21 -10
  594. package/src/components/justify-content-control/ui.js +9 -0
  595. package/src/components/link-control/index.js +59 -23
  596. package/src/components/link-control/style.scss +7 -24
  597. package/src/components/link-control/test/index.js +134 -5
  598. package/src/components/list-view/block.js +1 -1
  599. package/src/components/list-view/use-list-view-drop-zone.js +1 -1
  600. package/src/components/media-replace-flow/test/index.js +4 -12
  601. package/src/components/media-upload/index.native.js +2 -2
  602. package/src/components/off-canvas-editor/README.md +2 -2
  603. package/src/components/off-canvas-editor/appender.js +93 -37
  604. package/src/components/off-canvas-editor/block-contents.js +2 -1
  605. package/src/components/off-canvas-editor/block-select-button.js +12 -1
  606. package/src/components/off-canvas-editor/block.js +3 -42
  607. package/src/components/off-canvas-editor/branch.js +32 -5
  608. package/src/components/off-canvas-editor/index.js +20 -20
  609. package/src/components/off-canvas-editor/link-ui.js +2 -2
  610. package/src/components/off-canvas-editor/style.scss +5 -1
  611. package/src/components/off-canvas-editor/use-list-view-drop-zone.js +1 -1
  612. package/src/components/provider/index.js +33 -14
  613. package/src/components/provider/index.native.js +4 -3
  614. package/src/components/provider/test/experimental-provider.js +94 -0
  615. package/src/components/provider/test/use-block-sync.js +10 -0
  616. package/src/components/responsive-block-control/test/index.js +1 -5
  617. package/src/components/rich-text/use-before-input-rules.js +10 -2
  618. package/src/components/rich-text/utils.js +1 -1
  619. package/src/components/spacing-sizes-control/utils.js +2 -7
  620. package/src/components/tool-selector/index.js +1 -1
  621. package/src/components/url-input/test/button.js +24 -24
  622. package/src/components/url-popover/image-url-input-ui.js +7 -8
  623. package/src/components/url-popover/style.scss +0 -10
  624. package/src/components/use-block-display-information/index.js +1 -1
  625. package/src/components/warning/{style.scss → content.scss} +0 -0
  626. package/src/components/warning/test/index.js +1 -5
  627. package/src/content.scss +7 -0
  628. package/src/experiments.js +27 -0
  629. package/src/experiments.native.js +25 -0
  630. package/src/hooks/anchor.js +2 -1
  631. package/src/hooks/border.js +1 -1
  632. package/src/hooks/child-layout.js +6 -1
  633. package/src/hooks/color-panel.js +1 -1
  634. package/src/hooks/color.js +3 -3
  635. package/src/hooks/custom-class-name.js +2 -1
  636. package/src/hooks/dimensions.js +6 -6
  637. package/src/hooks/layout.scss +4 -0
  638. package/src/hooks/margin.js +1 -0
  639. package/src/hooks/padding.js +1 -0
  640. package/src/hooks/position.js +56 -36
  641. package/src/hooks/test/align.native.js +1 -1
  642. package/src/hooks/test/utils.js +104 -0
  643. package/src/hooks/typography.js +1 -1
  644. package/src/hooks/use-color-props.js +3 -3
  645. package/src/hooks/utils.js +68 -2
  646. package/src/index.js +1 -0
  647. package/src/layouts/constrained.js +3 -0
  648. package/src/layouts/flex.js +66 -14
  649. package/src/layouts/flow.js +0 -9
  650. package/src/store/actions.js +2 -26
  651. package/src/store/defaults.js +7 -2
  652. package/src/store/index.js +8 -2
  653. package/src/store/private-actions.js +65 -0
  654. package/src/store/private-selectors.js +20 -0
  655. package/src/store/reducer.js +1 -1
  656. package/src/store/selectors.js +103 -62
  657. package/src/store/test/actions.js +0 -18
  658. package/src/store/test/private-actions.js +22 -0
  659. package/src/store/test/private-selectors.js +52 -0
  660. package/src/store/test/selectors.js +52 -54
  661. package/src/style.scss +3 -5
  662. package/src/utils/block-variation-transforms.js +1 -1
  663. package/src/utils/parse-css-unit-to-px.js +3 -1
  664. package/src/utils/test/parse-css-unit-to-px.js +16 -24
  665. package/src/utils/transform-styles/index.js +1 -6
  666. package/build/components/inner-blocks/get-block-context.js +0 -45
  667. package/build/components/inner-blocks/get-block-context.js.map +0 -1
  668. package/build/components/off-canvas-editor/block-edit-button.js +0 -50
  669. package/build/components/off-canvas-editor/block-edit-button.js.map +0 -1
  670. package/build-module/components/inner-blocks/get-block-context.js +0 -37
  671. package/build-module/components/inner-blocks/get-block-context.js.map +0 -1
  672. package/build-module/components/off-canvas-editor/block-edit-button.js +0 -35
  673. package/build-module/components/off-canvas-editor/block-edit-button.js.map +0 -1
  674. package/src/components/inner-blocks/get-block-context.js +0 -39
  675. package/src/components/off-canvas-editor/block-edit-button.js +0 -27
@@ -7,7 +7,6 @@ import classnames from 'classnames';
7
7
  * WordPress dependencies
8
8
  */
9
9
  import { Button, Spinner, Notice, TextControl } from '@wordpress/components';
10
- import { keyboardReturn } from '@wordpress/icons';
11
10
  import { __ } from '@wordpress/i18n';
12
11
  import { useRef, useState, useEffect } from '@wordpress/element';
13
12
  import { focus } from '@wordpress/dom';
@@ -113,6 +112,7 @@ function LinkControl( {
113
112
  settings = DEFAULT_LINK_SETTINGS,
114
113
  onChange = noop,
115
114
  onRemove,
115
+ onCancel,
116
116
  noDirectEntry = false,
117
117
  showSuggestions = true,
118
118
  showInitialSuggestions,
@@ -190,6 +190,8 @@ function LinkControl( {
190
190
  isEndingEditWithFocus.current = false;
191
191
  }, [ isEditingLink, isCreatingPage ] );
192
192
 
193
+ const hasLinkValue = value?.url?.trim()?.length > 0;
194
+
193
195
  /**
194
196
  * Cancels editing state and marks that focus may need to be restored after
195
197
  * the next render, if focus was within the wrapper when editing finished.
@@ -235,6 +237,29 @@ function LinkControl( {
235
237
  }
236
238
  };
237
239
 
240
+ const resetInternalValues = () => {
241
+ setInternalUrlInputValue( value?.url );
242
+ setInternalTextInputValue( value?.title );
243
+ };
244
+
245
+ const handleCancel = ( event ) => {
246
+ event.preventDefault();
247
+ event.stopPropagation();
248
+
249
+ // Ensure that any unsubmitted input changes are reset.
250
+ resetInternalValues();
251
+
252
+ if ( hasLinkValue ) {
253
+ // If there is a link then exist editing mode and show preview.
254
+ stopEditing();
255
+ } else {
256
+ // If there is no link value, then remove the link entirely.
257
+ onRemove?.();
258
+ }
259
+
260
+ onCancel?.();
261
+ };
262
+
238
263
  const currentUrlInputValue = propInputValue || internalUrlInputValue;
239
264
 
240
265
  const currentInputIsEmpty = ! currentUrlInputValue?.trim()?.length;
@@ -247,8 +272,9 @@ function LinkControl( {
247
272
  // Only show text control once a URL value has been committed
248
273
  // and it isn't just empty whitespace.
249
274
  // See https://github.com/WordPress/gutenberg/pull/33849/#issuecomment-932194927.
250
- const showTextControl = value?.url?.trim()?.length > 0 && hasTextControl;
275
+ const showTextControl = hasLinkValue && hasTextControl;
251
276
 
277
+ const isEditing = ( isEditingLink || ! value ) && ! isCreatingPage;
252
278
  return (
253
279
  <div
254
280
  tabIndex={ -1 }
@@ -261,7 +287,7 @@ function LinkControl( {
261
287
  </div>
262
288
  ) }
263
289
 
264
- { ( isEditingLink || ! value ) && ! isCreatingPage && (
290
+ { isEditing && (
265
291
  <>
266
292
  <div
267
293
  className={ classnames( {
@@ -271,6 +297,7 @@ function LinkControl( {
271
297
  >
272
298
  { showTextControl && (
273
299
  <TextControl
300
+ __nextHasNoMarginBottom
274
301
  ref={ textInputRef }
275
302
  className="block-editor-link-control__field block-editor-link-control__text-content"
276
303
  label="Text"
@@ -298,17 +325,7 @@ function LinkControl( {
298
325
  createSuggestionButtonText
299
326
  }
300
327
  useLabel={ showTextControl }
301
- >
302
- <div className="block-editor-link-control__search-actions">
303
- <Button
304
- onClick={ handleSubmit }
305
- label={ __( 'Submit' ) }
306
- icon={ keyboardReturn }
307
- className="block-editor-link-control__search-submit"
308
- disabled={ currentInputIsEmpty } // Disallow submitting empty values.
309
- />
310
- </div>
311
- </LinkControlSearchInput>
328
+ />
312
329
  </div>
313
330
  { errorMessage && (
314
331
  <Notice
@@ -333,15 +350,34 @@ function LinkControl( {
333
350
  />
334
351
  ) }
335
352
 
336
- { showSettingsDrawer && (
337
- <div className="block-editor-link-control__tools">
338
- <LinkControlSettingsDrawer
339
- value={ value }
340
- settings={ settings }
341
- onChange={ onChange }
342
- />
343
- </div>
344
- ) }
353
+ <div className="block-editor-link-control__drawer">
354
+ { showSettingsDrawer && (
355
+ <div className="block-editor-link-control__tools">
356
+ <LinkControlSettingsDrawer
357
+ value={ value }
358
+ settings={ settings }
359
+ onChange={ onChange }
360
+ />
361
+ </div>
362
+ ) }
363
+
364
+ { isEditing && (
365
+ <div className="block-editor-link-control__search-actions">
366
+ <Button
367
+ variant="primary"
368
+ onClick={ handleSubmit }
369
+ className="xblock-editor-link-control__search-submit"
370
+ disabled={ currentInputIsEmpty } // Disallow submitting empty values.
371
+ >
372
+ { __( 'Apply' ) }
373
+ </Button>
374
+ <Button variant="tertiary" onClick={ handleCancel }>
375
+ { __( 'Cancel' ) }
376
+ </Button>
377
+ </div>
378
+ ) }
379
+ </div>
380
+
345
381
  { renderControlBottom && renderControlBottom() }
346
382
  </div>
347
383
  );
@@ -49,7 +49,6 @@ $preview-image-height: 140px;
49
49
  > .components-base-control__field {
50
50
  display: flex;
51
51
  align-items: center;
52
- margin: 0;
53
52
  }
54
53
 
55
54
  .components-base-control__label {
@@ -65,7 +64,6 @@ $preview-image-height: 140px;
65
64
  width: calc(100% - #{$grid-unit-20 * 2});
66
65
  display: block;
67
66
  padding: 11px $grid-unit-20;
68
- padding-right: ( $button-size * $block-editor-link-control-number-of-actions ); // width of reset and submit buttons
69
67
  margin: 0;
70
68
  position: relative;
71
69
  border: 1px solid $gray-300;
@@ -78,20 +76,10 @@ $preview-image-height: 140px;
78
76
  }
79
77
 
80
78
  .block-editor-link-control__search-actions {
81
- position: absolute;
82
- /*
83
- * Actions must be positioned on top of URLInput, since the input will grow
84
- * when suggestions are rendered.
85
- *
86
- * Compensate for:
87
- * - Border (1px)
88
- * - Vertically, for the difference in height between the input (40px) and
89
- * the icon buttons.
90
- * - Horizontally, pad to the minimum of: default input padding, or the
91
- * equivalent of the vertical padding.
92
- */
93
- top: 1px + ( ( 40px - $button-size ) * 0.5 );
94
- right: $grid-unit-20 + 1px + min($grid-unit-10, ( 40px - $button-size ) * 0.5);
79
+ display: flex;
80
+ flex-direction: row-reverse; // put "Cancel" on the left but retain DOM order.
81
+ justify-content: flex-start;
82
+ gap: $grid-unit-10;
95
83
  }
96
84
 
97
85
  .components-button .block-editor-link-control__search-submit .has-icon {
@@ -438,9 +426,10 @@ $preview-image-height: 140px;
438
426
  padding: 10px;
439
427
  }
440
428
 
441
- .block-editor-link-control__tools {
429
+ .block-editor-link-control__drawer {
442
430
  display: flex;
443
431
  align-items: center;
432
+ justify-content: space-between;
444
433
  border-top: $border-width solid $gray-300;
445
434
  margin: 0;
446
435
  padding: $grid-unit-20;
@@ -480,14 +469,8 @@ $preview-image-height: 140px;
480
469
  position: absolute;
481
470
  left: auto;
482
471
  bottom: auto;
483
- /*
484
- * Position spinner to the left of the actions.
485
- *
486
- * Compensate for:
487
- * - Input padding right ($button-size)
488
- */
489
472
  top: calc(50% - #{$spinner-size} / 2);
490
- right: $button-size;
473
+ right: $grid-unit-20;
491
474
  }
492
475
  }
493
476
 
@@ -537,7 +537,7 @@ describe( 'Manual link entry', () => {
537
537
  } );
538
538
 
539
539
  let submitButton = screen.getByRole( 'button', {
540
- name: 'Submit',
540
+ name: 'Apply',
541
541
  } );
542
542
 
543
543
  expect( submitButton ).toBeDisabled();
@@ -555,7 +555,7 @@ describe( 'Manual link entry', () => {
555
555
  await user.keyboard( '[Enter]' );
556
556
 
557
557
  submitButton = screen.getByRole( 'button', {
558
- name: 'Submit',
558
+ name: 'Apply',
559
559
  } );
560
560
 
561
561
  // Verify the UI hasn't allowed submission.
@@ -578,7 +578,7 @@ describe( 'Manual link entry', () => {
578
578
  } );
579
579
 
580
580
  let submitButton = screen.queryByRole( 'button', {
581
- name: 'Submit',
581
+ name: 'Apply',
582
582
  } );
583
583
 
584
584
  expect( submitButton ).toBeDisabled();
@@ -597,7 +597,7 @@ describe( 'Manual link entry', () => {
597
597
  await user.click( submitButton );
598
598
 
599
599
  submitButton = screen.queryByRole( 'button', {
600
- name: 'Submit',
600
+ name: 'Apply',
601
601
  } );
602
602
 
603
603
  // Verify the UI hasn't allowed submission.
@@ -608,6 +608,135 @@ describe( 'Manual link entry', () => {
608
608
  );
609
609
  } );
610
610
 
611
+ describe( 'Handling cancellation', () => {
612
+ it( 'should allow cancellation of the link creation process and reset any entered values', async () => {
613
+ const user = userEvent.setup();
614
+ const mockOnRemove = jest.fn();
615
+ const mockOnCancel = jest.fn();
616
+
617
+ render( <LinkControl onRemove={ mockOnRemove } /> );
618
+
619
+ // Search Input UI.
620
+ const searchInput = screen.getByRole( 'combobox', {
621
+ name: 'URL',
622
+ } );
623
+
624
+ const cancelButton = screen.queryByRole( 'button', {
625
+ name: 'Cancel',
626
+ } );
627
+
628
+ expect( cancelButton ).toBeEnabled();
629
+ expect( cancelButton ).toBeVisible();
630
+
631
+ // Simulate adding a link for a term.
632
+ await user.type( searchInput, 'https://www.wordpress.org' );
633
+
634
+ // Attempt to submit the empty search value in the input.
635
+ await user.click( cancelButton );
636
+
637
+ // Verify the consumer can handle the cancellation.
638
+ expect( mockOnRemove ).toHaveBeenCalled();
639
+
640
+ // Ensure optional callback is not called.
641
+ expect( mockOnCancel ).not.toHaveBeenCalled();
642
+
643
+ expect( searchInput ).toHaveValue( '' );
644
+ } );
645
+
646
+ it( 'should allow cancellation of the link editing process and reset any entered values', async () => {
647
+ const user = userEvent.setup();
648
+ const initialLink = fauxEntitySuggestions[ 0 ];
649
+
650
+ const LinkControlConsumer = () => {
651
+ const [ link, setLink ] = useState( initialLink );
652
+
653
+ return (
654
+ <LinkControl
655
+ value={ link }
656
+ onChange={ ( suggestion ) => {
657
+ setLink( suggestion );
658
+ } }
659
+ hasTextControl
660
+ />
661
+ );
662
+ };
663
+
664
+ render( <LinkControlConsumer /> );
665
+
666
+ let linkPreview = screen.getByLabelText( 'Currently selected' );
667
+
668
+ expect( linkPreview ).toBeInTheDocument();
669
+
670
+ // Click the "Edit" button to trigger into the editing mode.
671
+ let editButton = screen.queryByRole( 'button', {
672
+ name: 'Edit',
673
+ } );
674
+
675
+ await user.click( editButton );
676
+
677
+ let searchInput = screen.getByRole( 'combobox', {
678
+ name: 'URL',
679
+ } );
680
+
681
+ let textInput = screen.getByRole( 'textbox', {
682
+ name: 'Text',
683
+ } );
684
+
685
+ // Make a change to the search input.
686
+ await user.type( searchInput, 'This URL value was changed!' );
687
+
688
+ // Make a change to the text input.
689
+ await user.type( textInput, 'This text value was changed!' );
690
+
691
+ const cancelButton = screen.queryByRole( 'button', {
692
+ name: 'Cancel',
693
+ } );
694
+
695
+ // Cancel the editing process.
696
+ await user.click( cancelButton );
697
+
698
+ linkPreview = screen.getByLabelText( 'Currently selected' );
699
+
700
+ expect( linkPreview ).toBeInTheDocument();
701
+
702
+ // Re-query the edit button as it's been replaced.
703
+ editButton = screen.queryByRole( 'button', {
704
+ name: 'Edit',
705
+ } );
706
+
707
+ await user.click( editButton );
708
+
709
+ // Re-query the inputs as they have been replaced.
710
+ searchInput = screen.getByRole( 'combobox', {
711
+ name: 'URL',
712
+ } );
713
+
714
+ textInput = screen.getByRole( 'textbox', {
715
+ name: 'Text',
716
+ } );
717
+
718
+ // Expect to see the original link values and **not** the changed values.
719
+ expect( searchInput ).toHaveValue( initialLink.url );
720
+ expect( textInput ).toHaveValue( initialLink.text );
721
+ } );
722
+
723
+ it( 'should call onCancel callback when cancelling if provided', async () => {
724
+ const user = userEvent.setup();
725
+ const mockOnCancel = jest.fn();
726
+
727
+ render( <LinkControl onCancel={ mockOnCancel } /> );
728
+
729
+ const cancelButton = screen.queryByRole( 'button', {
730
+ name: 'Cancel',
731
+ } );
732
+
733
+ await user.click( cancelButton );
734
+
735
+ // Verify the consumer can handle the cancellation.
736
+ expect( mockOnCancel ).toHaveBeenCalled();
737
+ } );
738
+ } );
739
+
611
740
  describe( 'Alternative link protocols and formats', () => {
612
741
  it.each( [
613
742
  [ 'mailto:example123456@wordpress.org', 'mailto' ],
@@ -1859,7 +1988,7 @@ describe( 'Controlling link title text', () => {
1859
1988
  expect( textInput ).toHaveValue( textValue );
1860
1989
 
1861
1990
  const submitButton = screen.queryByRole( 'button', {
1862
- name: 'Submit',
1991
+ name: 'Apply',
1863
1992
  } );
1864
1993
 
1865
1994
  await user.click( submitButton );
@@ -209,7 +209,7 @@ function ListViewBlock( {
209
209
  'is-synced-branch': isSyncedBranch,
210
210
  'is-dragging': isDragged,
211
211
  'has-single-cell': ! showBlockActions,
212
- 'is-synced': blockInformation.isSynced,
212
+ 'is-synced': blockInformation?.isSynced,
213
213
  } );
214
214
 
215
215
  // Only include all selected blocks if the currently clicked on block
@@ -76,7 +76,7 @@ const ALLOWED_DROP_EDGES = [ 'top', 'bottom' ];
76
76
  * @param {WPListViewDropZoneBlocks} blocksData Data about the blocks in list view.
77
77
  * @param {WPPoint} position The point representing the cursor position when dragging.
78
78
  *
79
- * @return {WPListViewDropZoneTarget} An object containing data about the drop target.
79
+ * @return {WPListViewDropZoneTarget | undefined} An object containing data about the drop target.
80
80
  */
81
81
  function getListViewDropTarget( blocksData, position ) {
82
82
  let candidateEdge;
@@ -14,8 +14,6 @@ import { useState } from '@wordpress/element';
14
14
  */
15
15
  import MediaReplaceFlow from '../';
16
16
 
17
- jest.useFakeTimers();
18
-
19
17
  const noop = () => {};
20
18
 
21
19
  function TestWrapper() {
@@ -57,9 +55,7 @@ describe( 'General media replace flow', () => {
57
55
  } );
58
56
 
59
57
  it( 'renders replace menu', async () => {
60
- const user = userEvent.setup( {
61
- advanceTimers: jest.advanceTimersByTime,
62
- } );
58
+ const user = userEvent.setup();
63
59
 
64
60
  render( <TestWrapper /> );
65
61
 
@@ -81,9 +77,7 @@ describe( 'General media replace flow', () => {
81
77
  } );
82
78
 
83
79
  it( 'displays media URL', async () => {
84
- const user = userEvent.setup( {
85
- advanceTimers: jest.advanceTimersByTime,
86
- } );
80
+ const user = userEvent.setup();
87
81
 
88
82
  render( <TestWrapper /> );
89
83
 
@@ -106,9 +100,7 @@ describe( 'General media replace flow', () => {
106
100
  } );
107
101
 
108
102
  it( 'edits media URL', async () => {
109
- const user = userEvent.setup( {
110
- advanceTimers: jest.advanceTimersByTime,
111
- } );
103
+ const user = userEvent.setup();
112
104
 
113
105
  render( <TestWrapper /> );
114
106
 
@@ -145,7 +137,7 @@ describe( 'General media replace flow', () => {
145
137
 
146
138
  await user.click(
147
139
  screen.getByRole( 'button', {
148
- name: 'Submit',
140
+ name: 'Apply',
149
141
  } )
150
142
  );
151
143
 
@@ -315,10 +315,10 @@ export class MediaUpload extends Component {
315
315
 
316
316
  export default compose( [
317
317
  withSelect( ( select ) => {
318
+ const { capabilities } = select( blockEditorStore ).getSettings();
318
319
  return {
319
320
  isAudioBlockMediaUploadEnabled:
320
- select( blockEditorStore ).getSettings( 'capabilities' )
321
- .isAudioBlockMediaUploadEnabled === true,
321
+ capabilities?.isAudioBlockMediaUploadEnabled === true,
322
322
  };
323
323
  } ),
324
324
  ] )( MediaUpload );
@@ -1,5 +1,5 @@
1
- # Experimental Off Canvas Editor
1
+ # Off Canvas Editor
2
2
 
3
- The __ExperimentalOffCanvasEditor component is a modified ListView compoent. It provides an overview of the hierarchical structure of all blocks in the editor. The blocks are presented vertically one below the other. It enables editing of hierarchy and addition of elements in the block tree without selecting the block instance on the canvas.
3
+ The OffCanvasEditor component is a modified ListView compoent. It provides an overview of the hierarchical structure of all blocks in the editor. The blocks are presented vertically one below the other. It enables editing of hierarchy and addition of elements in the block tree without selecting the block instance on the canvas.
4
4
 
5
5
  It is an experimental component which may end up completely merged into the ListView component via configuration props.
@@ -1,48 +1,104 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
+ import { useInstanceId } from '@wordpress/compose';
5
+ import { speak } from '@wordpress/a11y';
4
6
  import { useSelect } from '@wordpress/data';
5
- import { forwardRef } from '@wordpress/element';
7
+ import { forwardRef, useState, useEffect } from '@wordpress/element';
8
+ import { __, sprintf } from '@wordpress/i18n';
9
+
6
10
  /**
7
11
  * Internal dependencies
8
12
  */
9
13
  import { store as blockEditorStore } from '../../store';
14
+ import useBlockDisplayTitle from '../block-title/use-block-display-title';
10
15
  import Inserter from '../inserter';
11
16
 
12
- export const Appender = forwardRef( ( props, ref ) => {
13
- const { hideInserter, clientId } = useSelect( ( select ) => {
14
- const {
15
- getTemplateLock,
16
- __unstableGetEditorMode,
17
- getSelectedBlockClientId,
18
- } = select( blockEditorStore );
19
-
20
- const _clientId = getSelectedBlockClientId();
21
-
22
- return {
23
- clientId: getSelectedBlockClientId(),
24
- hideInserter:
25
- !! getTemplateLock( _clientId ) ||
26
- __unstableGetEditorMode() === 'zoom-out',
27
- };
28
- }, [] );
29
-
30
- if ( hideInserter ) {
31
- return null;
32
- }
17
+ export const Appender = forwardRef(
18
+ ( { nestingLevel, blockCount, ...props }, ref ) => {
19
+ const [ insertedBlock, setInsertedBlock ] = useState( null );
20
+
21
+ const instanceId = useInstanceId( Appender );
22
+ const { hideInserter, clientId } = useSelect( ( select ) => {
23
+ const {
24
+ getTemplateLock,
25
+ __unstableGetEditorMode,
26
+ getSelectedBlockClientId,
27
+ } = select( blockEditorStore );
28
+
29
+ const _clientId = getSelectedBlockClientId();
30
+
31
+ return {
32
+ clientId: getSelectedBlockClientId(),
33
+ hideInserter:
34
+ !! getTemplateLock( _clientId ) ||
35
+ __unstableGetEditorMode() === 'zoom-out',
36
+ };
37
+ }, [] );
38
+
39
+ const blockTitle = useBlockDisplayTitle( {
40
+ clientId,
41
+ context: 'list-view',
42
+ } );
33
43
 
34
- return (
35
- <div className="offcanvas-editor__appender">
36
- <Inserter
37
- ref={ ref }
38
- rootClientId={ clientId }
39
- position="bottom right"
40
- isAppender={ true }
41
- selectBlockOnInsert={ false }
42
- shouldDirectInsert={ false }
43
- __experimentalIsQuick
44
- { ...props }
45
- />
46
- </div>
47
- );
48
- } );
44
+ const insertedBlockTitle = useBlockDisplayTitle( {
45
+ clientId: insertedBlock?.clientId,
46
+ context: 'list-view',
47
+ } );
48
+
49
+ useEffect( () => {
50
+ if ( ! insertedBlockTitle?.length ) {
51
+ return;
52
+ }
53
+
54
+ speak(
55
+ sprintf(
56
+ // translators: %s: name of block being inserted (i.e. Paragraph, Image, Group etc)
57
+ __( '%s block inserted' ),
58
+ insertedBlockTitle
59
+ ),
60
+ 'assertive'
61
+ );
62
+ }, [ insertedBlockTitle ] );
63
+
64
+ if ( hideInserter ) {
65
+ return null;
66
+ }
67
+
68
+ const descriptionId = `off-canvas-editor-appender__${ instanceId }`;
69
+ const description = sprintf(
70
+ /* translators: 1: The name of the block. 2: The numerical position of the block. 3: The level of nesting for the block. */
71
+ __( 'Append to %1$s block at position %2$d, Level %3$d' ),
72
+ blockTitle,
73
+ blockCount + 1,
74
+ nestingLevel
75
+ );
76
+
77
+ return (
78
+ <div className="offcanvas-editor-appender">
79
+ <Inserter
80
+ ref={ ref }
81
+ rootClientId={ clientId }
82
+ position="bottom right"
83
+ isAppender={ true }
84
+ selectBlockOnInsert={ false }
85
+ shouldDirectInsert={ false }
86
+ __experimentalIsQuick
87
+ { ...props }
88
+ toggleProps={ { 'aria-describedby': descriptionId } }
89
+ onSelectOrClose={ ( maybeInsertedBlock ) => {
90
+ if ( maybeInsertedBlock?.clientId ) {
91
+ setInsertedBlock( maybeInsertedBlock );
92
+ }
93
+ } }
94
+ />
95
+ <div
96
+ className="offcanvas-editor-appender__description"
97
+ id={ descriptionId }
98
+ >
99
+ { description }
100
+ </div>
101
+ </div>
102
+ );
103
+ }
104
+ );
@@ -12,6 +12,7 @@ import { forwardRef, useEffect, useState } from '@wordpress/element';
12
12
  /**
13
13
  * Internal dependencies
14
14
  */
15
+ import { unlock } from '../../experiments';
15
16
  import ListViewBlockSelectButton from './block-select-button';
16
17
  import BlockDraggable from '../block-draggable';
17
18
  import { store as blockEditorStore } from '../../store';
@@ -52,7 +53,7 @@ const ListViewBlockContents = forwardRef(
52
53
  hasBlockMovingClientId,
53
54
  getSelectedBlockClientId,
54
55
  getLastInsertedBlocksClientIds,
55
- } = select( blockEditorStore );
56
+ } = unlock( select( blockEditorStore ) );
56
57
  const lastInsertedBlocksClientIds =
57
58
  getLastInsertedBlocksClientIds();
58
59
  return {
@@ -14,6 +14,7 @@ import {
14
14
  import { forwardRef } from '@wordpress/element';
15
15
  import { Icon, lockSmall as lock } from '@wordpress/icons';
16
16
  import { SPACE, ENTER } from '@wordpress/keycodes';
17
+ import { sprintf, __ } from '@wordpress/i18n';
17
18
 
18
19
  /**
19
20
  * Internal dependencies
@@ -27,7 +28,7 @@ import { useBlockLock } from '../block-lock';
27
28
  function ListViewBlockSelectButton(
28
29
  {
29
30
  className,
30
- block: { clientId },
31
+ block,
31
32
  onClick,
32
33
  onToggleExpanded,
33
34
  tabIndex,
@@ -38,6 +39,7 @@ function ListViewBlockSelectButton(
38
39
  },
39
40
  ref
40
41
  ) {
42
+ const { clientId } = block;
41
43
  const blockInformation = useBlockDisplayInformation( clientId );
42
44
  const blockTitle = useBlockDisplayTitle( {
43
45
  clientId,
@@ -60,6 +62,14 @@ function ListViewBlockSelectButton(
60
62
  }
61
63
  }
62
64
 
65
+ const editAriaLabel = blockInformation
66
+ ? sprintf(
67
+ // translators: %s: The title of the block.
68
+ __( 'Edit %s block' ),
69
+ blockInformation.title
70
+ )
71
+ : __( 'Edit' );
72
+
63
73
  return (
64
74
  <>
65
75
  <Button
@@ -77,6 +87,7 @@ function ListViewBlockSelectButton(
77
87
  draggable={ draggable }
78
88
  href={ `#block-${ clientId }` }
79
89
  aria-hidden={ true }
90
+ title={ editAriaLabel }
80
91
  >
81
92
  <ListViewExpander onClick={ onToggleExpanded } />
82
93
  <BlockIcon