@wordpress/block-editor 14.8.0 → 14.8.1-next.cd6172eb0.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 (249) hide show
  1. package/build/autocompleters/block.js +2 -4
  2. package/build/autocompleters/block.js.map +1 -1
  3. package/build/autocompleters/link.js +2 -4
  4. package/build/autocompleters/link.js.map +1 -1
  5. package/build/components/block-canvas/index.js +3 -6
  6. package/build/components/block-canvas/index.js.map +1 -1
  7. package/build/components/block-list/block.js +6 -5
  8. package/build/components/block-list/block.js.map +1 -1
  9. package/build/components/block-list/index.js +0 -1
  10. package/build/components/block-list/index.js.map +1 -1
  11. package/build/components/block-list/use-block-props/index.js +7 -2
  12. package/build/components/block-list/use-block-props/index.js.map +1 -1
  13. package/build/components/block-list/use-block-props/use-firefox-draggable-compatibility.js +34 -0
  14. package/build/components/block-list/use-block-props/use-firefox-draggable-compatibility.js.map +1 -0
  15. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js +98 -5
  16. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  17. package/build/components/block-patterns-list/index.js +13 -4
  18. package/build/components/block-patterns-list/index.js.map +1 -1
  19. package/build/components/block-popover/inbetween.js +4 -0
  20. package/build/components/block-popover/inbetween.js.map +1 -1
  21. package/build/components/block-settings-menu/block-settings-dropdown.js +7 -4
  22. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  23. package/build/components/block-settings-menu-controls/index.js +1 -1
  24. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  25. package/build/components/block-switcher/index.js +12 -22
  26. package/build/components/block-switcher/index.js.map +1 -1
  27. package/build/components/block-switcher/use-transformed-patterns.js +0 -1
  28. package/build/components/block-switcher/use-transformed-patterns.js.map +1 -1
  29. package/build/components/block-switcher/utils.js +0 -1
  30. package/build/components/block-switcher/utils.js.map +1 -1
  31. package/build/components/block-toolbar/index.js +7 -6
  32. package/build/components/block-toolbar/index.js.map +1 -1
  33. package/build/components/block-variation-transforms/index.js +0 -1
  34. package/build/components/block-variation-transforms/index.js.map +1 -1
  35. package/build/components/date-format-picker/index.js +0 -1
  36. package/build/components/date-format-picker/index.js.map +1 -1
  37. package/build/components/font-appearance-control/index.js +1 -0
  38. package/build/components/font-appearance-control/index.js.map +1 -1
  39. package/build/components/font-family/index.js +10 -0
  40. package/build/components/font-family/index.js.map +1 -1
  41. package/build/components/global-styles/dimensions-panel.js +17 -16
  42. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  43. package/build/components/global-styles/get-global-styles-changes.js +0 -1
  44. package/build/components/global-styles/get-global-styles-changes.js.map +1 -1
  45. package/build/components/iframe/use-scale-canvas.js +68 -47
  46. package/build/components/iframe/use-scale-canvas.js.map +1 -1
  47. package/build/components/inserter/block-patterns-tab/index.js +0 -10
  48. package/build/components/inserter/block-patterns-tab/index.js.map +1 -1
  49. package/build/components/inserter/menu.js +2 -1
  50. package/build/components/inserter/menu.js.map +1 -1
  51. package/build/components/inserter-draggable-blocks/index.js +19 -10
  52. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  53. package/build/components/letter-spacing-control/index.js +10 -0
  54. package/build/components/letter-spacing-control/index.js.map +1 -1
  55. package/build/components/line-height-control/index.js +1 -0
  56. package/build/components/line-height-control/index.js.map +1 -1
  57. package/build/components/media-placeholder/index.js +18 -18
  58. package/build/components/media-placeholder/index.js.map +1 -1
  59. package/build/components/observe-typing/index.js +0 -1
  60. package/build/components/observe-typing/index.js.map +1 -1
  61. package/build/components/recursion-provider/index.js +0 -1
  62. package/build/components/recursion-provider/index.js.map +1 -1
  63. package/build/components/rich-text/index.js +5 -1
  64. package/build/components/rich-text/index.js.map +1 -1
  65. package/build/components/rich-text/native/use-format-types.js +0 -1
  66. package/build/components/rich-text/native/use-format-types.js.map +1 -1
  67. package/build/components/rich-text/use-format-types.js +0 -1
  68. package/build/components/rich-text/use-format-types.js.map +1 -1
  69. package/build/components/spacing-sizes-control/utils.js +0 -1
  70. package/build/components/spacing-sizes-control/utils.js.map +1 -1
  71. package/build/components/typewriter/index.js +0 -1
  72. package/build/components/typewriter/index.js.map +1 -1
  73. package/build/components/use-block-drop-zone/index.js +11 -2
  74. package/build/components/use-block-drop-zone/index.js.map +1 -1
  75. package/build/components/use-moving-animation/index.js +15 -2
  76. package/build/components/use-moving-animation/index.js.map +1 -1
  77. package/build/components/use-resize-canvas/index.js +1 -1
  78. package/build/components/use-resize-canvas/index.js.map +1 -1
  79. package/build/components/writing-flow/use-drag-selection.js +11 -0
  80. package/build/components/writing-flow/use-drag-selection.js.map +1 -1
  81. package/build/components/writing-flow/use-tab-nav.js +6 -2
  82. package/build/components/writing-flow/use-tab-nav.js.map +1 -1
  83. package/build/hooks/block-bindings.js +4 -3
  84. package/build/hooks/block-bindings.js.map +1 -1
  85. package/build/hooks/gap.js +1 -1
  86. package/build/hooks/gap.js.map +1 -1
  87. package/build/hooks/generated-class-name.js +0 -1
  88. package/build/hooks/generated-class-name.js.map +1 -1
  89. package/build/store/private-selectors.js +1 -7
  90. package/build/store/private-selectors.js.map +1 -1
  91. package/build/store/reducer.js +478 -2
  92. package/build/store/reducer.js.map +1 -1
  93. package/build/store/selectors.js +12 -55
  94. package/build/store/selectors.js.map +1 -1
  95. package/build/utils/object.js +0 -1
  96. package/build/utils/object.js.map +1 -1
  97. package/build-module/autocompleters/block.js +2 -4
  98. package/build-module/autocompleters/block.js.map +1 -1
  99. package/build-module/autocompleters/link.js +2 -4
  100. package/build-module/autocompleters/link.js.map +1 -1
  101. package/build-module/components/block-canvas/index.js +3 -6
  102. package/build-module/components/block-canvas/index.js.map +1 -1
  103. package/build-module/components/block-list/block.js +8 -7
  104. package/build-module/components/block-list/block.js.map +1 -1
  105. package/build-module/components/block-list/index.js +0 -1
  106. package/build-module/components/block-list/index.js.map +1 -1
  107. package/build-module/components/block-list/use-block-props/index.js +7 -2
  108. package/build-module/components/block-list/use-block-props/index.js.map +1 -1
  109. package/build-module/components/block-list/use-block-props/use-firefox-draggable-compatibility.js +28 -0
  110. package/build-module/components/block-list/use-block-props/use-firefox-draggable-compatibility.js.map +1 -0
  111. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js +97 -5
  112. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  113. package/build-module/components/block-patterns-list/index.js +13 -4
  114. package/build-module/components/block-patterns-list/index.js.map +1 -1
  115. package/build-module/components/block-popover/inbetween.js +4 -0
  116. package/build-module/components/block-popover/inbetween.js.map +1 -1
  117. package/build-module/components/block-settings-menu/block-settings-dropdown.js +7 -4
  118. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  119. package/build-module/components/block-settings-menu-controls/index.js +1 -1
  120. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  121. package/build-module/components/block-switcher/index.js +13 -23
  122. package/build-module/components/block-switcher/index.js.map +1 -1
  123. package/build-module/components/block-switcher/use-transformed-patterns.js +0 -1
  124. package/build-module/components/block-switcher/use-transformed-patterns.js.map +1 -1
  125. package/build-module/components/block-switcher/utils.js +0 -1
  126. package/build-module/components/block-switcher/utils.js.map +1 -1
  127. package/build-module/components/block-toolbar/index.js +7 -6
  128. package/build-module/components/block-toolbar/index.js.map +1 -1
  129. package/build-module/components/block-variation-transforms/index.js +0 -1
  130. package/build-module/components/block-variation-transforms/index.js.map +1 -1
  131. package/build-module/components/date-format-picker/index.js +0 -1
  132. package/build-module/components/date-format-picker/index.js.map +1 -1
  133. package/build-module/components/font-appearance-control/index.js +1 -0
  134. package/build-module/components/font-appearance-control/index.js.map +1 -1
  135. package/build-module/components/font-family/index.js +10 -0
  136. package/build-module/components/font-family/index.js.map +1 -1
  137. package/build-module/components/global-styles/dimensions-panel.js +17 -16
  138. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  139. package/build-module/components/global-styles/get-global-styles-changes.js +0 -1
  140. package/build-module/components/global-styles/get-global-styles-changes.js.map +1 -1
  141. package/build-module/components/iframe/use-scale-canvas.js +68 -47
  142. package/build-module/components/iframe/use-scale-canvas.js.map +1 -1
  143. package/build-module/components/inserter/block-patterns-tab/index.js +1 -11
  144. package/build-module/components/inserter/block-patterns-tab/index.js.map +1 -1
  145. package/build-module/components/inserter/menu.js +2 -1
  146. package/build-module/components/inserter/menu.js.map +1 -1
  147. package/build-module/components/inserter-draggable-blocks/index.js +20 -11
  148. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  149. package/build-module/components/letter-spacing-control/index.js +9 -0
  150. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  151. package/build-module/components/line-height-control/index.js +1 -0
  152. package/build-module/components/line-height-control/index.js.map +1 -1
  153. package/build-module/components/media-placeholder/index.js +18 -18
  154. package/build-module/components/media-placeholder/index.js.map +1 -1
  155. package/build-module/components/observe-typing/index.js +0 -1
  156. package/build-module/components/observe-typing/index.js.map +1 -1
  157. package/build-module/components/recursion-provider/index.js +0 -1
  158. package/build-module/components/recursion-provider/index.js.map +1 -1
  159. package/build-module/components/rich-text/index.js +5 -1
  160. package/build-module/components/rich-text/index.js.map +1 -1
  161. package/build-module/components/rich-text/native/use-format-types.js +0 -1
  162. package/build-module/components/rich-text/native/use-format-types.js.map +1 -1
  163. package/build-module/components/rich-text/use-format-types.js +0 -1
  164. package/build-module/components/rich-text/use-format-types.js.map +1 -1
  165. package/build-module/components/spacing-sizes-control/utils.js +0 -1
  166. package/build-module/components/spacing-sizes-control/utils.js.map +1 -1
  167. package/build-module/components/typewriter/index.js +0 -1
  168. package/build-module/components/typewriter/index.js.map +1 -1
  169. package/build-module/components/use-block-drop-zone/index.js +11 -2
  170. package/build-module/components/use-block-drop-zone/index.js.map +1 -1
  171. package/build-module/components/use-moving-animation/index.js +15 -2
  172. package/build-module/components/use-moving-animation/index.js.map +1 -1
  173. package/build-module/components/use-resize-canvas/index.js +1 -1
  174. package/build-module/components/use-resize-canvas/index.js.map +1 -1
  175. package/build-module/components/writing-flow/use-drag-selection.js +11 -0
  176. package/build-module/components/writing-flow/use-drag-selection.js.map +1 -1
  177. package/build-module/components/writing-flow/use-tab-nav.js +6 -2
  178. package/build-module/components/writing-flow/use-tab-nav.js.map +1 -1
  179. package/build-module/hooks/block-bindings.js +4 -3
  180. package/build-module/hooks/block-bindings.js.map +1 -1
  181. package/build-module/hooks/gap.js +1 -1
  182. package/build-module/hooks/gap.js.map +1 -1
  183. package/build-module/hooks/generated-class-name.js +0 -1
  184. package/build-module/hooks/generated-class-name.js.map +1 -1
  185. package/build-module/store/private-selectors.js +1 -6
  186. package/build-module/store/private-selectors.js.map +1 -1
  187. package/build-module/store/reducer.js +479 -3
  188. package/build-module/store/reducer.js.map +1 -1
  189. package/build-module/store/selectors.js +12 -55
  190. package/build-module/store/selectors.js.map +1 -1
  191. package/build-module/utils/object.js +0 -1
  192. package/build-module/utils/object.js.map +1 -1
  193. package/build-style/content-rtl.css +17 -4
  194. package/build-style/content.css +17 -4
  195. package/build-style/style-rtl.css +21 -16
  196. package/build-style/style.css +21 -16
  197. package/package.json +32 -32
  198. package/src/autocompleters/block.js +2 -4
  199. package/src/autocompleters/link.js +2 -4
  200. package/src/components/alignment-control/stories/aliginment-toolbar.story.js +47 -0
  201. package/src/components/alignment-control/stories/index.story.js +51 -0
  202. package/src/components/alignment-control/test/__snapshots__/index.js.snap +5 -5
  203. package/src/components/block-alignment-control/test/__snapshots__/index.js.snap +4 -4
  204. package/src/components/block-canvas/index.js +3 -5
  205. package/src/components/block-draggable/content.scss +11 -5
  206. package/src/components/block-list/block.js +7 -13
  207. package/src/components/block-list/content.scss +6 -0
  208. package/src/components/block-list/use-block-props/index.js +7 -0
  209. package/src/components/block-list/use-block-props/use-firefox-draggable-compatibility.js +25 -0
  210. package/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +112 -8
  211. package/src/components/block-patterns-list/index.js +12 -1
  212. package/src/components/block-patterns-list/style.scss +16 -5
  213. package/src/components/block-popover/inbetween.js +4 -0
  214. package/src/components/block-settings-menu/block-settings-dropdown.js +6 -1
  215. package/src/components/block-settings-menu-controls/index.js +2 -1
  216. package/src/components/block-switcher/index.js +19 -21
  217. package/src/components/block-switcher/style.scss +0 -9
  218. package/src/components/block-title/test/index.js +2 -0
  219. package/src/components/block-toolbar/index.js +8 -6
  220. package/src/components/block-tools/style.scss +5 -0
  221. package/src/components/block-vertical-alignment-control/test/__snapshots__/index.js.snap +3 -3
  222. package/src/components/font-appearance-control/index.js +1 -0
  223. package/src/components/font-family/index.js +10 -0
  224. package/src/components/font-family/style.scss +5 -0
  225. package/src/components/global-styles/dimensions-panel.js +16 -16
  226. package/src/components/iframe/content.scss +6 -1
  227. package/src/components/iframe/use-scale-canvas.js +103 -81
  228. package/src/components/inserter/block-patterns-tab/index.js +1 -17
  229. package/src/components/inserter/menu.js +8 -1
  230. package/src/components/inserter-draggable-blocks/index.js +19 -29
  231. package/src/components/letter-spacing-control/README.md +2 -1
  232. package/src/components/letter-spacing-control/index.js +17 -0
  233. package/src/components/line-height-control/index.js +1 -0
  234. package/src/components/media-placeholder/index.js +25 -28
  235. package/src/components/rich-text/index.js +5 -0
  236. package/src/components/use-block-drop-zone/index.js +18 -1
  237. package/src/components/use-moving-animation/index.js +15 -0
  238. package/src/components/use-resize-canvas/index.js +1 -1
  239. package/src/components/writing-flow/use-drag-selection.js +11 -0
  240. package/src/components/writing-flow/use-tab-nav.js +9 -6
  241. package/src/hooks/block-bindings.js +8 -4
  242. package/src/hooks/gap.js +1 -1
  243. package/src/store/private-selectors.js +2 -17
  244. package/src/store/reducer.js +639 -2
  245. package/src/store/selectors.js +19 -69
  246. package/src/store/test/private-selectors.js +1 -0
  247. package/src/store/test/reducer.js +849 -0
  248. package/src/store/test/selectors.js +4 -110
  249. package/src/style.scss +1 -0
