@wordpress/block-editor 14.9.0 → 14.10.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 (370) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/LICENSE.md +1 -1
  3. package/README.md +40 -0
  4. package/build/components/audio-player/index.native.js +1 -1
  5. package/build/components/audio-player/index.native.js.map +1 -1
  6. package/build/components/background-image-control/index.js +4 -0
  7. package/build/components/background-image-control/index.js.map +1 -1
  8. package/build/components/block-alignment-matrix-control/index.js +32 -0
  9. package/build/components/block-alignment-matrix-control/index.js.map +1 -1
  10. package/build/components/block-card/index.js +45 -8
  11. package/build/components/block-card/index.js.map +1 -1
  12. package/build/components/block-edit/edit.js +147 -10
  13. package/build/components/block-edit/edit.js.map +1 -1
  14. package/build/components/block-list/index.js +1 -2
  15. package/build/components/block-list/index.js.map +1 -1
  16. package/build/components/block-list/use-block-props/index.js +2 -2
  17. package/build/components/block-list/use-block-props/index.js.map +1 -1
  18. package/build/components/block-list/zoom-out-separator.js +20 -3
  19. package/build/components/block-list/zoom-out-separator.js.map +1 -1
  20. package/build/components/block-settings-menu/block-settings-dropdown.js +5 -8
  21. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  22. package/build/components/block-styles/utils.js +3 -3
  23. package/build/components/block-styles/utils.js.map +1 -1
  24. package/build/components/block-tools/zoom-out-mode-inserters.js +19 -6
  25. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  26. package/build/components/button-block-appender/index.js +1 -5
  27. package/build/components/button-block-appender/index.js.map +1 -1
  28. package/build/components/child-layout-control/index.js +6 -0
  29. package/build/components/child-layout-control/index.js.map +1 -1
  30. package/build/components/colors-gradients/dropdown.js +51 -11
  31. package/build/components/colors-gradients/dropdown.js.map +1 -1
  32. package/build/components/contrast-checker/index.native.js +1 -1
  33. package/build/components/contrast-checker/index.native.js.map +1 -1
  34. package/build/components/date-format-picker/index.js +7 -16
  35. package/build/components/date-format-picker/index.js.map +1 -1
  36. package/build/components/font-appearance-control/index.js +9 -0
  37. package/build/components/font-appearance-control/index.js.map +1 -1
  38. package/build/components/font-family/index.js +10 -1
  39. package/build/components/font-family/index.js.map +1 -1
  40. package/build/components/global-styles/color-panel.js +3 -0
  41. package/build/components/global-styles/color-panel.js.map +1 -1
  42. package/build/components/global-styles/typography-utils.js +1 -1
  43. package/build/components/global-styles/typography-utils.js.map +1 -1
  44. package/build/components/global-styles/use-global-styles-output.js +2 -2
  45. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  46. package/build/components/grid/grid-visualizer.js +9 -0
  47. package/build/components/grid/grid-visualizer.js.map +1 -1
  48. package/build/components/grid/utils.js +12 -1
  49. package/build/components/grid/utils.js.map +1 -1
  50. package/build/components/iframe/index.js +1 -1
  51. package/build/components/iframe/index.js.map +1 -1
  52. package/build/components/inner-blocks/use-inner-block-template-sync.js +11 -11
  53. package/build/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  54. package/build/components/inserter/block-patterns-explorer/index.js +1 -1
  55. package/build/components/inserter/block-patterns-explorer/index.js.map +1 -1
  56. package/build/components/inserter/block-patterns-tab/index.js +1 -1
  57. package/build/components/inserter/block-patterns-tab/index.js.map +1 -1
  58. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js +4 -4
  59. package/build/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -1
  60. package/build/components/inserter/block-patterns-tab/patterns-filter.js +2 -2
  61. package/build/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -1
  62. package/build/components/inserter/category-tabs/index.js +1 -2
  63. package/build/components/inserter/category-tabs/index.js.map +1 -1
  64. package/build/components/inserter/index.js +6 -15
  65. package/build/components/inserter/index.js.map +1 -1
  66. package/build/components/inserter/quick-inserter.js +2 -13
  67. package/build/components/inserter/quick-inserter.js.map +1 -1
  68. package/build/components/keyboard-shortcuts/index.js +2 -2
  69. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  70. package/build/components/line-height-control/index.js +9 -0
  71. package/build/components/line-height-control/index.js.map +1 -1
  72. package/build/components/media-placeholder/index.js +2 -2
  73. package/build/components/media-placeholder/index.js.map +1 -1
  74. package/build/components/media-replace-flow/index.js +26 -26
  75. package/build/components/media-replace-flow/index.js.map +1 -1
  76. package/build/components/plain-text/index.js +34 -0
  77. package/build/components/plain-text/index.js.map +1 -1
  78. package/build/components/provider/index.js +61 -5
  79. package/build/components/provider/index.js.map +1 -1
  80. package/build/components/provider/use-media-upload-settings.js +28 -0
  81. package/build/components/provider/use-media-upload-settings.js.map +1 -0
  82. package/build/components/resolution-tool/index.js +3 -1
  83. package/build/components/resolution-tool/index.js.map +1 -1
  84. package/build/components/responsive-block-control/index.js +1 -1
  85. package/build/components/responsive-block-control/index.js.map +1 -1
  86. package/build/components/rich-text/event-listeners/delete.js +7 -1
  87. package/build/components/rich-text/event-listeners/delete.js.map +1 -1
  88. package/build/components/rich-text/index.js +2 -2
  89. package/build/components/rich-text/index.js.map +1 -1
  90. package/build/components/use-block-drop-zone/index.js +2 -1
  91. package/build/components/use-block-drop-zone/index.js.map +1 -1
  92. package/build/hooks/background.js +2 -0
  93. package/build/hooks/background.js.map +1 -1
  94. package/build/hooks/block-bindings.js +15 -14
  95. package/build/hooks/block-bindings.js.map +1 -1
  96. package/build/hooks/border.js +3 -3
  97. package/build/hooks/border.js.map +1 -1
  98. package/build/hooks/color.js +1 -1
  99. package/build/hooks/color.js.map +1 -1
  100. package/build/hooks/dimensions.js +2 -2
  101. package/build/hooks/dimensions.js.map +1 -1
  102. package/build/hooks/font-family.js +1 -1
  103. package/build/hooks/font-family.js.map +1 -1
  104. package/build/hooks/gap.js +2 -2
  105. package/build/hooks/gap.js.map +1 -1
  106. package/build/hooks/index.js +0 -1
  107. package/build/hooks/index.js.map +1 -1
  108. package/build/hooks/index.native.js +7 -0
  109. package/build/hooks/index.native.js.map +1 -1
  110. package/build/hooks/style.js +7 -7
  111. package/build/hooks/style.js.map +1 -1
  112. package/build/hooks/supports.js +7 -7
  113. package/build/hooks/supports.js.map +1 -1
  114. package/build/hooks/typography.js +6 -6
  115. package/build/hooks/typography.js.map +1 -1
  116. package/build/hooks/use-zoom-out.js +12 -1
  117. package/build/hooks/use-zoom-out.js.map +1 -1
  118. package/build/hooks/utils.js +1 -1
  119. package/build/hooks/utils.js.map +1 -1
  120. package/build/store/private-actions.js +1 -1
  121. package/build/store/private-actions.js.map +1 -1
  122. package/build/store/private-selectors.js +11 -1
  123. package/build/store/private-selectors.js.map +1 -1
  124. package/build/store/reducer.js +93 -12
  125. package/build/store/reducer.js.map +1 -1
  126. package/build/store/selectors.js +6 -8
  127. package/build/store/selectors.js.map +1 -1
  128. package/build/utils/block-bindings.js +95 -0
  129. package/build/utils/block-bindings.js.map +1 -1
  130. package/build-module/components/audio-player/index.native.js +2 -2
  131. package/build-module/components/audio-player/index.native.js.map +1 -1
  132. package/build-module/components/background-image-control/index.js +5 -1
  133. package/build-module/components/background-image-control/index.js.map +1 -1
  134. package/build-module/components/block-alignment-matrix-control/index.js +32 -0
  135. package/build-module/components/block-alignment-matrix-control/index.js.map +1 -1
  136. package/build-module/components/block-card/index.js +45 -8
  137. package/build-module/components/block-card/index.js.map +1 -1
  138. package/build-module/components/block-edit/edit.js +148 -11
  139. package/build-module/components/block-edit/edit.js.map +1 -1
  140. package/build-module/components/block-list/index.js +2 -3
  141. package/build-module/components/block-list/index.js.map +1 -1
  142. package/build-module/components/block-list/use-block-props/index.js +1 -1
  143. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  144. package/build-module/components/block-list/zoom-out-separator.js +20 -3
  145. package/build-module/components/block-list/zoom-out-separator.js.map +1 -1
  146. package/build-module/components/block-settings-menu/block-settings-dropdown.js +5 -8
  147. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  148. package/build-module/components/block-styles/utils.js +3 -3
  149. package/build-module/components/block-styles/utils.js.map +1 -1
  150. package/build-module/components/block-tools/zoom-out-mode-inserters.js +19 -6
  151. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  152. package/build-module/components/button-block-appender/index.js +2 -6
  153. package/build-module/components/button-block-appender/index.js.map +1 -1
  154. package/build-module/components/child-layout-control/index.js +7 -1
  155. package/build-module/components/child-layout-control/index.js.map +1 -1
  156. package/build-module/components/colors-gradients/dropdown.js +51 -11
  157. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  158. package/build-module/components/contrast-checker/index.native.js +2 -2
  159. package/build-module/components/contrast-checker/index.native.js.map +1 -1
  160. package/build-module/components/date-format-picker/index.js +7 -16
  161. package/build-module/components/date-format-picker/index.js.map +1 -1
  162. package/build-module/components/font-appearance-control/index.js +8 -0
  163. package/build-module/components/font-appearance-control/index.js.map +1 -1
  164. package/build-module/components/font-family/index.js +10 -1
  165. package/build-module/components/font-family/index.js.map +1 -1
  166. package/build-module/components/global-styles/color-panel.js +3 -0
  167. package/build-module/components/global-styles/color-panel.js.map +1 -1
  168. package/build-module/components/global-styles/typography-utils.js +1 -1
  169. package/build-module/components/global-styles/typography-utils.js.map +1 -1
  170. package/build-module/components/global-styles/use-global-styles-output.js +2 -2
  171. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  172. package/build-module/components/grid/grid-visualizer.js +9 -0
  173. package/build-module/components/grid/grid-visualizer.js.map +1 -1
  174. package/build-module/components/grid/utils.js +12 -1
  175. package/build-module/components/grid/utils.js.map +1 -1
  176. package/build-module/components/iframe/index.js +1 -1
  177. package/build-module/components/iframe/index.js.map +1 -1
  178. package/build-module/components/inner-blocks/use-inner-block-template-sync.js +12 -12
  179. package/build-module/components/inner-blocks/use-inner-block-template-sync.js.map +1 -1
  180. package/build-module/components/inserter/block-patterns-explorer/index.js +1 -1
  181. package/build-module/components/inserter/block-patterns-explorer/index.js.map +1 -1
  182. package/build-module/components/inserter/block-patterns-tab/index.js +1 -1
  183. package/build-module/components/inserter/block-patterns-tab/index.js.map +1 -1
  184. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js +4 -4
  185. package/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js.map +1 -1
  186. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js +2 -2
  187. package/build-module/components/inserter/block-patterns-tab/patterns-filter.js.map +1 -1
  188. package/build-module/components/inserter/category-tabs/index.js +1 -2
  189. package/build-module/components/inserter/category-tabs/index.js.map +1 -1
  190. package/build-module/components/inserter/index.js +6 -15
  191. package/build-module/components/inserter/index.js.map +1 -1
  192. package/build-module/components/inserter/quick-inserter.js +2 -13
  193. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  194. package/build-module/components/keyboard-shortcuts/index.js +2 -2
  195. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  196. package/build-module/components/line-height-control/index.js +8 -0
  197. package/build-module/components/line-height-control/index.js.map +1 -1
  198. package/build-module/components/media-placeholder/index.js +3 -3
  199. package/build-module/components/media-placeholder/index.js.map +1 -1
  200. package/build-module/components/media-replace-flow/index.js +28 -28
  201. package/build-module/components/media-replace-flow/index.js.map +1 -1
  202. package/build-module/components/plain-text/index.js +34 -0
  203. package/build-module/components/plain-text/index.js.map +1 -1
  204. package/build-module/components/provider/index.js +62 -5
  205. package/build-module/components/provider/index.js.map +1 -1
  206. package/build-module/components/provider/use-media-upload-settings.js +22 -0
  207. package/build-module/components/provider/use-media-upload-settings.js.map +1 -0
  208. package/build-module/components/resolution-tool/index.js +3 -1
  209. package/build-module/components/resolution-tool/index.js.map +1 -1
  210. package/build-module/components/responsive-block-control/index.js +1 -1
  211. package/build-module/components/responsive-block-control/index.js.map +1 -1
  212. package/build-module/components/rich-text/event-listeners/delete.js +7 -1
  213. package/build-module/components/rich-text/event-listeners/delete.js.map +1 -1
  214. package/build-module/components/rich-text/index.js +1 -1
  215. package/build-module/components/rich-text/index.js.map +1 -1
  216. package/build-module/components/use-block-drop-zone/index.js +2 -1
  217. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  218. package/build-module/hooks/background.js +2 -0
  219. package/build-module/hooks/background.js.map +1 -1
  220. package/build-module/hooks/block-bindings.js +13 -12
  221. package/build-module/hooks/block-bindings.js.map +1 -1
  222. package/build-module/hooks/border.js +3 -3
  223. package/build-module/hooks/border.js.map +1 -1
  224. package/build-module/hooks/color.js +1 -1
  225. package/build-module/hooks/color.js.map +1 -1
  226. package/build-module/hooks/dimensions.js +2 -2
  227. package/build-module/hooks/dimensions.js.map +1 -1
  228. package/build-module/hooks/font-family.js +1 -1
  229. package/build-module/hooks/font-family.js.map +1 -1
  230. package/build-module/hooks/gap.js +2 -2
  231. package/build-module/hooks/gap.js.map +1 -1
  232. package/build-module/hooks/index.js +0 -1
  233. package/build-module/hooks/index.js.map +1 -1
  234. package/build-module/hooks/index.native.js +1 -0
  235. package/build-module/hooks/index.native.js.map +1 -1
  236. package/build-module/hooks/style.js +7 -7
  237. package/build-module/hooks/style.js.map +1 -1
  238. package/build-module/hooks/supports.js +7 -7
  239. package/build-module/hooks/supports.js.map +1 -1
  240. package/build-module/hooks/typography.js +6 -6
  241. package/build-module/hooks/typography.js.map +1 -1
  242. package/build-module/hooks/use-zoom-out.js +12 -2
  243. package/build-module/hooks/use-zoom-out.js.map +1 -1
  244. package/build-module/hooks/utils.js +1 -1
  245. package/build-module/hooks/utils.js.map +1 -1
  246. package/build-module/store/private-actions.js +1 -1
  247. package/build-module/store/private-actions.js.map +1 -1
  248. package/build-module/store/private-selectors.js +11 -1
  249. package/build-module/store/private-selectors.js.map +1 -1
  250. package/build-module/store/reducer.js +93 -12
  251. package/build-module/store/reducer.js.map +1 -1
  252. package/build-module/store/selectors.js +6 -8
  253. package/build-module/store/selectors.js.map +1 -1
  254. package/build-module/utils/block-bindings.js +90 -0
  255. package/build-module/utils/block-bindings.js.map +1 -1
  256. package/build-style/style-rtl.css +27 -9
  257. package/build-style/style.css +27 -9
  258. package/package.json +33 -33
  259. package/src/components/audio-player/index.native.js +2 -2
  260. package/src/components/background-image-control/index.js +4 -0
  261. package/src/components/background-image-control/style.scss +4 -2
  262. package/src/components/block-alignment-matrix-control/README.md +29 -6
  263. package/src/components/block-alignment-matrix-control/index.js +31 -0
  264. package/src/components/block-alignment-matrix-control/stories/index.story.js +78 -0
  265. package/src/components/block-card/README.md +7 -0
  266. package/src/components/block-card/index.js +41 -12
  267. package/src/components/block-card/stories/index.story.js +79 -0
  268. package/src/components/block-card/style.scss +9 -1
  269. package/src/components/block-edit/edit.js +218 -11
  270. package/src/components/block-list/index.js +2 -7
  271. package/src/components/block-list/use-block-props/index.js +1 -1
  272. package/src/components/block-list/zoom-out-separator.js +30 -0
  273. package/src/components/block-settings-menu/block-settings-dropdown.js +17 -20
  274. package/src/components/block-styles/utils.js +3 -3
  275. package/src/components/block-title/stories/index.story.js +76 -0
  276. package/src/components/block-tools/style.scss +1 -0
  277. package/src/components/block-tools/zoom-out-mode-inserters.js +21 -3
  278. package/src/components/border-radius-control/README.md +59 -0
  279. package/src/components/border-radius-control/stories/index.story.js +58 -0
  280. package/src/components/button-block-appender/index.js +2 -7
  281. package/src/components/child-layout-control/index.js +14 -0
  282. package/src/components/colors-gradients/dropdown.js +57 -8
  283. package/src/components/colors-gradients/style.scss +5 -0
  284. package/src/components/contrast-checker/index.native.js +2 -2
  285. package/src/components/contrast-checker/stories/index.story.js +117 -0
  286. package/src/components/date-format-picker/README.md +6 -13
  287. package/src/components/date-format-picker/index.js +10 -17
  288. package/src/components/date-format-picker/stories/index.story.js +69 -0
  289. package/src/components/date-format-picker/style.scss +3 -1
  290. package/src/components/default-block-appender/content.scss +1 -0
  291. package/src/components/dimensions-tool/stories/aspect-ratio-tool.story.js +2 -1
  292. package/src/components/dimensions-tool/stories/index.story.js +2 -1
  293. package/src/components/dimensions-tool/stories/scale-tool.story.js +2 -1
  294. package/src/components/dimensions-tool/stories/width-height-tool.story.js +2 -1
  295. package/src/components/font-appearance-control/index.js +15 -0
  296. package/src/components/font-family/README.md +1 -0
  297. package/src/components/font-family/index.js +17 -1
  298. package/src/components/font-family/stories/index.story.js +1 -0
  299. package/src/components/global-styles/color-panel.js +3 -0
  300. package/src/components/global-styles/test/use-global-styles-output.js +1 -1
  301. package/src/components/global-styles/typography-utils.js +1 -1
  302. package/src/components/global-styles/use-global-styles-output.js +2 -2
  303. package/src/components/grid/grid-visualizer.js +11 -0
  304. package/src/components/grid/utils.js +19 -1
  305. package/src/components/iframe/index.js +1 -1
  306. package/src/components/inner-blocks/use-inner-block-template-sync.js +17 -10
  307. package/src/components/inserter/block-patterns-explorer/index.js +2 -3
  308. package/src/components/inserter/block-patterns-tab/index.js +3 -1
  309. package/src/components/inserter/block-patterns-tab/pattern-category-previews.js +4 -4
  310. package/src/components/inserter/block-patterns-tab/patterns-filter.js +2 -2
  311. package/src/components/inserter/category-tabs/index.js +3 -2
  312. package/src/components/inserter/index.js +1 -13
  313. package/src/components/inserter/quick-inserter.js +2 -25
  314. package/src/components/keyboard-shortcuts/index.js +2 -2
  315. package/src/components/line-height-control/README.md +1 -0
  316. package/src/components/line-height-control/index.js +12 -0
  317. package/src/components/line-height-control/stories/index.story.js +1 -0
  318. package/src/components/line-height-control/test/index.js +7 -1
  319. package/src/components/list-view/style.scss +10 -5
  320. package/src/components/media-placeholder/index.js +3 -3
  321. package/src/components/media-replace-flow/README.md +7 -0
  322. package/src/components/media-replace-flow/index.js +28 -36
  323. package/src/components/media-replace-flow/style.scss +6 -6
  324. package/src/components/plain-text/README.md +2 -2
  325. package/src/components/plain-text/index.js +34 -0
  326. package/src/components/plain-text/stories/index.story.js +75 -0
  327. package/src/components/provider/index.js +81 -4
  328. package/src/components/provider/use-media-upload-settings.js +25 -0
  329. package/src/components/resolution-tool/index.js +2 -0
  330. package/src/components/resolution-tool/stories/index.story.js +36 -8
  331. package/src/components/responsive-block-control/index.js +1 -1
  332. package/src/components/rich-text/event-listeners/delete.js +6 -1
  333. package/src/components/rich-text/index.js +1 -1
  334. package/src/components/text-alignment-control/README.md +49 -0
  335. package/src/components/text-alignment-control/stories/index.story.js +56 -18
  336. package/src/components/text-decoration-control/README.md +0 -1
  337. package/src/components/text-decoration-control/stories/index.story.js +51 -16
  338. package/src/components/text-transform-control/README.md +3 -4
  339. package/src/components/text-transform-control/stories/index.story.js +53 -16
  340. package/src/components/use-block-drop-zone/index.js +8 -1
  341. package/src/components/warning/stories/index.story.js +86 -0
  342. package/src/hooks/background.js +6 -0
  343. package/src/hooks/block-bindings.js +17 -18
  344. package/src/hooks/border.js +9 -3
  345. package/src/hooks/color.js +1 -1
  346. package/src/hooks/dimensions.js +2 -2
  347. package/src/hooks/font-family.js +1 -1
  348. package/src/hooks/gap.js +2 -2
  349. package/src/hooks/index.js +0 -1
  350. package/src/hooks/index.native.js +1 -0
  351. package/src/hooks/style.js +13 -7
  352. package/src/hooks/supports.js +7 -7
  353. package/src/hooks/test/style.js +2 -1
  354. package/src/hooks/typography.js +6 -6
  355. package/src/hooks/use-zoom-out.js +10 -2
  356. package/src/hooks/utils.js +1 -1
  357. package/src/store/private-actions.js +1 -0
  358. package/src/store/private-selectors.js +15 -5
  359. package/src/store/reducer.js +112 -19
  360. package/src/store/selectors.js +6 -8
  361. package/src/store/test/private-selectors.js +53 -9
  362. package/src/store/test/reducer.js +172 -166
  363. package/src/store/test/selectors.js +23 -0
  364. package/src/utils/block-bindings.js +95 -0
  365. package/tsconfig.json +2 -5
  366. package/build/hooks/use-bindings-attributes.js +0 -262
  367. package/build/hooks/use-bindings-attributes.js.map +0 -1
  368. package/build-module/hooks/use-bindings-attributes.js +0 -253
  369. package/build-module/hooks/use-bindings-attributes.js.map +0 -1
  370. package/src/hooks/use-bindings-attributes.js +0 -322
