@wordpress/block-editor 8.1.2 → 8.2.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 (187) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +0 -24
  3. package/build/components/block-list/block.js +16 -2
  4. package/build/components/block-list/block.js.map +1 -1
  5. package/build/components/block-list/block.native.js +1 -1
  6. package/build/components/block-list/block.native.js.map +1 -1
  7. package/build/components/block-list/use-block-props/use-focus-first-element.js +3 -0
  8. package/build/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  9. package/build/components/block-list/use-block-props/use-multi-selection.js +25 -27
  10. package/build/components/block-list/use-block-props/use-multi-selection.js.map +1 -1
  11. package/build/components/block-settings/container.native.js +1 -5
  12. package/build/components/block-settings/container.native.js.map +1 -1
  13. package/build/components/index.js +9 -0
  14. package/build/components/index.js.map +1 -1
  15. package/build/components/index.native.js +9 -0
  16. package/build/components/index.native.js.map +1 -1
  17. package/build/components/inserter/block-patterns-tab.js +3 -3
  18. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  19. package/build/components/inserter/quick-inserter.js +19 -7
  20. package/build/components/inserter/quick-inserter.js.map +1 -1
  21. package/build/components/inserter/search-results.js +28 -11
  22. package/build/components/inserter/search-results.js.map +1 -1
  23. package/build/components/line-height-control/index.js +61 -43
  24. package/build/components/line-height-control/index.js.map +1 -1
  25. package/build/components/list-view/block-contents.js +8 -4
  26. package/build/components/list-view/block-contents.js.map +1 -1
  27. package/build/components/list-view/block-select-button.js +0 -1
  28. package/build/components/list-view/block-select-button.js.map +1 -1
  29. package/build/components/list-view/block.js +19 -8
  30. package/build/components/list-view/block.js.map +1 -1
  31. package/build/components/list-view/branch.js +2 -1
  32. package/build/components/list-view/branch.js.map +1 -1
  33. package/build/components/list-view/index.js +49 -41
  34. package/build/components/list-view/index.js.map +1 -1
  35. package/build/components/list-view/use-block-selection.js +139 -0
  36. package/build/components/list-view/use-block-selection.js.map +1 -0
  37. package/build/components/list-view/use-list-view-expand-selected-item.js +60 -0
  38. package/build/components/list-view/use-list-view-expand-selected-item.js.map +1 -0
  39. package/build/components/list-view/utils.js +29 -1
  40. package/build/components/list-view/utils.js.map +1 -1
  41. package/build/components/rich-text/index.js +7 -12
  42. package/build/components/rich-text/index.js.map +1 -1
  43. package/build/components/rich-text/use-paste-handler.js +0 -1
  44. package/build/components/rich-text/use-paste-handler.js.map +1 -1
  45. package/build/components/writing-flow/index.js +1 -0
  46. package/build/components/writing-flow/index.js.map +1 -1
  47. package/build/components/writing-flow/use-multi-selection.js +22 -24
  48. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  49. package/build/components/writing-flow/use-select-all.js +3 -2
  50. package/build/components/writing-flow/use-select-all.js.map +1 -1
  51. package/build/hooks/custom-class-name.js +40 -0
  52. package/build/hooks/custom-class-name.js.map +1 -1
  53. package/build/hooks/line-height.js +2 -0
  54. package/build/hooks/line-height.js.map +1 -1
  55. package/build/hooks/style.js +27 -11
  56. package/build/hooks/style.js.map +1 -1
  57. package/build/layouts/flow.js +7 -5
  58. package/build/layouts/flow.js.map +1 -1
  59. package/build/store/actions.js +51 -44
  60. package/build/store/actions.js.map +1 -1
  61. package/build/store/defaults.js +1 -0
  62. package/build/store/defaults.js.map +1 -1
  63. package/build/store/index.js +1 -2
  64. package/build/store/index.js.map +1 -1
  65. package/build/store/reducer.js +2 -2
  66. package/build/store/reducer.js.map +1 -1
  67. package/build/utils/index.js +0 -14
  68. package/build/utils/index.js.map +1 -1
  69. package/build-module/components/block-list/block.js +17 -3
  70. package/build-module/components/block-list/block.js.map +1 -1
  71. package/build-module/components/block-list/block.native.js +2 -2
  72. package/build-module/components/block-list/block.native.js.map +1 -1
  73. package/build-module/components/block-list/use-block-props/use-focus-first-element.js +2 -0
  74. package/build-module/components/block-list/use-block-props/use-focus-first-element.js.map +1 -1
  75. package/build-module/components/block-list/use-block-props/use-multi-selection.js +23 -28
  76. package/build-module/components/block-list/use-block-props/use-multi-selection.js.map +1 -1
  77. package/build-module/components/block-settings/container.native.js +2 -6
  78. package/build-module/components/block-settings/container.native.js.map +1 -1
  79. package/build-module/components/index.js +1 -0
  80. package/build-module/components/index.js.map +1 -1
  81. package/build-module/components/index.native.js +1 -0
  82. package/build-module/components/index.native.js.map +1 -1
  83. package/build-module/components/inserter/block-patterns-tab.js +3 -3
  84. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  85. package/build-module/components/inserter/quick-inserter.js +19 -7
  86. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  87. package/build-module/components/inserter/search-results.js +28 -11
  88. package/build-module/components/inserter/search-results.js.map +1 -1
  89. package/build-module/components/line-height-control/index.js +59 -43
  90. package/build-module/components/line-height-control/index.js.map +1 -1
  91. package/build-module/components/list-view/block-contents.js +8 -4
  92. package/build-module/components/list-view/block-contents.js.map +1 -1
  93. package/build-module/components/list-view/block-select-button.js +0 -1
  94. package/build-module/components/list-view/block-select-button.js.map +1 -1
  95. package/build-module/components/list-view/block.js +19 -8
  96. package/build-module/components/list-view/block.js.map +1 -1
  97. package/build-module/components/list-view/branch.js +2 -1
  98. package/build-module/components/list-view/branch.js.map +1 -1
  99. package/build-module/components/list-view/index.js +46 -42
  100. package/build-module/components/list-view/index.js.map +1 -1
  101. package/build-module/components/list-view/use-block-selection.js +123 -0
  102. package/build-module/components/list-view/use-block-selection.js.map +1 -0
  103. package/build-module/components/list-view/use-list-view-expand-selected-item.js +50 -0
  104. package/build-module/components/list-view/use-list-view-expand-selected-item.js.map +1 -0
  105. package/build-module/components/list-view/utils.js +25 -0
  106. package/build-module/components/list-view/utils.js.map +1 -1
  107. package/build-module/components/rich-text/index.js +7 -12
  108. package/build-module/components/rich-text/index.js.map +1 -1
  109. package/build-module/components/rich-text/use-paste-handler.js +0 -1
  110. package/build-module/components/rich-text/use-paste-handler.js.map +1 -1
  111. package/build-module/components/writing-flow/index.js +1 -0
  112. package/build-module/components/writing-flow/index.js.map +1 -1
  113. package/build-module/components/writing-flow/use-multi-selection.js +21 -21
  114. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  115. package/build-module/components/writing-flow/use-select-all.js +3 -2
  116. package/build-module/components/writing-flow/use-select-all.js.map +1 -1
  117. package/build-module/hooks/custom-class-name.js +38 -0
  118. package/build-module/hooks/custom-class-name.js.map +1 -1
  119. package/build-module/hooks/line-height.js +2 -0
  120. package/build-module/hooks/line-height.js.map +1 -1
  121. package/build-module/hooks/style.js +26 -11
  122. package/build-module/hooks/style.js.map +1 -1
  123. package/build-module/layouts/flow.js +7 -5
  124. package/build-module/layouts/flow.js.map +1 -1
  125. package/build-module/store/actions.js +48 -41
  126. package/build-module/store/actions.js.map +1 -1
  127. package/build-module/store/defaults.js +1 -0
  128. package/build-module/store/defaults.js.map +1 -1
  129. package/build-module/store/index.js +1 -2
  130. package/build-module/store/index.js.map +1 -1
  131. package/build-module/store/reducer.js +2 -2
  132. package/build-module/store/reducer.js.map +1 -1
  133. package/build-module/utils/index.js +0 -1
  134. package/build-module/utils/index.js.map +1 -1
  135. package/build-style/style-rtl.css +3 -12
  136. package/build-style/style.css +3 -12
  137. package/package.json +12 -11
  138. package/src/components/block-list/block.js +27 -3
  139. package/src/components/block-list/block.native.js +2 -1
  140. package/src/components/block-list/style.scss +3 -1
  141. package/src/components/block-list/use-block-props/use-focus-first-element.js +3 -0
  142. package/src/components/block-list/use-block-props/use-multi-selection.js +22 -30
  143. package/src/components/block-settings/container.native.js +5 -6
  144. package/src/components/index.js +1 -0
  145. package/src/components/index.native.js +1 -0
  146. package/src/components/inserter/block-patterns-tab.js +12 -16
  147. package/src/components/inserter/quick-inserter.js +31 -9
  148. package/src/components/inserter/search-results.js +54 -42
  149. package/src/components/line-height-control/README.md +13 -2
  150. package/src/components/line-height-control/index.js +63 -40
  151. package/src/components/line-height-control/stories/index.js +33 -0
  152. package/src/components/line-height-control/test/index.js +61 -0
  153. package/src/components/list-view/README.md +2 -2
  154. package/src/components/list-view/block-contents.js +10 -3
  155. package/src/components/list-view/block-select-button.js +0 -1
  156. package/src/components/list-view/block.js +29 -9
  157. package/src/components/list-view/branch.js +1 -0
  158. package/src/components/list-view/index.js +56 -30
  159. package/src/components/list-view/test/utils.js +50 -0
  160. package/src/components/list-view/use-block-selection.js +163 -0
  161. package/src/components/list-view/use-list-view-expand-selected-item.js +58 -0
  162. package/src/components/list-view/utils.js +31 -0
  163. package/src/components/rich-text/index.js +7 -14
  164. package/src/components/rich-text/use-paste-handler.js +0 -1
  165. package/src/components/writing-flow/index.js +1 -0
  166. package/src/components/writing-flow/use-multi-selection.js +17 -20
  167. package/src/components/writing-flow/use-select-all.js +6 -2
  168. package/src/hooks/custom-class-name.js +45 -0
  169. package/src/hooks/line-height.js +2 -0
  170. package/src/hooks/style.js +26 -11
  171. package/src/hooks/typography.scss +0 -4
  172. package/src/layouts/flow.js +10 -5
  173. package/src/store/actions.js +20 -10
  174. package/src/store/defaults.js +1 -0
  175. package/src/store/index.js +0 -1
  176. package/src/store/reducer.js +2 -1
  177. package/src/store/test/actions.js +1 -1
  178. package/src/store/test/reducer.js +9 -0
  179. package/src/style.scss +0 -1
  180. package/src/utils/index.js +0 -1
  181. package/build/utils/theme.js +0 -63
  182. package/build/utils/theme.js.map +0 -1
  183. package/build-module/utils/theme.js +0 -53
  184. package/build-module/utils/theme.js.map +0 -1
  185. package/src/components/line-height-control/style.scss +0 -8
  186. package/src/components/writing-flow/test/use-multi-selection.js +0 -36
  187. package/src/utils/theme.js +0 -48