@@ -19,7 +19,6 @@ import { __ } 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';
22
- import { pasteHandler } from '@wordpress/blocks';
23
22
  import deprecated from '@wordpress/deprecated';
24
23
 
25
24
  /**
@@ -29,6 +28,7 @@ import MediaUpload from '../media-upload';
29
28
  import MediaUploadCheck from '../media-upload/check';
30
29
  import URLPopover from '../url-popover';
31
30
  import { store as blockEditorStore } from '../../store';
31
+ import { parseDropEvent } from '../use-on-block-drop';
32
32
 
33
33
  const noop = () => {};
34
34
 
@@ -229,30 +229,15 @@ export function MediaPlaceholder( {
229
229
  } );
230
230
  };
231
231
 
232
- async function handleBlocksDrop( blocks ) {
233
- if ( ! blocks || ! Array.isArray( blocks ) ) {
234
- return;
235
- }
232
+ async function handleBlocksDrop( event ) {
233
+ const { blocks } = parseDropEvent( event );
236
234
 
237
- function recursivelyFindMediaFromBlocks( _blocks ) {
238
- return _blocks.flatMap( ( block ) =>
239
- ( block.name === 'core/image' ||
240
- block.name === 'core/audio' ||
241
- block.name === 'core/video' ) &&
242
- ( block.attributes.url || block.attributes.src )
243
- ? [ block ]
244
- : recursivelyFindMediaFromBlocks( block.innerBlocks )
245
- );
246
- }
247
-
248
- const mediaBlocks = recursivelyFindMediaFromBlocks( blocks );
249
-
250
- if ( ! mediaBlocks.length ) {
235
+ if ( ! blocks?.length ) {
251
236
  return;
252
237
  }
253
238
 
254
239
  const uploadedMediaList = await Promise.all(
255
- mediaBlocks.map( ( block ) => {
240
+ blocks.map( ( block ) => {
256
241
  const blockType = block.name.split( '/' )[ 1 ];
257
242
  if ( block.attributes.id ) {
258
243
  block.attributes.type = blockType;
@@ -292,13 +277,6 @@ export function MediaPlaceholder( {
292
277
  }
293
278
  }
294
279
 
295
- async function onDrop( event ) {
296
- const blocks = pasteHandler( {
297
- HTML: event.dataTransfer?.getData( 'default' ),
298
- } );
299
- return await handleBlocksDrop( blocks );
300
- }
301
-
302
280
  const onUpload = ( event ) => {
303
281
  onFilesUpload( event.target.files );
304
282
  };
@@ -385,7 +363,26 @@ export function MediaPlaceholder( {
385
363
  return null;
386
364
  }
387
365
 
388
- return <DropZone onFilesDrop={ onFilesUpload } onDrop={ onDrop } />;
366
+ return (
367
+ <DropZone
368
+ onFilesDrop={ onFilesUpload }
369
+ onDrop={ handleBlocksDrop }
370
+ isEligible={ ( dataTransfer ) => {
371
+ const prefix = 'wp-block:core/';
372
+ const types = [];
373
+ for ( const type of dataTransfer.types ) {
374
+ if ( type.startsWith( prefix ) ) {
375
+ types.push( type.slice( prefix.length ) );
376
+ }
377
+ }
378
+ return (
379
+ types.every( ( type ) =>
380
+ allowedTypes.includes( type )
381
+ ) && ( multiple ? true : types.length === 1 )
382
+ );
383
+ } }
384
+ />
385
+ );
389
386
  };
390
387
 
391
388
  const renderCancelLink = () => {
@@ -431,6 +431,11 @@ export function RichTextWrapper(
431
431
  aria-multiline={ ! disableLineBreaks }
432
432
  aria-readonly={ shouldDisableEditing }
433
433
  { ...props }
434
+ // Unset draggable (coming from block props) for contentEditable
435
+ // elements because it will interfere with multi block selection
436
+ // when the contentEditable and draggable elements are the same
437
+ // element.
438
+ draggable={ undefined }
434
439
  aria-label={
435
440
  bindingsLabel || props[ 'aria-label' ] || placeholder
436
441
  }
@@ -332,6 +332,7 @@ export default function useBlockDropZone( {
332
332
  isGroupable,
333
333
  isZoomOut,
334
334
  getSectionRootClientId,
335
+ getBlockParents,
335
336
  } = unlock( useSelect( blockEditorStore ) );
336
337
  const {
337
338
  showInsertionPoint,
@@ -358,13 +359,29 @@ export default function useBlockDropZone( {
358
359
  // So, ensure that the drag state is set when the user drags over a drop zone.
359
360
  startDragging();
360
361
  }
362
+
363
+ const draggedBlockClientIds = getDraggedBlockClientIds();
364
+ const targetParents = [
365
+ targetRootClientId,
366
+ ...getBlockParents( targetRootClientId, true ),
367
+ ];
368
+
369
+ // Check if the target is within any of the dragged blocks.
370
+ const isTargetWithinDraggedBlocks = draggedBlockClientIds.some(
371
+ ( clientId ) => targetParents.includes( clientId )
372
+ );
373
+
374
+ if ( isTargetWithinDraggedBlocks ) {
375
+ return;
376
+ }
377
+
361
378
  const allowedBlocks = getAllowedBlocks( targetRootClientId );
362
379
  const targetBlockName = getBlockNamesByClientId( [
363
380
  targetRootClientId,
364
381
  ] )[ 0 ];
365
382
 
366
383
  const draggedBlockNames = getBlockNamesByClientId(
367
- getDraggedBlockClientIds()
384
+ draggedBlockClientIds
368
385
  );
369
386
  const isBlockDroppingAllowed = isDropTargetValid(
370
387
  getBlockType,
@@ -52,6 +52,7 @@ function useMovingAnimation( { triggerAnimationOnChange, clientId } ) {
52
52
  isFirstMultiSelectedBlock,
53
53
  isBlockMultiSelected,
54
54
  isAncestorMultiSelected,
55
+ isDraggingBlocks,
55
56
  } = useSelect( blockEditorStore );
56
57
 
57
58
  // Whenever the trigger changes, we need to take a snapshot of the current
@@ -73,8 +74,14 @@ function useMovingAnimation( { triggerAnimationOnChange, clientId } ) {
73
74
  const isSelected = isBlockSelected( clientId );
74
75
  const adjustScrolling =
75
76
  isSelected || isFirstMultiSelectedBlock( clientId );
77
+ const isDragging = isDraggingBlocks();
76
78
 
77
79
  function preserveScrollPosition() {
80
+ // The user already scrolled when dragging blocks.
81
+ if ( isDragging ) {
82
+ return;
83
+ }
84
+
78
85
  if ( adjustScrolling && prevRect ) {
79
86
  const blockRect = ref.current.getBoundingClientRect();
80
87
  const diff = blockRect.top - prevRect.top;
@@ -107,6 +114,13 @@ function useMovingAnimation( { triggerAnimationOnChange, clientId } ) {
107
114
  isSelected ||
108
115
  isBlockMultiSelected( clientId ) ||
109
116
  isAncestorMultiSelected( clientId );
117
+
118
+ // The user already dragged the blocks to the new position, so don't
119
+ // animate the dragged blocks.
120
+ if ( isPartOfSelection && isDragging ) {
121
+ return;
122
+ }
123
+
110
124
  // Make sure the other blocks move under the selected block(s).
111
125
  const zIndex = isPartOfSelection ? '1' : '';
112
126
 
@@ -153,6 +167,7 @@ function useMovingAnimation( { triggerAnimationOnChange, clientId } ) {
153
167
  isFirstMultiSelectedBlock,
154
168
  isBlockMultiSelected,
155
169
  isAncestorMultiSelected,
170
+ isDraggingBlocks,
156
171
  ] );
157
172
 
158
173
  return ref;
@@ -60,7 +60,7 @@ export default function useResizeCanvas( deviceType ) {
60
60
  marginLeft: marginHorizontal,
61
61
  marginRight: marginHorizontal,
62
62
  height,
63
- overflowY: 'auto',
63
+ maxWidth: '100%',
64
64
  };
65
65
  default:
66
66
  return {
@@ -80,7 +80,17 @@ export default function useDragSelection() {
80
80
  } );
81
81
  }
82
82
 
83
+ let lastMouseDownTarget;
84
+
85
+ function onMouseDown( { target } ) {
86
+ lastMouseDownTarget = target;
87
+ }
88
+
83
89
  function onMouseLeave( { buttons, target, relatedTarget } ) {
90
+ if ( ! target.contains( lastMouseDownTarget ) ) {
91
+ return;
92
+ }
93
+
84
94
  // If we're moving into a child element, ignore. We're tracking
85
95
  // the mouse leaving the element to a parent, no a child.
86
96
  if ( target.contains( relatedTarget ) ) {
@@ -141,6 +151,7 @@ export default function useDragSelection() {
141
151
  }
142
152
 
143
153
  node.addEventListener( 'mouseout', onMouseLeave );
154
+ node.addEventListener( 'mousedown', onMouseDown );
144
155
 
145
156
  return () => {
146
157
  node.removeEventListener( 'mouseout', onMouseLeave );
@@ -35,6 +35,11 @@ export default function useTabNav() {
35
35
  const noCaptureRef = useRef();
36
36
 
37
37
  function onFocusCapture( event ) {
38
+ const canvasElement =
39
+ container.current.ownerDocument === event.target.ownerDocument
40
+ ? container.current
41
+ : container.current.ownerDocument.defaultView.frameElement;
42
+
38
43
  // Do not capture incoming focus if set by us in WritingFlow.
39
44
  if ( noCaptureRef.current ) {
40
45
  noCaptureRef.current = null;
@@ -64,17 +69,15 @@ export default function useTabNav() {
64
69
  .focus();
65
70
  }
66
71
  // If we don't have any section blocks, focus the section root.
67
- else {
72
+ else if ( sectionRootClientId ) {
68
73
  container.current
69
74
  .querySelector( `[data-block="${ sectionRootClientId }"]` )
70
75
  .focus();
76
+ } else {
77
+ // If we don't have any section root, focus the canvas.
78
+ canvasElement.focus();
71
79
  }
72
80
  } else {
73
- const canvasElement =
74
- container.current.ownerDocument === event.target.ownerDocument
75
- ? container.current
76
- : container.current.ownerDocument.defaultView.frameElement;
77
-
78
81
  const isBefore =
79
82
  // eslint-disable-next-line no-bitwise
80
83
  event.target.compareDocumentPosition( canvasElement ) &
@@ -300,13 +300,17 @@ export const BlockBindingsPanel = ( { name: blockName, metadata } ) => {
300
300
  />
301
301
  ) }
302
302
  </ItemGroup>
303
- <ItemGroup>
304
- <Text variant="muted">
303
+ { /*
304
+ Use a div element to make the ToolsPanelHiddenInnerWrapper
305
+ toggle the visibility of this help text automatically.
306
+ */ }
307
+ <Text as="div" variant="muted">
308
+ <p>
305
309
  { __(
306
310
  'Attributes connected to custom fields or other dynamic data.'
307
311
  ) }
