@wordpress/block-editor 8.3.0 → 8.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +56 -18
  3. package/build/components/alignment-control/index.js +13 -6
  4. package/build/components/alignment-control/index.js.map +1 -1
  5. package/build/components/block-alignment-control/index.js +13 -6
  6. package/build/components/block-alignment-control/index.js.map +1 -1
  7. package/build/components/block-draggable/index.js +2 -3
  8. package/build/components/block-draggable/index.js.map +1 -1
  9. package/build/components/block-icon/index.js +4 -0
  10. package/build/components/block-icon/index.js.map +1 -1
  11. package/build/components/block-inspector/index.js +6 -1
  12. package/build/components/block-inspector/index.js.map +1 -1
  13. package/build/components/block-list/block-html.js +4 -1
  14. package/build/components/block-list/block-html.js.map +1 -1
  15. package/build/components/block-list/block.js +4 -1
  16. package/build/components/block-list/block.js.map +1 -1
  17. package/build/components/block-list/use-block-props/index.js +1 -6
  18. package/build/components/block-list/use-block-props/index.js.map +1 -1
  19. package/build/components/block-list/use-block-props/use-focus-first-element.js +22 -6
  20. package/build/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  21. package/build/components/block-list/use-block-props/use-focus-handler.js +7 -1
  22. package/build/components/block-list/use-block-props/use-focus-handler.js.map +1 -1
  23. package/build/components/block-list-appender/index.js +6 -1
  24. package/build/components/block-list-appender/index.js.map +1 -1
  25. package/build/components/block-lock/index.js +32 -0
  26. package/build/components/block-lock/index.js.map +1 -0
  27. package/build/components/block-lock/menu-item.js +67 -0
  28. package/build/components/block-lock/menu-item.js.map +1 -0
  29. package/build/components/block-lock/modal.js +134 -0
  30. package/build/components/block-lock/modal.js.map +1 -0
  31. package/build/components/block-lock/toolbar.js +78 -0
  32. package/build/components/block-lock/toolbar.js.map +1 -0
  33. package/build/components/block-mover/index.js +4 -0
  34. package/build/components/block-mover/index.js.map +1 -1
  35. package/build/components/block-settings-menu/block-settings-dropdown.js +75 -10
  36. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  37. package/build/components/block-settings-menu-controls/index.js +19 -9
  38. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  39. package/build/components/block-switcher/index.js +1 -1
  40. package/build/components/block-switcher/index.js.map +1 -1
  41. package/build/components/block-title/index.js +2 -2
  42. package/build/components/block-title/index.js.map +1 -1
  43. package/build/components/block-title/use-block-display-title.js +8 -6
  44. package/build/components/block-title/use-block-display-title.js.map +1 -1
  45. package/build/components/block-toolbar/block-name-context.js +17 -0
  46. package/build/components/block-toolbar/block-name-context.js.map +1 -0
  47. package/build/components/block-toolbar/block-toolbar-last-item.js +20 -0
  48. package/build/components/block-toolbar/block-toolbar-last-item.js.map +1 -0
  49. package/build/components/block-toolbar/index.js +24 -5
  50. package/build/components/block-toolbar/index.js.map +1 -1
  51. package/build/components/block-tools/index.js +0 -16
  52. package/build/components/block-tools/index.js.map +1 -1
  53. package/build/components/block-variation-transforms/index.js +92 -47
  54. package/build/components/block-variation-transforms/index.js.map +1 -1
  55. package/build/components/block-vertical-alignment-control/index.js +13 -6
  56. package/build/components/block-vertical-alignment-control/index.js.map +1 -1
  57. package/build/components/border-radius-control/index.js +0 -1
  58. package/build/components/border-radius-control/index.js.map +1 -1
  59. package/build/components/border-radius-control/utils.js +1 -1
  60. package/build/components/border-radius-control/utils.js.map +1 -1
  61. package/build/components/colors-gradients/control.js +3 -1
  62. package/build/components/colors-gradients/control.js.map +1 -1
  63. package/build/components/contrast-checker/index.js +4 -0
  64. package/build/components/contrast-checker/index.js.map +1 -1
  65. package/build/components/convert-to-group-buttons/index.js +8 -0
  66. package/build/components/convert-to-group-buttons/index.js.map +1 -1
  67. package/build/components/convert-to-group-buttons/toolbar.js +105 -0
  68. package/build/components/convert-to-group-buttons/toolbar.js.map +1 -0
  69. package/build/components/copy-handler/index.js +4 -0
  70. package/build/components/copy-handler/index.js.map +1 -1
  71. package/build/components/date-format-picker/index.js +132 -0
  72. package/build/components/date-format-picker/index.js.map +1 -0
  73. package/build/components/font-sizes/font-size-picker.js +4 -0
  74. package/build/components/font-sizes/font-size-picker.js.map +1 -1
  75. package/build/components/iframe/index.js +6 -9
  76. package/build/components/iframe/index.js.map +1 -1
  77. package/build/components/index.js +27 -0
  78. package/build/components/index.js.map +1 -1
  79. package/build/components/justify-content-control/index.js +13 -6
  80. package/build/components/justify-content-control/index.js.map +1 -1
  81. package/build/components/keyboard-shortcuts/index.js +1 -1
  82. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  83. package/build/components/line-height-control/index.js +15 -6
  84. package/build/components/line-height-control/index.js.map +1 -1
  85. package/build/components/list-view/block-select-button.js +24 -23
  86. package/build/components/list-view/block-select-button.js.map +1 -1
  87. package/build/components/list-view/block.js +38 -13
  88. package/build/components/list-view/block.js.map +1 -1
  89. package/build/components/list-view/branch.js +16 -13
  90. package/build/components/list-view/branch.js.map +1 -1
  91. package/build/components/list-view/index.js +7 -1
  92. package/build/components/list-view/index.js.map +1 -1
  93. package/build/components/list-view/use-block-selection.js +9 -2
  94. package/build/components/list-view/use-block-selection.js.map +1 -1
  95. package/build/components/media-replace-flow/index.js +4 -0
  96. package/build/components/media-replace-flow/index.js.map +1 -1
  97. package/build/components/multi-selection-inspector/index.js +1 -1
  98. package/build/components/multi-selection-inspector/index.js.map +1 -1
  99. package/build/components/rich-text/index.js +27 -5
  100. package/build/components/rich-text/index.js.map +1 -1
  101. package/build/components/rich-text/index.native.js +13 -9
  102. package/build/components/rich-text/index.native.js.map +1 -1
  103. package/build/components/rich-text/split-value.js +12 -2
  104. package/build/components/rich-text/split-value.js.map +1 -1
  105. package/build/components/rich-text/use-firefox-compat.js +49 -0
  106. package/build/components/rich-text/use-firefox-compat.js.map +1 -0
  107. package/build/components/rich-text/use-input-rules.js +34 -2
  108. package/build/components/rich-text/use-input-rules.js.map +1 -1
  109. package/build/components/skip-to-selected-block/index.js +4 -0
  110. package/build/components/skip-to-selected-block/index.js.map +1 -1
  111. package/build/components/url-popover/image-url-input-ui.js +11 -27
  112. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  113. package/build/components/writing-flow/index.js +9 -1
  114. package/build/components/writing-flow/index.js.map +1 -1
  115. package/build/components/writing-flow/use-arrow-nav.js +3 -44
  116. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  117. package/build/components/writing-flow/use-click-selection.js +68 -0
  118. package/build/components/writing-flow/use-click-selection.js.map +1 -0
  119. package/build/components/writing-flow/use-drag-selection.js +134 -0
  120. package/build/components/writing-flow/use-drag-selection.js.map +1 -0
  121. package/build/components/writing-flow/use-input.js +116 -0
  122. package/build/components/writing-flow/use-input.js.map +1 -0
  123. package/build/components/writing-flow/use-multi-selection.js +18 -38
  124. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  125. package/build/components/writing-flow/use-selection-observer.js +161 -0
  126. package/build/components/writing-flow/use-selection-observer.js.map +1 -0
  127. package/build/components/writing-flow/use-tab-nav.js +1 -8
  128. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  129. package/build/hooks/anchor.js +7 -6
  130. package/build/hooks/anchor.js.map +1 -1
  131. package/build/hooks/border-color.js +3 -3
  132. package/build/hooks/border-color.js.map +1 -1
  133. package/build/hooks/border.js +0 -14
  134. package/build/hooks/border.js.map +1 -1
  135. package/build/hooks/color.js +20 -17
  136. package/build/hooks/color.js.map +1 -1
  137. package/build/hooks/font-family.js +5 -1
  138. package/build/hooks/font-family.js.map +1 -1
  139. package/build/hooks/font-size.js +4 -2
  140. package/build/hooks/font-size.js.map +1 -1
  141. package/build/hooks/gap.js +77 -5
  142. package/build/hooks/gap.js.map +1 -1
  143. package/build/hooks/layout.js +7 -2
  144. package/build/hooks/layout.js.map +1 -1
  145. package/build/hooks/style.js +34 -3
  146. package/build/hooks/style.js.map +1 -1
  147. package/build/hooks/utils.js +29 -0
  148. package/build/hooks/utils.js.map +1 -1
  149. package/build/layouts/flex.js +82 -15
  150. package/build/layouts/flex.js.map +1 -1
  151. package/build/layouts/flow.js +22 -13
  152. package/build/layouts/flow.js.map +1 -1
  153. package/build/store/actions.js +297 -51
  154. package/build/store/actions.js.map +1 -1
  155. package/build/store/defaults.js +5 -1
  156. package/build/store/defaults.js.map +1 -1
  157. package/build/store/reducer.js +25 -13
  158. package/build/store/reducer.js.map +1 -1
  159. package/build/store/selectors.js +171 -21
  160. package/build/store/selectors.js.map +1 -1
  161. package/build/utils/dom.js +2 -1
  162. package/build/utils/dom.js.map +1 -1
  163. package/build-module/components/alignment-control/index.js +12 -4
  164. package/build-module/components/alignment-control/index.js.map +1 -1
  165. package/build-module/components/block-alignment-control/index.js +12 -4
  166. package/build-module/components/block-alignment-control/index.js.map +1 -1
  167. package/build-module/components/block-draggable/index.js +2 -3
  168. package/build-module/components/block-draggable/index.js.map +1 -1
  169. package/build-module/components/block-icon/index.js +4 -0
  170. package/build-module/components/block-icon/index.js.map +1 -1
  171. package/build-module/components/block-inspector/index.js +6 -1
  172. package/build-module/components/block-inspector/index.js.map +1 -1
  173. package/build-module/components/block-list/block-html.js +5 -2
  174. package/build-module/components/block-list/block-html.js.map +1 -1
  175. package/build-module/components/block-list/block.js +5 -2
  176. package/build-module/components/block-list/block.js.map +1 -1
  177. package/build-module/components/block-list/use-block-props/index.js +1 -4
  178. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  179. package/build-module/components/block-list/use-block-props/use-focus-first-element.js +22 -6
  180. package/build-module/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  181. package/build-module/components/block-list/use-block-props/use-focus-handler.js +7 -1
  182. package/build-module/components/block-list/use-block-props/use-focus-handler.js.map +1 -1
  183. package/build-module/components/block-list-appender/index.js +6 -1
  184. package/build-module/components/block-list-appender/index.js.map +1 -1
  185. package/build-module/components/block-lock/index.js +4 -0
  186. package/build-module/components/block-lock/index.js.map +1 -0
  187. package/build-module/components/block-lock/menu-item.js +53 -0
  188. package/build-module/components/block-lock/menu-item.js.map +1 -0
  189. package/build-module/components/block-lock/modal.js +119 -0
  190. package/build-module/components/block-lock/modal.js.map +1 -0
  191. package/build-module/components/block-lock/toolbar.js +63 -0
  192. package/build-module/components/block-lock/toolbar.js.map +1 -0
  193. package/build-module/components/block-mover/index.js +4 -0
  194. package/build-module/components/block-mover/index.js.map +1 -1
  195. package/build-module/components/block-settings-menu/block-settings-dropdown.js +75 -12
  196. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  197. package/build-module/components/block-settings-menu-controls/index.js +18 -9
  198. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  199. package/build-module/components/block-switcher/index.js +2 -2
  200. package/build-module/components/block-switcher/index.js.map +1 -1
  201. package/build-module/components/block-title/index.js +2 -2
  202. package/build-module/components/block-title/index.js.map +1 -1
  203. package/build-module/components/block-title/use-block-display-title.js +8 -6
  204. package/build-module/components/block-title/use-block-display-title.js.map +1 -1
  205. package/build-module/components/block-toolbar/block-name-context.js +9 -0
  206. package/build-module/components/block-toolbar/block-name-context.js.map +1 -0
  207. package/build-module/components/block-toolbar/block-toolbar-last-item.js +11 -0
  208. package/build-module/components/block-toolbar/block-toolbar-last-item.js.map +1 -0
  209. package/build-module/components/block-toolbar/index.js +19 -4
  210. package/build-module/components/block-toolbar/index.js.map +1 -1
  211. package/build-module/components/block-tools/index.js +0 -16
  212. package/build-module/components/block-tools/index.js.map +1 -1
  213. package/build-module/components/block-variation-transforms/index.js +95 -49
  214. package/build-module/components/block-variation-transforms/index.js.map +1 -1
  215. package/build-module/components/block-vertical-alignment-control/index.js +12 -4
  216. package/build-module/components/block-vertical-alignment-control/index.js.map +1 -1
  217. package/build-module/components/border-radius-control/index.js +0 -1
  218. package/build-module/components/border-radius-control/index.js.map +1 -1
  219. package/build-module/components/border-radius-control/utils.js +1 -1
  220. package/build-module/components/border-radius-control/utils.js.map +1 -1
  221. package/build-module/components/colors-gradients/control.js +3 -1
  222. package/build-module/components/colors-gradients/control.js.map +1 -1
  223. package/build-module/components/contrast-checker/index.js +4 -0
  224. package/build-module/components/contrast-checker/index.js.map +1 -1
  225. package/build-module/components/convert-to-group-buttons/index.js +2 -1
  226. package/build-module/components/convert-to-group-buttons/index.js.map +1 -1
  227. package/build-module/components/convert-to-group-buttons/toolbar.js +90 -0
  228. package/build-module/components/convert-to-group-buttons/toolbar.js.map +1 -0
  229. package/build-module/components/copy-handler/index.js +4 -0
  230. package/build-module/components/copy-handler/index.js.map +1 -1
  231. package/build-module/components/date-format-picker/index.js +122 -0
  232. package/build-module/components/date-format-picker/index.js.map +1 -0
  233. package/build-module/components/font-sizes/font-size-picker.js +4 -0
  234. package/build-module/components/font-sizes/font-size-picker.js.map +1 -1
  235. package/build-module/components/iframe/index.js +6 -9
  236. package/build-module/components/iframe/index.js.map +1 -1
  237. package/build-module/components/index.js +3 -0
  238. package/build-module/components/index.js.map +1 -1
  239. package/build-module/components/justify-content-control/index.js +12 -4
  240. package/build-module/components/justify-content-control/index.js.map +1 -1
  241. package/build-module/components/keyboard-shortcuts/index.js +1 -1
  242. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  243. package/build-module/components/line-height-control/index.js +14 -5
  244. package/build-module/components/line-height-control/index.js.map +1 -1
  245. package/build-module/components/list-view/block-select-button.js +24 -23
  246. package/build-module/components/list-view/block-select-button.js.map +1 -1
  247. package/build-module/components/list-view/block.js +36 -13
  248. package/build-module/components/list-view/block.js.map +1 -1
  249. package/build-module/components/list-view/branch.js +16 -13
  250. package/build-module/components/list-view/branch.js.map +1 -1
  251. package/build-module/components/list-view/index.js +7 -1
  252. package/build-module/components/list-view/index.js.map +1 -1
  253. package/build-module/components/list-view/use-block-selection.js +10 -3
  254. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  255. package/build-module/components/media-replace-flow/index.js +4 -0
  256. package/build-module/components/media-replace-flow/index.js.map +1 -1
  257. package/build-module/components/multi-selection-inspector/index.js +2 -2
  258. package/build-module/components/multi-selection-inspector/index.js.map +1 -1
  259. package/build-module/components/rich-text/index.js +26 -5
  260. package/build-module/components/rich-text/index.js.map +1 -1
  261. package/build-module/components/rich-text/index.native.js +13 -9
  262. package/build-module/components/rich-text/index.native.js.map +1 -1
  263. package/build-module/components/rich-text/split-value.js +12 -2
  264. package/build-module/components/rich-text/split-value.js.map +1 -1
  265. package/build-module/components/rich-text/use-firefox-compat.js +39 -0
  266. package/build-module/components/rich-text/use-firefox-compat.js.map +1 -0
  267. package/build-module/components/rich-text/use-input-rules.js +35 -4
  268. package/build-module/components/rich-text/use-input-rules.js.map +1 -1
  269. package/build-module/components/skip-to-selected-block/index.js +4 -0
  270. package/build-module/components/skip-to-selected-block/index.js.map +1 -1
  271. package/build-module/components/url-popover/image-url-input-ui.js +12 -28
  272. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  273. package/build-module/components/writing-flow/index.js +5 -1
  274. package/build-module/components/writing-flow/index.js.map +1 -1
  275. package/build-module/components/writing-flow/use-arrow-nav.js +4 -45
  276. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  277. package/build-module/components/writing-flow/use-click-selection.js +57 -0
  278. package/build-module/components/writing-flow/use-click-selection.js.map +1 -0
  279. package/build-module/components/writing-flow/use-drag-selection.js +124 -0
  280. package/build-module/components/writing-flow/use-drag-selection.js.map +1 -0
  281. package/build-module/components/writing-flow/use-input.js +104 -0
  282. package/build-module/components/writing-flow/use-input.js.map +1 -0
  283. package/build-module/components/writing-flow/use-multi-selection.js +18 -37
  284. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  285. package/build-module/components/writing-flow/use-selection-observer.js +150 -0
  286. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -0
  287. package/build-module/components/writing-flow/use-tab-nav.js +1 -9
  288. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  289. package/build-module/hooks/anchor.js +7 -6
  290. package/build-module/hooks/anchor.js.map +1 -1
  291. package/build-module/hooks/border-color.js +5 -5
  292. package/build-module/hooks/border-color.js.map +1 -1
  293. package/build-module/hooks/border.js +0 -12
  294. package/build-module/hooks/border.js.map +1 -1
  295. package/build-module/hooks/color.js +19 -18
  296. package/build-module/hooks/color.js.map +1 -1
  297. package/build-module/hooks/font-family.js +3 -1
  298. package/build-module/hooks/font-family.js.map +1 -1
  299. package/build-module/hooks/font-size.js +4 -3
  300. package/build-module/hooks/font-size.js.map +1 -1
  301. package/build-module/hooks/gap.js +75 -7
  302. package/build-module/hooks/gap.js.map +1 -1
  303. package/build-module/hooks/layout.js +7 -2
  304. package/build-module/hooks/layout.js.map +1 -1
  305. package/build-module/hooks/style.js +33 -3
  306. package/build-module/hooks/style.js.map +1 -1
  307. package/build-module/hooks/utils.js +26 -0
  308. package/build-module/hooks/utils.js.map +1 -1
  309. package/build-module/layouts/flex.js +81 -16
  310. package/build-module/layouts/flex.js.map +1 -1
  311. package/build-module/layouts/flow.js +20 -13
  312. package/build-module/layouts/flow.js.map +1 -1
  313. package/build-module/store/actions.js +286 -49
  314. package/build-module/store/actions.js.map +1 -1
  315. package/build-module/store/defaults.js +5 -1
  316. package/build-module/store/defaults.js.map +1 -1
  317. package/build-module/store/reducer.js +25 -13
  318. package/build-module/store/reducer.js.map +1 -1
  319. package/build-module/store/selectors.js +162 -20
  320. package/build-module/store/selectors.js.map +1 -1
  321. package/build-module/utils/dom.js +2 -1
  322. package/build-module/utils/dom.js.map +1 -1
  323. package/build-style/style-rtl.css +214 -24
  324. package/build-style/style.css +214 -24
  325. package/build-types/utils/dom.d.ts.map +1 -1
  326. package/package.json +28 -27
  327. package/src/components/alignment-control/index.js +9 -4
  328. package/src/components/block-alignment-control/index.js +9 -4
  329. package/src/components/block-draggable/index.js +2 -5
  330. package/src/components/block-icon/index.js +3 -0
  331. package/src/components/block-inspector/index.js +4 -0
  332. package/src/components/block-list/block-html.js +8 -4
  333. package/src/components/block-list/block.js +5 -1
  334. package/src/components/block-list/style.scss +4 -5
  335. package/src/components/block-list/use-block-props/index.js +0 -5
  336. package/src/components/block-list/use-block-props/use-focus-first-element.js +27 -6
  337. package/src/components/block-list/use-block-props/use-focus-handler.js +8 -0
  338. package/src/components/block-list-appender/index.js +5 -0
  339. package/src/components/block-lock/index.js +3 -0
  340. package/src/components/block-lock/menu-item.js +59 -0
  341. package/src/components/block-lock/modal.js +170 -0
  342. package/src/components/block-lock/style.scss +70 -0
  343. package/src/components/block-lock/toolbar.js +68 -0
  344. package/src/components/block-mover/index.js +3 -0
  345. package/src/components/block-mover/style.scss +4 -0
  346. package/src/components/block-settings-menu/block-settings-dropdown.js +109 -9
  347. package/src/components/block-settings-menu-controls/index.js +33 -12
  348. package/src/components/block-switcher/index.js +2 -2
  349. package/src/components/block-switcher/style.scss +8 -1
  350. package/src/components/block-switcher/test/index.js +2 -2
  351. package/src/components/block-title/README.md +6 -1
  352. package/src/components/block-title/index.js +2 -2
  353. package/src/components/block-title/test/index.js +43 -1
  354. package/src/components/block-title/use-block-display-title.js +10 -7
  355. package/src/components/block-toolbar/block-name-context.js +8 -0
  356. package/src/components/block-toolbar/block-toolbar-last-item.js +12 -0
  357. package/src/components/block-toolbar/index.js +24 -2
  358. package/src/components/block-toolbar/style.scss +10 -0
  359. package/src/components/block-tools/index.js +0 -19
  360. package/src/components/block-tools/style.scss +27 -0
  361. package/src/components/block-variation-transforms/index.js +105 -36
  362. package/src/components/block-variation-transforms/style.scss +1 -1
  363. package/src/components/block-vertical-alignment-control/index.js +9 -4
  364. package/src/components/border-radius-control/index.js +0 -1
  365. package/src/components/border-radius-control/test/utils.js +4 -0
  366. package/src/components/border-radius-control/utils.js +2 -1
  367. package/src/components/button-block-appender/style.scss +5 -1
  368. package/src/components/color-palette/test/__snapshots__/control.js.snap +70 -4
  369. package/src/components/colors-gradients/control.js +1 -1
  370. package/src/components/colors-gradients/style.scss +6 -0
  371. package/src/components/contrast-checker/index.js +3 -0
  372. package/src/components/convert-to-group-buttons/index.js +6 -1
  373. package/src/components/convert-to-group-buttons/toolbar.js +87 -0
  374. package/src/components/copy-handler/index.js +3 -0
  375. package/src/components/date-format-picker/README.md +58 -0
  376. package/src/components/date-format-picker/index.js +161 -0
  377. package/src/components/date-format-picker/style.scss +31 -0
  378. package/src/components/font-sizes/font-size-picker.js +3 -0
  379. package/src/components/iframe/index.js +5 -7
  380. package/src/components/index.js +3 -0
  381. package/src/components/justify-content-control/index.js +9 -4
  382. package/src/components/keyboard-shortcuts/index.js +1 -1
  383. package/src/components/line-height-control/index.js +11 -6
  384. package/src/components/link-control/README.md +1 -1
  385. package/src/components/list-view/block-select-button.js +21 -30
  386. package/src/components/list-view/block.js +55 -13
  387. package/src/components/list-view/branch.js +37 -15
  388. package/src/components/list-view/index.js +6 -0
  389. package/src/components/list-view/style.scss +56 -14
  390. package/src/components/list-view/use-block-selection.js +15 -2
  391. package/src/components/media-placeholder/README.md +8 -0
  392. package/src/components/media-replace-flow/index.js +3 -0
  393. package/src/components/multi-selection-inspector/index.js +2 -2
  394. package/src/components/rich-text/index.js +25 -2
  395. package/src/components/rich-text/index.native.js +24 -8
  396. package/src/components/rich-text/split-value.js +5 -1
  397. package/src/components/rich-text/use-firefox-compat.js +39 -0
  398. package/src/components/rich-text/use-input-rules.js +40 -3
  399. package/src/components/skip-to-selected-block/index.js +3 -0
  400. package/src/components/url-input/style.scss +3 -2
  401. package/src/components/url-popover/image-url-input-ui.js +16 -29
  402. package/src/components/writing-flow/index.js +8 -0
  403. package/src/components/writing-flow/readme.md +28 -0
  404. package/src/components/writing-flow/use-arrow-nav.js +4 -53
  405. package/src/components/writing-flow/use-click-selection.js +65 -0
  406. package/src/components/writing-flow/use-drag-selection.js +126 -0
  407. package/src/components/writing-flow/use-input.js +112 -0
  408. package/src/components/writing-flow/use-multi-selection.js +13 -36
  409. package/src/components/writing-flow/use-selection-observer.js +153 -0
  410. package/src/components/writing-flow/use-tab-nav.js +1 -11
  411. package/src/hooks/anchor.js +8 -6
  412. package/src/hooks/border-color.js +5 -5
  413. package/src/hooks/border.js +0 -13
  414. package/src/hooks/color.js +51 -24
  415. package/src/hooks/font-family.js +5 -2
  416. package/src/hooks/font-size.js +10 -7
  417. package/src/hooks/gap.js +91 -12
  418. package/src/hooks/layout.js +11 -1
  419. package/src/hooks/style.js +40 -4
  420. package/src/hooks/test/gap.js +66 -0
  421. package/src/hooks/test/style.js +94 -0
  422. package/src/hooks/test/utils.js +1 -1
  423. package/src/hooks/utils.js +26 -0
  424. package/src/layouts/flex.js +93 -6
  425. package/src/layouts/flow.js +28 -12
  426. package/src/store/actions.js +349 -32
  427. package/src/store/defaults.js +7 -1
  428. package/src/store/reducer.js +25 -10
  429. package/src/store/selectors.js +207 -25
  430. package/src/store/test/selectors.js +305 -5
  431. package/src/style.scss +2 -0
  432. package/src/utils/dom.js +2 -1
  433. package/tsconfig.tsbuildinfo +1 -1
  434. package/build/components/block-list/use-block-props/use-multi-selection.js +0 -205
  435. package/build/components/block-list/use-block-props/use-multi-selection.js.map +0 -1
  436. package/build/components/block-list/use-block-props/use-scroll-into-view.js +0 -77
  437. package/build/components/block-list/use-block-props/use-scroll-into-view.js.map +0 -1
  438. package/build-module/components/block-list/use-block-props/use-multi-selection.js +0 -192
  439. package/build-module/components/block-list/use-block-props/use-multi-selection.js.map +0 -1
  440. package/build-module/components/block-list/use-block-props/use-scroll-into-view.js +0 -63
  441. package/build-module/components/block-list/use-block-props/use-scroll-into-view.js.map +0 -1
  442. package/src/components/block-list/use-block-props/use-multi-selection.js +0 -227
  443. package/src/components/block-list/use-block-props/use-scroll-into-view.js +0 -73