@@ -42,6 +42,7 @@ const ListViewBlockContents = (0, _element.forwardRef)((_ref, ref) => {
42
42
  siblingBlockCount,
43
43
  level,
44
44
  isExpanded,
45
+ selectedClientIds,
45
46
  ...props
46
47
  } = _ref;
47
48
  const {
@@ -52,12 +53,10 @@ const ListViewBlockContents = (0, _element.forwardRef)((_ref, ref) => {
52
53
  selectedBlockInBlockEditor
53
54
  } = (0, _data.useSelect)(select => {
54
55
  const {
55
- getBlockRootClientId,
56
56
  hasBlockMovingClientId,
57
57
  getSelectedBlockClientId
58
58
  } = select(_store.store);
59
59
  return {
60
- rootClientId: getBlockRootClientId(clientId) || '',
61
60
  blockMovingClientId: hasBlockMovingClientId(),
62
61
  selectedBlockInBlockEditor: getSelectedBlockClientId()
63
62
  };
@@ -65,9 +64,14 @@ const ListViewBlockContents = (0, _element.forwardRef)((_ref, ref) => {
65
64
  const isBlockMoveTarget = blockMovingClientId && selectedBlockInBlockEditor === clientId;
66
65
  const className = (0, _classnames.default)('block-editor-list-view-block-contents', {
67
66
  'is-dropping-before': isBlockMoveTarget
68
- });
67
+ }); // Only include all selected blocks if the currently clicked on block
68
+ // is one of the selected blocks. This ensures that if a user attempts
69
+ // to drag a block that isn't part of the selection, they're still able
70
+ // to drag it and rearrange its position.
71
+
72
+ const draggableClientIds = selectedClientIds.includes(clientId) ? selectedClientIds : [clientId];
69
73
  return (0, _element.createElement)(_blockDraggable.default, {
70
- clientIds: [block.clientId]
74
+ clientIds: draggableClientIds
71
75
  }, _ref2 => {
72
76
  let {
73
77
  draggable,
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/list-view/block-contents.js"],"names":["ListViewBlockContents","ref","onClick","onToggleExpanded","block","isSelected","position","siblingBlockCount","level","isExpanded","props","clientId","blockMovingClientId","selectedBlockInBlockEditor","select","getBlockRootClientId","hasBlockMovingClientId","getSelectedBlockClientId","blockEditorStore","rootClientId","isBlockMoveTarget","className","draggable","onDragStart","onDragEnd"],"mappings":";;;;;;;;;AASA;;;;AANA;;AAKA;;AAMA;;AACA;;AACA;;AAhBA;AACA;AACA;;AAGA;AACA;AACA;;AAIA;AACA;AACA;AAKA,MAAMA,qBAAqB,GAAG,yBAC7B,OAYCC,GAZD,KAaK;AAAA,MAZJ;AACCC,IAAAA,OADD;AAECC,IAAAA,gBAFD;AAGCC,IAAAA,KAHD;AAICC,IAAAA,UAJD;AAKCC,IAAAA,QALD;AAMCC,IAAAA,iBAND;AAOCC,IAAAA,KAPD;AAQCC,IAAAA,UARD;AASC,OAAGC;AATJ,GAYI;AACJ,QAAM;AAAEC,IAAAA;AAAF,MAAeP,KAArB;AAEA,QAAM;AAAEQ,IAAAA,mBAAF;AAAuBC,IAAAA;AAAvB,MAAsD,qBACzDC,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,oBADK;AAELC,MAAAA,sBAFK;AAGLC,MAAAA;AAHK,QAIFH,MAAM,CAAEI,YAAF,CAJV;AAKA,WAAO;AACNC,MAAAA,YAAY,EAAEJ,oBAAoB,CAAEJ,QAAF,CAApB,IAAoC,EAD5C;AAENC,MAAAA,mBAAmB,EAAEI,sBAAsB,EAFrC;AAGNH,MAAAA,0BAA0B,EAAEI,wBAAwB;AAH9C,KAAP;AAKA,GAZ0D,EAa3D,CAAEN,QAAF,CAb2D,CAA5D;AAgBA,QAAMS,iBAAiB,GACtBR,mBAAmB,IAAIC,0BAA0B,KAAKF,QADvD;AAGA,QAAMU,SAAS,GAAG,yBAAY,uCAAZ,EAAqD;AACtE,0BAAsBD;AADgD,GAArD,CAAlB;AAIA,SACC,4BAAC,uBAAD;AAAgB,IAAA,SAAS,EAAG,CAAEhB,KAAK,CAACO,QAAR;AAA5B,KACG;AAAA,QAAE;AAAEW,MAAAA,SAAF;AAAaC,MAAAA,WAAb;AAA0BC,MAAAA;AAA1B,KAAF;AAAA,WACD,4BAAC,0BAAD;AACC,MAAA,GAAG,EAAGvB,GADP;AAEC,MAAA,SAAS,EAAGoB,SAFb;AAGC,MAAA,KAAK,EAAGjB,KAHT;AAIC,MAAA,OAAO,EAAGF,OAJX;AAKC,MAAA,gBAAgB,EAAGC,gBALpB;AAMC,MAAA,UAAU,EAAGE,UANd;AAOC,MAAA,QAAQ,EAAGC,QAPZ;AAQC,MAAA,iBAAiB,EAAGC,iBARrB;AASC,MAAA,KAAK,EAAGC,KATT;AAUC,MAAA,SAAS,EAAGc,SAVb;AAWC,MAAA,WAAW,EAAGC,WAXf;AAYC,MAAA,SAAS,EAAGC,SAZb;AAaC,MAAA,UAAU,EAAGf;AAbd,OAcMC,KAdN,EADC;AAAA,GADH,CADD;AAsBA,CA9D4B,CAA9B;eAiEeV,qB","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport ListViewBlockSelectButton from './block-select-button';\nimport BlockDraggable from '../block-draggable';\nimport { store as blockEditorStore } from '../../store';\n\nconst ListViewBlockContents = forwardRef(\n\t(\n\t\t{\n\t\t\tonClick,\n\t\t\tonToggleExpanded,\n\t\t\tblock,\n\t\t\tisSelected,\n\t\t\tposition,\n\t\t\tsiblingBlockCount,\n\t\t\tlevel,\n\t\t\tisExpanded,\n\t\t\t...props\n\t\t},\n\t\tref\n\t) => {\n\t\tconst { clientId } = block;\n\n\t\tconst { blockMovingClientId, selectedBlockInBlockEditor } = useSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst {\n\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\thasBlockMovingClientId,\n\t\t\t\t\tgetSelectedBlockClientId,\n\t\t\t\t} = select( blockEditorStore );\n\t\t\t\treturn {\n\t\t\t\t\trootClientId: getBlockRootClientId( clientId ) || '',\n\t\t\t\t\tblockMovingClientId: hasBlockMovingClientId(),\n\t\t\t\t\tselectedBlockInBlockEditor: getSelectedBlockClientId(),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\n\t\tconst isBlockMoveTarget =\n\t\t\tblockMovingClientId && selectedBlockInBlockEditor === clientId;\n\n\t\tconst className = classnames( 'block-editor-list-view-block-contents', {\n\t\t\t'is-dropping-before': isBlockMoveTarget,\n\t\t} );\n\n\t\treturn (\n\t\t\t<BlockDraggable clientIds={ [ block.clientId ] }>\n\t\t\t\t{ ( { draggable, onDragStart, onDragEnd } ) => (\n\t\t\t\t\t<ListViewBlockSelectButton\n\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\tclassName={ className }\n\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\tonClick={ onClick }\n\t\t\t\t\t\tonToggleExpanded={ onToggleExpanded }\n\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\tsiblingBlockCount={ siblingBlockCount }\n\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\tdraggable={ draggable }\n\t\t\t\t\t\tonDragStart={ onDragStart }\n\t\t\t\t\t\tonDragEnd={ onDragEnd }\n\t\t\t\t\t\tisExpanded={ isExpanded }\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockDraggable>\n\t\t);\n\t}\n);\n\nexport default ListViewBlockContents;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/list-view/block-contents.js"],"names":["ListViewBlockContents","ref","onClick","onToggleExpanded","block","isSelected","position","siblingBlockCount","level","isExpanded","selectedClientIds","props","clientId","blockMovingClientId","selectedBlockInBlockEditor","select","hasBlockMovingClientId","getSelectedBlockClientId","blockEditorStore","isBlockMoveTarget","className","draggableClientIds","includes","draggable","onDragStart","onDragEnd"],"mappings":";;;;;;;;;AASA;;;;AANA;;AAKA;;AAMA;;AACA;;AACA;;AAhBA;AACA;AACA;;AAGA;AACA;AACA;;AAIA;AACA;AACA;AAKA,MAAMA,qBAAqB,GAAG,yBAC7B,OAaCC,GAbD,KAcK;AAAA,MAbJ;AACCC,IAAAA,OADD;AAECC,IAAAA,gBAFD;AAGCC,IAAAA,KAHD;AAICC,IAAAA,UAJD;AAKCC,IAAAA,QALD;AAMCC,IAAAA,iBAND;AAOCC,IAAAA,KAPD;AAQCC,IAAAA,UARD;AASCC,IAAAA,iBATD;AAUC,OAAGC;AAVJ,GAaI;AACJ,QAAM;AAAEC,IAAAA;AAAF,MAAeR,KAArB;AAEA,QAAM;AAAES,IAAAA,mBAAF;AAAuBC,IAAAA;AAAvB,MAAsD,qBACzDC,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,sBADK;AAELC,MAAAA;AAFK,QAGFF,MAAM,CAAEG,YAAF,CAHV;AAIA,WAAO;AACNL,MAAAA,mBAAmB,EAAEG,sBAAsB,EADrC;AAENF,MAAAA,0BAA0B,EAAEG,wBAAwB;AAF9C,KAAP;AAIA,GAV0D,EAW3D,CAAEL,QAAF,CAX2D,CAA5D;AAcA,QAAMO,iBAAiB,GACtBN,mBAAmB,IAAIC,0BAA0B,KAAKF,QADvD;AAGA,QAAMQ,SAAS,GAAG,yBAAY,uCAAZ,EAAqD;AACtE,0BAAsBD;AADgD,GAArD,CAAlB,CApBI,CAwBJ;AACA;AACA;AACA;;AACA,QAAME,kBAAkB,GAAGX,iBAAiB,CAACY,QAAlB,CAA4BV,QAA5B,IACxBF,iBADwB,GAExB,CAAEE,QAAF,CAFH;AAIA,SACC,4BAAC,uBAAD;AAAgB,IAAA,SAAS,EAAGS;AAA5B,KACG;AAAA,QAAE;AAAEE,MAAAA,SAAF;AAAaC,MAAAA,WAAb;AAA0BC,MAAAA;AAA1B,KAAF;AAAA,WACD,4BAAC,0BAAD;AACC,MAAA,GAAG,EAAGxB,GADP;AAEC,MAAA,SAAS,EAAGmB,SAFb;AAGC,MAAA,KAAK,EAAGhB,KAHT;AAIC,MAAA,OAAO,EAAGF,OAJX;AAKC,MAAA,gBAAgB,EAAGC,gBALpB;AAMC,MAAA,UAAU,EAAGE,UANd;AAOC,MAAA,QAAQ,EAAGC,QAPZ;AAQC,MAAA,iBAAiB,EAAGC,iBARrB;AASC,MAAA,KAAK,EAAGC,KATT;AAUC,MAAA,SAAS,EAAGe,SAVb;AAWC,MAAA,WAAW,EAAGC,WAXf;AAYC,MAAA,SAAS,EAAGC,SAZb;AAaC,MAAA,UAAU,EAAGhB;AAbd,OAcME,KAdN,EADC;AAAA,GADH,CADD;AAsBA,CArE4B,CAA9B;eAwEeX,qB","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport ListViewBlockSelectButton from './block-select-button';\nimport BlockDraggable from '../block-draggable';\nimport { store as blockEditorStore } from '../../store';\n\nconst ListViewBlockContents = forwardRef(\n\t(\n\t\t{\n\t\t\tonClick,\n\t\t\tonToggleExpanded,\n\t\t\tblock,\n\t\t\tisSelected,\n\t\t\tposition,\n\t\t\tsiblingBlockCount,\n\t\t\tlevel,\n\t\t\tisExpanded,\n\t\t\tselectedClientIds,\n\t\t\t...props\n\t\t},\n\t\tref\n\t) => {\n\t\tconst { clientId } = block;\n\n\t\tconst { blockMovingClientId, selectedBlockInBlockEditor } = useSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst {\n\t\t\t\t\thasBlockMovingClientId,\n\t\t\t\t\tgetSelectedBlockClientId,\n\t\t\t\t} = select( blockEditorStore );\n\t\t\t\treturn {\n\t\t\t\t\tblockMovingClientId: hasBlockMovingClientId(),\n\t\t\t\t\tselectedBlockInBlockEditor: getSelectedBlockClientId(),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\n\t\tconst isBlockMoveTarget =\n\t\t\tblockMovingClientId && selectedBlockInBlockEditor === clientId;\n\n\t\tconst className = classnames( 'block-editor-list-view-block-contents', {\n\t\t\t'is-dropping-before': isBlockMoveTarget,\n\t\t} );\n\n\t\t// Only include all selected blocks if the currently clicked on block\n\t\t// is one of the selected blocks. This ensures that if a user attempts\n\t\t// to drag a block that isn't part of the selection, they're still able\n\t\t// to drag it and rearrange its position.\n\t\tconst draggableClientIds = selectedClientIds.includes( clientId )\n\t\t\t? selectedClientIds\n\t\t\t: [ clientId ];\n\n\t\treturn (\n\t\t\t<BlockDraggable clientIds={ draggableClientIds }>\n\t\t\t\t{ ( { draggable, onDragStart, onDragEnd } ) => (\n\t\t\t\t\t<ListViewBlockSelectButton\n\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\tclassName={ className }\n\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\tonClick={ onClick }\n\t\t\t\t\t\tonToggleExpanded={ onToggleExpanded }\n\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\tsiblingBlockCount={ siblingBlockCount }\n\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\tdraggable={ draggable }\n\t\t\t\t\t\tonDragStart={ onDragStart }\n\t\t\t\t\t\tonDragEnd={ onDragEnd }\n\t\t\t\t\t\tisExpanded={ isExpanded }\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockDraggable>\n\t\t);\n\t}\n);\n\nexport default ListViewBlockContents;\n"]}
@@ -74,7 +74,6 @@ function ListViewBlockSelectButton(_ref, ref) {
74
74
 
75
75
  function onKeyDownHandler(event) {
76
76
  if (event.keyCode === _keycodes.ENTER || event.keyCode === _keycodes.SPACE) {
77
- event.preventDefault();
78
77
  onClick(event);
79
78
  }
80
79
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/list-view/block-select-button.js"],"names":["ListViewBlockSelectButton","ref","className","block","clientId","isSelected","onClick","onToggleExpanded","position","siblingBlockCount","level","tabIndex","onFocus","onDragStart","onDragEnd","draggable","isExpanded","blockInformation","instanceId","descriptionId","blockPositionDescription","onDragStartHandler","event","dataTransfer","clearData","onKeyDownHandler","keyCode","ENTER","SPACE","preventDefault","icon","anchor"],"mappings":";;;;;;;;;AAUA;;AAPA;;AAKA;;AACA;;AAEA;;AAKA;;AACA;;AACA;;AACA;;AACA;;AACA;;AArBA;AACA;AACA;;AAGA;AACA;AACA;;AAMA;AACA;AACA;AAQA,SAASA,yBAAT,OAiBCC,GAjBD,EAkBE;AAAA,MAjBD;AACCC,IAAAA,SADD;AAECC,IAAAA,KAAK,EAAE;AAAEC,MAAAA;AAAF,KAFR;AAGCC,IAAAA,UAHD;AAICC,IAAAA,OAJD;AAKCC,IAAAA,gBALD;AAMCC,IAAAA,QAND;AAOCC,IAAAA,iBAPD;AAQCC,IAAAA,KARD;AASCC,IAAAA,QATD;AAUCC,IAAAA,OAVD;AAWCC,IAAAA,WAXD;AAYCC,IAAAA,SAZD;AAaCC,IAAAA,SAbD;AAcCC,IAAAA;AAdD,GAiBC;AACD,QAAMC,gBAAgB,GAAG,yCAA4Bb,QAA5B,CAAzB;AACA,QAAMc,UAAU,GAAG,4BAAelB,yBAAf,CAAnB;AACA,QAAMmB,aAAa,GAAI,kCAAkCD,UAAY,EAArE;AACA,QAAME,wBAAwB,GAAG,wCAChCZ,QADgC,EAEhCC,iBAFgC,EAGhCC,KAHgC,CAAjC,CAJC,CAUD;AACA;AACA;AACA;;AACA,QAAMW,kBAAkB,GAAKC,KAAF,IAAa;AACvCA,IAAAA,KAAK,CAACC,YAAN,CAAmBC,SAAnB;AACAX,IAAAA,WAAW,CAAES,KAAF,CAAX;AACA,GAHD;;AAKA,WAASG,gBAAT,CAA2BH,KAA3B,EAAmC;AAClC,QAAKA,KAAK,CAACI,OAAN,KAAkBC,eAAlB,IAA2BL,KAAK,CAACI,OAAN,KAAkBE,eAAlD,EAA0D;AACzDN,MAAAA,KAAK,CAACO,cAAN;AACAvB,MAAAA,OAAO,CAAEgB,KAAF,CAAP;AACA;AACD;;AAED,SACC,qDACC,4BAAC,kBAAD;AACC,IAAA,SAAS,EAAG,yBACX,4CADW,EAEXpB,SAFW,CADb;AAKC,IAAA,OAAO,EAAGI,OALX;AAMC,IAAA,SAAS,EAAGmB,gBANb;AAOC,wBAAmBN,aAPpB;AAQC,IAAA,GAAG,EAAGlB,GARP;AASC,IAAA,QAAQ,EAAGU,QATZ;AAUC,IAAA,OAAO,EAAGC,OAVX;AAWC,IAAA,WAAW,EAAGS,kBAXf;AAYC,IAAA,SAAS,EAAGP,SAZb;AAaC,IAAA,SAAS,EAAGC,SAbb;AAcC,IAAA,IAAI,EAAI,UAAUX,QAAU,EAd7B;AAeC,qBAAgBY;AAfjB,KAiBC,4BAAC,iBAAD;AAAkB,IAAA,OAAO,EAAGT;AAA5B,IAjBD,EAkBC,4BAAC,kBAAD;AAAW,IAAA,IAAI,EAAGU,gBAAH,aAAGA,gBAAH,uBAAGA,gBAAgB,CAAEa,IAApC;AAA2C,IAAA,UAAU;AAArD,IAlBD,EAmBC,4BAAC,mBAAD;AAAY,IAAA,QAAQ,EAAG1B;AAAvB,IAnBD,EAoBG,CAAAa,gBAAgB,SAAhB,IAAAA,gBAAgB,WAAhB,YAAAA,gBAAgB,CAAEc,MAAlB,KACD;AAAM,IAAA,SAAS,EAAC;AAAhB,KACGd,gBAAgB,CAACc,MADpB,CArBF,EAyBG1B,UAAU,IACX,4BAAC,0BAAD,QACG,cAAI,kBAAJ,CADH,CA1BF,CADD,EAgCC;AACC,IAAA,SAAS,EAAC,yDADX;AAEC,IAAA,EAAE,EAAGc;AAFN,KAIGC,wBAJH,CAhCD,CADD;AAyCA;;eAEc,yBAAYpB,yBAAZ,C","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { Button, VisuallyHidden } from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\nimport { forwardRef } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { getBlockPositionDescription } from './utils';\nimport BlockTitle from '../block-title';\nimport ListViewExpander from './expander';\nimport { SPACE, ENTER } from '@wordpress/keycodes';\n\nfunction ListViewBlockSelectButton(\n\t{\n\t\tclassName,\n\t\tblock: { clientId },\n\t\tisSelected,\n\t\tonClick,\n\t\tonToggleExpanded,\n\t\tposition,\n\t\tsiblingBlockCount,\n\t\tlevel,\n\t\ttabIndex,\n\t\tonFocus,\n\t\tonDragStart,\n\t\tonDragEnd,\n\t\tdraggable,\n\t\tisExpanded,\n\t},\n\tref\n) {\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst instanceId = useInstanceId( ListViewBlockSelectButton );\n\tconst descriptionId = `list-view-block-select-button__${ instanceId }`;\n\tconst blockPositionDescription = getBlockPositionDescription(\n\t\tposition,\n\t\tsiblingBlockCount,\n\t\tlevel\n\t);\n\n\t// The `href` attribute triggers the browser's native HTML drag operations.\n\t// When the link is dragged, the element's outerHTML is set in DataTransfer object as text/html.\n\t// We need to clear any HTML drag data to prevent `pasteHandler` from firing\n\t// inside the `useOnBlockDrop` hook.\n\tconst onDragStartHandler = ( event ) => {\n\t\tevent.dataTransfer.clearData();\n\t\tonDragStart( event );\n\t};\n\n\tfunction onKeyDownHandler( event ) {\n\t\tif ( event.keyCode === ENTER || event.keyCode === SPACE ) {\n\t\t\tevent.preventDefault();\n\t\t\tonClick( event );\n\t\t}\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Button\n\t\t\t\tclassName={ classnames(\n\t\t\t\t\t'block-editor-list-view-block-select-button',\n\t\t\t\t\tclassName\n\t\t\t\t) }\n\t\t\t\tonClick={ onClick }\n\t\t\t\tonKeyDown={ onKeyDownHandler }\n\t\t\t\taria-describedby={ descriptionId }\n\t\t\t\tref={ ref }\n\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\tonFocus={ onFocus }\n\t\t\t\tonDragStart={ onDragStartHandler }\n\t\t\t\tonDragEnd={ onDragEnd }\n\t\t\t\tdraggable={ draggable }\n\t\t\t\thref={ `#block-${ clientId }` }\n\t\t\t\taria-expanded={ isExpanded }\n\t\t\t>\n\t\t\t\t<ListViewExpander onClick={ onToggleExpanded } />\n\t\t\t\t<BlockIcon icon={ blockInformation?.icon } showColors />\n\t\t\t\t<BlockTitle clientId={ clientId } />\n\t\t\t\t{ blockInformation?.anchor && (\n\t\t\t\t\t<span className=\"block-editor-list-view-block-select-button__anchor\">\n\t\t\t\t\t\t{ blockInformation.anchor }\n\t\t\t\t\t</span>\n\t\t\t\t) }\n\t\t\t\t{ isSelected && (\n\t\t\t\t\t<VisuallyHidden>\n\t\t\t\t\t\t{ __( '(selected block)' ) }\n\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t) }\n\t\t\t</Button>\n\t\t\t<div\n\t\t\t\tclassName=\"block-editor-list-view-block-select-button__description\"\n\t\t\t\tid={ descriptionId }\n\t\t\t>\n\t\t\t\t{ blockPositionDescription }\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport default forwardRef( ListViewBlockSelectButton );\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/list-view/block-select-button.js"],"names":["ListViewBlockSelectButton","ref","className","block","clientId","isSelected","onClick","onToggleExpanded","position","siblingBlockCount","level","tabIndex","onFocus","onDragStart","onDragEnd","draggable","isExpanded","blockInformation","instanceId","descriptionId","blockPositionDescription","onDragStartHandler","event","dataTransfer","clearData","onKeyDownHandler","keyCode","ENTER","SPACE","icon","anchor"],"mappings":";;;;;;;;;AAUA;;AAPA;;AAKA;;AACA;;AAEA;;AAKA;;AACA;;AACA;;AACA;;AACA;;AACA;;AArBA;AACA;AACA;;AAGA;AACA;AACA;;AAMA;AACA;AACA;AAQA,SAASA,yBAAT,OAiBCC,GAjBD,EAkBE;AAAA,MAjBD;AACCC,IAAAA,SADD;AAECC,IAAAA,KAAK,EAAE;AAAEC,MAAAA;AAAF,KAFR;AAGCC,IAAAA,UAHD;AAICC,IAAAA,OAJD;AAKCC,IAAAA,gBALD;AAMCC,IAAAA,QAND;AAOCC,IAAAA,iBAPD;AAQCC,IAAAA,KARD;AASCC,IAAAA,QATD;AAUCC,IAAAA,OAVD;AAWCC,IAAAA,WAXD;AAYCC,IAAAA,SAZD;AAaCC,IAAAA,SAbD;AAcCC,IAAAA;AAdD,GAiBC;AACD,QAAMC,gBAAgB,GAAG,yCAA4Bb,QAA5B,CAAzB;AACA,QAAMc,UAAU,GAAG,4BAAelB,yBAAf,CAAnB;AACA,QAAMmB,aAAa,GAAI,kCAAkCD,UAAY,EAArE;AACA,QAAME,wBAAwB,GAAG,wCAChCZ,QADgC,EAEhCC,iBAFgC,EAGhCC,KAHgC,CAAjC,CAJC,CAUD;AACA;AACA;AACA;;AACA,QAAMW,kBAAkB,GAAKC,KAAF,IAAa;AACvCA,IAAAA,KAAK,CAACC,YAAN,CAAmBC,SAAnB;AACAX,IAAAA,WAAW,CAAES,KAAF,CAAX;AACA,GAHD;;AAKA,WAASG,gBAAT,CAA2BH,KAA3B,EAAmC;AAClC,QAAKA,KAAK,CAACI,OAAN,KAAkBC,eAAlB,IAA2BL,KAAK,CAACI,OAAN,KAAkBE,eAAlD,EAA0D;AACzDtB,MAAAA,OAAO,CAAEgB,KAAF,CAAP;AACA;AACD;;AAED,SACC,qDACC,4BAAC,kBAAD;AACC,IAAA,SAAS,EAAG,yBACX,4CADW,EAEXpB,SAFW,CADb;AAKC,IAAA,OAAO,EAAGI,OALX;AAMC,IAAA,SAAS,EAAGmB,gBANb;AAOC,wBAAmBN,aAPpB;AAQC,IAAA,GAAG,EAAGlB,GARP;AASC,IAAA,QAAQ,EAAGU,QATZ;AAUC,IAAA,OAAO,EAAGC,OAVX;AAWC,IAAA,WAAW,EAAGS,kBAXf;AAYC,IAAA,SAAS,EAAGP,SAZb;AAaC,IAAA,SAAS,EAAGC,SAbb;AAcC,IAAA,IAAI,EAAI,UAAUX,QAAU,EAd7B;AAeC,qBAAgBY;AAfjB,KAiBC,4BAAC,iBAAD;AAAkB,IAAA,OAAO,EAAGT;AAA5B,IAjBD,EAkBC,4BAAC,kBAAD;AAAW,IAAA,IAAI,EAAGU,gBAAH,aAAGA,gBAAH,uBAAGA,gBAAgB,CAAEY,IAApC;AAA2C,IAAA,UAAU;AAArD,IAlBD,EAmBC,4BAAC,mBAAD;AAAY,IAAA,QAAQ,EAAGzB;AAAvB,IAnBD,EAoBG,CAAAa,gBAAgB,SAAhB,IAAAA,gBAAgB,WAAhB,YAAAA,gBAAgB,CAAEa,MAAlB,KACD;AAAM,IAAA,SAAS,EAAC;AAAhB,KACGb,gBAAgB,CAACa,MADpB,CArBF,EAyBGzB,UAAU,IACX,4BAAC,0BAAD,QACG,cAAI,kBAAJ,CADH,CA1BF,CADD,EAgCC;AACC,IAAA,SAAS,EAAC,yDADX;AAEC,IAAA,EAAE,EAAGc;AAFN,KAIGC,wBAJH,CAhCD,CADD;AAyCA;;eAEc,yBAAYpB,yBAAZ,C","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { Button, VisuallyHidden } from '@wordpress/components';\nimport { useInstanceId } from '@wordpress/compose';\nimport { forwardRef } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { getBlockPositionDescription } from './utils';\nimport BlockTitle from '../block-title';\nimport ListViewExpander from './expander';\nimport { SPACE, ENTER } from '@wordpress/keycodes';\n\nfunction ListViewBlockSelectButton(\n\t{\n\t\tclassName,\n\t\tblock: { clientId },\n\t\tisSelected,\n\t\tonClick,\n\t\tonToggleExpanded,\n\t\tposition,\n\t\tsiblingBlockCount,\n\t\tlevel,\n\t\ttabIndex,\n\t\tonFocus,\n\t\tonDragStart,\n\t\tonDragEnd,\n\t\tdraggable,\n\t\tisExpanded,\n\t},\n\tref\n) {\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst instanceId = useInstanceId( ListViewBlockSelectButton );\n\tconst descriptionId = `list-view-block-select-button__${ instanceId }`;\n\tconst blockPositionDescription = getBlockPositionDescription(\n\t\tposition,\n\t\tsiblingBlockCount,\n\t\tlevel\n\t);\n\n\t// The `href` attribute triggers the browser's native HTML drag operations.\n\t// When the link is dragged, the element's outerHTML is set in DataTransfer object as text/html.\n\t// We need to clear any HTML drag data to prevent `pasteHandler` from firing\n\t// inside the `useOnBlockDrop` hook.\n\tconst onDragStartHandler = ( event ) => {\n\t\tevent.dataTransfer.clearData();\n\t\tonDragStart( event );\n\t};\n\n\tfunction onKeyDownHandler( event ) {\n\t\tif ( event.keyCode === ENTER || event.keyCode === SPACE ) {\n\t\t\tonClick( event );\n\t\t}\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Button\n\t\t\t\tclassName={ classnames(\n\t\t\t\t\t'block-editor-list-view-block-select-button',\n\t\t\t\t\tclassName\n\t\t\t\t) }\n\t\t\t\tonClick={ onClick }\n\t\t\t\tonKeyDown={ onKeyDownHandler }\n\t\t\t\taria-describedby={ descriptionId }\n\t\t\t\tref={ ref }\n\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\tonFocus={ onFocus }\n\t\t\t\tonDragStart={ onDragStartHandler }\n\t\t\t\tonDragEnd={ onDragEnd }\n\t\t\t\tdraggable={ draggable }\n\t\t\t\thref={ `#block-${ clientId }` }\n\t\t\t\taria-expanded={ isExpanded }\n\t\t\t>\n\t\t\t\t<ListViewExpander onClick={ onToggleExpanded } />\n\t\t\t\t<BlockIcon icon={ blockInformation?.icon } showColors />\n\t\t\t\t<BlockTitle clientId={ clientId } />\n\t\t\t\t{ blockInformation?.anchor && (\n\t\t\t\t\t<span className=\"block-editor-list-view-block-select-button__anchor\">\n\t\t\t\t\t\t{ blockInformation.anchor }\n\t\t\t\t\t</span>\n\t\t\t\t) }\n\t\t\t\t{ isSelected && (\n\t\t\t\t\t<VisuallyHidden>\n\t\t\t\t\t\t{ __( '(selected block)' ) }\n\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t) }\n\t\t\t</Button>\n\t\t\t<div\n\t\t\t\tclassName=\"block-editor-list-view-block-select-button__description\"\n\t\t\t\tid={ descriptionId }\n\t\t\t>\n\t\t\t\t{ blockPositionDescription }\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport default forwardRef( ListViewBlockSelectButton );\n"]}
@@ -57,7 +57,8 @@ function ListViewBlock(_ref) {
57
57
  siblingBlockCount,
58
58
  showBlockMovers,
59
59
  path,
60
- isExpanded
60
+ isExpanded,
61
+ selectedClientIds
61
62
  } = _ref;
62
63
  const cellRef = (0, _element.useRef)(null);
63
64
  const [isHovered, setIsHovered] = (0, _element.useState)(false);
@@ -101,10 +102,14 @@ function ListViewBlock(_ref) {
101
102
  highlightBlock(clientId, false);
102
103
  }, [clientId, setIsHovered, highlightBlock]);
103
104
  const selectEditorBlock = (0, _element.useCallback)(event => {
104
- event.stopPropagation();
105
- selectBlock(clientId);
105
+ selectBlock(event, clientId);
106
106
  }, [clientId, selectBlock]);
107
+ const selectDuplicatedBlock = (0, _element.useCallback)(newClientId => {
108
+ selectBlock(undefined, newClientId);
109
+ }, [selectBlock]);
107
110
  const toggleExpanded = (0, _element.useCallback)(event => {
111
+ // Prevent shift+click from opening link in a new window when toggling.
112
+ event.preventDefault();
108
113
  event.stopPropagation();
109
114
 
110
115
  if (isExpanded === true) {
@@ -131,8 +136,13 @@ function ListViewBlock(_ref) {
131
136
  'has-single-cell': hideBlockActions
132
137
  });
133
138
  const blockInformation = (0, _useBlockDisplayInformation.default)(clientId);
134
- const settingsAriaLabel = (0, _i18n.sprintf)( // translators: %s: The title of the block.
135
- (0, _i18n.__)('Options for %s block'), blockInformation.title);
139
+ const settingsAriaLabel = blockInformation ? (0, _i18n.sprintf)( // translators: %s: The title of the block.
140
+ (0, _i18n.__)('Options for %s block'), blockInformation.title) : (0, _i18n.__)('Options'); // Only include all selected blocks if the currently clicked on block
141
+ // is one of the selected blocks. This ensures that if a user attempts
142
+ // to alter a block that isn't part of the selection, they're still able
143
+ // to do so.
144
+
145
+ const dropdownClientIds = selectedClientIds.includes(clientId) ? selectedClientIds : [clientId];
136
146
  return (0, _element.createElement)(_leaf.default, {
137
147
  className: classes,
138
148
  onMouseEnter: onMouseEnter,
@@ -169,7 +179,8 @@ function ListViewBlock(_ref) {
169
179
  ref: ref,
170
180
  tabIndex: tabIndex,
171
181
  onFocus: onFocus,
172
- isExpanded: isExpanded
182
+ isExpanded: isExpanded,
183
+ selectedClientIds: selectedClientIds
173
184
  }));
174
185
  }), hasRenderedMovers && (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_components.__experimentalTreeGridCell, {
175
186
  className: moverCellClassName,
@@ -209,7 +220,7 @@ function ListViewBlock(_ref) {
209
220
  onFocus
210
221
  } = _ref5;
211
222
  return (0, _element.createElement)(_blockSettingsDropdown.default, {
212
- clientIds: [clientId],
223
+ clientIds: dropdownClientIds,
213
224
  icon: _icons.moreVertical,
214
225
  label: settingsAriaLabel,
215
226
  toggleProps: {
@@ -219,7 +230,7 @@ function ListViewBlock(_ref) {
219
230
  onFocus
220
231
  },
221
232
  disableOpenOnArrowDown: true,
222
- __experimentalSelectBlock: selectEditorBlock
233
+ __experimentalSelectBlock: selectDuplicatedBlock
223
234
  });
224
235
  }));
225
236
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/list-view/block.js"],"names":["ListViewBlock","block","isDragged","isSelected","isBranchSelected","selectBlock","position","level","rowCount","siblingBlockCount","showBlockMovers","path","isExpanded","cellRef","isHovered","setIsHovered","clientId","toggleBlockHighlight","blockEditorStore","__experimentalFeatures","withExperimentalFeatures","__experimentalPersistentListViewFeatures","withExperimentalPersistentListViewFeatures","__experimentalHideContainerBlockActions","hideContainerBlockActions","isTreeGridMounted","expand","collapse","hasSiblings","hasRenderedMovers","moverCellClassName","listViewBlockSettingsClassName","current","focus","highlightBlock","onMouseEnter","onMouseLeave","selectEditorBlock","event","stopPropagation","toggleExpanded","showBlockActions","hideBlockActions","colSpan","classes","blockInformation","settingsAriaLabel","title","ref","tabIndex","onFocus","moreVertical","className"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalTreeGridCell as TreeGridCell,\n\t__experimentalTreeGridItem as TreeGridItem,\n} from '@wordpress/components';\nimport { moreVertical } from '@wordpress/icons';\nimport {\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tuseCallback,\n\tmemo,\n} from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\nimport { sprintf, __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport ListViewLeaf from './leaf';\nimport {\n\tBlockMoverUpButton,\n\tBlockMoverDownButton,\n} from '../block-mover/button';\nimport ListViewBlockContents from './block-contents';\nimport BlockSettingsDropdown from '../block-settings-menu/block-settings-dropdown';\nimport { useListViewContext } from './context';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDisplayInformation from '../use-block-display-information';\n\nfunction ListViewBlock( {\n\tblock,\n\tisDragged,\n\tisSelected,\n\tisBranchSelected,\n\tselectBlock,\n\tposition,\n\tlevel,\n\trowCount,\n\tsiblingBlockCount,\n\tshowBlockMovers,\n\tpath,\n\tisExpanded,\n} ) {\n\tconst cellRef = useRef( null );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\tconst { clientId } = block;\n\n\tconst { toggleBlockHighlight } = useDispatch( blockEditorStore );\n\n\tconst {\n\t\t__experimentalFeatures: withExperimentalFeatures,\n\t\t__experimentalPersistentListViewFeatures: withExperimentalPersistentListViewFeatures,\n\t\t__experimentalHideContainerBlockActions: hideContainerBlockActions,\n\t\tisTreeGridMounted,\n\t\texpand,\n\t\tcollapse,\n\t} = useListViewContext();\n\n\tconst hasSiblings = siblingBlockCount > 0;\n\tconst hasRenderedMovers = showBlockMovers && hasSiblings;\n\tconst moverCellClassName = classnames(\n\t\t'block-editor-list-view-block__mover-cell',\n\t\t{ 'is-visible': isHovered || isSelected }\n\t);\n\n\tconst listViewBlockSettingsClassName = classnames(\n\t\t'block-editor-list-view-block__menu-cell',\n\t\t{ 'is-visible': isHovered || isSelected }\n\t);\n\n\t// If ListView has experimental features related to the Persistent List View,\n\t// only focus the selected list item on mount; otherwise the list would always\n\t// try to steal the focus from the editor canvas.\n\tuseEffect( () => {\n\t\tif (\n\t\t\twithExperimentalPersistentListViewFeatures &&\n\t\t\t! isTreeGridMounted &&\n\t\t\tisSelected\n\t\t) {\n\t\t\tcellRef.current.focus();\n\t\t}\n\t}, [] );\n\n\tconst highlightBlock = withExperimentalPersistentListViewFeatures\n\t\t? toggleBlockHighlight\n\t\t: () => {};\n\n\tconst onMouseEnter = useCallback( () => {\n\t\tsetIsHovered( true );\n\t\thighlightBlock( clientId, true );\n\t}, [ clientId, setIsHovered, highlightBlock ] );\n\tconst onMouseLeave = useCallback( () => {\n\t\tsetIsHovered( false );\n\t\thighlightBlock( clientId, false );\n\t}, [ clientId, setIsHovered, highlightBlock ] );\n\n\tconst selectEditorBlock = useCallback(\n\t\t( event ) => {\n\t\t\tevent.stopPropagation();\n\t\t\tselectBlock( clientId );\n\t\t},\n\t\t[ clientId, selectBlock ]\n\t);\n\n\tconst toggleExpanded = useCallback(\n\t\t( event ) => {\n\t\t\tevent.stopPropagation();\n\t\t\tif ( isExpanded === true ) {\n\t\t\t\tcollapse( clientId );\n\t\t\t} else if ( isExpanded === false ) {\n\t\t\t\texpand( clientId );\n\t\t\t}\n\t\t},\n\t\t[ clientId, expand, collapse, isExpanded ]\n\t);\n\n\tconst showBlockActions =\n\t\twithExperimentalFeatures &&\n\t\t//hide actions for blocks like core/widget-areas\n\t\t( ! hideContainerBlockActions ||\n\t\t\t( hideContainerBlockActions && level > 1 ) );\n\n\tconst hideBlockActions = withExperimentalFeatures && ! showBlockActions;\n\n\tlet colSpan;\n\tif ( hasRenderedMovers ) {\n\t\tcolSpan = 2;\n\t} else if ( hideBlockActions ) {\n\t\tcolSpan = 3;\n\t}\n\n\tconst classes = classnames( {\n\t\t'is-selected': isSelected,\n\t\t'is-branch-selected':\n\t\t\twithExperimentalPersistentListViewFeatures && isBranchSelected,\n\t\t'is-dragging': isDragged,\n\t\t'has-single-cell': hideBlockActions,\n\t} );\n\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst settingsAriaLabel = sprintf(\n\t\t// translators: %s: The title of the block.\n\t\t__( 'Options for %s block' ),\n\t\tblockInformation.title\n\t);\n\n\treturn (\n\t\t<ListViewLeaf\n\t\t\tclassName={ classes }\n\t\t\tonMouseEnter={ onMouseEnter }\n\t\t\tonMouseLeave={ onMouseLeave }\n\t\t\tonFocus={ onMouseEnter }\n\t\t\tonBlur={ onMouseLeave }\n\t\t\tlevel={ level }\n\t\t\tposition={ position }\n\t\t\trowCount={ rowCount }\n\t\t\tpath={ path }\n\t\t\tid={ `list-view-block-${ clientId }` }\n\t\t\tdata-block={ clientId }\n\t\t\tisExpanded={ isExpanded }\n\t\t>\n\t\t\t<TreeGridCell\n\t\t\t\tclassName=\"block-editor-list-view-block__contents-cell\"\n\t\t\t\tcolSpan={ colSpan }\n\t\t\t\tref={ cellRef }\n\t\t\t>\n\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t<div className=\"block-editor-list-view-block__contents-container\">\n\t\t\t\t\t\t<ListViewBlockContents\n\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\tonClick={ selectEditorBlock }\n\t\t\t\t\t\t\tonToggleExpanded={ toggleExpanded }\n\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\t\tsiblingBlockCount={ siblingBlockCount }\n\t\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\tisExpanded={ isExpanded }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t</TreeGridCell>\n\t\t\t{ hasRenderedMovers && (\n\t\t\t\t<>\n\t\t\t\t\t<TreeGridCell\n\t\t\t\t\t\tclassName={ moverCellClassName }\n\t\t\t\t\t\twithoutGridItem\n\t\t\t\t\t>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverUpButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverDownButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t</TreeGridCell>\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ showBlockActions && (\n\t\t\t\t<TreeGridCell className={ listViewBlockSettingsClassName }>\n\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t<BlockSettingsDropdown\n\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\t\t\tlabel={ settingsAriaLabel }\n\t\t\t\t\t\t\ttoggleProps={ {\n\t\t\t\t\t\t\t\tref,\n\t\t\t\t\t\t\t\tclassName: 'block-editor-list-view-block__menu',\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\tonFocus,\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tdisableOpenOnArrowDown\n\t\t\t\t\t\t\t__experimentalSelectBlock={ selectEditorBlock }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</TreeGridCell>\n\t\t\t) }\n\t\t</ListViewLeaf>\n\t);\n}\n\nexport default memo( ListViewBlock );\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/list-view/block.js"],"names":["ListViewBlock","block","isDragged","isSelected","isBranchSelected","selectBlock","position","level","rowCount","siblingBlockCount","showBlockMovers","path","isExpanded","selectedClientIds","cellRef","isHovered","setIsHovered","clientId","toggleBlockHighlight","blockEditorStore","__experimentalFeatures","withExperimentalFeatures","__experimentalPersistentListViewFeatures","withExperimentalPersistentListViewFeatures","__experimentalHideContainerBlockActions","hideContainerBlockActions","isTreeGridMounted","expand","collapse","hasSiblings","hasRenderedMovers","moverCellClassName","listViewBlockSettingsClassName","current","focus","highlightBlock","onMouseEnter","onMouseLeave","selectEditorBlock","event","selectDuplicatedBlock","newClientId","undefined","toggleExpanded","preventDefault","stopPropagation","showBlockActions","hideBlockActions","colSpan","classes","blockInformation","settingsAriaLabel","title","dropdownClientIds","includes","ref","tabIndex","onFocus","moreVertical","className"],"mappings":";;;;;;;;;AAaA;;AAVA;;AAKA;;AAIA;;AAQA;;AACA;;AAKA;;AACA;;AAIA;;AACA;;AACA;;AACA;;AACA;;AAnCA;AACA;AACA;;AAGA;AACA;AACA;;AAgBA;AACA;AACA;AAYA,SAASA,aAAT,OAcI;AAAA,MAdoB;AACvBC,IAAAA,KADuB;AAEvBC,IAAAA,SAFuB;AAGvBC,IAAAA,UAHuB;AAIvBC,IAAAA,gBAJuB;AAKvBC,IAAAA,WALuB;AAMvBC,IAAAA,QANuB;AAOvBC,IAAAA,KAPuB;AAQvBC,IAAAA,QARuB;AASvBC,IAAAA,iBATuB;AAUvBC,IAAAA,eAVuB;AAWvBC,IAAAA,IAXuB;AAYvBC,IAAAA,UAZuB;AAavBC,IAAAA;AAbuB,GAcpB;AACH,QAAMC,OAAO,GAAG,qBAAQ,IAAR,CAAhB;AACA,QAAM,CAAEC,SAAF,EAAaC,YAAb,IAA8B,uBAAU,KAAV,CAApC;AACA,QAAM;AAAEC,IAAAA;AAAF,MAAehB,KAArB;AAEA,QAAM;AAAEiB,IAAAA;AAAF,MAA2B,uBAAaC,YAAb,CAAjC;AAEA,QAAM;AACLC,IAAAA,sBAAsB,EAAEC,wBADnB;AAELC,IAAAA,wCAAwC,EAAEC,0CAFrC;AAGLC,IAAAA,uCAAuC,EAAEC,yBAHpC;AAILC,IAAAA,iBAJK;AAKLC,IAAAA,MALK;AAMLC,IAAAA;AANK,MAOF,kCAPJ;AASA,QAAMC,WAAW,GAAGpB,iBAAiB,GAAG,CAAxC;AACA,QAAMqB,iBAAiB,GAAGpB,eAAe,IAAImB,WAA7C;AACA,QAAME,kBAAkB,GAAG,yBAC1B,0CAD0B,EAE1B;AAAE,kBAAchB,SAAS,IAAIZ;AAA7B,GAF0B,CAA3B;AAKA,QAAM6B,8BAA8B,GAAG,yBACtC,yCADsC,EAEtC;AAAE,kBAAcjB,SAAS,IAAIZ;AAA7B,GAFsC,CAAvC,CAvBG,CA4BH;AACA;AACA;;AACA,0BAAW,MAAM;AAChB,QACCoB,0CAA0C,IAC1C,CAAEG,iBADF,IAEAvB,UAHD,EAIE;AACDW,MAAAA,OAAO,CAACmB,OAAR,CAAgBC,KAAhB;AACA;AACD,GARD,EAQG,EARH;AAUA,QAAMC,cAAc,GAAGZ,0CAA0C,GAC9DL,oBAD8D,GAE9D,MAAM,CAAE,CAFX;AAIA,QAAMkB,YAAY,GAAG,0BAAa,MAAM;AACvCpB,IAAAA,YAAY,CAAE,IAAF,CAAZ;AACAmB,IAAAA,cAAc,CAAElB,QAAF,EAAY,IAAZ,CAAd;AACA,GAHoB,EAGlB,CAAEA,QAAF,EAAYD,YAAZ,EAA0BmB,cAA1B,CAHkB,CAArB;AAIA,QAAME,YAAY,GAAG,0BAAa,MAAM;AACvCrB,IAAAA,YAAY,CAAE,KAAF,CAAZ;AACAmB,IAAAA,cAAc,CAAElB,QAAF,EAAY,KAAZ,CAAd;AACA,GAHoB,EAGlB,CAAEA,QAAF,EAAYD,YAAZ,EAA0BmB,cAA1B,CAHkB,CAArB;AAKA,QAAMG,iBAAiB,GAAG,0BACvBC,KAAF,IAAa;AACZlC,IAAAA,WAAW,CAAEkC,KAAF,EAAStB,QAAT,CAAX;AACA,GAHwB,EAIzB,CAAEA,QAAF,EAAYZ,WAAZ,CAJyB,CAA1B;AAOA,QAAMmC,qBAAqB,GAAG,0BAC3BC,WAAF,IAAmB;AAClBpC,IAAAA,WAAW,CAAEqC,SAAF,EAAaD,WAAb,CAAX;AACA,GAH4B,EAI7B,CAAEpC,WAAF,CAJ6B,CAA9B;AAOA,QAAMsC,cAAc,GAAG,0BACpBJ,KAAF,IAAa;AACZ;AACAA,IAAAA,KAAK,CAACK,cAAN;AACAL,IAAAA,KAAK,CAACM,eAAN;;AACA,QAAKjC,UAAU,KAAK,IAApB,EAA2B;AAC1BgB,MAAAA,QAAQ,CAAEX,QAAF,CAAR;AACA,KAFD,MAEO,IAAKL,UAAU,KAAK,KAApB,EAA4B;AAClCe,MAAAA,MAAM,CAAEV,QAAF,CAAN;AACA;AACD,GAVqB,EAWtB,CAAEA,QAAF,EAAYU,MAAZ,EAAoBC,QAApB,EAA8BhB,UAA9B,CAXsB,CAAvB;AAcA,QAAMkC,gBAAgB,GACrBzB,wBAAwB,MACxB;AACE,GAAEI,yBAAF,IACCA,yBAAyB,IAAIlB,KAAK,GAAG,CAHhB,CADzB;AAMA,QAAMwC,gBAAgB,GAAG1B,wBAAwB,IAAI,CAAEyB,gBAAvD;AAEA,MAAIE,OAAJ;;AACA,MAAKlB,iBAAL,EAAyB;AACxBkB,IAAAA,OAAO,GAAG,CAAV;AACA,GAFD,MAEO,IAAKD,gBAAL,EAAwB;AAC9BC,IAAAA,OAAO,GAAG,CAAV;AACA;;AAED,QAAMC,OAAO,GAAG,yBAAY;AAC3B,mBAAe9C,UADY;AAE3B,0BACCoB,0CAA0C,IAAInB,gBAHpB;AAI3B,mBAAeF,SAJY;AAK3B,uBAAmB6C;AALQ,GAAZ,CAAhB;AAQA,QAAMG,gBAAgB,GAAG,yCAA4BjC,QAA5B,CAAzB;AACA,QAAMkC,iBAAiB,GAAGD,gBAAgB,GACvC,oBACA;AACA,gBAAI,sBAAJ,CAFA,EAGAA,gBAAgB,CAACE,KAHjB,CADuC,GAMvC,cAAI,SAAJ,CANH,CA1GG,CAkHH;AACA;AACA;AACA;;AACA,QAAMC,iBAAiB,GAAGxC,iBAAiB,CAACyC,QAAlB,CAA4BrC,QAA5B,IACvBJ,iBADuB,GAEvB,CAAEI,QAAF,CAFH;AAIA,SACC,4BAAC,aAAD;AACC,IAAA,SAAS,EAAGgC,OADb;AAEC,IAAA,YAAY,EAAGb,YAFhB;AAGC,IAAA,YAAY,EAAGC,YAHhB;AAIC,IAAA,OAAO,EAAGD,YAJX;AAKC,IAAA,MAAM,EAAGC,YALV;AAMC,IAAA,KAAK,EAAG9B,KANT;AAOC,IAAA,QAAQ,EAAGD,QAPZ;AAQC,IAAA,QAAQ,EAAGE,QARZ;AASC,IAAA,IAAI,EAAGG,IATR;AAUC,IAAA,EAAE,EAAI,mBAAmBM,QAAU,EAVpC;AAWC,kBAAaA,QAXd;AAYC,IAAA,UAAU,EAAGL;AAZd,KAcC,4BAAC,sCAAD;AACC,IAAA,SAAS,EAAC,6CADX;AAEC,IAAA,OAAO,EAAGoC,OAFX;AAGC,IAAA,GAAG,EAAGlC;AAHP,KAKG;AAAA,QAAE;AAAEyC,MAAAA,GAAF;AAAOC,MAAAA,QAAP;AAAiBC,MAAAA;AAAjB,KAAF;AAAA,WACD;AAAK,MAAA,SAAS,EAAC;AAAf,OACC,4BAAC,sBAAD;AACC,MAAA,KAAK,EAAGxD,KADT;AAEC,MAAA,OAAO,EAAGqC,iBAFX;AAGC,MAAA,gBAAgB,EAAGK,cAHpB;AAIC,MAAA,UAAU,EAAGxC,UAJd;AAKC,MAAA,QAAQ,EAAGG,QALZ;AAMC,MAAA,iBAAiB,EAAGG,iBANrB;AAOC,MAAA,KAAK,EAAGF,KAPT;AAQC,MAAA,GAAG,EAAGgD,GARP;AASC,MAAA,QAAQ,EAAGC,QATZ;AAUC,MAAA,OAAO,EAAGC,OAVX;AAWC,MAAA,UAAU,EAAG7C,UAXd;AAYC,MAAA,iBAAiB,EAAGC;AAZrB,MADD,CADC;AAAA,GALH,CAdD,EAsCGiB,iBAAiB,IAClB,qDACC,4BAAC,sCAAD;AACC,IAAA,SAAS,EAAGC,kBADb;AAEC,IAAA,eAAe;AAFhB,KAIC,4BAAC,sCAAD,QACG;AAAA,QAAE;AAAEwB,MAAAA,GAAF;AAAOC,MAAAA,QAAP;AAAiBC,MAAAA;AAAjB,KAAF;AAAA,WACD,4BAAC,0BAAD;AACC,MAAA,WAAW,EAAC,UADb;AAEC,MAAA,SAAS,EAAG,CAAExC,QAAF,CAFb;AAGC,MAAA,GAAG,EAAGsC,GAHP;AAIC,MAAA,QAAQ,EAAGC,QAJZ;AAKC,MAAA,OAAO,EAAGC;AALX,MADC;AAAA,GADH,CAJD,EAeC,4BAAC,sCAAD,QACG;AAAA,QAAE;AAAEF,MAAAA,GAAF;AAAOC,MAAAA,QAAP;AAAiBC,MAAAA;AAAjB,KAAF;AAAA,WACD,4BAAC,4BAAD;AACC,MAAA,WAAW,EAAC,UADb;AAEC,MAAA,SAAS,EAAG,CAAExC,QAAF,CAFb;AAGC,MAAA,GAAG,EAAGsC,GAHP;AAIC,MAAA,QAAQ,EAAGC,QAJZ;AAKC,MAAA,OAAO,EAAGC;AALX,MADC;AAAA,GADH,CAfD,CADD,CAvCF,EAsEGX,gBAAgB,IACjB,4BAAC,sCAAD;AAAc,IAAA,SAAS,EAAGd;AAA1B,KACG;AAAA,QAAE;AAAEuB,MAAAA,GAAF;AAAOC,MAAAA,QAAP;AAAiBC,MAAAA;AAAjB,KAAF;AAAA,WACD,4BAAC,8BAAD;AACC,MAAA,SAAS,EAAGJ,iBADb;AAEC,MAAA,IAAI,EAAGK,mBAFR;AAGC,MAAA,KAAK,EAAGP,iBAHT;AAIC,MAAA,WAAW,EAAG;AACbI,QAAAA,GADa;AAEbI,QAAAA,SAAS,EAAE,oCAFE;AAGbH,QAAAA,QAHa;AAIbC,QAAAA;AAJa,OAJf;AAUC,MAAA,sBAAsB,MAVvB;AAWC,MAAA,yBAAyB,EAAGjB;AAX7B,MADC;AAAA,GADH,CAvEF,CADD;AA4FA;;eAEc,mBAAMxC,aAAN,C","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__experimentalTreeGridCell as TreeGridCell,\n\t__experimentalTreeGridItem as TreeGridItem,\n} from '@wordpress/components';\nimport { moreVertical } from '@wordpress/icons';\nimport {\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tuseCallback,\n\tmemo,\n} from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\nimport { sprintf, __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport ListViewLeaf from './leaf';\nimport {\n\tBlockMoverUpButton,\n\tBlockMoverDownButton,\n} from '../block-mover/button';\nimport ListViewBlockContents from './block-contents';\nimport BlockSettingsDropdown from '../block-settings-menu/block-settings-dropdown';\nimport { useListViewContext } from './context';\nimport { store as blockEditorStore } from '../../store';\nimport useBlockDisplayInformation from '../use-block-display-information';\n\nfunction ListViewBlock( {\n\tblock,\n\tisDragged,\n\tisSelected,\n\tisBranchSelected,\n\tselectBlock,\n\tposition,\n\tlevel,\n\trowCount,\n\tsiblingBlockCount,\n\tshowBlockMovers,\n\tpath,\n\tisExpanded,\n\tselectedClientIds,\n} ) {\n\tconst cellRef = useRef( null );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\tconst { clientId } = block;\n\n\tconst { toggleBlockHighlight } = useDispatch( blockEditorStore );\n\n\tconst {\n\t\t__experimentalFeatures: withExperimentalFeatures,\n\t\t__experimentalPersistentListViewFeatures: withExperimentalPersistentListViewFeatures,\n\t\t__experimentalHideContainerBlockActions: hideContainerBlockActions,\n\t\tisTreeGridMounted,\n\t\texpand,\n\t\tcollapse,\n\t} = useListViewContext();\n\n\tconst hasSiblings = siblingBlockCount > 0;\n\tconst hasRenderedMovers = showBlockMovers && hasSiblings;\n\tconst moverCellClassName = classnames(\n\t\t'block-editor-list-view-block__mover-cell',\n\t\t{ 'is-visible': isHovered || isSelected }\n\t);\n\n\tconst listViewBlockSettingsClassName = classnames(\n\t\t'block-editor-list-view-block__menu-cell',\n\t\t{ 'is-visible': isHovered || isSelected }\n\t);\n\n\t// If ListView has experimental features related to the Persistent List View,\n\t// only focus the selected list item on mount; otherwise the list would always\n\t// try to steal the focus from the editor canvas.\n\tuseEffect( () => {\n\t\tif (\n\t\t\twithExperimentalPersistentListViewFeatures &&\n\t\t\t! isTreeGridMounted &&\n\t\t\tisSelected\n\t\t) {\n\t\t\tcellRef.current.focus();\n\t\t}\n\t}, [] );\n\n\tconst highlightBlock = withExperimentalPersistentListViewFeatures\n\t\t? toggleBlockHighlight\n\t\t: () => {};\n\n\tconst onMouseEnter = useCallback( () => {\n\t\tsetIsHovered( true );\n\t\thighlightBlock( clientId, true );\n\t}, [ clientId, setIsHovered, highlightBlock ] );\n\tconst onMouseLeave = useCallback( () => {\n\t\tsetIsHovered( false );\n\t\thighlightBlock( clientId, false );\n\t}, [ clientId, setIsHovered, highlightBlock ] );\n\n\tconst selectEditorBlock = useCallback(\n\t\t( event ) => {\n\t\t\tselectBlock( event, clientId );\n\t\t},\n\t\t[ clientId, selectBlock ]\n\t);\n\n\tconst selectDuplicatedBlock = useCallback(\n\t\t( newClientId ) => {\n\t\t\tselectBlock( undefined, newClientId );\n\t\t},\n\t\t[ selectBlock ]\n\t);\n\n\tconst toggleExpanded = useCallback(\n\t\t( event ) => {\n\t\t\t// Prevent shift+click from opening link in a new window when toggling.\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tif ( isExpanded === true ) {\n\t\t\t\tcollapse( clientId );\n\t\t\t} else if ( isExpanded === false ) {\n\t\t\t\texpand( clientId );\n\t\t\t}\n\t\t},\n\t\t[ clientId, expand, collapse, isExpanded ]\n\t);\n\n\tconst showBlockActions =\n\t\twithExperimentalFeatures &&\n\t\t//hide actions for blocks like core/widget-areas\n\t\t( ! hideContainerBlockActions ||\n\t\t\t( hideContainerBlockActions && level > 1 ) );\n\n\tconst hideBlockActions = withExperimentalFeatures && ! showBlockActions;\n\n\tlet colSpan;\n\tif ( hasRenderedMovers ) {\n\t\tcolSpan = 2;\n\t} else if ( hideBlockActions ) {\n\t\tcolSpan = 3;\n\t}\n\n\tconst classes = classnames( {\n\t\t'is-selected': isSelected,\n\t\t'is-branch-selected':\n\t\t\twithExperimentalPersistentListViewFeatures && isBranchSelected,\n\t\t'is-dragging': isDragged,\n\t\t'has-single-cell': hideBlockActions,\n\t} );\n\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst settingsAriaLabel = blockInformation\n\t\t? sprintf(\n\t\t\t\t// translators: %s: The title of the block.\n\t\t\t\t__( 'Options for %s block' ),\n\t\t\t\tblockInformation.title\n\t\t )\n\t\t: __( 'Options' );\n\n\t// Only include all selected blocks if the currently clicked on block\n\t// is one of the selected blocks. This ensures that if a user attempts\n\t// to alter a block that isn't part of the selection, they're still able\n\t// to do so.\n\tconst dropdownClientIds = selectedClientIds.includes( clientId )\n\t\t? selectedClientIds\n\t\t: [ clientId ];\n\n\treturn (\n\t\t<ListViewLeaf\n\t\t\tclassName={ classes }\n\t\t\tonMouseEnter={ onMouseEnter }\n\t\t\tonMouseLeave={ onMouseLeave }\n\t\t\tonFocus={ onMouseEnter }\n\t\t\tonBlur={ onMouseLeave }\n\t\t\tlevel={ level }\n\t\t\tposition={ position }\n\t\t\trowCount={ rowCount }\n\t\t\tpath={ path }\n\t\t\tid={ `list-view-block-${ clientId }` }\n\t\t\tdata-block={ clientId }\n\t\t\tisExpanded={ isExpanded }\n\t\t>\n\t\t\t<TreeGridCell\n\t\t\t\tclassName=\"block-editor-list-view-block__contents-cell\"\n\t\t\t\tcolSpan={ colSpan }\n\t\t\t\tref={ cellRef }\n\t\t\t>\n\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t<div className=\"block-editor-list-view-block__contents-container\">\n\t\t\t\t\t\t<ListViewBlockContents\n\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\tonClick={ selectEditorBlock }\n\t\t\t\t\t\t\tonToggleExpanded={ toggleExpanded }\n\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\t\tsiblingBlockCount={ siblingBlockCount }\n\t\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\tisExpanded={ isExpanded }\n\t\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t</TreeGridCell>\n\t\t\t{ hasRenderedMovers && (\n\t\t\t\t<>\n\t\t\t\t\t<TreeGridCell\n\t\t\t\t\t\tclassName={ moverCellClassName }\n\t\t\t\t\t\twithoutGridItem\n\t\t\t\t\t>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverUpButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t\t<TreeGridItem>\n\t\t\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t\t\t<BlockMoverDownButton\n\t\t\t\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\t\t\t\tclientIds={ [ clientId ] }\n\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\ttabIndex={ tabIndex }\n\t\t\t\t\t\t\t\t\tonFocus={ onFocus }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</TreeGridItem>\n\t\t\t\t\t</TreeGridCell>\n\t\t\t\t</>\n\t\t\t) }\n\n\t\t\t{ showBlockActions && (\n\t\t\t\t<TreeGridCell className={ listViewBlockSettingsClassName }>\n\t\t\t\t\t{ ( { ref, tabIndex, onFocus } ) => (\n\t\t\t\t\t\t<BlockSettingsDropdown\n\t\t\t\t\t\t\tclientIds={ dropdownClientIds }\n\t\t\t\t\t\t\ticon={ moreVertical }\n\t\t\t\t\t\t\tlabel={ settingsAriaLabel }\n\t\t\t\t\t\t\ttoggleProps={ {\n\t\t\t\t\t\t\t\tref,\n\t\t\t\t\t\t\t\tclassName: 'block-editor-list-view-block__menu',\n\t\t\t\t\t\t\t\ttabIndex,\n\t\t\t\t\t\t\t\tonFocus,\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tdisableOpenOnArrowDown\n\t\t\t\t\t\t\t__experimentalSelectBlock={ selectDuplicatedBlock }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</TreeGridCell>\n\t\t\t) }\n\t\t</ListViewLeaf>\n\t);\n}\n\nexport default memo( ListViewBlock );\n"]}
@@ -143,7 +143,8 @@ function ListViewBranch(props) {
143
143
  showBlockMovers: showBlockMovers,
144
144
  path: updatedPath,
145
145
  isExpanded: isExpanded,
146
- listPosition: nextPosition
146
+ listPosition: nextPosition,
147
+ selectedClientIds: selectedClientIds
147
148
  }), !showBlock && (0, _element.createElement)("tr", null, (0, _element.createElement)("td", {
148
149
  className: "block-editor-list-view-placeholder"
149
150
  })), hasNestedBlocks && isExpanded && !isDragged && (0, _element.createElement)(ListViewBranch, {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/list-view/branch.js"],"names":["countBlocks","block","expandedState","draggedClientIds","isDragged","includes","clientId","isExpanded","innerBlocks","reduce","countReducer","count","length","ListViewBranch","props","blocks","selectBlock","showBlockMovers","showNestedBlocks","selectedClientIds","level","path","isBranchSelected","listPosition","fixedListWindow","__experimentalPersistentListViewFeatures","filteredBlocks","blockCount","nextPosition","map","index","usesWindowing","itemInView","blockInView","position","updatedPath","hasNestedBlocks","undefined","showBlock","isSelected","isSelectedBranch","defaultProps"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { compact } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { memo } from '@wordpress/element';\nimport { AsyncModeProvider } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport ListViewBlock from './block';\nimport { useListViewContext } from './context';\nimport { isClientIdSelected } from './utils';\n\n/**\n * Given a block, returns the total number of blocks in that subtree. This is used to help determine\n * the list position of a block.\n *\n * When a block is collapsed, we do not count their children as part of that total. In the current drag\n * implementation dragged blocks and their children are not counted.\n *\n * @param {Object} block block tree\n * @param {Object} expandedState state that notes which branches are collapsed\n * @param {Array} draggedClientIds a list of dragged client ids\n * @return {number} block count\n */\nfunction countBlocks( block, expandedState, draggedClientIds ) {\n\tconst isDragged = draggedClientIds?.includes( block.clientId );\n\tif ( isDragged ) {\n\t\treturn 0;\n\t}\n\tconst isExpanded = expandedState[ block.clientId ] ?? true;\n\tif ( isExpanded ) {\n\t\treturn (\n\t\t\t1 +\n\t\t\tblock.innerBlocks.reduce(\n\t\t\t\tcountReducer( expandedState, draggedClientIds ),\n\t\t\t\t0\n\t\t\t)\n\t\t);\n\t}\n\treturn 1;\n}\nconst countReducer = ( expandedState, draggedClientIds ) => (\n\tcount,\n\tblock\n) => {\n\tconst isDragged = draggedClientIds?.includes( block.clientId );\n\tif ( isDragged ) {\n\t\treturn count;\n\t}\n\tconst isExpanded = expandedState[ block.clientId ] ?? true;\n\tif ( isExpanded && block.innerBlocks.length > 0 ) {\n\t\treturn count + countBlocks( block, expandedState, draggedClientIds );\n\t}\n\treturn count + 1;\n};\n\nfunction ListViewBranch( props ) {\n\tconst {\n\t\tblocks,\n\t\tselectBlock,\n\t\tshowBlockMovers,\n\t\tshowNestedBlocks,\n\t\tselectedClientIds,\n\t\tlevel = 1,\n\t\tpath = '',\n\t\tisBranchSelected = false,\n\t\tlistPosition = 0,\n\t\tfixedListWindow,\n\t} = props;\n\n\tconst {\n\t\texpandedState,\n\t\tdraggedClientIds,\n\t\t__experimentalPersistentListViewFeatures,\n\t} = useListViewContext();\n\n\tconst filteredBlocks = compact( blocks );\n\tconst blockCount = filteredBlocks.length;\n\tlet nextPosition = listPosition;\n\n\treturn (\n\t\t<>\n\t\t\t{ filteredBlocks.map( ( block, index ) => {\n\t\t\t\tconst { clientId, innerBlocks } = block;\n\n\t\t\t\tif ( index > 0 ) {\n\t\t\t\t\tnextPosition += countBlocks(\n\t\t\t\t\t\tfilteredBlocks[ index - 1 ],\n\t\t\t\t\t\texpandedState,\n\t\t\t\t\t\tdraggedClientIds\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst usesWindowing = __experimentalPersistentListViewFeatures;\n\n\t\t\t\tconst { itemInView } = fixedListWindow;\n\n\t\t\t\tconst blockInView =\n\t\t\t\t\t! usesWindowing || itemInView( nextPosition );\n\n\t\t\t\tconst position = index + 1;\n\t\t\t\tconst updatedPath =\n\t\t\t\t\tpath.length > 0\n\t\t\t\t\t\t? `${ path }_${ position }`\n\t\t\t\t\t\t: `${ position }`;\n\t\t\t\tconst hasNestedBlocks =\n\t\t\t\t\tshowNestedBlocks && !! innerBlocks && !! innerBlocks.length;\n\n\t\t\t\tconst isExpanded = hasNestedBlocks\n\t\t\t\t\t? expandedState[ clientId ] ?? true\n\t\t\t\t\t: undefined;\n\n\t\t\t\tconst isDragged = !! draggedClientIds?.includes( clientId );\n\n\t\t\t\tconst showBlock = isDragged || blockInView;\n\n\t\t\t\t// Make updates to the selected or dragged blocks synchronous,\n\t\t\t\t// but asynchronous for any other block.\n\t\t\t\tconst isSelected = isClientIdSelected(\n\t\t\t\t\tclientId,\n\t\t\t\t\tselectedClientIds\n\t\t\t\t);\n\t\t\t\tconst isSelectedBranch =\n\t\t\t\t\tisBranchSelected || ( isSelected && hasNestedBlocks );\n\t\t\t\treturn (\n\t\t\t\t\t<AsyncModeProvider key={ clientId } value={ ! isSelected }>\n\t\t\t\t\t\t{ showBlock && (\n\t\t\t\t\t\t\t<ListViewBlock\n\t\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\t\tselectBlock={ selectBlock }\n\t\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\t\tisBranchSelected={ isSelectedBranch }\n\t\t\t\t\t\t\t\tisDragged={ isDragged }\n\t\t\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\t\t\trowCount={ blockCount }\n\t\t\t\t\t\t\t\tsiblingBlockCount={ blockCount }\n\t\t\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\t\t\tpath={ updatedPath }\n\t\t\t\t\t\t\t\tisExpanded={ isExpanded }\n\t\t\t\t\t\t\t\tlistPosition={ nextPosition }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ ! showBlock && (\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td className=\"block-editor-list-view-placeholder\" />\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ hasNestedBlocks && isExpanded && ! isDragged && (\n\t\t\t\t\t\t\t<ListViewBranch\n\t\t\t\t\t\t\t\tblocks={ innerBlocks }\n\t\t\t\t\t\t\t\tselectBlock={ selectBlock }\n\t\t\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\t\t\tshowNestedBlocks={ showNestedBlocks }\n\t\t\t\t\t\t\t\tlevel={ level + 1 }\n\t\t\t\t\t\t\t\tpath={ updatedPath }\n\t\t\t\t\t\t\t\tlistPosition={ nextPosition + 1 }\n\t\t\t\t\t\t\t\tfixedListWindow={ fixedListWindow }\n\t\t\t\t\t\t\t\tisBranchSelected={ isSelectedBranch }\n\t\t\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</AsyncModeProvider>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</>\n\t);\n}\n\nListViewBranch.defaultProps = {\n\tselectBlock: () => {},\n};\n\nexport default memo( ListViewBranch );\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/list-view/branch.js"],"names":["countBlocks","block","expandedState","draggedClientIds","isDragged","includes","clientId","isExpanded","innerBlocks","reduce","countReducer","count","length","ListViewBranch","props","blocks","selectBlock","showBlockMovers","showNestedBlocks","selectedClientIds","level","path","isBranchSelected","listPosition","fixedListWindow","__experimentalPersistentListViewFeatures","filteredBlocks","blockCount","nextPosition","map","index","usesWindowing","itemInView","blockInView","position","updatedPath","hasNestedBlocks","undefined","showBlock","isSelected","isSelectedBranch","defaultProps"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { compact } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { memo } from '@wordpress/element';\nimport { AsyncModeProvider } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport ListViewBlock from './block';\nimport { useListViewContext } from './context';\nimport { isClientIdSelected } from './utils';\n\n/**\n * Given a block, returns the total number of blocks in that subtree. This is used to help determine\n * the list position of a block.\n *\n * When a block is collapsed, we do not count their children as part of that total. In the current drag\n * implementation dragged blocks and their children are not counted.\n *\n * @param {Object} block block tree\n * @param {Object} expandedState state that notes which branches are collapsed\n * @param {Array} draggedClientIds a list of dragged client ids\n * @return {number} block count\n */\nfunction countBlocks( block, expandedState, draggedClientIds ) {\n\tconst isDragged = draggedClientIds?.includes( block.clientId );\n\tif ( isDragged ) {\n\t\treturn 0;\n\t}\n\tconst isExpanded = expandedState[ block.clientId ] ?? true;\n\tif ( isExpanded ) {\n\t\treturn (\n\t\t\t1 +\n\t\t\tblock.innerBlocks.reduce(\n\t\t\t\tcountReducer( expandedState, draggedClientIds ),\n\t\t\t\t0\n\t\t\t)\n\t\t);\n\t}\n\treturn 1;\n}\nconst countReducer = ( expandedState, draggedClientIds ) => (\n\tcount,\n\tblock\n) => {\n\tconst isDragged = draggedClientIds?.includes( block.clientId );\n\tif ( isDragged ) {\n\t\treturn count;\n\t}\n\tconst isExpanded = expandedState[ block.clientId ] ?? true;\n\tif ( isExpanded && block.innerBlocks.length > 0 ) {\n\t\treturn count + countBlocks( block, expandedState, draggedClientIds );\n\t}\n\treturn count + 1;\n};\n\nfunction ListViewBranch( props ) {\n\tconst {\n\t\tblocks,\n\t\tselectBlock,\n\t\tshowBlockMovers,\n\t\tshowNestedBlocks,\n\t\tselectedClientIds,\n\t\tlevel = 1,\n\t\tpath = '',\n\t\tisBranchSelected = false,\n\t\tlistPosition = 0,\n\t\tfixedListWindow,\n\t} = props;\n\n\tconst {\n\t\texpandedState,\n\t\tdraggedClientIds,\n\t\t__experimentalPersistentListViewFeatures,\n\t} = useListViewContext();\n\n\tconst filteredBlocks = compact( blocks );\n\tconst blockCount = filteredBlocks.length;\n\tlet nextPosition = listPosition;\n\n\treturn (\n\t\t<>\n\t\t\t{ filteredBlocks.map( ( block, index ) => {\n\t\t\t\tconst { clientId, innerBlocks } = block;\n\n\t\t\t\tif ( index > 0 ) {\n\t\t\t\t\tnextPosition += countBlocks(\n\t\t\t\t\t\tfilteredBlocks[ index - 1 ],\n\t\t\t\t\t\texpandedState,\n\t\t\t\t\t\tdraggedClientIds\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst usesWindowing = __experimentalPersistentListViewFeatures;\n\n\t\t\t\tconst { itemInView } = fixedListWindow;\n\n\t\t\t\tconst blockInView =\n\t\t\t\t\t! usesWindowing || itemInView( nextPosition );\n\n\t\t\t\tconst position = index + 1;\n\t\t\t\tconst updatedPath =\n\t\t\t\t\tpath.length > 0\n\t\t\t\t\t\t? `${ path }_${ position }`\n\t\t\t\t\t\t: `${ position }`;\n\t\t\t\tconst hasNestedBlocks =\n\t\t\t\t\tshowNestedBlocks && !! innerBlocks && !! innerBlocks.length;\n\n\t\t\t\tconst isExpanded = hasNestedBlocks\n\t\t\t\t\t? expandedState[ clientId ] ?? true\n\t\t\t\t\t: undefined;\n\n\t\t\t\tconst isDragged = !! draggedClientIds?.includes( clientId );\n\n\t\t\t\tconst showBlock = isDragged || blockInView;\n\n\t\t\t\t// Make updates to the selected or dragged blocks synchronous,\n\t\t\t\t// but asynchronous for any other block.\n\t\t\t\tconst isSelected = isClientIdSelected(\n\t\t\t\t\tclientId,\n\t\t\t\t\tselectedClientIds\n\t\t\t\t);\n\t\t\t\tconst isSelectedBranch =\n\t\t\t\t\tisBranchSelected || ( isSelected && hasNestedBlocks );\n\t\t\t\treturn (\n\t\t\t\t\t<AsyncModeProvider key={ clientId } value={ ! isSelected }>\n\t\t\t\t\t\t{ showBlock && (\n\t\t\t\t\t\t\t<ListViewBlock\n\t\t\t\t\t\t\t\tblock={ block }\n\t\t\t\t\t\t\t\tselectBlock={ selectBlock }\n\t\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\t\tisBranchSelected={ isSelectedBranch }\n\t\t\t\t\t\t\t\tisDragged={ isDragged }\n\t\t\t\t\t\t\t\tlevel={ level }\n\t\t\t\t\t\t\t\tposition={ position }\n\t\t\t\t\t\t\t\trowCount={ blockCount }\n\t\t\t\t\t\t\t\tsiblingBlockCount={ blockCount }\n\t\t\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\t\t\tpath={ updatedPath }\n\t\t\t\t\t\t\t\tisExpanded={ isExpanded }\n\t\t\t\t\t\t\t\tlistPosition={ nextPosition }\n\t\t\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ ! showBlock && (\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td className=\"block-editor-list-view-placeholder\" />\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ hasNestedBlocks && isExpanded && ! isDragged && (\n\t\t\t\t\t\t\t<ListViewBranch\n\t\t\t\t\t\t\t\tblocks={ innerBlocks }\n\t\t\t\t\t\t\t\tselectBlock={ selectBlock }\n\t\t\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\t\t\tshowNestedBlocks={ showNestedBlocks }\n\t\t\t\t\t\t\t\tlevel={ level + 1 }\n\t\t\t\t\t\t\t\tpath={ updatedPath }\n\t\t\t\t\t\t\t\tlistPosition={ nextPosition + 1 }\n\t\t\t\t\t\t\t\tfixedListWindow={ fixedListWindow }\n\t\t\t\t\t\t\t\tisBranchSelected={ isSelectedBranch }\n\t\t\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</AsyncModeProvider>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</>\n\t);\n}\n\nListViewBranch.defaultProps = {\n\tselectBlock: () => {},\n};\n\nexport default memo( ListViewBranch );\n"]}
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = void 0;
8
+ exports.default = exports.BLOCK_LIST_ITEM_HEIGHT = void 0;
9
9
 
10
10
  var _element = require("@wordpress/element");
11
11
 
@@ -25,10 +25,14 @@ var _context = require("./context");
25
25
 
26
26
  var _dropIndicator = _interopRequireDefault(require("./drop-indicator"));
27
27
 
28
+ var _useBlockSelection = _interopRequireDefault(require("./use-block-selection"));
29
+
28
30
  var _useListViewClientIds = _interopRequireDefault(require("./use-list-view-client-ids"));
29
31
 
30
32
  var _useListViewDropZone = _interopRequireDefault(require("./use-list-view-drop-zone"));
31
33
 
34
+ var _useListViewExpandSelectedItem = _interopRequireDefault(require("./use-list-view-expand-selected-item"));
35
+
32
36
  var _store = require("../../store");
33
37
 
34
38
  /**
@@ -38,49 +42,39 @@ var _store = require("../../store");
38
42
  /**
39
43
  * Internal dependencies
40
44
  */
41
- const noop = () => {};
42
-
43
45
  const expanded = (state, action) => {
44
- switch (action.type) {
45
- case 'expand':
46
- return { ...state,
47
- ...{
48
- [action.clientId]: true
49
- }
50
- };
51
-
52
- case 'collapse':
53
- return { ...state,
54
- ...{
55
- [action.clientId]: false
56
- }
57
- };
58
-
59
- default:
60
- return state;
46
+ if (Array.isArray(action.clientIds)) {
47
+ return { ...state,
48
+ ...action.clientIds.reduce((newState, id) => ({ ...newState,
49
+ [id]: action.type === 'expand'
50
+ }), {})
51
+ };
61
52
  }
53
+
54
+ return state;
62
55
  };
56
+
57
+ const BLOCK_LIST_ITEM_HEIGHT = 36;
63
58
  /**
64
59
  * Wrap `ListViewRows` with `TreeGrid`. ListViewRows is a
65
60
  * recursive component (it renders itself), so this ensures TreeGrid is only
66
61
  * present at the very top of the navigation grid.
67
62
  *
68
- * @param {Object} props Components props.
69
- * @param {Array} props.blocks Custom subset of block client IDs to be used instead of the default hierarchy.
70
- * @param {Function} props.onSelect Block selection callback.
71
- * @param {boolean} props.showNestedBlocks Flag to enable displaying nested blocks.
72
- * @param {boolean} props.showBlockMovers Flag to enable block movers
73
- * @param {boolean} props.__experimentalFeatures Flag to enable experimental features.
74
- * @param {boolean} props.__experimentalPersistentListViewFeatures Flag to enable features for the Persistent List View experiment.
75
- * @param {boolean} props.__experimentalHideContainerBlockActions Flag to hide actions of top level blocks (like core/widget-area)
76
- * @param {Object} ref Forwarded ref
63
+ * @param {Object} props Components props.
64
+ * @param {Array} props.blocks Custom subset of block client IDs to be used instead of the default hierarchy.
65
+ * @param {boolean} props.showNestedBlocks Flag to enable displaying nested blocks.
66
+ * @param {boolean} props.showBlockMovers Flag to enable block movers
67
+ * @param {boolean} props.__experimentalFeatures Flag to enable experimental features.
68
+ * @param {boolean} props.__experimentalPersistentListViewFeatures Flag to enable features for the Persistent List View experiment.
69
+ * @param {boolean} props.__experimentalHideContainerBlockActions Flag to hide actions of top level blocks (like core/widget-area)
70
+ * @param {Object} ref Forwarded ref
77
71
  */
78
72
 
73
+ exports.BLOCK_LIST_ITEM_HEIGHT = BLOCK_LIST_ITEM_HEIGHT;
79
74
 
80
75
  function ListView(_ref, ref) {
81
76
  let {
82
77
  blocks,
83
- onSelect = noop,
84
78
  __experimentalFeatures,
85
79
  __experimentalPersistentListViewFeatures,
86
80
  __experimentalHideContainerBlockActions,
@@ -93,9 +87,6 @@ function ListView(_ref, ref) {
93
87
  draggedClientIds,
94
88
  selectedClientIds
95
89
  } = (0, _useListViewClientIds.default)(blocks);
96
- const {
97
- selectBlock
98
- } = (0, _data.useDispatch)(_store.store);
99
90
  const {
100
91
  visibleBlockCount
101
92
  } = (0, _data.useSelect)(select => {
@@ -108,10 +99,9 @@ function ListView(_ref, ref) {
108
99
  visibleBlockCount: getGlobalBlockCount() - draggedBlockCount
109
100
  };
110
101
  }, [draggedClientIds]);
111
- const selectEditorBlock = (0, _element.useCallback)(clientId => {
112
- selectBlock(clientId);
113
- onSelect(clientId);
114
- }, [selectBlock, onSelect]);
102
+ const {
103
+ updateBlockSelection
104
+ } = (0, _useBlockSelection.default)();
115
105
  const [expandedState, setExpandedState] = (0, _element.useReducer)(expanded, {});
116
106
  const {
117
107
  ref: dropZoneRef,
@@ -120,13 +110,23 @@ function ListView(_ref, ref) {
120
110
  const elementRef = (0, _element.useRef)();
121
111
  const treeGridRef = (0, _compose.useMergeRefs)([elementRef, dropZoneRef, ref]);
122
112
  const isMounted = (0, _element.useRef)(false);
113
+ const {
114
+ setSelectedTreeId
115
+ } = (0, _useListViewExpandSelectedItem.default)({
116
+ firstSelectedBlockClientId: selectedClientIds[0],
117
+ setExpandedState
118
+ });
119
+ const selectEditorBlock = (0, _element.useCallback)((event, clientId) => {
120
+ updateBlockSelection(event, clientId);
121
+ setSelectedTreeId(clientId);
122
+ }, [setSelectedTreeId, updateBlockSelection]);
123
123
  (0, _element.useEffect)(() => {
124
124
  isMounted.current = true;
125
125
  }, []); // List View renders a fixed number of items and relies on each having a fixed item height of 36px.
126
126
  // If this value changes, we should also change the itemHeight value set in useFixedWindowList.
127
127
  // See: https://github.com/WordPress/gutenberg/pull/35230 for additional context.
128
128
 
129
- const [fixedListWindow] = (0, _compose.__experimentalUseFixedWindowList)(elementRef, 36, visibleBlockCount, {
129
+ const [fixedListWindow] = (0, _compose.__experimentalUseFixedWindowList)(elementRef, BLOCK_LIST_ITEM_HEIGHT, visibleBlockCount, {
130
130
  useWindowing: __experimentalPersistentListViewFeatures,
131
131
  windowOverscan: 40
132
132
  });
@@ -137,7 +137,7 @@ function ListView(_ref, ref) {
137
137
 
138
138
  setExpandedState({
139
139
  type: 'expand',
140
- clientId
140
+ clientIds: [clientId]
141
141
  });
142
142
  }, [setExpandedState]);
143
143
  const collapse = (0, _element.useCallback)(clientId => {
@@ -147,7 +147,7 @@ function ListView(_ref, ref) {
147
147
 
148
148
  setExpandedState({
149
149
  type: 'collapse',
150
- clientId
150
+ clientIds: [clientId]
151
151
  });
152
152
  }, [setExpandedState]);
153
153
  const expandRow = (0, _element.useCallback)(row => {
@@ -160,6 +160,13 @@ function ListView(_ref, ref) {
160
160
 
161
161
  collapse(row === null || row === void 0 ? void 0 : (_row$dataset2 = row.dataset) === null || _row$dataset2 === void 0 ? void 0 : _row$dataset2.block);
162
162
  }, [collapse]);
163
+ const focusRow = (0, _element.useCallback)((event, startRow, endRow) => {
164
+ if (event.shiftKey) {
165
+ var _startRow$dataset, _endRow$dataset;
166
+
167
+ updateBlockSelection(event, startRow === null || startRow === void 0 ? void 0 : (_startRow$dataset = startRow.dataset) === null || _startRow$dataset === void 0 ? void 0 : _startRow$dataset.block, endRow === null || endRow === void 0 ? void 0 : (_endRow$dataset = endRow.dataset) === null || _endRow$dataset === void 0 ? void 0 : _endRow$dataset.block);
168
+ }
169
+ }, [updateBlockSelection]);
163
170
  const contextValue = (0, _element.useMemo)(() => ({
164
171
  __experimentalFeatures,
165
172
  __experimentalPersistentListViewFeatures,
@@ -180,7 +187,8 @@ function ListView(_ref, ref) {
180
187
  "aria-label": (0, _i18n.__)('Block navigation structure'),
181
188
  ref: treeGridRef,
182
189
  onCollapseRow: collapseRow,
183
- onExpandRow: expandRow
190
+ onExpandRow: expandRow,
191
+ onFocusRow: focusRow
184
192
  }, (0, _element.createElement)(_context.ListViewContext.Provider, {
185
193
  value: contextValue
186
194
  }, (0, _element.createElement)(_branch.default, (0, _extends2.default)({
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/list-view/index.js"],"names":["noop","expanded","state","action","type","clientId","ListView","ref","blocks","onSelect","__experimentalFeatures","__experimentalPersistentListViewFeatures","__experimentalHideContainerBlockActions","showNestedBlocks","showBlockMovers","props","clientIdsTree","draggedClientIds","selectedClientIds","selectBlock","blockEditorStore","visibleBlockCount","select","getGlobalBlockCount","getClientIdsOfDescendants","draggedBlockCount","length","selectEditorBlock","expandedState","setExpandedState","dropZoneRef","target","blockDropTarget","elementRef","treeGridRef","isMounted","current","fixedListWindow","useWindowing","windowOverscan","expand","collapse","expandRow","row","dataset","block","collapseRow","contextValue","isTreeGridMounted"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tuseMergeRefs,\n\t__experimentalUseFixedWindowList as useFixedWindowList,\n} from '@wordpress/compose';\nimport { __experimentalTreeGrid as TreeGrid } from '@wordpress/components';\nimport { AsyncModeProvider, useDispatch, useSelect } from '@wordpress/data';\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseReducer,\n\tforwardRef,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport ListViewBranch from './branch';\nimport { ListViewContext } from './context';\nimport ListViewDropIndicator from './drop-indicator';\nimport useListViewClientIds from './use-list-view-client-ids';\nimport useListViewDropZone from './use-list-view-drop-zone';\nimport { store as blockEditorStore } from '../../store';\n\nconst noop = () => {};\nconst expanded = ( state, action ) => {\n\tswitch ( action.type ) {\n\t\tcase 'expand':\n\t\t\treturn { ...state, ...{ [ action.clientId ]: true } };\n\t\tcase 'collapse':\n\t\t\treturn { ...state, ...{ [ action.clientId ]: false } };\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n\n/**\n * Wrap `ListViewRows` with `TreeGrid`. ListViewRows is a\n * recursive component (it renders itself), so this ensures TreeGrid is only\n * present at the very top of the navigation grid.\n *\n * @param {Object} props Components props.\n * @param {Array} props.blocks Custom subset of block client IDs to be used instead of the default hierarchy.\n * @param {Function} props.onSelect Block selection callback.\n * @param {boolean} props.showNestedBlocks Flag to enable displaying nested blocks.\n * @param {boolean} props.showBlockMovers Flag to enable block movers\n * @param {boolean} props.__experimentalFeatures Flag to enable experimental features.\n * @param {boolean} props.__experimentalPersistentListViewFeatures Flag to enable features for the Persistent List View experiment.\n * @param {boolean} props.__experimentalHideContainerBlockActions Flag to hide actions of top level blocks (like core/widget-area)\n * @param {Object} ref Forwarded ref\n */\nfunction ListView(\n\t{\n\t\tblocks,\n\t\tonSelect = noop,\n\t\t__experimentalFeatures,\n\t\t__experimentalPersistentListViewFeatures,\n\t\t__experimentalHideContainerBlockActions,\n\t\tshowNestedBlocks,\n\t\tshowBlockMovers,\n\t\t...props\n\t},\n\tref\n) {\n\tconst {\n\t\tclientIdsTree,\n\t\tdraggedClientIds,\n\t\tselectedClientIds,\n\t} = useListViewClientIds( blocks );\n\tconst { selectBlock } = useDispatch( blockEditorStore );\n\tconst { visibleBlockCount } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getGlobalBlockCount, getClientIdsOfDescendants } = select(\n\t\t\t\tblockEditorStore\n\t\t\t);\n\t\t\tconst draggedBlockCount =\n\t\t\t\tdraggedClientIds?.length > 0\n\t\t\t\t\t? getClientIdsOfDescendants( draggedClientIds ).length + 1\n\t\t\t\t\t: 0;\n\t\t\treturn {\n\t\t\t\tvisibleBlockCount: getGlobalBlockCount() - draggedBlockCount,\n\t\t\t};\n\t\t},\n\t\t[ draggedClientIds ]\n\t);\n\tconst selectEditorBlock = useCallback(\n\t\t( clientId ) => {\n\t\t\tselectBlock( clientId );\n\t\t\tonSelect( clientId );\n\t\t},\n\t\t[ selectBlock, onSelect ]\n\t);\n\tconst [ expandedState, setExpandedState ] = useReducer( expanded, {} );\n\n\tconst { ref: dropZoneRef, target: blockDropTarget } = useListViewDropZone();\n\tconst elementRef = useRef();\n\tconst treeGridRef = useMergeRefs( [ elementRef, dropZoneRef, ref ] );\n\n\tconst isMounted = useRef( false );\n\tuseEffect( () => {\n\t\tisMounted.current = true;\n\t}, [] );\n\n\t// List View renders a fixed number of items and relies on each having a fixed item height of 36px.\n\t// If this value changes, we should also change the itemHeight value set in useFixedWindowList.\n\t// See: https://github.com/WordPress/gutenberg/pull/35230 for additional context.\n\tconst [ fixedListWindow ] = useFixedWindowList(\n\t\telementRef,\n\t\t36,\n\t\tvisibleBlockCount,\n\t\t{\n\t\t\tuseWindowing: __experimentalPersistentListViewFeatures,\n\t\t\twindowOverscan: 40,\n\t\t}\n\t);\n\n\tconst expand = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetExpandedState( { type: 'expand', clientId } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst collapse = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetExpandedState( { type: 'collapse', clientId } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst expandRow = useCallback(\n\t\t( row ) => {\n\t\t\texpand( row?.dataset?.block );\n\t\t},\n\t\t[ expand ]\n\t);\n\tconst collapseRow = useCallback(\n\t\t( row ) => {\n\t\t\tcollapse( row?.dataset?.block );\n\t\t},\n\t\t[ collapse ]\n\t);\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\t__experimentalFeatures,\n\t\t\t__experimentalPersistentListViewFeatures,\n\t\t\t__experimentalHideContainerBlockActions,\n\t\t\tisTreeGridMounted: isMounted.current,\n\t\t\tdraggedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tcollapse,\n\t\t} ),\n\t\t[\n\t\t\t__experimentalFeatures,\n\t\t\t__experimentalPersistentListViewFeatures,\n\t\t\t__experimentalHideContainerBlockActions,\n\t\t\tisMounted.current,\n\t\t\tdraggedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tcollapse,\n\t\t]\n\t);\n\n\treturn (\n\t\t<AsyncModeProvider value={ true }>\n\t\t\t<ListViewDropIndicator\n\t\t\t\tlistViewRef={ elementRef }\n\t\t\t\tblockDropTarget={ blockDropTarget }\n\t\t\t/>\n\t\t\t<TreeGrid\n\t\t\t\tclassName=\"block-editor-list-view-tree\"\n\t\t\t\taria-label={ __( 'Block navigation structure' ) }\n\t\t\t\tref={ treeGridRef }\n\t\t\t\tonCollapseRow={ collapseRow }\n\t\t\t\tonExpandRow={ expandRow }\n\t\t\t>\n\t\t\t\t<ListViewContext.Provider value={ contextValue }>\n\t\t\t\t\t<ListViewBranch\n\t\t\t\t\t\tblocks={ clientIdsTree }\n\t\t\t\t\t\tselectBlock={ selectEditorBlock }\n\t\t\t\t\t\tshowNestedBlocks={ showNestedBlocks }\n\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\tfixedListWindow={ fixedListWindow }\n\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t/>\n\t\t\t\t</ListViewContext.Provider>\n\t\t\t</TreeGrid>\n\t\t</AsyncModeProvider>\n\t);\n}\nexport default forwardRef( ListView );\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/list-view/index.js"],"names":["expanded","state","action","Array","isArray","clientIds","reduce","newState","id","type","BLOCK_LIST_ITEM_HEIGHT","ListView","ref","blocks","__experimentalFeatures","__experimentalPersistentListViewFeatures","__experimentalHideContainerBlockActions","showNestedBlocks","showBlockMovers","props","clientIdsTree","draggedClientIds","selectedClientIds","visibleBlockCount","select","getGlobalBlockCount","getClientIdsOfDescendants","blockEditorStore","draggedBlockCount","length","updateBlockSelection","expandedState","setExpandedState","dropZoneRef","target","blockDropTarget","elementRef","treeGridRef","isMounted","setSelectedTreeId","firstSelectedBlockClientId","selectEditorBlock","event","clientId","current","fixedListWindow","useWindowing","windowOverscan","expand","collapse","expandRow","row","dataset","block","collapseRow","focusRow","startRow","endRow","shiftKey","contextValue","isTreeGridMounted"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tuseMergeRefs,\n\t__experimentalUseFixedWindowList as useFixedWindowList,\n} from '@wordpress/compose';\nimport { __experimentalTreeGrid as TreeGrid } from '@wordpress/components';\nimport { AsyncModeProvider, useSelect } from '@wordpress/data';\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseReducer,\n\tforwardRef,\n} from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport ListViewBranch from './branch';\nimport { ListViewContext } from './context';\nimport ListViewDropIndicator from './drop-indicator';\nimport useBlockSelection from './use-block-selection';\nimport useListViewClientIds from './use-list-view-client-ids';\nimport useListViewDropZone from './use-list-view-drop-zone';\nimport useListViewExpandSelectedItem from './use-list-view-expand-selected-item';\nimport { store as blockEditorStore } from '../../store';\n\nconst expanded = ( state, action ) => {\n\tif ( Array.isArray( action.clientIds ) ) {\n\t\treturn {\n\t\t\t...state,\n\t\t\t...action.clientIds.reduce(\n\t\t\t\t( newState, id ) => ( {\n\t\t\t\t\t...newState,\n\t\t\t\t\t[ id ]: action.type === 'expand',\n\t\t\t\t} ),\n\t\t\t\t{}\n\t\t\t),\n\t\t};\n\t}\n\treturn state;\n};\n\nexport const BLOCK_LIST_ITEM_HEIGHT = 36;\n\n/**\n * Wrap `ListViewRows` with `TreeGrid`. ListViewRows is a\n * recursive component (it renders itself), so this ensures TreeGrid is only\n * present at the very top of the navigation grid.\n *\n * @param {Object} props Components props.\n * @param {Array} props.blocks Custom subset of block client IDs to be used instead of the default hierarchy.\n * @param {boolean} props.showNestedBlocks Flag to enable displaying nested blocks.\n * @param {boolean} props.showBlockMovers Flag to enable block movers\n * @param {boolean} props.__experimentalFeatures Flag to enable experimental features.\n * @param {boolean} props.__experimentalPersistentListViewFeatures Flag to enable features for the Persistent List View experiment.\n * @param {boolean} props.__experimentalHideContainerBlockActions Flag to hide actions of top level blocks (like core/widget-area)\n * @param {Object} ref Forwarded ref\n */\nfunction ListView(\n\t{\n\t\tblocks,\n\t\t__experimentalFeatures,\n\t\t__experimentalPersistentListViewFeatures,\n\t\t__experimentalHideContainerBlockActions,\n\t\tshowNestedBlocks,\n\t\tshowBlockMovers,\n\t\t...props\n\t},\n\tref\n) {\n\tconst {\n\t\tclientIdsTree,\n\t\tdraggedClientIds,\n\t\tselectedClientIds,\n\t} = useListViewClientIds( blocks );\n\n\tconst { visibleBlockCount } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getGlobalBlockCount, getClientIdsOfDescendants } = select(\n\t\t\t\tblockEditorStore\n\t\t\t);\n\t\t\tconst draggedBlockCount =\n\t\t\t\tdraggedClientIds?.length > 0\n\t\t\t\t\t? getClientIdsOfDescendants( draggedClientIds ).length + 1\n\t\t\t\t\t: 0;\n\t\t\treturn {\n\t\t\t\tvisibleBlockCount: getGlobalBlockCount() - draggedBlockCount,\n\t\t\t};\n\t\t},\n\t\t[ draggedClientIds ]\n\t);\n\n\tconst { updateBlockSelection } = useBlockSelection();\n\n\tconst [ expandedState, setExpandedState ] = useReducer( expanded, {} );\n\n\tconst { ref: dropZoneRef, target: blockDropTarget } = useListViewDropZone();\n\tconst elementRef = useRef();\n\tconst treeGridRef = useMergeRefs( [ elementRef, dropZoneRef, ref ] );\n\n\tconst isMounted = useRef( false );\n\tconst { setSelectedTreeId } = useListViewExpandSelectedItem( {\n\t\tfirstSelectedBlockClientId: selectedClientIds[ 0 ],\n\t\tsetExpandedState,\n\t} );\n\tconst selectEditorBlock = useCallback(\n\t\t( event, clientId ) => {\n\t\t\tupdateBlockSelection( event, clientId );\n\t\t\tsetSelectedTreeId( clientId );\n\t\t},\n\t\t[ setSelectedTreeId, updateBlockSelection ]\n\t);\n\tuseEffect( () => {\n\t\tisMounted.current = true;\n\t}, [] );\n\n\t// List View renders a fixed number of items and relies on each having a fixed item height of 36px.\n\t// If this value changes, we should also change the itemHeight value set in useFixedWindowList.\n\t// See: https://github.com/WordPress/gutenberg/pull/35230 for additional context.\n\tconst [ fixedListWindow ] = useFixedWindowList(\n\t\telementRef,\n\t\tBLOCK_LIST_ITEM_HEIGHT,\n\t\tvisibleBlockCount,\n\t\t{\n\t\t\tuseWindowing: __experimentalPersistentListViewFeatures,\n\t\t\twindowOverscan: 40,\n\t\t}\n\t);\n\n\tconst expand = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetExpandedState( { type: 'expand', clientIds: [ clientId ] } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst collapse = useCallback(\n\t\t( clientId ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetExpandedState( { type: 'collapse', clientIds: [ clientId ] } );\n\t\t},\n\t\t[ setExpandedState ]\n\t);\n\tconst expandRow = useCallback(\n\t\t( row ) => {\n\t\t\texpand( row?.dataset?.block );\n\t\t},\n\t\t[ expand ]\n\t);\n\tconst collapseRow = useCallback(\n\t\t( row ) => {\n\t\t\tcollapse( row?.dataset?.block );\n\t\t},\n\t\t[ collapse ]\n\t);\n\tconst focusRow = useCallback(\n\t\t( event, startRow, endRow ) => {\n\t\t\tif ( event.shiftKey ) {\n\t\t\t\tupdateBlockSelection(\n\t\t\t\t\tevent,\n\t\t\t\t\tstartRow?.dataset?.block,\n\t\t\t\t\tendRow?.dataset?.block\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[ updateBlockSelection ]\n\t);\n\n\tconst contextValue = useMemo(\n\t\t() => ( {\n\t\t\t__experimentalFeatures,\n\t\t\t__experimentalPersistentListViewFeatures,\n\t\t\t__experimentalHideContainerBlockActions,\n\t\t\tisTreeGridMounted: isMounted.current,\n\t\t\tdraggedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tcollapse,\n\t\t} ),\n\t\t[\n\t\t\t__experimentalFeatures,\n\t\t\t__experimentalPersistentListViewFeatures,\n\t\t\t__experimentalHideContainerBlockActions,\n\t\t\tisMounted.current,\n\t\t\tdraggedClientIds,\n\t\t\texpandedState,\n\t\t\texpand,\n\t\t\tcollapse,\n\t\t]\n\t);\n\n\treturn (\n\t\t<AsyncModeProvider value={ true }>\n\t\t\t<ListViewDropIndicator\n\t\t\t\tlistViewRef={ elementRef }\n\t\t\t\tblockDropTarget={ blockDropTarget }\n\t\t\t/>\n\t\t\t<TreeGrid\n\t\t\t\tclassName=\"block-editor-list-view-tree\"\n\t\t\t\taria-label={ __( 'Block navigation structure' ) }\n\t\t\t\tref={ treeGridRef }\n\t\t\t\tonCollapseRow={ collapseRow }\n\t\t\t\tonExpandRow={ expandRow }\n\t\t\t\tonFocusRow={ focusRow }\n\t\t\t>\n\t\t\t\t<ListViewContext.Provider value={ contextValue }>\n\t\t\t\t\t<ListViewBranch\n\t\t\t\t\t\tblocks={ clientIdsTree }\n\t\t\t\t\t\tselectBlock={ selectEditorBlock }\n\t\t\t\t\t\tshowNestedBlocks={ showNestedBlocks }\n\t\t\t\t\t\tshowBlockMovers={ showBlockMovers }\n\t\t\t\t\t\tfixedListWindow={ fixedListWindow }\n\t\t\t\t\t\tselectedClientIds={ selectedClientIds }\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t/>\n\t\t\t\t</ListViewContext.Provider>\n\t\t\t</TreeGrid>\n\t\t</AsyncModeProvider>\n\t);\n}\nexport default forwardRef( ListView );\n"]}