308
- </Text>
309
- </ItemGroup>
312
+ </p>
313
+ </Text>
310
314
  </ToolsPanel>
311
315
  </InspectorControls>
312
316
  );
package/src/hooks/gap.js CHANGED
@@ -27,7 +27,7 @@ export function getGapBoxControlValueFromStyle( blockGapValue ) {
27
27
  * Returns a CSS value for the `gap` property from a given blockGap style.
28
28
  *
29
29
  * @param {string? | Object?} blockGapValue A block gap string or axial object value, e.g., '10px' or { top: '10px', left: '10px'}.
30
- * @param {string?} defaultValue A default gap value.
30
+ * @param {?string} defaultValue A default gap value.
31
31
  * @return {string|null} The concatenated gap value (row and column).
32
32
  */
33
33
  export function getGapCSSValue( blockGapValue, defaultValue = '0' ) {
@@ -112,12 +112,12 @@ function getEnabledClientIdsTreeUnmemoized( state, rootClientId ) {
112
112
  export const getEnabledClientIdsTree = createRegistrySelector( ( select ) =>
113
113
  createSelector( getEnabledClientIdsTreeUnmemoized, ( state ) => [
114
114
  state.blocks.order,
115
+ state.derivedBlockEditingModes,
116
+ state.derivedNavModeBlockEditingModes,
115
117
  state.blockEditingModes,
116
118
  state.settings.templateLock,
117
119
  state.blockListSettings,
118
120
  select( STORE_NAME ).__unstableGetEditorMode( state ),
119
- state.zoomLevel,
120
- getSectionRootClientId( state ),
121
121
  ] )
122
122
  );
123
123
 
@@ -406,21 +406,6 @@ export const getAllPatterns = createRegistrySelector( ( select ) =>
406
406
  }, getAllPatternsDependants( select ) )
407
407
  );
408
408
 
409
- export const isResolvingPatterns = createRegistrySelector( ( select ) =>
410
- createSelector( ( state ) => {
411
- const blockPatternsSelect = state.settings[ selectBlockPatternsKey ];
412
- const reusableBlocksSelect = state.settings[ reusableBlocksSelectKey ];
413
- return (
414
- ( blockPatternsSelect
415
- ? blockPatternsSelect( select ) === undefined
416
- : false ) ||
417
- ( reusableBlocksSelect
418
- ? reusableBlocksSelect( select ) === undefined
419
- : false )
420
- );
421
- }, getAllPatternsDependants( select ) )
422
- );
423
-
424
409
  const EMPTY_ARRAY = [];
425
410
 
426
411
  export const getReusableBlocks = createRegistrySelector(