@@ -31,9 +31,7 @@ import { useBlockMovingModeClassNames } from './use-block-moving-mode-class-name
31
31
  import { useFocusHandler } from './use-focus-handler';
32
32
  import { useEventHandlers } from './use-selected-block-event-handlers';
33
33
  import { useNavModeExit } from './use-nav-mode-exit';
34
- import { useScrollIntoView } from './use-scroll-into-view';
35
34
  import { useBlockRefProvider } from './use-block-refs';
36
- import { useMultiSelection } from './use-multi-selection';
37
35
  import { useIntersectionObserver } from './use-intersection-observer';
38
36
  import { store as blockEditorStore } from '../../../store';
39
37
 
@@ -115,11 +113,8 @@ export function useBlockProps( props = {}, { __unstableIsHtml } = {} ) {
115
113
  const mergedRefs = useMergeRefs( [
116
114
  props.ref,
117
115
  useFocusFirstElement( clientId ),
118
- // Must happen after focus because we check for focus in the block.
119
- useScrollIntoView( clientId ),
120
116
  useBlockRefProvider( clientId ),
121
117
  useFocusHandler( clientId ),
122
- useMultiSelection( clientId ),
123
118
  useEventHandlers( clientId ),
124
119
  useNavModeExit( clientId ),
125
120
  useIsHovered(),
@@ -7,7 +7,12 @@ import { first, last } from 'lodash';
7
7
  * WordPress dependencies
8
8
  */
9
9
  import { useEffect, useRef } from '@wordpress/element';
10
- import { focus, isTextField, placeCaretAtHorizontalEdge } from '@wordpress/dom';
10
+ import {
11
+ focus,
12
+ isFormElement,
13
+ isTextField,
14
+ placeCaretAtHorizontalEdge,
15
+ } from '@wordpress/dom';
11
16
  import { useSelect } from '@wordpress/data';
12
17
 
13
18
  /**
@@ -15,7 +20,6 @@ import { useSelect } from '@wordpress/data';
15
20
  */
16
21
  import { isInsideRootBlock } from '../../../utils/dom';
17
22
  import { store as blockEditorStore } from '../../../store';
18
- import { setContentEditableWrapper } from './use-multi-selection';
19
23
 
20
24
  /** @typedef {import('@wordpress/element').RefObject} RefObject */
21
25
 
@@ -32,7 +36,6 @@ function useInitialPosition( clientId ) {
32
36
  ( select ) => {
33
37
  const {
34
38
  getSelectedBlocksInitialCaretPosition,
35
- isMultiSelecting,
36
39
  isNavigationMode,
37
40
  isBlockSelected,
38
41
  } = select( blockEditorStore );
@@ -41,7 +44,7 @@ function useInitialPosition( clientId ) {
41
44
  return;
42
45
  }
43
46
 
44
- if ( isMultiSelecting() || isNavigationMode() ) {
47
+ if ( isNavigationMode() ) {
45
48
  return;
46
49
  }
47
50
 
@@ -63,8 +66,14 @@ function useInitialPosition( clientId ) {
63
66
  export function useFocusFirstElement( clientId ) {
64
67
  const ref = useRef();
65
68
  const initialPosition = useInitialPosition( clientId );
69
+ const { isBlockSelected, isMultiSelecting } = useSelect( blockEditorStore );
66
70
 
67
71
  useEffect( () => {
72
+ // Check if the block is still selected at the time this effect runs.
73
+ if ( ! isBlockSelected( clientId ) || isMultiSelecting() ) {
74
+ return;
75
+ }
76
+
68
77
  if ( initialPosition === undefined || initialPosition === null ) {
69
78
  return;
70
79
  }
@@ -96,10 +105,22 @@ export function useFocusFirstElement( clientId ) {
96
105
  return;
97
106
  }
98
107
 
99
- setContentEditableWrapper( ref.current, false );
108
+ // Check to see if element is focussable before a generic caret insert.
109
+ if ( ! ref.current.getAttribute( 'contenteditable' ) ) {
110
+ const focusElement = focus.tabbable.findNext( ref.current );
111
+ // Make sure focusElement is valid, contained in the same block, and a form field.
112
+ if (
113
+ focusElement &&
114
+ isInsideRootBlock( ref.current, focusElement ) &&
115
+ isFormElement( focusElement )
116
+ ) {
117
+ focusElement.focus();
118
+ return;
119
+ }
120
+ }
100
121
 
101
122
  placeCaretAtHorizontalEdge( target, isReverse );
102
- }, [ initialPosition ] );
123
+ }, [ initialPosition, clientId ] );
103
124
 
104
125
  return ref;
105
126
  }
@@ -30,6 +30,14 @@ export function useFocusHandler( clientId ) {
30
30
  * @param {FocusEvent} event Focus event.
31
31
  */
32
32
  function onFocus( event ) {
33
+ // When the whole editor is editable, let writing flow handle
34
+ // selection.
35
+ if (
36
+ node.parentElement.closest( '[contenteditable="true"]' )
37
+ ) {
38
+ return;
39
+ }
40
+
33
41
  // Check synchronously because a non-selected block might be
34
42
  // getting data through `useSelect` asynchronously.
35
43
  if ( isBlockSelected( clientId ) ) {
@@ -73,6 +73,11 @@ function BlockListAppender( {
73
73
  'block-list-appender wp-block',
74
74
  className
75
75
  ) }
76
+ // Needed in case the whole editor is content editable (for multi
77
+ // selection). It fixes an edge case where ArrowDown and ArrowRight
78
+ // should collapse the selection to the end of that selection and
79
+ // not into the appender.
80
+ contentEditable={ false }
76
81
  // The appender exists to let you add the first Paragraph before
77
82
  // any is inserted. To that end, this appender should visually be
78
83
  // presented as a block. That means theme CSS should style it as if
@@ -0,0 +1,3 @@
1
+ export { default as BlockLockMenuItem } from './menu-item';
2
+ export { default as BlockLockModal } from './modal';
3
+ export { default as BlockLockToolbar } from './toolbar';
@@ -0,0 +1,59 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __ } from '@wordpress/i18n';
5
+ import { useReducer } from '@wordpress/element';
6
+ import { MenuItem } from '@wordpress/components';
7
+ import { useSelect } from '@wordpress/data';
8
+ import { lock, unlock } from '@wordpress/icons';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import BlockLockModal from './modal';
14
+ import { store as blockEditorStore } from '../../store';
15
+
16
+ export default function BlockLockMenuItem( { clientId } ) {
17
+ const { canLockBlock, isLocked } = useSelect(
18
+ ( select ) => {
19
+ const {
20
+ canMoveBlock,
21
+ canRemoveBlock,
22
+ canLockBlockType,
23
+ getBlockName,
24
+ getBlockRootClientId,
25
+ } = select( blockEditorStore );
26
+ const rootClientId = getBlockRootClientId( clientId );
27
+
28
+ return {
29
+ canLockBlock: canLockBlockType( getBlockName( clientId ) ),
30
+ isLocked:
31
+ ! canMoveBlock( clientId, rootClientId ) ||
32
+ ! canRemoveBlock( clientId, rootClientId ),
33
+ };
34
+ },
35
+ [ clientId ]
36
+ );
37
+
38
+ const [ isModalOpen, toggleModal ] = useReducer(
39
+ ( isActive ) => ! isActive,
40
+ false
41
+ );
42
+
43
+ if ( ! canLockBlock ) {
44
+ return null;
45
+ }
46
+
47
+ const label = isLocked ? __( 'Unlock' ) : __( 'Lock' );
48
+
49
+ return (
50
+ <>
51
+ <MenuItem icon={ isLocked ? unlock : lock } onClick={ toggleModal }>
52
+ { label }
53
+ </MenuItem>
54
+ { isModalOpen && (
55
+ <BlockLockModal clientId={ clientId } onClose={ toggleModal } />
56
+ ) }
57
+ </>
58
+ );
59
+ }
@@ -0,0 +1,170 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __, sprintf } from '@wordpress/i18n';
5
+ import { useEffect, useState } from '@wordpress/element';
6
+ import {
7
+ Button,
8
+ CheckboxControl,
9
+ Flex,
10
+ FlexItem,
11
+ Icon,
12
+ Modal,
13
+ } from '@wordpress/components';
14
+ import { lock as lockIcon, unlock as unlockIcon } from '@wordpress/icons';
15
+ import { useInstanceId } from '@wordpress/compose';
16
+ import { useDispatch, useSelect } from '@wordpress/data';
17
+
18
+ /**
19
+ * Internal dependencies
20
+ */
21
+ import useBlockDisplayInformation from '../use-block-display-information';
22
+ import { store as blockEditorStore } from '../../store';
23
+
24
+ export default function BlockLockModal( { clientId, onClose } ) {
25
+ const [ lock, setLock ] = useState( { move: false, remove: false } );
26
+ const { canMove, canRemove } = useSelect(
27
+ ( select ) => {
28
+ const {
29
+ canMoveBlock,
30
+ canRemoveBlock,
31
+ getBlockRootClientId,
32
+ } = select( blockEditorStore );
33
+ const rootClientId = getBlockRootClientId( clientId );
34
+
35
+ return {
36
+ canMove: canMoveBlock( clientId, rootClientId ),
37
+ canRemove: canRemoveBlock( clientId, rootClientId ),
38
+ };
39
+ },
40
+ [ clientId ]
41
+ );
42
+ const { updateBlockAttributes } = useDispatch( blockEditorStore );
43
+ const blockInformation = useBlockDisplayInformation( clientId );
44
+ const instanceId = useInstanceId(
45
+ BlockLockModal,
46
+ 'block-editor-block-lock-modal__options-title'
47
+ );
48
+
49
+ useEffect( () => {
50
+ setLock( {
51
+ move: ! canMove,
52
+ remove: ! canRemove,
53
+ } );
54
+ }, [ canMove, canRemove ] );
55
+
56
+ const isAllChecked = Object.values( lock ).every( Boolean );
57
+ const isIndeterminate =
58
+ Object.values( lock ).some( Boolean ) && ! isAllChecked;
59
+
60
+ return (
61
+ <Modal
62
+ title={ sprintf(
63
+ /* translators: %s: Name of the block. */
64
+ __( 'Lock %s' ),
65
+ blockInformation.title
66
+ ) }
67
+ overlayClassName="block-editor-block-lock-modal"
68
+ closeLabel={ __( 'Close' ) }
69
+ onRequestClose={ onClose }
70
+ >
71
+ <form
72
+ onSubmit={ ( event ) => {
73
+ event.preventDefault();
74
+ updateBlockAttributes( [ clientId ], { lock } );
75
+ onClose();
76
+ } }
77
+ >
78
+ <p>
79
+ { __(
80
+ 'Choose specific attributes to restrict or lock all available options.'
81
+ ) }
82
+ </p>
83
+ <div
84
+ role="group"
85
+ aria-labelledby={ instanceId }
86
+ className="block-editor-block-lock-modal__options"
87
+ >
88
+ <CheckboxControl
89
+ className="block-editor-block-lock-modal__options-title"
90
+ label={
91
+ <span id={ instanceId }>{ __( 'Lock all' ) }</span>
92
+ }
93
+ checked={ isAllChecked }
94
+ indeterminate={ isIndeterminate }
95
+ onChange={ ( newValue ) =>
96
+ setLock( {
97
+ move: newValue,
98
+ remove: newValue,
99
+ } )
100
+ }
101
+ />
102
+ <ul className="block-editor-block-lock-modal__checklist">
103
+ <li className="block-editor-block-lock-modal__checklist-item">
104
+ <CheckboxControl
105
+ label={
106
+ <>
107
+ { __( 'Disable movement' ) }
108
+ <Icon
109
+ icon={
110
+ lock.move
111
+ ? lockIcon
112
+ : unlockIcon
113
+ }
114
+ />
115
+ </>
116
+ }
117
+ checked={ lock.move }
118
+ onChange={ ( move ) =>
119
+ setLock( ( prevLock ) => ( {
120
+ ...prevLock,
121
+ move,
122
+ } ) )
123
+ }
124
+ />
125
+ </li>
126
+ <li className="block-editor-block-lock-modal__checklist-item">
127
+ <CheckboxControl
128
+ label={
129
+ <>
130
+ { __( 'Prevent removal' ) }
131
+ <Icon
132
+ icon={
133
+ lock.remove
134
+ ? lockIcon
135
+ : unlockIcon
136
+ }
137
+ />
138
+ </>
139
+ }
140
+ checked={ lock.remove }
141
+ onChange={ ( remove ) =>
142
+ setLock( ( prevLock ) => ( {
143
+ ...prevLock,
144
+ remove,
145
+ } ) )
146
+ }
147
+ />
148
+ </li>
149
+ </ul>
150
+ </div>
151
+ <Flex
152
+ className="block-editor-block-lock-modal__actions"
153
+ justify="flex-end"
154
+ expanded={ false }
155
+ >
156
+ <FlexItem>
157
+ <Button variant="tertiary" onClick={ onClose }>
158
+ { __( 'Cancel' ) }
159
+ </Button>
160
+ </FlexItem>
161
+ <FlexItem>
162
+ <Button variant="primary" type="submit">
163
+ { __( 'Apply' ) }
164
+ </Button>
165
+ </FlexItem>
166
+ </Flex>
167
+ </form>
168
+ </Modal>
169
+ );
170
+ }
@@ -0,0 +1,70 @@
1
+ .block-editor-block-lock-modal {
2
+ z-index: z-index(".block-editor-block-lock-modal");
3
+
4
+ .components-modal__frame {
5
+ @include break-small() {
6
+ max-width: $break-mobile;
7
+ }
8
+ }
9
+ }
10
+
11
+ .block-editor-block-lock-modal__checklist {
12
+ margin: 0;
13
+ }
14
+
15
+ .block-editor-block-lock-modal__options-title {
16
+ padding: $grid-unit-15 0;
17
+
18
+ .components-checkbox-control__label {
19
+ font-weight: 600;
20
+ }
21
+
22
+ .components-base-control__field {
23
+ align-items: center;
24
+ display: flex;
25
+ margin: 0;
26
+ }
27
+ }
28
+ .block-editor-block-lock-modal__checklist-item {
29
+ margin-bottom: 0;
30
+ padding: $grid-unit-15 0 $grid-unit-15 $grid-unit-40;
31
+
32
+ .components-base-control__field {
33
+ align-items: center;
34
+ display: flex;
35
+ margin: 0;
36
+ }
37
+
38
+ .components-checkbox-control__label {
39
+ display: flex;
40
+ align-items: center;
41
+ justify-content: space-between;
42
+ flex-grow: 1;
43
+
44
+ svg {
45
+ margin-right: $grid-unit-15;
46
+ fill: $gray-900;
47
+ }
48
+ }
49
+
50
+ &:hover {
51
+ background-color: $gray-100;
52
+ border-radius: $radius-block-ui;
53
+ }
54
+ }
55
+
56
+ .block-editor-block-lock-modal__actions {
57
+ margin-top: $grid-unit-30;
58
+ }
59
+
60
+ .block-editor-block-lock-toolbar {
61
+ .components-button.has-icon {
62
+ min-width: $button-size-small + $grid-unit-15 !important;
63
+ padding-left: 0 !important;
64
+
65
+ &:focus::before {
66
+ left: 0 !important;
67
+ right: $grid-unit-15 !important;
68
+ }
69
+ }
70
+ }
@@ -0,0 +1,68 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __, sprintf } from '@wordpress/i18n';
5
+ import { ToolbarButton, ToolbarGroup } from '@wordpress/components';
6
+ import { useReducer } from '@wordpress/element';
7
+ import { lock } from '@wordpress/icons';
8
+ import { useSelect } from '@wordpress/data';
9
+
10
+ /**
11
+ * Internal dependencies
12
+ */
13
+ import BlockLockModal from './modal';
14
+ import useBlockDisplayInformation from '../use-block-display-information';
15
+ import { store as blockEditorStore } from '../../store';
16
+
17
+ export default function BlockLockToolbar( { clientId } ) {
18
+ const blockInformation = useBlockDisplayInformation( clientId );
19
+ const { canMove, canRemove, canLockBlock } = useSelect(
20
+ ( select ) => {
21
+ const {
22
+ canMoveBlock,
23
+ canRemoveBlock,
24
+ canLockBlockType,
25
+ getBlockName,
26
+ } = select( blockEditorStore );
27
+
28
+ return {
29
+ canMove: canMoveBlock( clientId ),
30
+ canRemove: canRemoveBlock( clientId ),
31
+ canLockBlock: canLockBlockType( getBlockName( clientId ) ),
32
+ };
33
+ },
34
+ [ clientId ]
35
+ );
36
+
37
+ const [ isModalOpen, toggleModal ] = useReducer(
38
+ ( isActive ) => ! isActive,
39
+ false
40
+ );
41
+
42
+ if ( ! canLockBlock ) {
43
+ return null;
44
+ }
45
+
46
+ if ( canMove && canRemove ) {
47
+ return null;
48
+ }
49
+
50
+ return (
51
+ <>
52
+ <ToolbarGroup className="block-editor-block-lock-toolbar">
53
+ <ToolbarButton
54
+ icon={ lock }
55
+ label={ sprintf(
56
+ /* translators: %s: block name */
57
+ __( 'Unlock %s' ),
58
+ blockInformation.title
59
+ ) }
60
+ onClick={ toggleModal }
61
+ />
62
+ </ToolbarGroup>
63
+ { isModalOpen && (
64
+ <BlockLockModal clientId={ clientId } onClose={ toggleModal } />
65
+ ) }
66
+ </>
67
+ );
68
+ }
@@ -95,6 +95,9 @@ function BlockMover( {
95
95
  );
96
96
  }
97
97
 
98
+ /**
99
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-mover/README.md
100
+ */
98
101
  export default withSelect( ( select, { clientIds } ) => {
99
102
  const {
100
103
  getBlock,
@@ -22,6 +22,10 @@
22
22
  @include break-small() {
23
23
  flex-direction: column;
24
24
  }
25
+
26
+ // @todo: override toolbar group inherited paddings from components/block-tools/style.scss.
27
+ // This is best fixed by making the mover control area a proper single toolbar group.
28
+ padding: 0;
25
29
  }
26
30
 
27
31
  &.is-horizontal .block-editor-block-mover__move-button-container,