@wordpress/block-editor 14.3.6 → 14.3.8

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 (117) hide show
  1. package/README.md +2 -2
  2. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js +14 -6
  3. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  4. package/build/components/block-list/zoom-out-separator.js +10 -7
  5. package/build/components/block-list/zoom-out-separator.js.map +1 -1
  6. package/build/components/block-popover/index.js +1 -1
  7. package/build/components/block-popover/index.js.map +1 -1
  8. package/build/components/block-toolbar/index.js +28 -16
  9. package/build/components/block-toolbar/index.js.map +1 -1
  10. package/build/components/block-toolbar/use-has-block-toolbar.js +3 -3
  11. package/build/components/block-toolbar/use-has-block-toolbar.js.map +1 -1
  12. package/build/components/block-tools/index.js +1 -6
  13. package/build/components/block-tools/index.js.map +1 -1
  14. package/build/components/block-tools/use-show-block-tools.js +4 -6
  15. package/build/components/block-tools/use-show-block-tools.js.map +1 -1
  16. package/build/components/block-tools/zoom-out-mode-inserters.js +22 -36
  17. package/build/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  18. package/build/components/iframe/index.js +40 -10
  19. package/build/components/iframe/index.js.map +1 -1
  20. package/build/components/inserter/block-patterns-tab/index.js +4 -0
  21. package/build/components/inserter/block-patterns-tab/index.js.map +1 -1
  22. package/build/components/inserter/hooks/use-insertion-point.js +16 -4
  23. package/build/components/inserter/hooks/use-insertion-point.js.map +1 -1
  24. package/build/components/inserter/media-tab/media-tab.js +4 -0
  25. package/build/components/inserter/media-tab/media-tab.js.map +1 -1
  26. package/build/components/inserter/menu.js +5 -2
  27. package/build/components/inserter/menu.js.map +1 -1
  28. package/build/hooks/block-bindings.js +12 -1
  29. package/build/hooks/block-bindings.js.map +1 -1
  30. package/build/hooks/use-zoom-out.js +24 -16
  31. package/build/hooks/use-zoom-out.js.map +1 -1
  32. package/build/store/private-selectors.js +37 -2
  33. package/build/store/private-selectors.js.map +1 -1
  34. package/build/store/selectors.js +15 -8
  35. package/build/store/selectors.js.map +1 -1
  36. package/build/utils/dom.js +16 -1
  37. package/build/utils/dom.js.map +1 -1
  38. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js +14 -6
  39. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
  40. package/build-module/components/block-list/zoom-out-separator.js +10 -7
  41. package/build-module/components/block-list/zoom-out-separator.js.map +1 -1
  42. package/build-module/components/block-popover/index.js +1 -1
  43. package/build-module/components/block-popover/index.js.map +1 -1
  44. package/build-module/components/block-toolbar/index.js +30 -18
  45. package/build-module/components/block-toolbar/index.js.map +1 -1
  46. package/build-module/components/block-toolbar/use-has-block-toolbar.js +3 -3
  47. package/build-module/components/block-toolbar/use-has-block-toolbar.js.map +1 -1
  48. package/build-module/components/block-tools/index.js +1 -6
  49. package/build-module/components/block-tools/index.js.map +1 -1
  50. package/build-module/components/block-tools/use-show-block-tools.js +4 -6
  51. package/build-module/components/block-tools/use-show-block-tools.js.map +1 -1
  52. package/build-module/components/block-tools/zoom-out-mode-inserters.js +22 -36
  53. package/build-module/components/block-tools/zoom-out-mode-inserters.js.map +1 -1
  54. package/build-module/components/iframe/index.js +40 -10
  55. package/build-module/components/iframe/index.js.map +1 -1
  56. package/build-module/components/inserter/block-patterns-tab/index.js +5 -1
  57. package/build-module/components/inserter/block-patterns-tab/index.js.map +1 -1
  58. package/build-module/components/inserter/hooks/use-insertion-point.js +16 -4
  59. package/build-module/components/inserter/hooks/use-insertion-point.js.map +1 -1
  60. package/build-module/components/inserter/media-tab/media-tab.js +5 -1
  61. package/build-module/components/inserter/media-tab/media-tab.js.map +1 -1
  62. package/build-module/components/inserter/menu.js +5 -2
  63. package/build-module/components/inserter/menu.js.map +1 -1
  64. package/build-module/hooks/block-bindings.js +13 -2
  65. package/build-module/hooks/block-bindings.js.map +1 -1
  66. package/build-module/hooks/use-zoom-out.js +24 -17
  67. package/build-module/hooks/use-zoom-out.js.map +1 -1
  68. package/build-module/store/private-selectors.js +35 -2
  69. package/build-module/store/private-selectors.js.map +1 -1
  70. package/build-module/store/selectors.js +15 -8
  71. package/build-module/store/selectors.js.map +1 -1
  72. package/build-module/utils/dom.js +16 -1
  73. package/build-module/utils/dom.js.map +1 -1
  74. package/build-style/content-rtl.css +14 -20
  75. package/build-style/content.css +14 -20
  76. package/build-style/style-rtl.css +28 -21
  77. package/build-style/style.css +28 -21
  78. package/build-types/utils/dom.d.ts.map +1 -1
  79. package/package.json +6 -6
  80. package/src/components/block-canvas/style.scss +1 -0
  81. package/src/components/block-list/content.scss +3 -2
  82. package/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +25 -4
  83. package/src/components/block-list/zoom-out-separator.js +8 -6
  84. package/src/components/block-popover/index.js +2 -2
  85. package/src/components/block-toolbar/index.js +37 -24
  86. package/src/components/block-toolbar/style.scss +10 -1
  87. package/src/components/block-toolbar/use-has-block-toolbar.js +19 -28
  88. package/src/components/block-tools/index.js +0 -9
  89. package/src/components/block-tools/style.scss +2 -26
  90. package/src/components/block-tools/use-show-block-tools.js +2 -10
  91. package/src/components/block-tools/zoom-out-mode-inserters.js +26 -50
  92. package/src/components/iframe/content.scss +16 -24
  93. package/src/components/iframe/index.js +53 -12
  94. package/src/components/iframe/style.scss +6 -5
  95. package/src/components/inserter/block-patterns-tab/index.js +6 -1
  96. package/src/components/inserter/hooks/use-insertion-point.js +23 -5
  97. package/src/components/inserter/media-tab/media-tab.js +6 -1
  98. package/src/components/inserter/menu.js +7 -1
  99. package/src/components/inserter/style.scss +6 -0
  100. package/src/components/rich-text/style.scss +5 -0
  101. package/src/hooks/block-bindings.js +40 -23
  102. package/src/hooks/use-zoom-out.js +36 -20
  103. package/src/store/private-selectors.js +40 -1
  104. package/src/store/selectors.js +16 -8
  105. package/src/style.scss +1 -0
  106. package/src/utils/dom.js +22 -2
  107. package/tsconfig.tsbuildinfo +1 -1
  108. package/build/components/block-tools/zoom-out-popover.js +0 -57
  109. package/build/components/block-tools/zoom-out-popover.js.map +0 -1
  110. package/build/components/block-tools/zoom-out-toolbar.js +0 -159
  111. package/build/components/block-tools/zoom-out-toolbar.js.map +0 -1
  112. package/build-module/components/block-tools/zoom-out-popover.js +0 -48
  113. package/build-module/components/block-tools/zoom-out-popover.js.map +0 -1
  114. package/build-module/components/block-tools/zoom-out-toolbar.js +0 -152
  115. package/build-module/components/block-tools/zoom-out-toolbar.js.map +0 -1
  116. package/src/components/block-tools/zoom-out-popover.js +0 -46
  117. package/src/components/block-tools/zoom-out-toolbar.js +0 -167
@@ -113,6 +113,17 @@ function isElementVisible(element) {
113
113
  return true;
114
114
  }
115
115
 