@@ -22,6 +22,7 @@ const Template = ( props ) => {
22
22
 
23
23
  export const Default = Template.bind( {} );
24
24
  Default.args = {
25
+ __next40pxDefaultSize: true,
25
26
  __unstableInputWidth: '100px',
26
27
  };
27
28
 
@@ -19,7 +19,13 @@ const SPIN = STEP * SPIN_FACTOR;
19
19
 
20
20
  const ControlledLineHeightControl = () => {
21
21
  const [ value, setValue ] = useState();
22
- return <LineHeightControl value={ value } onChange={ setValue } />;
22
+ return (
23
+ <LineHeightControl
24
+ value={ value }
25
+ onChange={ setValue }
26
+ __next40pxDefaultSize
27
+ />
28
+ );
23
29
  };
24
30
 
25
31
  describe( 'LineHeightControl', () => {
@@ -553,13 +553,18 @@ svg {
553
553
  }
554
554
 
555
555
  .list-view-appender .block-editor-inserter__toggle {
556
- background-color: #1e1e1e;
557
- color: #fff;
558
- margin: $grid-unit-10 0 0 24px;
559
- height: 24px;
560
- min-width: 24px;
556
+ background-color: $gray-900;
557
+ color: $white;
558
+ margin: $grid-unit-10 0 0 $grid-unit-30;
559
+ height: $button-size-small;
561
560
  padding: 0;
562
561
 
562
+ // TODO: Consider passing size="small" to the Inserter toggle instead.
563
+ // Special dimensions for this button.
564
+ &.has-icon.is-next-40px-default-size {
565
+ min-width: $button-size-small;
566
+ }
567
+
563
568
  &:hover,
564
569
  &:focus {
565
570
  background: var(--wp-admin-theme-color);
@@ -15,7 +15,7 @@ import {
15
15
  __experimentalInputControlSuffixWrapper as InputControlSuffixWrapper,
16
16
  withFilters,
17
17
  } from '@wordpress/components';
18
- import { __ } from '@wordpress/i18n';
18
+ import { __, _x } from '@wordpress/i18n';
19
19
  import { useState, useEffect } from '@wordpress/element';
20
20
  import { useSelect } from '@wordpress/data';
21
21
  import { keyboardReturn } from '@wordpress/icons';
@@ -482,7 +482,7 @@ export function MediaPlaceholder( {
482
482
  ) }
483
483
  onClick={ openFileDialog }
484
484
  >
485
- { __( 'Upload' ) }
485
+ { _x( 'Upload', 'verb' ) }
486
486
  </Button>
487
487
  { uploadMediaLibraryButton }
488
488
  { renderUrlSelectionUI() }
@@ -512,7 +512,7 @@ export function MediaPlaceholder( {
512
512
  'block-editor-media-placeholder__upload-button'
513
513
  ) }
514
514
  >
515
- { __( 'Upload' ) }
515
+ { _x( 'Upload', 'verb' ) }
516
516
  </Button>
517
517
  ) }
518
518
  onChange={ onUpload }
@@ -98,3 +98,10 @@ If passed, children are rendered inside the dropdown.
98
98
  - Required: No
99
99
 
100
100
  If passed, children are rendered inside the dropdown. If a function is provided for this prop, it will receive an object with the `onClose` prop as an argument.
101
+
102
+ ### renderToggle
103
+
104
+ - Type: `func`
105
+ - Required: No
106
+
107
+ If passed, it will be used to render the provided button instead of the default one. It should accept and pass through `button` props to a `button` element.
@@ -1,21 +1,15 @@
1
- /**
2
- * External dependencies
3
- */
4
- import clsx from 'clsx';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
9
- import { useRef } from '@wordpress/element';
10
- import { __ } from '@wordpress/i18n';
4
+ import { __, _x } from '@wordpress/i18n';
11
5
  import { speak } from '@wordpress/a11y';
12
6
  import {
13
7
  FormFileUpload,
14
8
  NavigableMenu,
15
9
  MenuItem,
16
- ToolbarButton,
17
10
  Dropdown,
18
11
  withFilters,
12
+ ToolbarButton,
19
13
  } from '@wordpress/components';
20
14
  import { useSelect, withDispatch } from '@wordpress/data';
21
15
  import { DOWN } from '@wordpress/keycodes';
@@ -60,12 +54,9 @@ const MediaReplaceFlow = ( {
60
54
  addToGallery,
61
55
  handleUpload = true,
62
56
  popoverProps,
57
+ renderToggle,
63
58
  } ) => {
64
- const mediaUpload = useSelect( ( select ) => {
65
- return select( blockEditorStore ).getSettings().mediaUpload;
66
- }, [] );
67
- const canUpload = !! mediaUpload;
68
- const editMediaButtonRef = useRef();
59
+ const { getSettings } = useSelect( blockEditorStore );
69
60
  const errorNoticeID = `block-editor/media-replace-flow/error-notice/${ ++uniqueId }`;
70
61
 
71
62
  const onUploadError = ( message ) => {
@@ -107,7 +98,7 @@ const MediaReplaceFlow = ( {
107
98
  return onSelect( files );
108
99
  }
109
100
  onFilesUpload( files );
110
- mediaUpload( {
101
+ getSettings().mediaUpload( {
111
102
  allowedTypes,
112
103
  filesList: files,
113
104
  onFileChange: ( [ media ] ) => {
@@ -141,17 +132,27 @@ const MediaReplaceFlow = ( {
141
132
  <Dropdown
142
133
  popoverProps={ popoverProps }
143
134
  contentClassName="block-editor-media-replace-flow__options"
144
- renderToggle={ ( { isOpen, onToggle } ) => (
145
- <ToolbarButton
146
- ref={ editMediaButtonRef }
147
- aria-expanded={ isOpen }
148
- aria-haspopup="true"
149
- onClick={ onToggle }
150
- onKeyDown={ openOnArrowDown }
151
- >
152
- { name }
153
- </ToolbarButton>
154
- ) }
135
+ renderToggle={ ( { isOpen, onToggle } ) => {
136
+ if ( renderToggle ) {
137
+ return renderToggle( {
138
+ 'aria-expanded': isOpen,
139
+ 'aria-haspopup': 'true',
140
+ onClick: onToggle,
141
+ onKeyDown: openOnArrowDown,
142
+ children: name,
143
+ } );
144
+ }
145
+ return (
146
+ <ToolbarButton
147
+ aria-expanded={ isOpen }
148
+ aria-haspopup="true"
149
+ onClick={ onToggle }
150
+ onKeyDown={ openOnArrowDown }
151
+ >
152
+ { name }
153
+ </ToolbarButton>
154
+ );
155
+ } }
155
156
  renderContent={ ( { onClose } ) => (
156
157
  <>
157
158
  <NavigableMenu className="block-editor-media-replace-flow__media-upload-menu">
@@ -188,7 +189,7 @@ const MediaReplaceFlow = ( {
188
189
  openFileDialog();
189
190
  } }
190
191
  >
191
- { __( 'Upload' ) }
192
+ { _x( 'Upload', 'verb' ) }
192
193
  </MenuItem>
193
194
  );
194
195
  } }
@@ -219,15 +220,7 @@ const MediaReplaceFlow = ( {
219
220
  </NavigableMenu>
220
221
  { onSelectURL && (
221
222
  // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
222
- <form
223
- className={ clsx(
224
- 'block-editor-media-flow__url-input',
225
- {
226
- 'has-siblings':
227
- canUpload || onToggleFeaturedImage,
228
- }
229
- ) }
230
- >
223
+ <form className="block-editor-media-flow__url-input">
231
224
  <span className="block-editor-media-replace-flow__image-url-label">
232
225
  { __( 'Current media URL:' ) }
233
226
  </span>
@@ -238,7 +231,6 @@ const MediaReplaceFlow = ( {
238
231
  showSuggestions={ false }
239
232
  onChange={ ( { url } ) => {
240
233
  onSelectURL( url );
241
- editMediaButtonRef.current.focus();
242
234
  } }
243
235
  />
244
236
  </form>
@@ -9,17 +9,17 @@
9
9
  margin-left: 4px;
10
10
  }
11
11
 
12
+ .block-editor-media-replace-flow__media-upload-menu:not(:empty) + .block-editor-media-flow__url-input {
13
+ border-top: $border-width solid $gray-900;
14
+ margin-top: $grid-unit-10;
15
+ padding-bottom: $grid-unit-10;
16
+ }
17
+
12
18
  .block-editor-media-flow__url-input {
13
19
  margin-right: -$grid-unit-10;
14
20
  margin-left: -$grid-unit-10;
15
21
  padding: $grid-unit-20;
16
22
 
17
- &.has-siblings {
18
- border-top: $border-width solid $gray-900;
19
- margin-top: $grid-unit-10;
20
- padding-bottom: $grid-unit-10;
21
- }
22
-
23
23
  .block-editor-media-replace-flow__image-url-label {
24
24
  display: block;
25
25
  top: $grid-unit-20;
@@ -6,11 +6,11 @@ Render an auto-growing textarea allow users to fill any textual content.
6
6
 
7
7
  ### `value: string`
8
8
 
9
- _Required._ String value of the textarea
9
+ _Required._ String value of the textarea.
10
10
 
11
11
  ### `onChange( value: string ): Function`
12
12
 
13
- _Required._ Called when the value changes.
13
+ _Required._ Function called when the text value changes.
14
14
 
15
15
  You can also pass any extra prop to the textarea rendered by this component.
16
16
 
@@ -15,7 +15,41 @@ import { forwardRef } from '@wordpress/element';
15
15
  import EditableText from '../editable-text';
16
16
 
17
17
  /**
18
+ * Render an auto-growing textarea allow users to fill any textual content.
19
+ *
18
20
  * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/plain-text/README.md
21
+ *
22
+ * @example
23
+ * ```jsx
24
+ * import { registerBlockType } from '@wordpress/blocks';
25
+ * import { PlainText } from '@wordpress/block-editor';
26
+ *
27
+ * registerBlockType( 'my-plugin/example-block', {
28
+ * // ...
29
+ *
30
+ * attributes: {
31
+ * content: {
32
+ * type: 'string',
33
+ * },
34
+ * },
35
+ *
36
+ * edit( { className, attributes, setAttributes } ) {
37
+ * return (
38
+ * <PlainText
39
+ * className={ className }
40
+ * value={ attributes.content }
41
+ * onChange={ ( content ) => setAttributes( { content } ) }
42
+ * />
43
+ * );
44
+ * },
45
+ * } );
46
+ * ````
47
+ *
48
+ * @param {Object} props Component props.
49
+ * @param {string} props.value String value of the textarea.
50
+ * @param {Function} props.onChange Function called when the text value changes.
51
+ * @param {Object} [props.ref] The component forwards the `ref` property to the `TextareaAutosize` component.
52
+ * @return {Element} Plain text component
19
53
  */
20
54
  const PlainText = forwardRef( ( { __experimentalVersion, ...props }, ref ) => {
21
55
  if ( __experimentalVersion === 2 ) {
@@ -0,0 +1,75 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useState } from '@wordpress/element';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import PlainText from '..';
10
+
11
+ const meta = {
12
+ title: 'BlockEditor/PlainText',
13
+ component: PlainText,
14
+ parameters: {
15
+ docs: {
16
+ canvas: { sourceState: 'shown' },
17
+ description: {
18
+ component:
19
+ 'PlainText renders an auto-growing textarea that allows users to enter any textual content.',
20
+ },
21
+ },
22
+ },
23
+ argTypes: {
24
+ value: {
25
+ control: {
26
+ type: null,
27
+ },
28
+ table: {
29
+ type: {
30
+ summary: 'string',
31
+ },
32
+ },
33
+ description: 'String value of the textarea.',
34
+ },
35
+ onChange: {
36
+ action: 'onChange',
37
+ control: {
38
+ type: null,
39
+ },
40
+ table: {
41
+ type: {
42
+ summary: 'function',
43
+ },
44
+ },
45
+ description: 'Function called when the text value changes.',
46
+ },
47
+ className: {
48
+ control: 'text',
49
+ table: {
50
+ type: {
51
+ summary: 'string',
52
+ },
53
+ },
54
+ description: 'Additional class name for the PlainText.',
55
+ },
56
+ },
57
+ };
58
+
59
+ export default meta;
60
+
61
+ export const Default = {
62
+ render: function Template( { onChange, ...args } ) {
63
+ const [ value, setValue ] = useState();
64
+ return (
65
+ <PlainText
66
+ { ...args }
67
+ onChange={ ( ...changeArgs ) => {
68
+ onChange( ...changeArgs );
69
+ setValue( ...changeArgs );
70
+ } }
71
+ value={ value }
72
+ />
73
+ );
74
+ },
75
+ };
@@ -2,8 +2,13 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { useDispatch } from '@wordpress/data';
5
- import { useEffect } from '@wordpress/element';
5
+ import { useEffect, useMemo } from '@wordpress/element';
6
6
  import { SlotFillProvider } from '@wordpress/components';
7
+ //eslint-disable-next-line import/no-extraneous-dependencies -- Experimental package, not published.
8
+ import {
9
+ MediaUploadProvider,
10
+ store as uploadStore,
11
+ } from '@wordpress/upload-media';
7
12
 
8
13
  /**
9
14
  * Internal dependencies
@@ -14,12 +19,71 @@ import { store as blockEditorStore } from '../../store';
14
19
  import { BlockRefsProvider } from './block-refs-provider';
15
20
  import { unlock } from '../../lock-unlock';
16
21
  import KeyboardShortcuts from '../keyboard-shortcuts';
22
+ import useMediaUploadSettings from './use-media-upload-settings';
17
23
 
18
24
  /** @typedef {import('@wordpress/data').WPDataRegistry} WPDataRegistry */
19
25
 
26
+ const noop = () => {};
27
+
28
+ /**
29
+ * Upload a media file when the file upload button is activated
30
+ * or when adding a file to the editor via drag & drop.
31
+ *
32
+ * @param {WPDataRegistry} registry
33
+ * @param {Object} $3 Parameters object passed to the function.
34
+ * @param {Array} $3.allowedTypes Array with the types of media that can be uploaded, if unset all types are allowed.
35
+ * @param {Object} $3.additionalData Additional data to include in the request.
36
+ * @param {Array<File>} $3.filesList List of files.
37
+ * @param {Function} $3.onError Function called when an error happens.
38
+ * @param {Function} $3.onFileChange Function called each time a file or a temporary representation of the file is available.
39
+ * @param {Function} $3.onSuccess Function called once a file has completely finished uploading, including thumbnails.
40
+ * @param {Function} $3.onBatchSuccess Function called once all files in a group have completely finished uploading, including thumbnails.
41
+ */
42
+ function mediaUpload(
43
+ registry,
44
+ {
45
+ allowedTypes,
46
+ additionalData = {},
47
+ filesList,
48
+ onError = noop,
49
+ onFileChange,
50
+ onSuccess,
51
+ onBatchSuccess,
52
+ }
53
+ ) {
54
+ void registry.dispatch( uploadStore ).addItems( {
55
+ files: filesList,
56
+ onChange: onFileChange,
57
+ onSuccess,
58
+ onBatchSuccess,
59
+ onError: ( { message } ) => onError( message ),
60
+ additionalData,
61
+ allowedTypes,
62
+ } );
63
+ }
64
+
20
65
  export const ExperimentalBlockEditorProvider = withRegistryProvider(
21
66
  ( props ) => {
22
- const { children, settings, stripExperimentalSettings = false } = props;
67
+ const {
68
+ settings: _settings,
69
+ registry,
70
+ stripExperimentalSettings = false,
71
+ } = props;
72
+
73
+ const mediaUploadSettings = useMediaUploadSettings( _settings );
74
+
75
+ let settings = _settings;
76
+
77
+ if ( window.__experimentalMediaProcessing && _settings.mediaUpload ) {
78
+ // Create a new variable so that the original props.settings.mediaUpload is not modified.
79
+ settings = useMemo(
80
+ () => ( {
81
+ ..._settings,
82
+ mediaUpload: mediaUpload.bind( null, registry ),
83
+ } ),
84
+ [ _settings, registry ]
85
+ );
86
+ }
23
87
 
24
88
  const { __experimentalUpdateSettings } = unlock(
25
89
  useDispatch( blockEditorStore )
@@ -44,12 +108,25 @@ export const ExperimentalBlockEditorProvider = withRegistryProvider(
44
108
  // Syncs the entity provider with changes in the block-editor store.
45
109
  useBlockSync( props );
46
110
 
47
- return (
111
+ const children = (
48
112
  <SlotFillProvider passthrough>
49
113
  { ! settings?.isPreviewMode && <KeyboardShortcuts.Register /> }
50
- <BlockRefsProvider>{ children }</BlockRefsProvider>
114
+ <BlockRefsProvider>{ props.children }</BlockRefsProvider>
51
115
  </SlotFillProvider>
52
116
  );
117
+
118
+ if ( window.__experimentalMediaProcessing ) {
119
+ return (
120
+ <MediaUploadProvider
121
+ settings={ mediaUploadSettings }
122
+ useSubRegistry={ false }
123
+ >
124
+ { children }
125
+ </MediaUploadProvider>
126
+ );
127
+ }
128
+
129
+ return children;
53
130
  }
54
131
  );
55
132
 
@@ -0,0 +1,25 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { useMemo } from '@wordpress/element';
5
+
6
+ /**
7
+ * React hook used to compute the media upload settings to use in the post editor.
8
+ *
9
+ * @param {Object} settings Media upload settings prop.
10
+ *
11
+ * @return {Object} Media upload settings.
12
+ */
13
+ function useMediaUploadSettings( settings = {} ) {
14
+ return useMemo(
15
+ () => ( {
16
+ mediaUpload: settings.mediaUpload,
17
+ mediaSideload: settings.mediaSideload,
18
+ maxUploadFileSize: settings.maxUploadFileSize,
19
+ allowedMimeTypes: settings.allowedMimeTypes,
20
+ } ),
21
+ [ settings ]
22
+ );
23
+ }
24
+
25
+ export default useMediaUploadSettings;
@@ -33,6 +33,7 @@ export default function ResolutionTool( {
33
33
  options = DEFAULT_SIZE_OPTIONS,
34
34
  defaultValue = DEFAULT_SIZE_OPTIONS[ 0 ].value,
35
35
  isShownByDefault = true,
36
+ resetAllFilter,
36
37
  } ) {
37
38
  const displayValue = value ?? defaultValue;
38
39
  return (
@@ -42,6 +43,7 @@ export default function ResolutionTool( {
42
43
  onDeselect={ () => onChange( defaultValue ) }
43
44
  isShownByDefault={ isShownByDefault }
44
45
  panelId={ panelId }
46
+ resetAllFilter={ resetAllFilter }
45
47
  >
46
48
  <SelectControl
47
49
  __nextHasNoMarginBottom
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { useState } from '@wordpress/element';
4
+ import { useReducer } from '@wordpress/element';
5
5
  import {
6
6
  Panel,
7
7
  __experimentalToolsPanel as ToolsPanel,
@@ -13,30 +13,56 @@ import {
13
13
  import ResolutionTool from '..';
14
14
 
15
15
  export default {
16
- title: 'BlockEditor (Private APIs)/ResolutionControl',
16
+ title: 'BlockEditor/ResolutionControl',
17
17
  component: ResolutionTool,
18
+ tags: [ 'status-private' ],
18
19
  argTypes: {
19
20
  panelId: { control: false },
20
21
  onChange: { action: 'changed' },
21
22
  },
22
23
  };
23
24
 
24
- export const Default = ( { panelId, onChange: onChangeProp, ...props } ) => {
25
- const [ resolution, setResolution ] = useState( undefined );
26
- const resetAll = () => {
27
- setResolution( undefined );
25
+ export const Default = ( {
26
+ label,
27
+ panelId,
28
+ onChange: onChangeProp,
29
+ ...props
30
+ } ) => {
31
+ const [ attributes, setAttributes ] = useReducer(
32
+ ( prevState, nextState ) => ( { ...prevState, ...nextState } ),
33
+ {}
34
+ );
35
+ const { resolution } = attributes;
36
+ const resetAll = ( resetFilters = [] ) => {
37
+ let newAttributes = {};
38
+
39
+ resetFilters.forEach( ( resetFilter ) => {
40
+ newAttributes = {
41
+ ...newAttributes,
42
+ ...resetFilter( newAttributes ),
43
+ };
44
+ } );
45
+
46
+ setAttributes( newAttributes );
28
47
  onChangeProp( undefined );
29
48
  };
30
49
  return (
31
50
  <Panel>
32
- <ToolsPanel panelId={ panelId } resetAll={ resetAll }>
51
+ <ToolsPanel
52
+ label={ label }
53
+ panelId={ panelId }
54
+ resetAll={ resetAll }
55
+ >
33
56
  <ResolutionTool
34
57
  panelId={ panelId }
35
58
  onChange={ ( newValue ) => {
36
- setResolution( newValue );
59
+ setAttributes( { resolution: newValue } );
37
60
  onChangeProp( newValue );
38
61
  } }
39
62
  value={ resolution }
63
+ resetAllFilter={ () => ( {
64
+ resolution: undefined,
65
+ } ) }
40
66
  { ...props }
41
67
  />
42
68
  </ToolsPanel>
@@ -44,5 +70,7 @@ export const Default = ( { panelId, onChange: onChangeProp, ...props } ) => {
44
70
  );
45
71
  };
46
72
  Default.args = {
73
+ label: 'Settings',
74
+ defaultValue: 'full',
47
75
  panelId: 'panel-id',
48
76
  };
@@ -57,7 +57,7 @@ function ResponsiveBlockControl( props ) {
57
57
  );
58
58
 
59
59
  const toggleHelpText = __(
60
- 'Toggle between using the same value for all screen sizes or using a unique value per screen size.'
60
+ 'Choose whether to use the same value for all screen sizes or a unique value for each screen size.'
61
61
  );
62
62
 
63
63
  const defaultControl = renderDefaultControl(
@@ -6,7 +6,7 @@ import { isCollapsed, isEmpty } from '@wordpress/rich-text';
6
6
 
7
7
  export default ( props ) => ( element ) => {
8
8
  function onKeyDown( event ) {
9
- const { keyCode } = event;
9
+ const { keyCode, shiftKey } = event;
10
10
 
11
11
  if ( event.defaultPrevented ) {
12
12
  return;
@@ -30,6 +30,11 @@ export default ( props ) => ( element ) => {
30
30
  return;
31
31
  }
32
32
 
33
+ // Exclude shift+backspace as they are shortcuts for deleting blocks.
34
+ if ( shiftKey ) {
35
+ return;
36
+ }
37
+
33
38
  if ( onMerge ) {
34
39
  onMerge( ! isReverse );
35
40
  }
@@ -39,7 +39,7 @@ import FormatEdit from './format-edit';
39
39
  import { getAllowedFormats } from './utils';
40
40
  import { Content, valueToHTMLString } from './content';
41
41
  import { withDeprecations } from './with-deprecations';
42
- import { canBindBlock } from '../../hooks/use-bindings-attributes';
42
+ import { canBindBlock } from '../../utils/block-bindings';
43
43
  import BlockContext from '../block-context';
44
44
 
45
45
  export const keyboardShortcutContext = createContext();