116
+ /**
117
+ * Checks if the element is scrollable.
118
+ *
119
+ * @param {Element} element Element.
120
+ * @return {boolean} True if the element is scrollable.
121
+ */
122
+ function isScrollable(element) {
123
+ const style = window.getComputedStyle(element);
124
+ return style.overflowX === 'auto' || style.overflowX === 'scroll' || style.overflowY === 'auto' || style.overflowY === 'scroll';
125
+ }
126
+
116
127
  /**
117
128
  * Returns the rect of the element including all visible nested elements.
118
129
  *
@@ -140,7 +151,11 @@ function getVisibleElementBounds(element) {
140
151
  while (currentElement = stack.pop()) {
141
152
  for (const child of currentElement.children) {
142
153
  if (isElementVisible(child)) {
143
- const childBounds = child.getBoundingClientRect();
154
+ let childBounds = child.getBoundingClientRect();
155
+ // If the parent is scrollable, use parent's scrollable bounds.
156
+ if (isScrollable(currentElement)) {
157
+ childBounds = currentElement.getBoundingClientRect();
158
+ }
144
159
  bounds = rectUnion(bounds, childBounds);
145
160
  stack.push(child);
146
161
  }
@@ -1 +1 @@
1
- {"version":3,"names":["BLOCK_SELECTOR","APPENDER_SELECTOR","BLOCK_APPENDER_CLASS","isInSameBlock","a","b","closest","isInsideRootBlock","blockElement","element","parentBlock","join","getBlockClientId","node","nodeType","ELEMENT_NODE","parentNode","elementNode","blockNode","id","slice","length","rectUnion","rect1","rect2","left","Math","min","right","max","bottom","top","window","DOMRectReadOnly","isElementVisible","viewport","ownerDocument","defaultView","classList","contains","bounds","getBoundingClientRect","width","height","checkVisibility","opacityProperty","contentVisibilityAuto","visibilityProperty","style","getComputedStyle","display","visibility","opacity","getVisibleElementBounds","stack","currentElement","pop","child","children","childBounds","push","innerWidth"],"sources":["@wordpress/block-editor/src/utils/dom.js"],"sourcesContent":["const BLOCK_SELECTOR = '.block-editor-block-list__block';\nconst APPENDER_SELECTOR = '.block-list-appender';\nconst BLOCK_APPENDER_CLASS = '.block-editor-button-block-appender';\n\n/**\n * Returns true if two elements are contained within the same block.\n *\n * @param {Element} a First element.\n * @param {Element} b Second element.\n *\n * @return {boolean} Whether elements are in the same block.\n */\nexport function isInSameBlock( a, b ) {\n\treturn a.closest( BLOCK_SELECTOR ) === b.closest( BLOCK_SELECTOR );\n}\n\n/**\n * Returns true if an element is considered part of the block and not its inner\n * blocks or appender.\n *\n * @param {Element} blockElement Block container element.\n * @param {Element} element Element.\n *\n * @return {boolean} Whether an element is considered part of the block and not\n * its inner blocks or appender.\n */\nexport function isInsideRootBlock( blockElement, element ) {\n\tconst parentBlock = element.closest(\n\t\t[ BLOCK_SELECTOR, APPENDER_SELECTOR, BLOCK_APPENDER_CLASS ].join( ',' )\n\t);\n\treturn parentBlock === blockElement;\n}\n\n/**\n * Finds the block client ID given any DOM node inside the block.\n *\n * @param {Node?} node DOM node.\n *\n * @return {string|undefined} Client ID or undefined if the node is not part of\n * a block.\n */\nexport function getBlockClientId( node ) {\n\twhile ( node && node.nodeType !== node.ELEMENT_NODE ) {\n\t\tnode = node.parentNode;\n\t}\n\n\tif ( ! node ) {\n\t\treturn;\n\t}\n\n\tconst elementNode = /** @type {Element} */ ( node );\n\tconst blockNode = elementNode.closest( BLOCK_SELECTOR );\n\n\tif ( ! blockNode ) {\n\t\treturn;\n\t}\n\n\treturn blockNode.id.slice( 'block-'.length );\n}\n\n/**\n * Calculates the union of two rectangles.\n *\n * @param {DOMRect} rect1 First rectangle.\n * @param {DOMRect} rect2 Second rectangle.\n * @return {DOMRect} Union of the two rectangles.\n */\nexport function rectUnion( rect1, rect2 ) {\n\tconst left = Math.min( rect1.left, rect2.left );\n\tconst right = Math.max( rect1.right, rect2.right );\n\tconst bottom = Math.max( rect1.bottom, rect2.bottom );\n\tconst top = Math.min( rect1.top, rect2.top );\n\n\treturn new window.DOMRectReadOnly( left, top, right - left, bottom - top );\n}\n\n/**\n * Returns whether an element is visible.\n *\n * @param {Element} element Element.\n * @return {boolean} Whether the element is visible.\n */\nfunction isElementVisible( element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\tif ( ! viewport ) {\n\t\treturn false;\n\t}\n\n\t// Check for <VisuallyHidden> component.\n\tif ( element.classList.contains( 'components-visually-hidden' ) ) {\n\t\treturn false;\n\t}\n\n\tconst bounds = element.getBoundingClientRect();\n\tif ( bounds.width === 0 || bounds.height === 0 ) {\n\t\treturn false;\n\t}\n\n\t// Older browsers, e.g. Safari < 17.4 may not support the `checkVisibility` method.\n\tif ( element.checkVisibility ) {\n\t\treturn element.checkVisibility?.( {\n\t\t\topacityProperty: true,\n\t\t\tcontentVisibilityAuto: true,\n\t\t\tvisibilityProperty: true,\n\t\t} );\n\t}\n\n\tconst style = viewport.getComputedStyle( element );\n\n\tif (\n\t\tstyle.display === 'none' ||\n\t\tstyle.visibility === 'hidden' ||\n\t\tstyle.opacity === '0'\n\t) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/**\n * Returns the rect of the element including all visible nested elements.\n *\n * Visible nested elements, including elements that overflow the parent, are\n * taken into account.\n *\n * This function is useful for calculating the visible area of a block that\n * contains nested elements that overflow the block, e.g. the Navigation block,\n * which can contain overflowing Submenu blocks.\n *\n * The returned rect represents the full extent of the element and its visible\n * children, which may extend beyond the viewport.\n *\n * @param {Element} element Element.\n * @return {DOMRect} Bounding client rect of the element and its visible children.\n */\nexport function getVisibleElementBounds( element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\tif ( ! viewport ) {\n\t\treturn new window.DOMRectReadOnly();\n\t}\n\n\tlet bounds = element.getBoundingClientRect();\n\n\tconst stack = [ element ];\n\tlet currentElement;\n\n\twhile ( ( currentElement = stack.pop() ) ) {\n\t\tfor ( const child of currentElement.children ) {\n\t\t\tif ( isElementVisible( child ) ) {\n\t\t\t\tconst childBounds = child.getBoundingClientRect();\n\t\t\t\tbounds = rectUnion( bounds, childBounds );\n\t\t\t\tstack.push( child );\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Take into account the outer horizontal limits of the container in which\n\t * an element is supposed to be \"visible\". For example, if an element is\n\t * positioned -10px to the left of the window x value (0), this function\n\t * discounts the negative overhang because it's not visible and therefore\n\t * not to be counted in the visibility calculations. Top and bottom values\n\t * are not accounted for to accommodate vertical scroll.\n\t */\n\tconst left = Math.max( bounds.left, 0 );\n\tconst right = Math.min( bounds.right, viewport.innerWidth );\n\tbounds = new window.DOMRectReadOnly(\n\t\tleft,\n\t\tbounds.top,\n\t\tright - left,\n\t\tbounds.height\n\t);\n\n\treturn bounds;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["BLOCK_SELECTOR","APPENDER_SELECTOR","BLOCK_APPENDER_CLASS","isInSameBlock","a","b","closest","isInsideRootBlock","blockElement","element","parentBlock","join","getBlockClientId","node","nodeType","ELEMENT_NODE","parentNode","elementNode","blockNode","id","slice","length","rectUnion","rect1","rect2","left","Math","min","right","max","bottom","top","window","DOMRectReadOnly","isElementVisible","viewport","ownerDocument","defaultView","classList","contains","bounds","getBoundingClientRect","width","height","checkVisibility","opacityProperty","contentVisibilityAuto","visibilityProperty","style","getComputedStyle","display","visibility","opacity","isScrollable","overflowX","overflowY","getVisibleElementBounds","stack","currentElement","pop","child","children","childBounds","push","innerWidth"],"sources":["@wordpress/block-editor/src/utils/dom.js"],"sourcesContent":["const BLOCK_SELECTOR = '.block-editor-block-list__block';\nconst APPENDER_SELECTOR = '.block-list-appender';\nconst BLOCK_APPENDER_CLASS = '.block-editor-button-block-appender';\n\n/**\n * Returns true if two elements are contained within the same block.\n *\n * @param {Element} a First element.\n * @param {Element} b Second element.\n *\n * @return {boolean} Whether elements are in the same block.\n */\nexport function isInSameBlock( a, b ) {\n\treturn a.closest( BLOCK_SELECTOR ) === b.closest( BLOCK_SELECTOR );\n}\n\n/**\n * Returns true if an element is considered part of the block and not its inner\n * blocks or appender.\n *\n * @param {Element} blockElement Block container element.\n * @param {Element} element Element.\n *\n * @return {boolean} Whether an element is considered part of the block and not\n * its inner blocks or appender.\n */\nexport function isInsideRootBlock( blockElement, element ) {\n\tconst parentBlock = element.closest(\n\t\t[ BLOCK_SELECTOR, APPENDER_SELECTOR, BLOCK_APPENDER_CLASS ].join( ',' )\n\t);\n\treturn parentBlock === blockElement;\n}\n\n/**\n * Finds the block client ID given any DOM node inside the block.\n *\n * @param {Node?} node DOM node.\n *\n * @return {string|undefined} Client ID or undefined if the node is not part of\n * a block.\n */\nexport function getBlockClientId( node ) {\n\twhile ( node && node.nodeType !== node.ELEMENT_NODE ) {\n\t\tnode = node.parentNode;\n\t}\n\n\tif ( ! node ) {\n\t\treturn;\n\t}\n\n\tconst elementNode = /** @type {Element} */ ( node );\n\tconst blockNode = elementNode.closest( BLOCK_SELECTOR );\n\n\tif ( ! blockNode ) {\n\t\treturn;\n\t}\n\n\treturn blockNode.id.slice( 'block-'.length );\n}\n\n/**\n * Calculates the union of two rectangles.\n *\n * @param {DOMRect} rect1 First rectangle.\n * @param {DOMRect} rect2 Second rectangle.\n * @return {DOMRect} Union of the two rectangles.\n */\nexport function rectUnion( rect1, rect2 ) {\n\tconst left = Math.min( rect1.left, rect2.left );\n\tconst right = Math.max( rect1.right, rect2.right );\n\tconst bottom = Math.max( rect1.bottom, rect2.bottom );\n\tconst top = Math.min( rect1.top, rect2.top );\n\n\treturn new window.DOMRectReadOnly( left, top, right - left, bottom - top );\n}\n\n/**\n * Returns whether an element is visible.\n *\n * @param {Element} element Element.\n * @return {boolean} Whether the element is visible.\n */\nfunction isElementVisible( element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\tif ( ! viewport ) {\n\t\treturn false;\n\t}\n\n\t// Check for <VisuallyHidden> component.\n\tif ( element.classList.contains( 'components-visually-hidden' ) ) {\n\t\treturn false;\n\t}\n\n\tconst bounds = element.getBoundingClientRect();\n\tif ( bounds.width === 0 || bounds.height === 0 ) {\n\t\treturn false;\n\t}\n\n\t// Older browsers, e.g. Safari < 17.4 may not support the `checkVisibility` method.\n\tif ( element.checkVisibility ) {\n\t\treturn element.checkVisibility?.( {\n\t\t\topacityProperty: true,\n\t\t\tcontentVisibilityAuto: true,\n\t\t\tvisibilityProperty: true,\n\t\t} );\n\t}\n\n\tconst style = viewport.getComputedStyle( element );\n\n\tif (\n\t\tstyle.display === 'none' ||\n\t\tstyle.visibility === 'hidden' ||\n\t\tstyle.opacity === '0'\n\t) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/**\n * Checks if the element is scrollable.\n *\n * @param {Element} element Element.\n * @return {boolean} True if the element is scrollable.\n */\nfunction isScrollable( element ) {\n\tconst style = window.getComputedStyle( element );\n\treturn (\n\t\tstyle.overflowX === 'auto' ||\n\t\tstyle.overflowX === 'scroll' ||\n\t\tstyle.overflowY === 'auto' ||\n\t\tstyle.overflowY === 'scroll'\n\t);\n}\n\n/**\n * Returns the rect of the element including all visible nested elements.\n *\n * Visible nested elements, including elements that overflow the parent, are\n * taken into account.\n *\n * This function is useful for calculating the visible area of a block that\n * contains nested elements that overflow the block, e.g. the Navigation block,\n * which can contain overflowing Submenu blocks.\n *\n * The returned rect represents the full extent of the element and its visible\n * children, which may extend beyond the viewport.\n *\n * @param {Element} element Element.\n * @return {DOMRect} Bounding client rect of the element and its visible children.\n */\nexport function getVisibleElementBounds( element ) {\n\tconst viewport = element.ownerDocument.defaultView;\n\n\tif ( ! viewport ) {\n\t\treturn new window.DOMRectReadOnly();\n\t}\n\n\tlet bounds = element.getBoundingClientRect();\n\tconst stack = [ element ];\n\tlet currentElement;\n\n\twhile ( ( currentElement = stack.pop() ) ) {\n\t\tfor ( const child of currentElement.children ) {\n\t\t\tif ( isElementVisible( child ) ) {\n\t\t\t\tlet childBounds = child.getBoundingClientRect();\n\t\t\t\t// If the parent is scrollable, use parent's scrollable bounds.\n\t\t\t\tif ( isScrollable( currentElement ) ) {\n\t\t\t\t\tchildBounds = currentElement.getBoundingClientRect();\n\t\t\t\t}\n\t\t\t\tbounds = rectUnion( bounds, childBounds );\n\t\t\t\tstack.push( child );\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Take into account the outer horizontal limits of the container in which\n\t * an element is supposed to be \"visible\". For example, if an element is\n\t * positioned -10px to the left of the window x value (0), this function\n\t * discounts the negative overhang because it's not visible and therefore\n\t * not to be counted in the visibility calculations. Top and bottom values\n\t * are not accounted for to accommodate vertical scroll.\n\t */\n\tconst left = Math.max( bounds.left, 0 );\n\tconst right = Math.min( bounds.right, viewport.innerWidth );\n\tbounds = new window.DOMRectReadOnly(\n\t\tleft,\n\t\tbounds.top,\n\t\tright - left,\n\t\tbounds.height\n\t);\n\n\treturn bounds;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -10,6 +10,7 @@ import { useRefEffect } from '@wordpress/compose';
10
10
  * Internal dependencies
11
11
  */
12
12
  import { store as blockEditorStore } from '../../../store';
13
+ import { unlock } from '../../../lock-unlock';
13
14
 
14
15
  /**
15
16
  * Adds block behaviour:
@@ -25,12 +26,16 @@ export function useEventHandlers({
25
26
  }) {
26
27
  const {
27
28
  getBlockRootClientId,
28
- getBlockIndex
29
- } = useSelect(blockEditorStore);
29
+ getBlockIndex,
30
+ isZoomOut,
31
+ __unstableGetEditorMode
32
+ } = unlock(useSelect(blockEditorStore));
30
33
  const {
31
34
  insertAfterBlock,
32
- removeBlock
33
- } = useDispatch(blockEditorStore);
35
+ removeBlock,
36
+ __unstableSetEditorMode,
37
+ resetZoomLevel
38
+ } = unlock(useDispatch(blockEditorStore));
34
39
  return useRefEffect(node => {
35
40
  if (!isSelected) {
36
41
  return;
@@ -57,7 +62,10 @@ export function useEventHandlers({
57
62
  return;
58
63
  }
59
64
  event.preventDefault();
60
- if (keyCode === ENTER) {
65
+ if (keyCode === ENTER && __unstableGetEditorMode() === 'zoom-out' && isZoomOut()) {
66
+ __unstableSetEditorMode('edit');
67
+ resetZoomLevel();
68
+ } else if (keyCode === ENTER) {
61
69
  insertAfterBlock(clientId);
62
70
  } else {
63
71
  removeBlock(clientId);
@@ -79,6 +87,6 @@ export function useEventHandlers({
79
87
  node.removeEventListener('keydown', onKeyDown);
80
88
  node.removeEventListener('dragstart', onDragStart);
81
89
  };
82
- }, [clientId, isSelected, getBlockRootClientId, getBlockIndex, insertAfterBlock, removeBlock]);
90
+ }, [clientId, isSelected, getBlockRootClientId, getBlockIndex, insertAfterBlock, removeBlock, __unstableGetEditorMode, __unstableSetEditorMode, isZoomOut, resetZoomLevel]);
83
91
  }
84
92
  //# sourceMappingURL=use-selected-block-event-handlers.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["isTextField","ENTER","BACKSPACE","DELETE","useSelect","useDispatch","useRefEffect","store","blockEditorStore","useEventHandlers","clientId","isSelected","getBlockRootClientId","getBlockIndex","insertAfterBlock","removeBlock","node","onKeyDown","event","keyCode","target","preventDefault","onDragStart","addEventListener","removeEventListener"],"sources":["@wordpress/block-editor/src/components/block-list/use-block-props/use-selected-block-event-handlers.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { isTextField } from '@wordpress/dom';\nimport { ENTER, BACKSPACE, DELETE } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\n\n/**\n * Adds block behaviour:\n * - Removes the block on BACKSPACE.\n * - Inserts a default block on ENTER.\n * - Disables dragging of block contents.\n *\n * @param {string} clientId Block client ID.\n */\nexport function useEventHandlers( { clientId, isSelected } ) {\n\tconst { getBlockRootClientId, getBlockIndex } =\n\t\tuseSelect( blockEditorStore );\n\tconst { insertAfterBlock, removeBlock } = useDispatch( blockEditorStore );\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( ! isSelected ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Interprets keydown event intent to remove or insert after block if\n\t\t\t * key event occurs on wrapper node. This can occur when the block has\n\t\t\t * no text fields of its own, particularly after initial insertion, to\n\t\t\t * allow for easy deletion and continuous writing flow to add additional\n\t\t\t * content.\n\t\t\t *\n\t\t\t * @param {KeyboardEvent} event Keydown event.\n\t\t\t */\n\t\t\tfunction onKeyDown( event ) {\n\t\t\t\tconst { keyCode, target } = event;\n\n\t\t\t\tif (\n\t\t\t\t\tkeyCode !== ENTER &&\n\t\t\t\t\tkeyCode !== BACKSPACE &&\n\t\t\t\t\tkeyCode !== DELETE\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( target !== node || isTextField( target ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif ( keyCode === ENTER ) {\n\t\t\t\t\tinsertAfterBlock( clientId );\n\t\t\t\t} else {\n\t\t\t\t\tremoveBlock( clientId );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Prevents default dragging behavior within a block. To do: we must\n\t\t\t * handle this in the future and clean up the drag target.\n\t\t\t *\n\t\t\t * @param {DragEvent} event Drag event.\n\t\t\t */\n\t\t\tfunction onDragStart( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\t\tnode.addEventListener( 'dragstart', onDragStart );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\t\tnode.removeEventListener( 'dragstart', onDragStart );\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tclientId,\n\t\t\tisSelected,\n\t\t\tgetBlockRootClientId,\n\t\t\tgetBlockIndex,\n\t\t\tinsertAfterBlock,\n\t\t\tremoveBlock,\n\t\t]\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAW,QAAQ,gBAAgB;AAC5C,SAASC,KAAK,EAAEC,SAAS,EAAEC,MAAM,QAAQ,qBAAqB;AAC9D,SAASC,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACxD,SAASC,YAAY,QAAQ,oBAAoB;;AAEjD;AACA;AACA;AACA,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,gBAAgB;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAE;EAAEC,QAAQ;EAAEC;AAAW,CAAC,EAAG;EAC5D,MAAM;IAAEC,oBAAoB;IAAEC;EAAc,CAAC,GAC5CT,SAAS,CAAEI,gBAAiB,CAAC;EAC9B,MAAM;IAAEM,gBAAgB;IAAEC;EAAY,CAAC,GAAGV,WAAW,CAAEG,gBAAiB,CAAC;EAEzE,OAAOF,YAAY,CAChBU,IAAI,IAAM;IACX,IAAK,CAAEL,UAAU,EAAG;MACnB;IACD;;IAEA;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACG,SAASM,SAASA,CAAEC,KAAK,EAAG;MAC3B,MAAM;QAAEC,OAAO;QAAEC;MAAO,CAAC,GAAGF,KAAK;MAEjC,IACCC,OAAO,KAAKlB,KAAK,IACjBkB,OAAO,KAAKjB,SAAS,IACrBiB,OAAO,KAAKhB,MAAM,EACjB;QACD;MACD;MAEA,IAAKiB,MAAM,KAAKJ,IAAI,IAAIhB,WAAW,CAAEoB,MAAO,CAAC,EAAG;QAC/C;MACD;MAEAF,KAAK,CAACG,cAAc,CAAC,CAAC;MAEtB,IAAKF,OAAO,KAAKlB,KAAK,EAAG;QACxBa,gBAAgB,CAAEJ,QAAS,CAAC;MAC7B,CAAC,MAAM;QACNK,WAAW,CAAEL,QAAS,CAAC;MACxB;IACD;;IAEA;AACH;AACA;AACA;AACA;AACA;IACG,SAASY,WAAWA,CAAEJ,KAAK,EAAG;MAC7BA,KAAK,CAACG,cAAc,CAAC,CAAC;IACvB;IAEAL,IAAI,CAACO,gBAAgB,CAAE,SAAS,EAAEN,SAAU,CAAC;IAC7CD,IAAI,CAACO,gBAAgB,CAAE,WAAW,EAAED,WAAY,CAAC;IAEjD,OAAO,MAAM;MACZN,IAAI,CAACQ,mBAAmB,CAAE,SAAS,EAAEP,SAAU,CAAC;MAChDD,IAAI,CAACQ,mBAAmB,CAAE,WAAW,EAAEF,WAAY,CAAC;IACrD,CAAC;EACF,CAAC,EACD,CACCZ,QAAQ,EACRC,UAAU,EACVC,oBAAoB,EACpBC,aAAa,EACbC,gBAAgB,EAChBC,WAAW,CAEb,CAAC;AACF","ignoreList":[]}
1
+ {"version":3,"names":["isTextField","ENTER","BACKSPACE","DELETE","useSelect","useDispatch","useRefEffect","store","blockEditorStore","unlock","useEventHandlers","clientId","isSelected","getBlockRootClientId","getBlockIndex","isZoomOut","__unstableGetEditorMode","insertAfterBlock","removeBlock","__unstableSetEditorMode","resetZoomLevel","node","onKeyDown","event","keyCode","target","preventDefault","onDragStart","addEventListener","removeEventListener"],"sources":["@wordpress/block-editor/src/components/block-list/use-block-props/use-selected-block-event-handlers.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { isTextField } from '@wordpress/dom';\nimport { ENTER, BACKSPACE, DELETE } from '@wordpress/keycodes';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../../store';\nimport { unlock } from '../../../lock-unlock';\n\n/**\n * Adds block behaviour:\n * - Removes the block on BACKSPACE.\n * - Inserts a default block on ENTER.\n * - Disables dragging of block contents.\n *\n * @param {string} clientId Block client ID.\n */\nexport function useEventHandlers( { clientId, isSelected } ) {\n\tconst {\n\t\tgetBlockRootClientId,\n\t\tgetBlockIndex,\n\t\tisZoomOut,\n\t\t__unstableGetEditorMode,\n\t} = unlock( useSelect( blockEditorStore ) );\n\tconst {\n\t\tinsertAfterBlock,\n\t\tremoveBlock,\n\t\t__unstableSetEditorMode,\n\t\tresetZoomLevel,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\treturn useRefEffect(\n\t\t( node ) => {\n\t\t\tif ( ! isSelected ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Interprets keydown event intent to remove or insert after block if\n\t\t\t * key event occurs on wrapper node. This can occur when the block has\n\t\t\t * no text fields of its own, particularly after initial insertion, to\n\t\t\t * allow for easy deletion and continuous writing flow to add additional\n\t\t\t * content.\n\t\t\t *\n\t\t\t * @param {KeyboardEvent} event Keydown event.\n\t\t\t */\n\t\t\tfunction onKeyDown( event ) {\n\t\t\t\tconst { keyCode, target } = event;\n\n\t\t\t\tif (\n\t\t\t\t\tkeyCode !== ENTER &&\n\t\t\t\t\tkeyCode !== BACKSPACE &&\n\t\t\t\t\tkeyCode !== DELETE\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( target !== node || isTextField( target ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif (\n\t\t\t\t\tkeyCode === ENTER &&\n\t\t\t\t\t__unstableGetEditorMode() === 'zoom-out' &&\n\t\t\t\t\tisZoomOut()\n\t\t\t\t) {\n\t\t\t\t\t__unstableSetEditorMode( 'edit' );\n\t\t\t\t\tresetZoomLevel();\n\t\t\t\t} else if ( keyCode === ENTER ) {\n\t\t\t\t\tinsertAfterBlock( clientId );\n\t\t\t\t} else {\n\t\t\t\t\tremoveBlock( clientId );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Prevents default dragging behavior within a block. To do: we must\n\t\t\t * handle this in the future and clean up the drag target.\n\t\t\t *\n\t\t\t * @param {DragEvent} event Drag event.\n\t\t\t */\n\t\t\tfunction onDragStart( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tnode.addEventListener( 'keydown', onKeyDown );\n\t\t\tnode.addEventListener( 'dragstart', onDragStart );\n\n\t\t\treturn () => {\n\t\t\t\tnode.removeEventListener( 'keydown', onKeyDown );\n\t\t\t\tnode.removeEventListener( 'dragstart', onDragStart );\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tclientId,\n\t\t\tisSelected,\n\t\t\tgetBlockRootClientId,\n\t\t\tgetBlockIndex,\n\t\t\tinsertAfterBlock,\n\t\t\tremoveBlock,\n\t\t\t__unstableGetEditorMode,\n\t\t\t__unstableSetEditorMode,\n\t\t\tisZoomOut,\n\t\t\tresetZoomLevel,\n\t\t]\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAW,QAAQ,gBAAgB;AAC5C,SAASC,KAAK,EAAEC,SAAS,EAAEC,MAAM,QAAQ,qBAAqB;AAC9D,SAASC,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACxD,SAASC,YAAY,QAAQ,oBAAoB;;AAEjD;AACA;AACA;AACA,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,gBAAgB;AAC1D,SAASC,MAAM,QAAQ,sBAAsB;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAE;EAAEC,QAAQ;EAAEC;AAAW,CAAC,EAAG;EAC5D,MAAM;IACLC,oBAAoB;IACpBC,aAAa;IACbC,SAAS;IACTC;EACD,CAAC,GAAGP,MAAM,CAAEL,SAAS,CAAEI,gBAAiB,CAAE,CAAC;EAC3C,MAAM;IACLS,gBAAgB;IAChBC,WAAW;IACXC,uBAAuB;IACvBC;EACD,CAAC,GAAGX,MAAM,CAAEJ,WAAW,CAAEG,gBAAiB,CAAE,CAAC;EAE7C,OAAOF,YAAY,CAChBe,IAAI,IAAM;IACX,IAAK,CAAET,UAAU,EAAG;MACnB;IACD;;IAEA;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACG,SAASU,SAASA,CAAEC,KAAK,EAAG;MAC3B,MAAM;QAAEC,OAAO;QAAEC;MAAO,CAAC,GAAGF,KAAK;MAEjC,IACCC,OAAO,KAAKvB,KAAK,IACjBuB,OAAO,KAAKtB,SAAS,IACrBsB,OAAO,KAAKrB,MAAM,EACjB;QACD;MACD;MAEA,IAAKsB,MAAM,KAAKJ,IAAI,IAAIrB,WAAW,CAAEyB,MAAO,CAAC,EAAG;QAC/C;MACD;MAEAF,KAAK,CAACG,cAAc,CAAC,CAAC;MAEtB,IACCF,OAAO,KAAKvB,KAAK,IACjBe,uBAAuB,CAAC,CAAC,KAAK,UAAU,IACxCD,SAAS,CAAC,CAAC,EACV;QACDI,uBAAuB,CAAE,MAAO,CAAC;QACjCC,cAAc,CAAC,CAAC;MACjB,CAAC,MAAM,IAAKI,OAAO,KAAKvB,KAAK,EAAG;QAC/BgB,gBAAgB,CAAEN,QAAS,CAAC;MAC7B,CAAC,MAAM;QACNO,WAAW,CAAEP,QAAS,CAAC;MACxB;IACD;;IAEA;AACH;AACA;AACA;AACA;AACA;IACG,SAASgB,WAAWA,CAAEJ,KAAK,EAAG;MAC7BA,KAAK,CAACG,cAAc,CAAC,CAAC;IACvB;IAEAL,IAAI,CAACO,gBAAgB,CAAE,SAAS,EAAEN,SAAU,CAAC;IAC7CD,IAAI,CAACO,gBAAgB,CAAE,WAAW,EAAED,WAAY,CAAC;IAEjD,OAAO,MAAM;MACZN,IAAI,CAACQ,mBAAmB,CAAE,SAAS,EAAEP,SAAU,CAAC;MAChDD,IAAI,CAACQ,mBAAmB,CAAE,WAAW,EAAEF,WAAY,CAAC;IACrD,CAAC;EACF,CAAC,EACD,CACChB,QAAQ,EACRC,UAAU,EACVC,oBAAoB,EACpBC,aAAa,EACbG,gBAAgB,EAChBC,WAAW,EACXF,uBAAuB,EACvBG,uBAAuB,EACvBJ,SAAS,EACTK,cAAc,CAEhB,CAAC;AACF","ignoreList":[]}
@@ -63,20 +63,19 @@ export function ZoomOutSeparator({
63
63
  }
64
64
  return /*#__PURE__*/_jsx(AnimatePresence, {
65
65
  children: isVisible && /*#__PURE__*/_jsx(motion.div, {
66
- as: "button",
67
- layout: !isReducedMotion,
68
66
  initial: {
69
67
  height: 0
70
68
  },
71
69
  animate: {
72
- height: '120px'
70
+ // Use a height equal to that of the zoom out frame size.
71
+ height: 'calc(1.5 * var(--wp-block-editor-iframe-zoom-out-frame-size) / var(--wp-block-editor-iframe-zoom-out-scale)'
73
72
  },
74
73
  exit: {
75
74
  height: 0
76
75
  },
77
76
  transition: {
78
77
  type: 'tween',
79
- duration: 0.2,
78
+ duration: isReducedMotion ? 0 : 0.2,
80
79
  ease: [0.6, 0, 0.4, 1]
81
80
  },
82
81
  className: clsx('block-editor-block-list__zoom-out-separator', {
@@ -93,11 +92,15 @@ export function ZoomOutSeparator({
93
92
  opacity: 1
94
93
  },
95
94
  exit: {
96
- opacity: 0
95
+ opacity: 0,
96
+ transition: {
97
+ delay: -0.125
98
+ }
97
99
  },
98
100
  transition: {
99
- type: 'tween',
100
- duration: 0.1
101
+ ease: 'linear',
102
+ duration: 0.1,
103
+ delay: 0.125
101
104
  },
102
105
  children: __('Drop pattern.')
103
106
  })
@@ -1 +1 @@
1
- {"version":3,"names":["clsx","__unstableMotion","motion","__unstableAnimatePresence","AnimatePresence","useReducedMotion","useSelect","useState","__","store","blockEditorStore","unlock","jsx","_jsx","ZoomOutSeparator","clientId","rootClientId","position","isDraggedOver","setIsDraggedOver","sectionRootClientId","sectionClientIds","blockInsertionPoint","blockInsertionPointVisible","select","getBlockInsertionPoint","getBlockOrder","isBlockInsertionPointVisible","getSectionRootClientId","root","sectionRootClientIds","blockOrder","isReducedMotion","isVisible","isSectionBlock","includes","index","children","div","as","layout","initial","height","animate","exit","transition","type","duration","ease","className","onDragOver","onDragLeave","opacity"],"sources":["@wordpress/block-editor/src/components/block-list/zoom-out-separator.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__unstableMotion as motion,\n\t__unstableAnimatePresence as AnimatePresence,\n} from '@wordpress/components';\nimport { useReducedMotion } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport function ZoomOutSeparator( {\n\tclientId,\n\trootClientId = '',\n\tposition = 'top',\n} ) {\n\tconst [ isDraggedOver, setIsDraggedOver ] = useState( false );\n\tconst {\n\t\tsectionRootClientId,\n\t\tsectionClientIds,\n\t\tblockInsertionPoint,\n\t\tblockInsertionPointVisible,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockInsertionPoint,\n\t\t\tgetBlockOrder,\n\t\t\tisBlockInsertionPointVisible,\n\t\t\tgetSectionRootClientId,\n\t\t} = unlock( select( blockEditorStore ) );\n\n\t\tconst root = getSectionRootClientId();\n\t\tconst sectionRootClientIds = getBlockOrder( root );\n\t\treturn {\n\t\t\tsectionRootClientId: root,\n\t\t\tsectionClientIds: sectionRootClientIds,\n\t\t\tblockOrder: getBlockOrder( root ),\n\t\t\tblockInsertionPoint: getBlockInsertionPoint(),\n\t\t\tblockInsertionPointVisible: isBlockInsertionPointVisible(),\n\t\t};\n\t}, [] );\n\n\tconst isReducedMotion = useReducedMotion();\n\n\tif ( ! clientId ) {\n\t\treturn;\n\t}\n\n\tlet isVisible = false;\n\n\tconst isSectionBlock =\n\t\trootClientId === sectionRootClientId &&\n\t\tsectionClientIds &&\n\t\tsectionClientIds.includes( clientId );\n\n\tif ( ! isSectionBlock ) {\n\t\treturn null;\n\t}\n\n\tif ( position === 'top' ) {\n\t\tisVisible =\n\t\t\tblockInsertionPointVisible &&\n\t\t\tblockInsertionPoint.index === 0 &&\n\t\t\tclientId === sectionClientIds[ blockInsertionPoint.index ];\n\t}\n\n\tif ( position === 'bottom' ) {\n\t\tisVisible =\n\t\t\tblockInsertionPointVisible &&\n\t\t\tclientId === sectionClientIds[ blockInsertionPoint.index - 1 ];\n\t}\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{ isVisible && (\n\t\t\t\t<motion.div\n\t\t\t\t\tas=\"button\"\n\t\t\t\t\tlayout={ ! isReducedMotion }\n\t\t\t\t\tinitial={ { height: 0 } }\n\t\t\t\t\tanimate={ { height: '120px' } }\n\t\t\t\t\texit={ { height: 0 } }\n\t\t\t\t\ttransition={ {\n\t\t\t\t\t\ttype: 'tween',\n\t\t\t\t\t\tduration: 0.2,\n\t\t\t\t\t\tease: [ 0.6, 0, 0.4, 1 ],\n\t\t\t\t\t} }\n\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t'block-editor-block-list__zoom-out-separator',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'is-dragged-over': isDraggedOver,\n\t\t\t\t\t\t}\n\t\t\t\t\t) }\n\t\t\t\t\tdata-is-insertion-point=\"true\"\n\t\t\t\t\tonDragOver={ () => setIsDraggedOver( true ) }\n\t\t\t\t\tonDragLeave={ () => setIsDraggedOver( false ) }\n\t\t\t\t>\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={ { opacity: 0 } }\n\t\t\t\t\t\tanimate={ { opacity: 1 } }\n\t\t\t\t\t\texit={ { opacity: 0 } }\n\t\t\t\t\t\ttransition={ {\n\t\t\t\t\t\t\ttype: 'tween',\n\t\t\t\t\t\t\tduration: 0.1,\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Drop pattern.' ) }\n\t\t\t\t\t</motion.div>\n\t\t\t\t</motion.div>\n\t\t\t) }\n\t\t</AnimatePresence>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["clsx","__unstableMotion","motion","__unstableAnimatePresence","AnimatePresence","useReducedMotion","useSelect","useState","__","store","blockEditorStore","unlock","jsx","_jsx","ZoomOutSeparator","clientId","rootClientId","position","isDraggedOver","setIsDraggedOver","sectionRootClientId","sectionClientIds","blockInsertionPoint","blockInsertionPointVisible","select","getBlockInsertionPoint","getBlockOrder","isBlockInsertionPointVisible","getSectionRootClientId","root","sectionRootClientIds","blockOrder","isReducedMotion","isVisible","isSectionBlock","includes","index","children","div","initial","height","animate","exit","transition","type","duration","ease","className","onDragOver","onDragLeave","opacity","delay"],"sources":["@wordpress/block-editor/src/components/block-list/zoom-out-separator.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\t__unstableMotion as motion,\n\t__unstableAnimatePresence as AnimatePresence,\n} from '@wordpress/components';\nimport { useReducedMotion } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nexport function ZoomOutSeparator( {\n\tclientId,\n\trootClientId = '',\n\tposition = 'top',\n} ) {\n\tconst [ isDraggedOver, setIsDraggedOver ] = useState( false );\n\tconst {\n\t\tsectionRootClientId,\n\t\tsectionClientIds,\n\t\tblockInsertionPoint,\n\t\tblockInsertionPointVisible,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockInsertionPoint,\n\t\t\tgetBlockOrder,\n\t\t\tisBlockInsertionPointVisible,\n\t\t\tgetSectionRootClientId,\n\t\t} = unlock( select( blockEditorStore ) );\n\n\t\tconst root = getSectionRootClientId();\n\t\tconst sectionRootClientIds = getBlockOrder( root );\n\t\treturn {\n\t\t\tsectionRootClientId: root,\n\t\t\tsectionClientIds: sectionRootClientIds,\n\t\t\tblockOrder: getBlockOrder( root ),\n\t\t\tblockInsertionPoint: getBlockInsertionPoint(),\n\t\t\tblockInsertionPointVisible: isBlockInsertionPointVisible(),\n\t\t};\n\t}, [] );\n\n\tconst isReducedMotion = useReducedMotion();\n\n\tif ( ! clientId ) {\n\t\treturn;\n\t}\n\n\tlet isVisible = false;\n\n\tconst isSectionBlock =\n\t\trootClientId === sectionRootClientId &&\n\t\tsectionClientIds &&\n\t\tsectionClientIds.includes( clientId );\n\n\tif ( ! isSectionBlock ) {\n\t\treturn null;\n\t}\n\n\tif ( position === 'top' ) {\n\t\tisVisible =\n\t\t\tblockInsertionPointVisible &&\n\t\t\tblockInsertionPoint.index === 0 &&\n\t\t\tclientId === sectionClientIds[ blockInsertionPoint.index ];\n\t}\n\n\tif ( position === 'bottom' ) {\n\t\tisVisible =\n\t\t\tblockInsertionPointVisible &&\n\t\t\tclientId === sectionClientIds[ blockInsertionPoint.index - 1 ];\n\t}\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{ isVisible && (\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={ { height: 0 } }\n\t\t\t\t\tanimate={ {\n\t\t\t\t\t\t// Use a height equal to that of the zoom out frame size.\n\t\t\t\t\t\theight: 'calc(1.5 * var(--wp-block-editor-iframe-zoom-out-frame-size) / var(--wp-block-editor-iframe-zoom-out-scale)',\n\t\t\t\t\t} }\n\t\t\t\t\texit={ { height: 0 } }\n\t\t\t\t\ttransition={ {\n\t\t\t\t\t\ttype: 'tween',\n\t\t\t\t\t\tduration: isReducedMotion ? 0 : 0.2,\n\t\t\t\t\t\tease: [ 0.6, 0, 0.4, 1 ],\n\t\t\t\t\t} }\n\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t'block-editor-block-list__zoom-out-separator',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'is-dragged-over': isDraggedOver,\n\t\t\t\t\t\t}\n\t\t\t\t\t) }\n\t\t\t\t\tdata-is-insertion-point=\"true\"\n\t\t\t\t\tonDragOver={ () => setIsDraggedOver( true ) }\n\t\t\t\t\tonDragLeave={ () => setIsDraggedOver( false ) }\n\t\t\t\t>\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tinitial={ { opacity: 0 } }\n\t\t\t\t\t\tanimate={ { opacity: 1 } }\n\t\t\t\t\t\texit={ { opacity: 0, transition: { delay: -0.125 } } }\n\t\t\t\t\t\ttransition={ {\n\t\t\t\t\t\t\tease: 'linear',\n\t\t\t\t\t\t\tduration: 0.1,\n\t\t\t\t\t\t\tdelay: 0.125,\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Drop pattern.' ) }\n\t\t\t\t\t</motion.div>\n\t\t\t\t</motion.div>\n\t\t\t) }\n\t\t</AnimatePresence>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -67,7 +67,7 @@ function BlockPopover({
67
67
  },
68
68
  contextElement: selectedElement
69
69
  };
70
- }, [bottomClientId, lastSelectedElement, selectedElement, popoverDimensionsRecomputeCounter]);
70
+ }, [popoverDimensionsRecomputeCounter, selectedElement, bottomClientId, lastSelectedElement]);
71
71
  if (!selectedElement || bottomClientId && !lastSelectedElement) {
72
72
  return null;
73
73
  }
@@ -1 +1 @@
1
- {"version":3,"names":["clsx","useMergeRefs","Popover","forwardRef","useMemo","useReducer","useLayoutEffect","useBlockElement","usePopoverScroll","rectUnion","getVisibleElementBounds","jsx","_jsx","MAX_POPOVER_RECOMPUTE_COUNTER","Number","MAX_SAFE_INTEGER","BlockPopover","clientId","bottomClientId","children","__unstablePopoverSlot","__unstableContentRef","shift","props","ref","selectedElement","lastSelectedElement","mergedRefs","popoverDimensionsRecomputeCounter","forceRecomputePopoverDimensions","s","observer","window","MutationObserver","observe","attributes","disconnect","popoverAnchor","undefined","getBoundingClientRect","contextElement","animate","focusOnMount","anchor","__unstableSlotName","inline","placement","resize","flip","className","variant","PrivateBlockPopover","PublicBlockPopover"],"sources":["@wordpress/block-editor/src/components/block-popover/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useMergeRefs } from '@wordpress/compose';\nimport { Popover } from '@wordpress/components';\nimport {\n\tforwardRef,\n\tuseMemo,\n\tuseReducer,\n\tuseLayoutEffect,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport usePopoverScroll from './use-popover-scroll';\nimport { rectUnion, getVisibleElementBounds } from '../../utils/dom';\n\nconst MAX_POPOVER_RECOMPUTE_COUNTER = Number.MAX_SAFE_INTEGER;\n\nfunction BlockPopover(\n\t{\n\t\tclientId,\n\t\tbottomClientId,\n\t\tchildren,\n\t\t__unstablePopoverSlot,\n\t\t__unstableContentRef,\n\t\tshift = true,\n\t\t...props\n\t},\n\tref\n) {\n\tconst selectedElement = useBlockElement( clientId );\n\tconst lastSelectedElement = useBlockElement( bottomClientId ?? clientId );\n\tconst mergedRefs = useMergeRefs( [\n\t\tref,\n\t\tusePopoverScroll( __unstableContentRef ),\n\t] );\n\n\tconst [\n\t\tpopoverDimensionsRecomputeCounter,\n\t\tforceRecomputePopoverDimensions,\n\t] = useReducer(\n\t\t// Module is there to make sure that the counter doesn't overflow.\n\t\t( s ) => ( s + 1 ) % MAX_POPOVER_RECOMPUTE_COUNTER,\n\t\t0\n\t);\n\n\t// When blocks are moved up/down, they are animated to their new position by\n\t// updating the `transform` property manually (i.e. without using CSS\n\t// transitions or animations). The animation, which can also scroll the block\n\t// editor, can sometimes cause the position of the Popover to get out of sync.\n\t// A MutationObserver is therefore used to make sure that changes to the\n\t// selectedElement's attribute (i.e. `transform`) can be tracked and used to\n\t// trigger the Popover to rerender.\n\tuseLayoutEffect( () => {\n\t\tif ( ! selectedElement ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new window.MutationObserver(\n\t\t\tforceRecomputePopoverDimensions\n\t\t);\n\t\tobserver.observe( selectedElement, { attributes: true } );\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [ selectedElement ] );\n\n\tconst popoverAnchor = useMemo( () => {\n\t\tif (\n\t\t\t// popoverDimensionsRecomputeCounter is by definition always equal or greater\n\t\t\t// than 0. This check is only there to satisfy the correctness of the\n\t\t\t// exhaustive-deps rule for the `useMemo` hook.\n\t\t\tpopoverDimensionsRecomputeCounter < 0 ||\n\t\t\t! selectedElement ||\n\t\t\t( bottomClientId && ! lastSelectedElement )\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tgetBoundingClientRect() {\n\t\t\t\treturn lastSelectedElement\n\t\t\t\t\t? rectUnion(\n\t\t\t\t\t\t\tgetVisibleElementBounds( selectedElement ),\n\t\t\t\t\t\t\tgetVisibleElementBounds( lastSelectedElement )\n\t\t\t\t\t )\n\t\t\t\t\t: getVisibleElementBounds( selectedElement );\n\t\t\t},\n\t\t\tcontextElement: selectedElement,\n\t\t};\n\t}, [\n\t\tbottomClientId,\n\t\tlastSelectedElement,\n\t\tselectedElement,\n\t\tpopoverDimensionsRecomputeCounter,\n\t] );\n\n\tif ( ! selectedElement || ( bottomClientId && ! lastSelectedElement ) ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Popover\n\t\t\tref={ mergedRefs }\n\t\t\tanimate={ false }\n\t\t\tfocusOnMount={ false }\n\t\t\tanchor={ popoverAnchor }\n\t\t\t// Render in the old slot if needed for backward compatibility,\n\t\t\t// otherwise render in place (not in the default popover slot).\n\t\t\t__unstableSlotName={ __unstablePopoverSlot }\n\t\t\tinline={ ! __unstablePopoverSlot }\n\t\t\tplacement=\"top-start\"\n\t\t\tresize={ false }\n\t\t\tflip={ false }\n\t\t\tshift={ shift }\n\t\t\t{ ...props }\n\t\t\tclassName={ clsx( 'block-editor-block-popover', props.className ) }\n\t\t\tvariant=\"unstyled\"\n\t\t>\n\t\t\t{ children }\n\t\t</Popover>\n\t);\n}\n\nexport const PrivateBlockPopover = forwardRef( BlockPopover );\n\nconst PublicBlockPopover = (\n\t{ clientId, bottomClientId, children, ...props },\n\tref\n) => (\n\t<PrivateBlockPopover\n\t\t{ ...props }\n\t\tbottomClientId={ bottomClientId }\n\t\tclientId={ clientId }\n\t\t__unstableContentRef={ undefined }\n\t\t__unstablePopoverSlot={ undefined }\n\t\tref={ ref }\n\t>\n\t\t{ children }\n\t</PrivateBlockPopover>\n);\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-popover/README.md\n */\nexport default forwardRef( PublicBlockPopover );\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,IAAI,MAAM,MAAM;;AAEvB;AACA;AACA;AACA,SAASC,YAAY,QAAQ,oBAAoB;AACjD,SAASC,OAAO,QAAQ,uBAAuB;AAC/C,SACCC,UAAU,EACVC,OAAO,EACPC,UAAU,EACVC,eAAe,QACT,oBAAoB;;AAE3B;AACA;AACA;AACA,SAASC,eAAe,QAAQ,8CAA8C;AAC9E,OAAOC,gBAAgB,MAAM,sBAAsB;AACnD,SAASC,SAAS,EAAEC,uBAAuB,QAAQ,iBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAErE,MAAMC,6BAA6B,GAAGC,MAAM,CAACC,gBAAgB;AAE7D,SAASC,YAAYA,CACpB;EACCC,QAAQ;EACRC,cAAc;EACdC,QAAQ;EACRC,qBAAqB;EACrBC,oBAAoB;EACpBC,KAAK,GAAG,IAAI;EACZ,GAAGC;AACJ,CAAC,EACDC,GAAG,EACF;EACD,MAAMC,eAAe,GAAGlB,eAAe,CAAEU,QAAS,CAAC;EACnD,MAAMS,mBAAmB,GAAGnB,eAAe,CAAEW,cAAc,aAAdA,cAAc,cAAdA,cAAc,GAAID,QAAS,CAAC;EACzE,MAAMU,UAAU,GAAG1B,YAAY,CAAE,CAChCuB,GAAG,EACHhB,gBAAgB,CAAEa,oBAAqB,CAAC,CACvC,CAAC;EAEH,MAAM,CACLO,iCAAiC,EACjCC,+BAA+B,CAC/B,GAAGxB,UAAU;EACb;EACEyB,CAAC,IAAM,CAAEA,CAAC,GAAG,CAAC,IAAKjB,6BAA6B,EAClD,CACD,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACAP,eAAe,CAAE,MAAM;IACtB,IAAK,CAAEmB,eAAe,EAAG;MACxB;IACD;IAEA,MAAMM,QAAQ,GAAG,IAAIC,MAAM,CAACC,gBAAgB,CAC3CJ,+BACD,CAAC;IACDE,QAAQ,CAACG,OAAO,CAAET,eAAe,EAAE;MAAEU,UAAU,EAAE;IAAK,CAAE,CAAC;IAEzD,OAAO,MAAM;MACZJ,QAAQ,CAACK,UAAU,CAAC,CAAC;IACtB,CAAC;EACF,CAAC,EAAE,CAAEX,eAAe,CAAG,CAAC;EAExB,MAAMY,aAAa,GAAGjC,OAAO,CAAE,MAAM;IACpC;IACC;IACA;IACA;IACAwB,iCAAiC,GAAG,CAAC,IACrC,CAAEH,eAAe,IACfP,cAAc,IAAI,CAAEQ,mBAAqB,EAC1C;MACD,OAAOY,SAAS;IACjB;IAEA,OAAO;MACNC,qBAAqBA,CAAA,EAAG;QACvB,OAAOb,mBAAmB,GACvBjB,SAAS,CACTC,uBAAuB,CAAEe,eAAgB,CAAC,EAC1Cf,uBAAuB,CAAEgB,mBAAoB,CAC7C,CAAC,GACDhB,uBAAuB,CAAEe,eAAgB,CAAC;MAC9C,CAAC;MACDe,cAAc,EAAEf;IACjB,CAAC;EACF,CAAC,EAAE,CACFP,cAAc,EACdQ,mBAAmB,EACnBD,eAAe,EACfG,iCAAiC,CAChC,CAAC;EAEH,IAAK,CAAEH,eAAe,IAAMP,cAAc,IAAI,CAAEQ,mBAAqB,EAAG;IACvE,OAAO,IAAI;EACZ;EAEA,oBACCd,IAAA,CAACV,OAAO;IACPsB,GAAG,EAAGG,UAAY;IAClBc,OAAO,EAAG,KAAO;IACjBC,YAAY,EAAG,KAAO;IACtBC,MAAM,EAAGN;IACT;IACA;IAAA;IACAO,kBAAkB,EAAGxB,qBAAuB;IAC5CyB,MAAM,EAAG,CAAEzB,qBAAuB;IAClC0B,SAAS,EAAC,WAAW;IACrBC,MAAM,EAAG,KAAO;IAChBC,IAAI,EAAG,KAAO;IACd1B,KAAK,EAAGA,KAAO;IAAA,GACVC,KAAK;IACV0B,SAAS,EAAGjD,IAAI,CAAE,4BAA4B,EAAEuB,KAAK,CAAC0B,SAAU,CAAG;IACnEC,OAAO,EAAC,UAAU;IAAA/B,QAAA,EAEhBA;EAAQ,CACF,CAAC;AAEZ;AAEA,OAAO,MAAMgC,mBAAmB,GAAGhD,UAAU,CAAEa,YAAa,CAAC;AAE7D,MAAMoC,kBAAkB,GAAGA,CAC1B;EAAEnC,QAAQ;EAAEC,cAAc;EAAEC,QAAQ;EAAE,GAAGI;AAAM,CAAC,EAChDC,GAAG,kBAEHZ,IAAA,CAACuC,mBAAmB;EAAA,GACd5B,KAAK;EACVL,cAAc,EAAGA,cAAgB;EACjCD,QAAQ,EAAGA,QAAU;EACrBI,oBAAoB,EAAGiB,SAAW;EAClClB,qBAAqB,EAAGkB,SAAW;EACnCd,GAAG,EAAGA,GAAK;EAAAL,QAAA,EAETA;AAAQ,CACU,CACrB;;AAED;AACA;AACA;AACA,eAAehB,UAAU,CAAEiD,kBAAmB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["clsx","useMergeRefs","Popover","forwardRef","useMemo","useReducer","useLayoutEffect","useBlockElement","usePopoverScroll","rectUnion","getVisibleElementBounds","jsx","_jsx","MAX_POPOVER_RECOMPUTE_COUNTER","Number","MAX_SAFE_INTEGER","BlockPopover","clientId","bottomClientId","children","__unstablePopoverSlot","__unstableContentRef","shift","props","ref","selectedElement","lastSelectedElement","mergedRefs","popoverDimensionsRecomputeCounter","forceRecomputePopoverDimensions","s","observer","window","MutationObserver","observe","attributes","disconnect","popoverAnchor","undefined","getBoundingClientRect","contextElement","animate","focusOnMount","anchor","__unstableSlotName","inline","placement","resize","flip","className","variant","PrivateBlockPopover","PublicBlockPopover"],"sources":["@wordpress/block-editor/src/components/block-popover/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useMergeRefs } from '@wordpress/compose';\nimport { Popover } from '@wordpress/components';\nimport {\n\tforwardRef,\n\tuseMemo,\n\tuseReducer,\n\tuseLayoutEffect,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useBlockElement } from '../block-list/use-block-props/use-block-refs';\nimport usePopoverScroll from './use-popover-scroll';\nimport { rectUnion, getVisibleElementBounds } from '../../utils/dom';\n\nconst MAX_POPOVER_RECOMPUTE_COUNTER = Number.MAX_SAFE_INTEGER;\n\nfunction BlockPopover(\n\t{\n\t\tclientId,\n\t\tbottomClientId,\n\t\tchildren,\n\t\t__unstablePopoverSlot,\n\t\t__unstableContentRef,\n\t\tshift = true,\n\t\t...props\n\t},\n\tref\n) {\n\tconst selectedElement = useBlockElement( clientId );\n\tconst lastSelectedElement = useBlockElement( bottomClientId ?? clientId );\n\tconst mergedRefs = useMergeRefs( [\n\t\tref,\n\t\tusePopoverScroll( __unstableContentRef ),\n\t] );\n\n\tconst [\n\t\tpopoverDimensionsRecomputeCounter,\n\t\tforceRecomputePopoverDimensions,\n\t] = useReducer(\n\t\t// Module is there to make sure that the counter doesn't overflow.\n\t\t( s ) => ( s + 1 ) % MAX_POPOVER_RECOMPUTE_COUNTER,\n\t\t0\n\t);\n\n\t// When blocks are moved up/down, they are animated to their new position by\n\t// updating the `transform` property manually (i.e. without using CSS\n\t// transitions or animations). The animation, which can also scroll the block\n\t// editor, can sometimes cause the position of the Popover to get out of sync.\n\t// A MutationObserver is therefore used to make sure that changes to the\n\t// selectedElement's attribute (i.e. `transform`) can be tracked and used to\n\t// trigger the Popover to rerender.\n\tuseLayoutEffect( () => {\n\t\tif ( ! selectedElement ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new window.MutationObserver(\n\t\t\tforceRecomputePopoverDimensions\n\t\t);\n\t\tobserver.observe( selectedElement, { attributes: true } );\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [ selectedElement ] );\n\n\tconst popoverAnchor = useMemo( () => {\n\t\tif (\n\t\t\t// popoverDimensionsRecomputeCounter is by definition always equal or greater\n\t\t\t// than 0. This check is only there to satisfy the correctness of the\n\t\t\t// exhaustive-deps rule for the `useMemo` hook.\n\t\t\tpopoverDimensionsRecomputeCounter < 0 ||\n\t\t\t! selectedElement ||\n\t\t\t( bottomClientId && ! lastSelectedElement )\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tgetBoundingClientRect() {\n\t\t\t\treturn lastSelectedElement\n\t\t\t\t\t? rectUnion(\n\t\t\t\t\t\t\tgetVisibleElementBounds( selectedElement ),\n\t\t\t\t\t\t\tgetVisibleElementBounds( lastSelectedElement )\n\t\t\t\t\t )\n\t\t\t\t\t: getVisibleElementBounds( selectedElement );\n\t\t\t},\n\t\t\tcontextElement: selectedElement,\n\t\t};\n\t}, [\n\t\tpopoverDimensionsRecomputeCounter,\n\t\tselectedElement,\n\t\tbottomClientId,\n\t\tlastSelectedElement,\n\t] );\n\n\tif ( ! selectedElement || ( bottomClientId && ! lastSelectedElement ) ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Popover\n\t\t\tref={ mergedRefs }\n\t\t\tanimate={ false }\n\t\t\tfocusOnMount={ false }\n\t\t\tanchor={ popoverAnchor }\n\t\t\t// Render in the old slot if needed for backward compatibility,\n\t\t\t// otherwise render in place (not in the default popover slot).\n\t\t\t__unstableSlotName={ __unstablePopoverSlot }\n\t\t\tinline={ ! __unstablePopoverSlot }\n\t\t\tplacement=\"top-start\"\n\t\t\tresize={ false }\n\t\t\tflip={ false }\n\t\t\tshift={ shift }\n\t\t\t{ ...props }\n\t\t\tclassName={ clsx( 'block-editor-block-popover', props.className ) }\n\t\t\tvariant=\"unstyled\"\n\t\t>\n\t\t\t{ children }\n\t\t</Popover>\n\t);\n}\n\nexport const PrivateBlockPopover = forwardRef( BlockPopover );\n\nconst PublicBlockPopover = (\n\t{ clientId, bottomClientId, children, ...props },\n\tref\n) => (\n\t<PrivateBlockPopover\n\t\t{ ...props }\n\t\tbottomClientId={ bottomClientId }\n\t\tclientId={ clientId }\n\t\t__unstableContentRef={ undefined }\n\t\t__unstablePopoverSlot={ undefined }\n\t\tref={ ref }\n\t>\n\t\t{ children }\n\t</PrivateBlockPopover>\n);\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-popover/README.md\n */\nexport default forwardRef( PublicBlockPopover );\n"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,IAAI,MAAM,MAAM;;AAEvB;AACA;AACA;AACA,SAASC,YAAY,QAAQ,oBAAoB;AACjD,SAASC,OAAO,QAAQ,uBAAuB;AAC/C,SACCC,UAAU,EACVC,OAAO,EACPC,UAAU,EACVC,eAAe,QACT,oBAAoB;;AAE3B;AACA;AACA;AACA,SAASC,eAAe,QAAQ,8CAA8C;AAC9E,OAAOC,gBAAgB,MAAM,sBAAsB;AACnD,SAASC,SAAS,EAAEC,uBAAuB,QAAQ,iBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAErE,MAAMC,6BAA6B,GAAGC,MAAM,CAACC,gBAAgB;AAE7D,SAASC,YAAYA,CACpB;EACCC,QAAQ;EACRC,cAAc;EACdC,QAAQ;EACRC,qBAAqB;EACrBC,oBAAoB;EACpBC,KAAK,GAAG,IAAI;EACZ,GAAGC;AACJ,CAAC,EACDC,GAAG,EACF;EACD,MAAMC,eAAe,GAAGlB,eAAe,CAAEU,QAAS,CAAC;EACnD,MAAMS,mBAAmB,GAAGnB,eAAe,CAAEW,cAAc,aAAdA,cAAc,cAAdA,cAAc,GAAID,QAAS,CAAC;EACzE,MAAMU,UAAU,GAAG1B,YAAY,CAAE,CAChCuB,GAAG,EACHhB,gBAAgB,CAAEa,oBAAqB,CAAC,CACvC,CAAC;EAEH,MAAM,CACLO,iCAAiC,EACjCC,+BAA+B,CAC/B,GAAGxB,UAAU;EACb;EACEyB,CAAC,IAAM,CAAEA,CAAC,GAAG,CAAC,IAAKjB,6BAA6B,EAClD,CACD,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACAP,eAAe,CAAE,MAAM;IACtB,IAAK,CAAEmB,eAAe,EAAG;MACxB;IACD;IAEA,MAAMM,QAAQ,GAAG,IAAIC,MAAM,CAACC,gBAAgB,CAC3CJ,+BACD,CAAC;IACDE,QAAQ,CAACG,OAAO,CAAET,eAAe,EAAE;MAAEU,UAAU,EAAE;IAAK,CAAE,CAAC;IAEzD,OAAO,MAAM;MACZJ,QAAQ,CAACK,UAAU,CAAC,CAAC;IACtB,CAAC;EACF,CAAC,EAAE,CAAEX,eAAe,CAAG,CAAC;EAExB,MAAMY,aAAa,GAAGjC,OAAO,CAAE,MAAM;IACpC;IACC;IACA;IACA;IACAwB,iCAAiC,GAAG,CAAC,IACrC,CAAEH,eAAe,IACfP,cAAc,IAAI,CAAEQ,mBAAqB,EAC1C;MACD,OAAOY,SAAS;IACjB;IAEA,OAAO;MACNC,qBAAqBA,CAAA,EAAG;QACvB,OAAOb,mBAAmB,GACvBjB,SAAS,CACTC,uBAAuB,CAAEe,eAAgB,CAAC,EAC1Cf,uBAAuB,CAAEgB,mBAAoB,CAC7C,CAAC,GACDhB,uBAAuB,CAAEe,eAAgB,CAAC;MAC9C,CAAC;MACDe,cAAc,EAAEf;IACjB,CAAC;EACF,CAAC,EAAE,CACFG,iCAAiC,EACjCH,eAAe,EACfP,cAAc,EACdQ,mBAAmB,CAClB,CAAC;EAEH,IAAK,CAAED,eAAe,IAAMP,cAAc,IAAI,CAAEQ,mBAAqB,EAAG;IACvE,OAAO,IAAI;EACZ;EAEA,oBACCd,IAAA,CAACV,OAAO;IACPsB,GAAG,EAAGG,UAAY;IAClBc,OAAO,EAAG,KAAO;IACjBC,YAAY,EAAG,KAAO;IACtBC,MAAM,EAAGN;IACT;IACA;IAAA;IACAO,kBAAkB,EAAGxB,qBAAuB;IAC5CyB,MAAM,EAAG,CAAEzB,qBAAuB;IAClC0B,SAAS,EAAC,WAAW;IACrBC,MAAM,EAAG,KAAO;IAChBC,IAAI,EAAG,KAAO;IACd1B,KAAK,EAAGA,KAAO;IAAA,GACVC,KAAK;IACV0B,SAAS,EAAGjD,IAAI,CAAE,4BAA4B,EAAEuB,KAAK,CAAC0B,SAAU,CAAG;IACnEC,OAAO,EAAC,UAAU;IAAA/B,QAAA,EAEhBA;EAAQ,CACF,CAAC;AAEZ;AAEA,OAAO,MAAMgC,mBAAmB,GAAGhD,UAAU,CAAEa,YAAa,CAAC;AAE7D,MAAMoC,kBAAkB,GAAGA,CAC1B;EAAEnC,QAAQ;EAAEC,cAAc;EAAEC,QAAQ;EAAE,GAAGI;AAAM,CAAC,EAChDC,GAAG,kBAEHZ,IAAA,CAACuC,mBAAmB;EAAA,GACd5B,KAAK;EACVL,cAAc,EAAGA,cAAgB;EACjCD,QAAQ,EAAGA,QAAU;EACrBI,oBAAoB,EAAGiB,SAAW;EAClClB,qBAAqB,EAAGkB,SAAW;EACnCd,GAAG,EAAGA,GAAK;EAAAL,QAAA,EAETA;AAAQ,CACU,CACrB;;AAED;AACA;AACA;AACA,eAAehB,UAAU,CAAEiD,kBAAmB,CAAC","ignoreList":[]}
@@ -11,7 +11,7 @@ import { useSelect } from '@wordpress/data';
11
11
  import { useRef } from '@wordpress/element';
12
12
  import { useViewportMatch } from '@wordpress/compose';
13
13
  import { getBlockType, hasBlockSupport, isReusableBlock, isTemplatePart } from '@wordpress/blocks';
14
- import { ToolbarGroup } from '@wordpress/components';
14
+ import { ToolbarGroup, ToolbarButton } from '@wordpress/components';
15
15
 
16
16
  /**
17
17
  * Internal dependencies
@@ -30,6 +30,8 @@ import { store as blockEditorStore } from '../../store';
30
30
  import __unstableBlockNameContext from './block-name-context';
31
31
  import NavigableToolbar from '../navigable-toolbar';
32
32
  import { useHasBlockToolbar } from './use-has-block-toolbar';
33
+ import Shuffle from './shuffle';
34
+ import { unlock } from '../../lock-unlock';
33
35
 
34
36
  /**
35
37
  * Renders the block toolbar.
@@ -44,8 +46,8 @@ import { useHasBlockToolbar } from './use-has-block-toolbar';
44
46
  * @param {string} props.variant Style variant of the toolbar, also passed to the Dropdowns rendered from Block Toolbar Buttons.
45
47
  */
46
48
  import { jsx as _jsx } from "react/jsx-runtime";
47
- import { Fragment as _Fragment } from "react/jsx-runtime";
48
49
  import { jsxs as _jsxs } from "react/jsx-runtime";
50
+ import { Fragment as _Fragment } from "react/jsx-runtime";
49
51
  export function PrivateBlockToolbar({
50
52
  hideDragHandle,
51
53
  focusOnMount,
@@ -56,7 +58,6 @@ export function PrivateBlockToolbar({
56
58
  const {
57
59
  blockClientId,
58
60
  blockClientIds,
59
- isContentOnlyEditingMode,
60
61
  isDefaultEditingMode,
61
62
  blockType,
62
63
  toolbarKey,
@@ -64,7 +65,11 @@ export function PrivateBlockToolbar({
64
65
  showParentSelector,
65
66
  isUsingBindings,
66
67
  hasParentPattern,
67
- hasContentOnlyLocking
68
+ hasContentOnlyLocking,
69
+ showShuffleButton,
70
+ showSlots,
71
+ showGroupButtons,
72
+ showLockButtons
68
73
  } = useSelect(select => {
69
74
  const {
70
75
  getBlockName,
@@ -75,8 +80,9 @@ export function PrivateBlockToolbar({
75
80
  getBlockEditingMode,
76
81
  getBlockAttributes,
77
82
  getBlockParentsByBlockName,
78
- getTemplateLock
79
- } = select(blockEditorStore);
83
+ getTemplateLock,
84
+ isZoomOutMode
85
+ } = unlock(select(blockEditorStore));
80
86
  const selectedBlockClientIds = getSelectedBlockClientIds();
81
87
  const selectedBlockClientId = selectedBlockClientIds[0];
82
88
  const parents = getBlockParents(selectedBlockClientId);
@@ -96,15 +102,18 @@ export function PrivateBlockToolbar({
96
102
  return {
97
103
  blockClientId: selectedBlockClientId,
98
104
  blockClientIds: selectedBlockClientIds,
99
- isContentOnlyEditingMode: editingMode === 'contentOnly',
100
105
  isDefaultEditingMode: _isDefaultEditingMode,
101
106
  blockType: selectedBlockClientId && getBlockType(_blockName),
102
107
  shouldShowVisualToolbar: isValid && isVisual,
103
108
  toolbarKey: `${selectedBlockClientId}${firstParentClientId}`,
104
- showParentSelector: parentBlockType && getBlockEditingMode(firstParentClientId) === 'default' && hasBlockSupport(parentBlockType, '__experimentalParentSelector', true) && selectedBlockClientIds.length === 1 && _isDefaultEditingMode,
109
+ showParentSelector: !isZoomOutMode() && parentBlockType && getBlockEditingMode(firstParentClientId) === 'default' && hasBlockSupport(parentBlockType, '__experimentalParentSelector', true) && selectedBlockClientIds.length === 1 && _isDefaultEditingMode,
105
110
  isUsingBindings: _isUsingBindings,
106
111
  hasParentPattern: _hasParentPattern,
107
- hasContentOnlyLocking: _hasTemplateLock
112
+ hasContentOnlyLocking: _hasTemplateLock,
113
+ showShuffleButton: isZoomOutMode(),
114
+ showSlots: !isZoomOutMode(),
115
+ showGroupButtons: !isZoomOutMode(),
116
+ showLockButtons: !isZoomOutMode()
108
117
  };
109
118
  }, []);
110
119
  const toolbarWrapperRef = useRef(null);
@@ -148,7 +157,7 @@ export function PrivateBlockToolbar({
148
157
  children: /*#__PURE__*/_jsxs("div", {
149
158
  ref: toolbarWrapperRef,
150
159
  className: innerClasses,
151
- children: [!isMultiToolbar && isLargeViewport && isDefaultEditingMode && /*#__PURE__*/_jsx(BlockParentSelector, {}), (shouldShowVisualToolbar || isMultiToolbar) && (isDefaultEditingMode || isContentOnlyEditingMode && !hasParentPattern || isSynced) && /*#__PURE__*/_jsx("div", {
160
+ children: [showParentSelector && !isMultiToolbar && isLargeViewport && /*#__PURE__*/_jsx(BlockParentSelector, {}), (shouldShowVisualToolbar || isMultiToolbar) && !hasParentPattern && /*#__PURE__*/_jsx("div", {
152
161
  ref: nodeRef,
153
162
  ...showHoveredOrFocusedGestures,
154
163
  children: /*#__PURE__*/_jsxs(ToolbarGroup, {
@@ -157,16 +166,19 @@ export function PrivateBlockToolbar({
157
166
  clientIds: blockClientIds,
158
167
  disabled: !isDefaultEditingMode,
159
168
  isUsingBindings: isUsingBindings
160
- }), isDefaultEditingMode && /*#__PURE__*/_jsxs(_Fragment, {
161
- children: [!isMultiToolbar && /*#__PURE__*/_jsx(BlockLockToolbar, {
162
- clientId: blockClientId
163
- }), /*#__PURE__*/_jsx(BlockMover, {
164
- clientIds: blockClientIds,
165
- hideDragHandle: hideDragHandle
166
- })]
169
+ }), !isMultiToolbar && showLockButtons && /*#__PURE__*/_jsx(BlockLockToolbar, {
170
+ clientId: blockClientId
171
+ }), /*#__PURE__*/_jsx(BlockMover, {
172
+ clientIds: blockClientIds,
173
+ hideDragHandle: hideDragHandle
167
174
  })]
168
175
  })
169
- }), !hasContentOnlyLocking && shouldShowVisualToolbar && isMultiToolbar && /*#__PURE__*/_jsx(BlockGroupToolbar, {}), shouldShowVisualToolbar && /*#__PURE__*/_jsxs(_Fragment, {
176
+ }), !hasContentOnlyLocking && shouldShowVisualToolbar && isMultiToolbar && showGroupButtons && /*#__PURE__*/_jsx(BlockGroupToolbar, {}), showShuffleButton && /*#__PURE__*/_jsx(ToolbarGroup, {
177
+ children: /*#__PURE__*/_jsx(Shuffle, {
178
+ clientId: blockClientIds[0],
179
+ as: ToolbarButton
180
+ })
181
+ }), shouldShowVisualToolbar && showSlots && /*#__PURE__*/_jsxs(_Fragment, {
170
182
  children: [/*#__PURE__*/_jsx(BlockControls.Slot, {
171
183
  group: "parent",
172
184
  className: "block-editor-block-toolbar__slot"
@@ -1 +1 @@
1
- {"version":3,"names":["clsx","__","useSelect","useRef","useViewportMatch","getBlockType","hasBlockSupport","isReusableBlock","isTemplatePart","ToolbarGroup","BlockMover","BlockParentSelector","BlockSwitcher","BlockControls","__unstableBlockToolbarLastItem","BlockSettingsMenu","BlockLockToolbar","BlockGroupToolbar","BlockEditVisuallyButton","useShowHoveredOrFocusedGestures","store","blockEditorStore","__unstableBlockNameContext","NavigableToolbar","useHasBlockToolbar","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","PrivateBlockToolbar","hideDragHandle","focusOnMount","__experimentalInitialIndex","__experimentalOnIndexChange","variant","blockClientId","blockClientIds","isContentOnlyEditingMode","isDefaultEditingMode","blockType","toolbarKey","shouldShowVisualToolbar","showParentSelector","isUsingBindings","hasParentPattern","hasContentOnlyLocking","select","getBlockName","getBlockMode","getBlockParents","getSelectedBlockClientIds","isBlockValid","getBlockEditingMode","getBlockAttributes","getBlockParentsByBlockName","getTemplateLock","selectedBlockClientIds","selectedBlockClientId","parents","firstParentClientId","length","parentBlockName","parentBlockType","editingMode","_isDefaultEditingMode","_blockName","isValid","every","id","isVisual","_isUsingBindings","clientId","metadata","bindings","_hasParentPattern","_hasTemplateLock","some","toolbarWrapperRef","nodeRef","showHoveredOrFocusedGestures","ref","isLargeViewport","hasBlockToolbar","isMultiToolbar","isSynced","classes","innerClasses","focusEditorOnEscape","className","undefined","children","clientIds","disabled","Slot","group","Provider","value","name","BlockToolbar"],"sources":["@wordpress/block-editor/src/components/block-toolbar/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport { useRef } from '@wordpress/element';\nimport { useViewportMatch } from '@wordpress/compose';\nimport {\n\tgetBlockType,\n\thasBlockSupport,\n\tisReusableBlock,\n\tisTemplatePart,\n} from '@wordpress/blocks';\nimport { ToolbarGroup } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockMover from '../block-mover';\nimport BlockParentSelector from '../block-parent-selector';\nimport BlockSwitcher from '../block-switcher';\nimport BlockControls from '../block-controls';\nimport __unstableBlockToolbarLastItem from './block-toolbar-last-item';\nimport BlockSettingsMenu from '../block-settings-menu';\nimport { BlockLockToolbar } from '../block-lock';\nimport { BlockGroupToolbar } from '../convert-to-group-buttons';\nimport BlockEditVisuallyButton from '../block-edit-visually-button';\nimport { useShowHoveredOrFocusedGestures } from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport __unstableBlockNameContext from './block-name-context';\nimport NavigableToolbar from '../navigable-toolbar';\nimport { useHasBlockToolbar } from './use-has-block-toolbar';\n\n/**\n * Renders the block toolbar.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-toolbar/README.md\n *\n * @param {Object} props Components props.\n * @param {boolean} props.hideDragHandle Show or hide the Drag Handle for drag and drop functionality.\n * @param {boolean} props.focusOnMount Focus the toolbar when mounted.\n * @param {number} props.__experimentalInitialIndex The initial index of the toolbar item to focus.\n * @param {Function} props.__experimentalOnIndexChange Callback function to be called when the index of the focused toolbar item changes.\n * @param {string} props.variant Style variant of the toolbar, also passed to the Dropdowns rendered from Block Toolbar Buttons.\n */\nexport function PrivateBlockToolbar( {\n\thideDragHandle,\n\tfocusOnMount,\n\t__experimentalInitialIndex,\n\t__experimentalOnIndexChange,\n\tvariant = 'unstyled',\n} ) {\n\tconst {\n\t\tblockClientId,\n\t\tblockClientIds,\n\t\tisContentOnlyEditingMode,\n\t\tisDefaultEditingMode,\n\t\tblockType,\n\t\ttoolbarKey,\n\t\tshouldShowVisualToolbar,\n\t\tshowParentSelector,\n\t\tisUsingBindings,\n\t\thasParentPattern,\n\t\thasContentOnlyLocking,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockName,\n\t\t\tgetBlockMode,\n\t\t\tgetBlockParents,\n\t\t\tgetSelectedBlockClientIds,\n\t\t\tisBlockValid,\n\t\t\tgetBlockEditingMode,\n\t\t\tgetBlockAttributes,\n\t\t\tgetBlockParentsByBlockName,\n\t\t\tgetTemplateLock,\n\t\t} = select( blockEditorStore );\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\t\tconst selectedBlockClientId = selectedBlockClientIds[ 0 ];\n\t\tconst parents = getBlockParents( selectedBlockClientId );\n\t\tconst firstParentClientId = parents[ parents.length - 1 ];\n\t\tconst parentBlockName = getBlockName( firstParentClientId );\n\t\tconst parentBlockType = getBlockType( parentBlockName );\n\t\tconst editingMode = getBlockEditingMode( selectedBlockClientId );\n\t\tconst _isDefaultEditingMode = editingMode === 'default';\n\t\tconst _blockName = getBlockName( selectedBlockClientId );\n\t\tconst isValid = selectedBlockClientIds.every( ( id ) =>\n\t\t\tisBlockValid( id )\n\t\t);\n\t\tconst isVisual = selectedBlockClientIds.every(\n\t\t\t( id ) => getBlockMode( id ) === 'visual'\n\t\t);\n\t\tconst _isUsingBindings = selectedBlockClientIds.every(\n\t\t\t( clientId ) =>\n\t\t\t\t!! getBlockAttributes( clientId )?.metadata?.bindings\n\t\t);\n\n\t\tconst _hasParentPattern = selectedBlockClientIds.every(\n\t\t\t( clientId ) =>\n\t\t\t\tgetBlockParentsByBlockName( clientId, 'core/block', true )\n\t\t\t\t\t.length > 0\n\t\t);\n\n\t\t// If one or more selected blocks are locked, do not show the BlockGroupToolbar.\n\t\tconst _hasTemplateLock = selectedBlockClientIds.some(\n\t\t\t( id ) => getTemplateLock( id ) === 'contentOnly'\n\t\t);\n\t\treturn {\n\t\t\tblockClientId: selectedBlockClientId,\n\t\t\tblockClientIds: selectedBlockClientIds,\n\t\t\tisContentOnlyEditingMode: editingMode === 'contentOnly',\n\t\t\tisDefaultEditingMode: _isDefaultEditingMode,\n\t\t\tblockType: selectedBlockClientId && getBlockType( _blockName ),\n\t\t\tshouldShowVisualToolbar: isValid && isVisual,\n\t\t\ttoolbarKey: `${ selectedBlockClientId }${ firstParentClientId }`,\n\t\t\tshowParentSelector:\n\t\t\t\tparentBlockType &&\n\t\t\t\tgetBlockEditingMode( firstParentClientId ) === 'default' &&\n\t\t\t\thasBlockSupport(\n\t\t\t\t\tparentBlockType,\n\t\t\t\t\t'__experimentalParentSelector',\n\t\t\t\t\ttrue\n\t\t\t\t) &&\n\t\t\t\tselectedBlockClientIds.length === 1 &&\n\t\t\t\t_isDefaultEditingMode,\n\t\t\tisUsingBindings: _isUsingBindings,\n\t\t\thasParentPattern: _hasParentPattern,\n\t\t\thasContentOnlyLocking: _hasTemplateLock,\n\t\t};\n\t}, [] );\n\n\tconst toolbarWrapperRef = useRef( null );\n\n\t// Handles highlighting the current block outline on hover or focus of the\n\t// block type toolbar area.\n\tconst nodeRef = useRef();\n\tconst showHoveredOrFocusedGestures = useShowHoveredOrFocusedGestures( {\n\t\tref: nodeRef,\n\t} );\n\n\tconst isLargeViewport = ! useViewportMatch( 'medium', '<' );\n\n\tconst hasBlockToolbar = useHasBlockToolbar();\n\tif ( ! hasBlockToolbar ) {\n\t\treturn null;\n\t}\n\n\tconst isMultiToolbar = blockClientIds.length > 1;\n\tconst isSynced =\n\t\tisReusableBlock( blockType ) || isTemplatePart( blockType );\n\n\t// Shifts the toolbar to make room for the parent block selector.\n\tconst classes = clsx( 'block-editor-block-contextual-toolbar', {\n\t\t'has-parent': showParentSelector,\n\t} );\n\n\tconst innerClasses = clsx( 'block-editor-block-toolbar', {\n\t\t'is-synced': isSynced,\n\t\t'is-connected': isUsingBindings,\n\t} );\n\n\treturn (\n\t\t<NavigableToolbar\n\t\t\tfocusEditorOnEscape\n\t\t\tclassName={ classes }\n\t\t\t/* translators: accessibility text for the block toolbar */\n\t\t\taria-label={ __( 'Block tools' ) }\n\t\t\t// The variant is applied as \"toolbar\" when undefined, which is the black border style of the dropdown from the toolbar popover.\n\t\t\tvariant={ variant === 'toolbar' ? undefined : variant }\n\t\t\tfocusOnMount={ focusOnMount }\n\t\t\t__experimentalInitialIndex={ __experimentalInitialIndex }\n\t\t\t__experimentalOnIndexChange={ __experimentalOnIndexChange }\n\t\t\t// Resets the index whenever the active block changes so\n\t\t\t// this is not persisted. See https://github.com/WordPress/gutenberg/pull/25760#issuecomment-717906169\n\t\t\tkey={ toolbarKey }\n\t\t>\n\t\t\t<div ref={ toolbarWrapperRef } className={ innerClasses }>\n\t\t\t\t{ ! isMultiToolbar &&\n\t\t\t\t\tisLargeViewport &&\n\t\t\t\t\tisDefaultEditingMode && <BlockParentSelector /> }\n\t\t\t\t{ ( shouldShowVisualToolbar || isMultiToolbar ) &&\n\t\t\t\t\t( isDefaultEditingMode ||\n\t\t\t\t\t\t( isContentOnlyEditingMode && ! hasParentPattern ) ||\n\t\t\t\t\t\tisSynced ) && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tref={ nodeRef }\n\t\t\t\t\t\t\t{ ...showHoveredOrFocusedGestures }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToolbarGroup className=\"block-editor-block-toolbar__block-controls\">\n\t\t\t\t\t\t\t\t<BlockSwitcher\n\t\t\t\t\t\t\t\t\tclientIds={ blockClientIds }\n\t\t\t\t\t\t\t\t\tdisabled={ ! isDefaultEditingMode }\n\t\t\t\t\t\t\t\t\tisUsingBindings={ isUsingBindings }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{ isDefaultEditingMode && (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{ ! isMultiToolbar && (\n\t\t\t\t\t\t\t\t\t\t\t<BlockLockToolbar\n\t\t\t\t\t\t\t\t\t\t\t\tclientId={ blockClientId }\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t<BlockMover\n\t\t\t\t\t\t\t\t\t\t\tclientIds={ blockClientIds }\n\t\t\t\t\t\t\t\t\t\t\thideDragHandle={ hideDragHandle }\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) }\n\t\t\t\t{ ! hasContentOnlyLocking &&\n\t\t\t\t\tshouldShowVisualToolbar &&\n\t\t\t\t\tisMultiToolbar && <BlockGroupToolbar /> }\n\t\t\t\t{ shouldShowVisualToolbar && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\tgroup=\"parent\"\n\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\tgroup=\"block\"\n\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BlockControls.Slot className=\"block-editor-block-toolbar__slot\" />\n\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\tgroup=\"inline\"\n\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\tgroup=\"other\"\n\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<__unstableBlockNameContext.Provider\n\t\t\t\t\t\t\tvalue={ blockType?.name }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<__unstableBlockToolbarLastItem.Slot />\n\t\t\t\t\t\t</__unstableBlockNameContext.Provider>\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t\t<BlockEditVisuallyButton clientIds={ blockClientIds } />\n\t\t\t\t{ isDefaultEditingMode && (\n\t\t\t\t\t<BlockSettingsMenu clientIds={ blockClientIds } />\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</NavigableToolbar>\n\t);\n}\n\n/**\n * Renders the block toolbar.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-toolbar/README.md\n *\n * @param {Object} props Components props.\n * @param {boolean} props.hideDragHandle Show or hide the Drag Handle for drag and drop functionality.\n * @param {string} props.variant Style variant of the toolbar, also passed to the Dropdowns rendered from Block Toolbar Buttons.\n */\nexport default function BlockToolbar( { hideDragHandle, variant } ) {\n\treturn (\n\t\t<PrivateBlockToolbar\n\t\t\thideDragHandle={ hideDragHandle }\n\t\t\tvariant={ variant }\n\t\t\tfocusOnMount={ undefined }\n\t\t\t__experimentalInitialIndex={ undefined }\n\t\t\t__experimentalOnIndexChange={ undefined }\n\t\t/>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["clsx","__","useSelect","useRef","useViewportMatch","getBlockType","hasBlockSupport","isReusableBlock","isTemplatePart","ToolbarGroup","ToolbarButton","BlockMover","BlockParentSelector","BlockSwitcher","BlockControls","__unstableBlockToolbarLastItem","BlockSettingsMenu","BlockLockToolbar","BlockGroupToolbar","BlockEditVisuallyButton","useShowHoveredOrFocusedGestures","store","blockEditorStore","__unstableBlockNameContext","NavigableToolbar","useHasBlockToolbar","Shuffle","unlock","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","PrivateBlockToolbar","hideDragHandle","focusOnMount","__experimentalInitialIndex","__experimentalOnIndexChange","variant","blockClientId","blockClientIds","isDefaultEditingMode","blockType","toolbarKey","shouldShowVisualToolbar","showParentSelector","isUsingBindings","hasParentPattern","hasContentOnlyLocking","showShuffleButton","showSlots","showGroupButtons","showLockButtons","select","getBlockName","getBlockMode","getBlockParents","getSelectedBlockClientIds","isBlockValid","getBlockEditingMode","getBlockAttributes","getBlockParentsByBlockName","getTemplateLock","isZoomOutMode","selectedBlockClientIds","selectedBlockClientId","parents","firstParentClientId","length","parentBlockName","parentBlockType","editingMode","_isDefaultEditingMode","_blockName","isValid","every","id","isVisual","_isUsingBindings","clientId","metadata","bindings","_hasParentPattern","_hasTemplateLock","some","toolbarWrapperRef","nodeRef","showHoveredOrFocusedGestures","ref","isLargeViewport","hasBlockToolbar","isMultiToolbar","isSynced","classes","innerClasses","focusEditorOnEscape","className","undefined","children","clientIds","disabled","as","Slot","group","Provider","value","name","BlockToolbar"],"sources":["@wordpress/block-editor/src/components/block-toolbar/index.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport { useRef } from '@wordpress/element';\nimport { useViewportMatch } from '@wordpress/compose';\nimport {\n\tgetBlockType,\n\thasBlockSupport,\n\tisReusableBlock,\n\tisTemplatePart,\n} from '@wordpress/blocks';\nimport { ToolbarGroup, ToolbarButton } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport BlockMover from '../block-mover';\nimport BlockParentSelector from '../block-parent-selector';\nimport BlockSwitcher from '../block-switcher';\nimport BlockControls from '../block-controls';\nimport __unstableBlockToolbarLastItem from './block-toolbar-last-item';\nimport BlockSettingsMenu from '../block-settings-menu';\nimport { BlockLockToolbar } from '../block-lock';\nimport { BlockGroupToolbar } from '../convert-to-group-buttons';\nimport BlockEditVisuallyButton from '../block-edit-visually-button';\nimport { useShowHoveredOrFocusedGestures } from './utils';\nimport { store as blockEditorStore } from '../../store';\nimport __unstableBlockNameContext from './block-name-context';\nimport NavigableToolbar from '../navigable-toolbar';\nimport { useHasBlockToolbar } from './use-has-block-toolbar';\nimport Shuffle from './shuffle';\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Renders the block toolbar.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-toolbar/README.md\n *\n * @param {Object} props Components props.\n * @param {boolean} props.hideDragHandle Show or hide the Drag Handle for drag and drop functionality.\n * @param {boolean} props.focusOnMount Focus the toolbar when mounted.\n * @param {number} props.__experimentalInitialIndex The initial index of the toolbar item to focus.\n * @param {Function} props.__experimentalOnIndexChange Callback function to be called when the index of the focused toolbar item changes.\n * @param {string} props.variant Style variant of the toolbar, also passed to the Dropdowns rendered from Block Toolbar Buttons.\n */\nexport function PrivateBlockToolbar( {\n\thideDragHandle,\n\tfocusOnMount,\n\t__experimentalInitialIndex,\n\t__experimentalOnIndexChange,\n\tvariant = 'unstyled',\n} ) {\n\tconst {\n\t\tblockClientId,\n\t\tblockClientIds,\n\t\tisDefaultEditingMode,\n\t\tblockType,\n\t\ttoolbarKey,\n\t\tshouldShowVisualToolbar,\n\t\tshowParentSelector,\n\t\tisUsingBindings,\n\t\thasParentPattern,\n\t\thasContentOnlyLocking,\n\t\tshowShuffleButton,\n\t\tshowSlots,\n\t\tshowGroupButtons,\n\t\tshowLockButtons,\n\t} = useSelect( ( select ) => {\n\t\tconst {\n\t\t\tgetBlockName,\n\t\t\tgetBlockMode,\n\t\t\tgetBlockParents,\n\t\t\tgetSelectedBlockClientIds,\n\t\t\tisBlockValid,\n\t\t\tgetBlockEditingMode,\n\t\t\tgetBlockAttributes,\n\t\t\tgetBlockParentsByBlockName,\n\t\t\tgetTemplateLock,\n\t\t\tisZoomOutMode,\n\t\t} = unlock( select( blockEditorStore ) );\n\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\t\tconst selectedBlockClientId = selectedBlockClientIds[ 0 ];\n\t\tconst parents = getBlockParents( selectedBlockClientId );\n\t\tconst firstParentClientId = parents[ parents.length - 1 ];\n\t\tconst parentBlockName = getBlockName( firstParentClientId );\n\t\tconst parentBlockType = getBlockType( parentBlockName );\n\t\tconst editingMode = getBlockEditingMode( selectedBlockClientId );\n\t\tconst _isDefaultEditingMode = editingMode === 'default';\n\t\tconst _blockName = getBlockName( selectedBlockClientId );\n\t\tconst isValid = selectedBlockClientIds.every( ( id ) =>\n\t\t\tisBlockValid( id )\n\t\t);\n\t\tconst isVisual = selectedBlockClientIds.every(\n\t\t\t( id ) => getBlockMode( id ) === 'visual'\n\t\t);\n\t\tconst _isUsingBindings = selectedBlockClientIds.every(\n\t\t\t( clientId ) =>\n\t\t\t\t!! getBlockAttributes( clientId )?.metadata?.bindings\n\t\t);\n\n\t\tconst _hasParentPattern = selectedBlockClientIds.every(\n\t\t\t( clientId ) =>\n\t\t\t\tgetBlockParentsByBlockName( clientId, 'core/block', true )\n\t\t\t\t\t.length > 0\n\t\t);\n\n\t\t// If one or more selected blocks are locked, do not show the BlockGroupToolbar.\n\t\tconst _hasTemplateLock = selectedBlockClientIds.some(\n\t\t\t( id ) => getTemplateLock( id ) === 'contentOnly'\n\t\t);\n\t\treturn {\n\t\t\tblockClientId: selectedBlockClientId,\n\t\t\tblockClientIds: selectedBlockClientIds,\n\t\t\tisDefaultEditingMode: _isDefaultEditingMode,\n\t\t\tblockType: selectedBlockClientId && getBlockType( _blockName ),\n\t\t\tshouldShowVisualToolbar: isValid && isVisual,\n\t\t\ttoolbarKey: `${ selectedBlockClientId }${ firstParentClientId }`,\n\t\t\tshowParentSelector:\n\t\t\t\t! isZoomOutMode() &&\n\t\t\t\tparentBlockType &&\n\t\t\t\tgetBlockEditingMode( firstParentClientId ) === 'default' &&\n\t\t\t\thasBlockSupport(\n\t\t\t\t\tparentBlockType,\n\t\t\t\t\t'__experimentalParentSelector',\n\t\t\t\t\ttrue\n\t\t\t\t) &&\n\t\t\t\tselectedBlockClientIds.length === 1 &&\n\t\t\t\t_isDefaultEditingMode,\n\t\t\tisUsingBindings: _isUsingBindings,\n\t\t\thasParentPattern: _hasParentPattern,\n\t\t\thasContentOnlyLocking: _hasTemplateLock,\n\t\t\tshowShuffleButton: isZoomOutMode(),\n\t\t\tshowSlots: ! isZoomOutMode(),\n\t\t\tshowGroupButtons: ! isZoomOutMode(),\n\t\t\tshowLockButtons: ! isZoomOutMode(),\n\t\t};\n\t}, [] );\n\n\tconst toolbarWrapperRef = useRef( null );\n\n\t// Handles highlighting the current block outline on hover or focus of the\n\t// block type toolbar area.\n\tconst nodeRef = useRef();\n\tconst showHoveredOrFocusedGestures = useShowHoveredOrFocusedGestures( {\n\t\tref: nodeRef,\n\t} );\n\n\tconst isLargeViewport = ! useViewportMatch( 'medium', '<' );\n\n\tconst hasBlockToolbar = useHasBlockToolbar();\n\tif ( ! hasBlockToolbar ) {\n\t\treturn null;\n\t}\n\n\tconst isMultiToolbar = blockClientIds.length > 1;\n\tconst isSynced =\n\t\tisReusableBlock( blockType ) || isTemplatePart( blockType );\n\n\t// Shifts the toolbar to make room for the parent block selector.\n\tconst classes = clsx( 'block-editor-block-contextual-toolbar', {\n\t\t'has-parent': showParentSelector,\n\t} );\n\n\tconst innerClasses = clsx( 'block-editor-block-toolbar', {\n\t\t'is-synced': isSynced,\n\t\t'is-connected': isUsingBindings,\n\t} );\n\n\treturn (\n\t\t<NavigableToolbar\n\t\t\tfocusEditorOnEscape\n\t\t\tclassName={ classes }\n\t\t\t/* translators: accessibility text for the block toolbar */\n\t\t\taria-label={ __( 'Block tools' ) }\n\t\t\t// The variant is applied as \"toolbar\" when undefined, which is the black border style of the dropdown from the toolbar popover.\n\t\t\tvariant={ variant === 'toolbar' ? undefined : variant }\n\t\t\tfocusOnMount={ focusOnMount }\n\t\t\t__experimentalInitialIndex={ __experimentalInitialIndex }\n\t\t\t__experimentalOnIndexChange={ __experimentalOnIndexChange }\n\t\t\t// Resets the index whenever the active block changes so\n\t\t\t// this is not persisted. See https://github.com/WordPress/gutenberg/pull/25760#issuecomment-717906169\n\t\t\tkey={ toolbarKey }\n\t\t>\n\t\t\t<div ref={ toolbarWrapperRef } className={ innerClasses }>\n\t\t\t\t{ showParentSelector && ! isMultiToolbar && isLargeViewport && (\n\t\t\t\t\t<BlockParentSelector />\n\t\t\t\t) }\n\t\t\t\t{ ( shouldShowVisualToolbar || isMultiToolbar ) &&\n\t\t\t\t\t! hasParentPattern && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tref={ nodeRef }\n\t\t\t\t\t\t\t{ ...showHoveredOrFocusedGestures }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToolbarGroup className=\"block-editor-block-toolbar__block-controls\">\n\t\t\t\t\t\t\t\t<BlockSwitcher\n\t\t\t\t\t\t\t\t\tclientIds={ blockClientIds }\n\t\t\t\t\t\t\t\t\tdisabled={ ! isDefaultEditingMode }\n\t\t\t\t\t\t\t\t\tisUsingBindings={ isUsingBindings }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{ ! isMultiToolbar && showLockButtons && (\n\t\t\t\t\t\t\t\t\t<BlockLockToolbar\n\t\t\t\t\t\t\t\t\t\tclientId={ blockClientId }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t<BlockMover\n\t\t\t\t\t\t\t\t\tclientIds={ blockClientIds }\n\t\t\t\t\t\t\t\t\thideDragHandle={ hideDragHandle }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) }\n\t\t\t\t{ ! hasContentOnlyLocking &&\n\t\t\t\t\tshouldShowVisualToolbar &&\n\t\t\t\t\tisMultiToolbar &&\n\t\t\t\t\tshowGroupButtons && <BlockGroupToolbar /> }\n\t\t\t\t{ showShuffleButton && (\n\t\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t\t<Shuffle\n\t\t\t\t\t\t\tclientId={ blockClientIds[ 0 ] }\n\t\t\t\t\t\t\tas={ ToolbarButton }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t) }\n\t\t\t\t{ shouldShowVisualToolbar && showSlots && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\tgroup=\"parent\"\n\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\tgroup=\"block\"\n\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BlockControls.Slot className=\"block-editor-block-toolbar__slot\" />\n\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\tgroup=\"inline\"\n\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\tgroup=\"other\"\n\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<__unstableBlockNameContext.Provider\n\t\t\t\t\t\t\tvalue={ blockType?.name }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<__unstableBlockToolbarLastItem.Slot />\n\t\t\t\t\t\t</__unstableBlockNameContext.Provider>\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t\t<BlockEditVisuallyButton clientIds={ blockClientIds } />\n\t\t\t\t{ isDefaultEditingMode && (\n\t\t\t\t\t<BlockSettingsMenu clientIds={ blockClientIds } />\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</NavigableToolbar>\n\t);\n}\n\n/**\n * Renders the block toolbar.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-toolbar/README.md\n *\n * @param {Object} props Components props.\n * @param {boolean} props.hideDragHandle Show or hide the Drag Handle for drag and drop functionality.\n * @param {string} props.variant Style variant of the toolbar, also passed to the Dropdowns rendered from Block Toolbar Buttons.\n */\nexport default function BlockToolbar( { hideDragHandle, variant } ) {\n\treturn (\n\t\t<PrivateBlockToolbar\n\t\t\thideDragHandle={ hideDragHandle }\n\t\t\tvariant={ variant }\n\t\t\tfocusOnMount={ undefined }\n\t\t\t__experimentalInitialIndex={ undefined }\n\t\t\t__experimentalOnIndexChange={ undefined }\n\t\t/>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -17,7 +17,7 @@ import { useHasAnyBlockControls } from '../block-controls/use-has-block-controls
17
17
  export function useHasBlockToolbar() {
18
18
  const {
19
19
  isToolbarEnabled,
20
- isDefaultEditingMode
20
+ isBlockDisabled
21
21
  } = useSelect(select => {
22
22
  const {
23
23
  getBlockEditingMode,
@@ -32,11 +32,11 @@ export function useHasBlockToolbar() {
32
32
  const blockType = selectedBlockClientId && getBlockType(getBlockName(selectedBlockClientId));
33
33
  return {
34
34
  isToolbarEnabled: blockType && hasBlockSupport(blockType, '__experimentalToolbar', true),
35
- isDefaultEditingMode: getBlockEditingMode(selectedBlockClientId) === 'default'
35
+ isBlockDisabled: getBlockEditingMode(selectedBlockClientId) === 'disabled'
36
36
  };
37
37
  }, []);
38
38
  const hasAnyBlockControls = useHasAnyBlockControls();
39
- if (!isToolbarEnabled || !isDefaultEditingMode && !hasAnyBlockControls) {
39
+ if (!isToolbarEnabled || isBlockDisabled && !hasAnyBlockControls) {
40
40
  return false;
41
41
  }
42
42
  return true;
@@ -1 +1 @@
1
- {"version":3,"names":["useSelect","getBlockType","hasBlockSupport","store","blockEditorStore","useHasAnyBlockControls","useHasBlockToolbar","isToolbarEnabled","isDefaultEditingMode","select","getBlockEditingMode","getBlockName","getBlockSelectionStart","selectedBlockClientId","blockType","hasAnyBlockControls"],"sources":["@wordpress/block-editor/src/components/block-toolbar/use-has-block-toolbar.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { getBlockType, hasBlockSupport } from '@wordpress/blocks';\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useHasAnyBlockControls } from '../block-controls/use-has-block-controls';\n\n/**\n * Returns true if the block toolbar should be shown.\n *\n * @return {boolean} Whether the block toolbar component will be rendered.\n */\nexport function useHasBlockToolbar() {\n\tconst { isToolbarEnabled, isDefaultEditingMode } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockSelectionStart,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\t// we only care about the 1st selected block\n\t\t\t// for the toolbar, so we use getBlockSelectionStart\n\t\t\t// instead of getSelectedBlockClientIds\n\t\t\tconst selectedBlockClientId = getBlockSelectionStart();\n\n\t\t\tconst blockType =\n\t\t\t\tselectedBlockClientId &&\n\t\t\t\tgetBlockType( getBlockName( selectedBlockClientId ) );\n\n\t\t\treturn {\n\t\t\t\tisToolbarEnabled:\n\t\t\t\t\tblockType &&\n\t\t\t\t\thasBlockSupport( blockType, '__experimentalToolbar', true ),\n\t\t\t\tisDefaultEditingMode:\n\t\t\t\t\tgetBlockEditingMode( selectedBlockClientId ) === 'default',\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tconst hasAnyBlockControls = useHasAnyBlockControls();\n\n\tif (\n\t\t! isToolbarEnabled ||\n\t\t( ! isDefaultEditingMode && ! hasAnyBlockControls )\n\t) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAS,QAAQ,iBAAiB;AAC3C,SAASC,YAAY,EAAEC,eAAe,QAAQ,mBAAmB;AACjE;AACA;AACA;AACA,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,aAAa;AACvD,SAASC,sBAAsB,QAAQ,0CAA0C;;AAEjF;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAA,EAAG;EACpC,MAAM;IAAEC,gBAAgB;IAAEC;EAAqB,CAAC,GAAGR,SAAS,CACzDS,MAAM,IAAM;IACb,MAAM;MACLC,mBAAmB;MACnBC,YAAY;MACZC;IACD,CAAC,GAAGH,MAAM,CAAEL,gBAAiB,CAAC;;IAE9B;IACA;IACA;IACA,MAAMS,qBAAqB,GAAGD,sBAAsB,CAAC,CAAC;IAEtD,MAAME,SAAS,GACdD,qBAAqB,IACrBZ,YAAY,CAAEU,YAAY,CAAEE,qBAAsB,CAAE,CAAC;IAEtD,OAAO;MACNN,gBAAgB,EACfO,SAAS,IACTZ,eAAe,CAAEY,SAAS,EAAE,uBAAuB,EAAE,IAAK,CAAC;MAC5DN,oBAAoB,EACnBE,mBAAmB,CAAEG,qBAAsB,CAAC,KAAK;IACnD,CAAC;EACF,CAAC,EACD,EACD,CAAC;EAED,MAAME,mBAAmB,GAAGV,sBAAsB,CAAC,CAAC;EAEpD,IACC,CAAEE,gBAAgB,IAChB,CAAEC,oBAAoB,IAAI,CAAEO,mBAAqB,EAClD;IACD,OAAO,KAAK;EACb;EAEA,OAAO,IAAI;AACZ","ignoreList":[]}
1
+ {"version":3,"names":["useSelect","getBlockType","hasBlockSupport","store","blockEditorStore","useHasAnyBlockControls","useHasBlockToolbar","isToolbarEnabled","isBlockDisabled","select","getBlockEditingMode","getBlockName","getBlockSelectionStart","selectedBlockClientId","blockType","hasAnyBlockControls"],"sources":["@wordpress/block-editor/src/components/block-toolbar/use-has-block-toolbar.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { getBlockType, hasBlockSupport } from '@wordpress/blocks';\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useHasAnyBlockControls } from '../block-controls/use-has-block-controls';\n\n/**\n * Returns true if the block toolbar should be shown.\n *\n * @return {boolean} Whether the block toolbar component will be rendered.\n */\nexport function useHasBlockToolbar() {\n\tconst { isToolbarEnabled, isBlockDisabled } = useSelect( ( select ) => {\n\t\tconst { getBlockEditingMode, getBlockName, getBlockSelectionStart } =\n\t\t\tselect( blockEditorStore );\n\n\t\t// we only care about the 1st selected block\n\t\t// for the toolbar, so we use getBlockSelectionStart\n\t\t// instead of getSelectedBlockClientIds\n\t\tconst selectedBlockClientId = getBlockSelectionStart();\n\n\t\tconst blockType =\n\t\t\tselectedBlockClientId &&\n\t\t\tgetBlockType( getBlockName( selectedBlockClientId ) );\n\n\t\treturn {\n\t\t\tisToolbarEnabled:\n\t\t\t\tblockType &&\n\t\t\t\thasBlockSupport( blockType, '__experimentalToolbar', true ),\n\t\t\tisBlockDisabled:\n\t\t\t\tgetBlockEditingMode( selectedBlockClientId ) === 'disabled',\n\t\t};\n\t}, [] );\n\n\tconst hasAnyBlockControls = useHasAnyBlockControls();\n\n\tif ( ! isToolbarEnabled || ( isBlockDisabled && ! hasAnyBlockControls ) ) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAS,QAAQ,iBAAiB;AAC3C,SAASC,YAAY,EAAEC,eAAe,QAAQ,mBAAmB;AACjE;AACA;AACA;AACA,SAASC,KAAK,IAAIC,gBAAgB,QAAQ,aAAa;AACvD,SAASC,sBAAsB,QAAQ,0CAA0C;;AAEjF;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAA,EAAG;EACpC,MAAM;IAAEC,gBAAgB;IAAEC;EAAgB,CAAC,GAAGR,SAAS,CAAIS,MAAM,IAAM;IACtE,MAAM;MAAEC,mBAAmB;MAAEC,YAAY;MAAEC;IAAuB,CAAC,GAClEH,MAAM,CAAEL,gBAAiB,CAAC;;IAE3B;IACA;IACA;IACA,MAAMS,qBAAqB,GAAGD,sBAAsB,CAAC,CAAC;IAEtD,MAAME,SAAS,GACdD,qBAAqB,IACrBZ,YAAY,CAAEU,YAAY,CAAEE,qBAAsB,CAAE,CAAC;IAEtD,OAAO;MACNN,gBAAgB,EACfO,SAAS,IACTZ,eAAe,CAAEY,SAAS,EAAE,uBAAuB,EAAE,IAAK,CAAC;MAC5DN,eAAe,EACdE,mBAAmB,CAAEG,qBAAsB,CAAC,KAAK;IACnD,CAAC;EACF,CAAC,EAAE,EAAG,CAAC;EAEP,MAAME,mBAAmB,GAAGV,sBAAsB,CAAC,CAAC;EAEpD,IAAK,CAAEE,gBAAgB,IAAMC,eAAe,IAAI,CAAEO,mBAAqB,EAAG;IACzE,OAAO,KAAK;EACb;EAEA,OAAO,IAAI;AACZ","ignoreList":[]}
@@ -17,7 +17,6 @@ import EmptyBlockInserter from './empty-block-inserter';
17
17
  import { InsertionPointOpenRef, default as InsertionPoint } from './insertion-point';
18
18
  import BlockToolbarPopover from './block-toolbar-popover';
19
19
  import BlockToolbarBreadcrumb from './block-toolbar-breadcrumb';
20
- import ZoomOutPopover from './zoom-out-popover';
21
20
  import { store as blockEditorStore } from '../../store';
22
21
  import usePopoverScroll from '../block-popover/use-popover-scroll';
23
22
  import ZoomOutModeInserters from './zoom-out-mode-inserters';
@@ -77,8 +76,7 @@ export default function BlockTools({
77
76
  const {
78
77
  showEmptyBlockSideInserter,
79
78
  showBreadcrumb,
80
- showBlockToolbarPopover,
81
- showZoomOutToolbar
79
+ showBlockToolbarPopover
82
80
  } = useShowBlockTools();
83
81
  const {
84
82
  clearSelectedBlock,
@@ -200,9 +198,6 @@ export default function BlockTools({
200
198
  ref: blockSelectionButtonRef,
201
199
  __unstableContentRef: __unstableContentRef,
202
200
  clientId: clientId
203
- }), showZoomOutToolbar && /*#__PURE__*/_jsx(ZoomOutPopover, {
204
- __unstableContentRef: __unstableContentRef,
205
- clientId: clientId
206
201
  }), !isZoomOutMode && !hasFixedToolbar && /*#__PURE__*/_jsx(Popover.Slot, {
207
202
  name: "block-toolbar",
208
203
  ref: blockToolbarRef