@wordpress/block-editor 15.13.2-next.v.202602241322.0 → 15.13.2

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 (175) hide show
  1. package/build/components/block-bindings/attribute-control.cjs +5 -2
  2. package/build/components/block-bindings/attribute-control.cjs.map +2 -2
  3. package/build/components/block-inspector/edit-contents.cjs +5 -4
  4. package/build/components/block-inspector/edit-contents.cjs.map +2 -2
  5. package/build/components/block-list/block-html.cjs +6 -2
  6. package/build/components/block-list/block-html.cjs.map +2 -2
  7. package/build/components/block-list/block.cjs +9 -1
  8. package/build/components/block-list/block.cjs.map +2 -2
  9. package/build/components/block-list/use-block-props/index.cjs +10 -1
  10. package/build/components/block-list/use-block-props/index.cjs.map +2 -2
  11. package/build/components/block-settings-menu-controls/index.cjs +1 -0
  12. package/build/components/block-settings-menu-controls/index.cjs.map +2 -2
  13. package/build/components/block-styles/index.cjs +7 -1
  14. package/build/components/block-styles/index.cjs.map +3 -3
  15. package/build/components/block-switcher/block-transformations-menu.cjs +2 -0
  16. package/build/components/block-switcher/block-transformations-menu.cjs.map +2 -2
  17. package/build/components/block-switcher/block-variation-transformations.cjs +2 -0
  18. package/build/components/block-switcher/block-variation-transformations.cjs.map +2 -2
  19. package/build/components/block-toolbar/block-toolbar-icon.cjs +1 -1
  20. package/build/components/block-toolbar/block-toolbar-icon.cjs.map +2 -2
  21. package/build/components/block-toolbar/index.cjs +8 -4
  22. package/build/components/block-toolbar/index.cjs.map +2 -2
  23. package/build/components/block-tools/index.cjs +4 -3
  24. package/build/components/block-tools/index.cjs.map +2 -2
  25. package/build/components/block-variation-transforms/index.cjs +11 -5
  26. package/build/components/block-variation-transforms/index.cjs.map +2 -2
  27. package/build/components/block-visibility/modal.cjs +2 -2
  28. package/build/components/block-visibility/modal.cjs.map +1 -1
  29. package/build/components/block-visibility/use-block-visibility.cjs +4 -3
  30. package/build/components/block-visibility/use-block-visibility.cjs.map +2 -2
  31. package/build/components/block-visibility/viewport-visibility-info.cjs +6 -1
  32. package/build/components/block-visibility/viewport-visibility-info.cjs.map +2 -2
  33. package/build/components/dimensions-tool/scale-tool.cjs +2 -2
  34. package/build/components/dimensions-tool/scale-tool.cjs.map +2 -2
  35. package/build/components/iframe/index.cjs +1 -3
  36. package/build/components/iframe/index.cjs.map +2 -2
  37. package/build/components/iframe/use-scale-canvas.cjs +0 -1
  38. package/build/components/iframe/use-scale-canvas.cjs.map +2 -2
  39. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.cjs +8 -4
  40. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.cjs.map +2 -2
  41. package/build/components/link-picker/link-preview.cjs +2 -1
  42. package/build/components/link-picker/link-preview.cjs.map +3 -3
  43. package/build/components/provider/index.cjs +23 -7
  44. package/build/components/provider/index.cjs.map +2 -2
  45. package/build/components/provider/use-media-upload-settings.cjs +1 -0
  46. package/build/components/provider/use-media-upload-settings.cjs.map +2 -2
  47. package/build/components/writing-flow/use-arrow-nav.cjs +1 -1
  48. package/build/components/writing-flow/use-arrow-nav.cjs.map +2 -2
  49. package/build/hooks/auto-inspector-controls.cjs +26 -2
  50. package/build/hooks/auto-inspector-controls.cjs.map +3 -3
  51. package/build/hooks/cross-origin-isolation.cjs +9 -75
  52. package/build/hooks/cross-origin-isolation.cjs.map +2 -2
  53. package/build/hooks/custom-css.cjs +26 -0
  54. package/build/hooks/custom-css.cjs.map +3 -3
  55. package/build/private-apis.cjs +1 -0
  56. package/build/private-apis.cjs.map +2 -2
  57. package/build/store/actions.cjs +0 -8
  58. package/build/store/actions.cjs.map +2 -2
  59. package/build/store/private-keys.cjs +3 -0
  60. package/build/store/private-keys.cjs.map +2 -2
  61. package/build/store/private-selectors.cjs +4 -3
  62. package/build/store/private-selectors.cjs.map +2 -2
  63. package/build/store/reducer.cjs +78 -74
  64. package/build/store/reducer.cjs.map +2 -2
  65. package/build/store/selectors.cjs +16 -14
  66. package/build/store/selectors.cjs.map +2 -2
  67. package/build-module/components/block-bindings/attribute-control.mjs +5 -2
  68. package/build-module/components/block-bindings/attribute-control.mjs.map +2 -2
  69. package/build-module/components/block-inspector/edit-contents.mjs +5 -4
  70. package/build-module/components/block-inspector/edit-contents.mjs.map +2 -2
  71. package/build-module/components/block-list/block-html.mjs +7 -3
  72. package/build-module/components/block-list/block-html.mjs.map +2 -2
  73. package/build-module/components/block-list/block.mjs +10 -2
  74. package/build-module/components/block-list/block.mjs.map +2 -2
  75. package/build-module/components/block-list/use-block-props/index.mjs +11 -2
  76. package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
  77. package/build-module/components/block-settings-menu-controls/index.mjs +1 -0
  78. package/build-module/components/block-settings-menu-controls/index.mjs.map +2 -2
  79. package/build-module/components/block-styles/index.mjs +7 -1
  80. package/build-module/components/block-styles/index.mjs.map +2 -2
  81. package/build-module/components/block-switcher/block-transformations-menu.mjs +2 -0
  82. package/build-module/components/block-switcher/block-transformations-menu.mjs.map +2 -2
  83. package/build-module/components/block-switcher/block-variation-transformations.mjs +2 -0
  84. package/build-module/components/block-switcher/block-variation-transformations.mjs.map +2 -2
  85. package/build-module/components/block-toolbar/block-toolbar-icon.mjs +1 -1
  86. package/build-module/components/block-toolbar/block-toolbar-icon.mjs.map +2 -2
  87. package/build-module/components/block-toolbar/index.mjs +8 -4
  88. package/build-module/components/block-toolbar/index.mjs.map +2 -2
  89. package/build-module/components/block-tools/index.mjs +4 -3
  90. package/build-module/components/block-tools/index.mjs.map +2 -2
  91. package/build-module/components/block-variation-transforms/index.mjs +11 -5
  92. package/build-module/components/block-variation-transforms/index.mjs.map +2 -2
  93. package/build-module/components/block-visibility/modal.mjs +2 -2
  94. package/build-module/components/block-visibility/modal.mjs.map +1 -1
  95. package/build-module/components/block-visibility/use-block-visibility.mjs +4 -3
  96. package/build-module/components/block-visibility/use-block-visibility.mjs.map +2 -2
  97. package/build-module/components/block-visibility/viewport-visibility-info.mjs +6 -1
  98. package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
  99. package/build-module/components/dimensions-tool/scale-tool.mjs +2 -2
  100. package/build-module/components/dimensions-tool/scale-tool.mjs.map +2 -2
  101. package/build-module/components/iframe/index.mjs +2 -9
  102. package/build-module/components/iframe/index.mjs.map +2 -2
  103. package/build-module/components/iframe/use-scale-canvas.mjs +0 -1
  104. package/build-module/components/iframe/use-scale-canvas.mjs.map +2 -2
  105. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.mjs +8 -4
  106. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.mjs.map +2 -2
  107. package/build-module/components/link-picker/link-preview.mjs +2 -1
  108. package/build-module/components/link-picker/link-preview.mjs.map +2 -2
  109. package/build-module/components/provider/index.mjs +23 -7
  110. package/build-module/components/provider/index.mjs.map +2 -2
  111. package/build-module/components/provider/use-media-upload-settings.mjs +1 -0
  112. package/build-module/components/provider/use-media-upload-settings.mjs.map +2 -2
  113. package/build-module/components/writing-flow/use-arrow-nav.mjs +1 -1
  114. package/build-module/components/writing-flow/use-arrow-nav.mjs.map +2 -2
  115. package/build-module/hooks/auto-inspector-controls.mjs +28 -4
  116. package/build-module/hooks/auto-inspector-controls.mjs.map +2 -2
  117. package/build-module/hooks/cross-origin-isolation.mjs +9 -75
  118. package/build-module/hooks/cross-origin-isolation.mjs.map +2 -2
  119. package/build-module/hooks/custom-css.mjs +28 -2
  120. package/build-module/hooks/custom-css.mjs.map +2 -2
  121. package/build-module/private-apis.mjs +3 -1
  122. package/build-module/private-apis.mjs.map +2 -2
  123. package/build-module/store/actions.mjs +0 -8
  124. package/build-module/store/actions.mjs.map +2 -2
  125. package/build-module/store/private-keys.mjs +2 -0
  126. package/build-module/store/private-keys.mjs.map +2 -2
  127. package/build-module/store/private-selectors.mjs +4 -3
  128. package/build-module/store/private-selectors.mjs.map +2 -2
  129. package/build-module/store/reducer.mjs +78 -73
  130. package/build-module/store/reducer.mjs.map +2 -2
  131. package/build-module/store/selectors.mjs +16 -14
  132. package/build-module/store/selectors.mjs.map +2 -2
  133. package/build-style/content-rtl.css +25 -0
  134. package/build-style/content.css +25 -0
  135. package/build-style/style-rtl.css +3 -0
  136. package/build-style/style.css +3 -0
  137. package/package.json +39 -39
  138. package/src/components/block-bindings/attribute-control.js +8 -3
  139. package/src/components/block-inspector/edit-contents.js +5 -3
  140. package/src/components/block-list/block-html.js +13 -3
  141. package/src/components/block-list/block.js +10 -1
  142. package/src/components/block-list/content.scss +35 -0
  143. package/src/components/block-list/use-block-props/index.js +11 -1
  144. package/src/components/block-settings-menu-controls/index.js +1 -0
  145. package/src/components/block-styles/index.js +7 -1
  146. package/src/components/block-switcher/block-transformations-menu.js +2 -0
  147. package/src/components/block-switcher/block-variation-transformations.js +2 -0
  148. package/src/components/block-toolbar/block-toolbar-icon.js +6 -1
  149. package/src/components/block-toolbar/index.js +7 -2
  150. package/src/components/block-tools/index.js +11 -4
  151. package/src/components/block-tools/style.scss +5 -0
  152. package/src/components/block-variation-transforms/index.js +41 -36
  153. package/src/components/block-visibility/use-block-visibility.js +4 -2
  154. package/src/components/block-visibility/viewport-visibility-info.js +8 -1
  155. package/src/components/dimensions-tool/scale-tool.js +2 -2
  156. package/src/components/iframe/index.js +2 -12
  157. package/src/components/iframe/use-scale-canvas.js +0 -1
  158. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +9 -5
  159. package/src/components/link-picker/link-preview.js +2 -1
  160. package/src/components/provider/index.js +49 -6
  161. package/src/components/provider/use-media-upload-settings.js +1 -0
  162. package/src/components/writing-flow/use-arrow-nav.js +9 -2
  163. package/src/hooks/auto-inspector-controls.js +31 -4
  164. package/src/hooks/cross-origin-isolation.js +10 -109
  165. package/src/hooks/custom-css.js +36 -2
  166. package/src/hooks/test/cross-origin-isolation.js +15 -42
  167. package/src/private-apis.js +2 -0
  168. package/src/store/actions.js +0 -8
  169. package/src/store/private-keys.js +1 -0
  170. package/src/store/private-selectors.js +6 -3
  171. package/src/store/reducer.js +119 -97
  172. package/src/store/selectors.js +59 -22
  173. package/src/store/test/private-selectors.js +67 -34
  174. package/src/store/test/reducer.js +545 -57
  175. package/src/store/test/selectors.js +611 -53
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/block-styles/index.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\nimport { debounce, useViewportMatch } from '@wordpress/compose';\nimport {\n\tButton,\n\t__experimentalTruncate as Truncate,\n\tPopover,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockStylesPreviewPanel from './preview-panel';\nimport useStylesForBlocks from './use-styles-for-block';\nimport { useToolsPanelDropdownMenuProps } from '../global-styles/utils';\nimport { getDefaultStyle } from './utils';\n\nconst noop = () => {};\n\n// Block Styles component for the Settings Sidebar.\nfunction BlockStyles( { clientId, onSwitch = noop, onHoverClassName = noop } ) {\n\tconst {\n\t\tonSelect,\n\t\tstylesToRender,\n\t\tactiveStyle,\n\t\tgenericPreviewBlock,\n\t\tclassName: previewClassName,\n\t} = useStylesForBlocks( {\n\t\tclientId,\n\t\tonSwitch,\n\t} );\n\tconst [ hoveredStyle, setHoveredStyle ] = useState( null );\n\tconst isMobileViewport = useViewportMatch( 'medium', '<' );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\tif ( ! stylesToRender || stylesToRender.length === 0 ) {\n\t\treturn null;\n\t}\n\n\tconst debouncedSetHoveredStyle = debounce( setHoveredStyle, 250 );\n\n\tconst onSelectStylePreview = ( style ) => {\n\t\tonSelect( style );\n\t\tonHoverClassName( null );\n\t\tsetHoveredStyle( null );\n\t\tdebouncedSetHoveredStyle.cancel();\n\t};\n\n\tconst styleItemHandler = ( item ) => {\n\t\tif ( hoveredStyle === item ) {\n\t\t\tdebouncedSetHoveredStyle.cancel();\n\t\t\treturn;\n\t\t}\n\t\tdebouncedSetHoveredStyle( item );\n\t\tonHoverClassName( item?.name ?? null );\n\t};\n\n\tconst defaultStyle = getDefaultStyle( stylesToRender );\n\n\tconst hasValue = () => {\n\t\treturn activeStyle?.name !== defaultStyle?.name;\n\t};\n\n\tconst onDeselect = () => {\n\t\tonSelectStylePreview( defaultStyle );\n\t};\n\n\treturn (\n\t\t<ToolsPanel\n\t\t\tlabel={ __( 'Styles' ) }\n\t\t\tresetAll={ onDeselect }\n\t\t\tpanelId={ clientId }\n\t\t\thasInnerWrapper\n\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t>\n\t\t\t<ToolsPanelItem\n\t\t\t\thasValue={ hasValue }\n\t\t\t\tlabel={ __( 'Variation' ) }\n\t\t\t\tonDeselect={ onDeselect }\n\t\t\t\tisShownByDefault\n\t\t\t\tpanelId={ clientId }\n\t\t\t>\n\t\t\t\t<div className=\"block-editor-block-styles\">\n\t\t\t\t\t<div className=\"block-editor-block-styles__variants\">\n\t\t\t\t\t\t{ stylesToRender.map( ( style ) => {\n\t\t\t\t\t\t\tconst buttonText = style.label || style.name;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t\t\t\t'block-editor-block-styles__item',\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t'is-active':\n\t\t\t\t\t\t\t\t\t\t\t\tactiveStyle.name === style.name,\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\tkey={ style.name }\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\tlabel={ buttonText }\n\t\t\t\t\t\t\t\t\tonMouseEnter={ () =>\n\t\t\t\t\t\t\t\t\t\tstyleItemHandler( style )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonFocus={ () => styleItemHandler( style ) }\n\t\t\t\t\t\t\t\t\tonMouseLeave={ () =>\n\t\t\t\t\t\t\t\t\t\tstyleItemHandler( null )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonBlur={ () => styleItemHandler( null ) }\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tonSelectStylePreview( style )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\taria-current={\n\t\t\t\t\t\t\t\t\t\tactiveStyle.name === style.name\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\t<Truncate\n\t\t\t\t\t\t\t\t\t\tnumberOfLines={ 1 }\n\t\t\t\t\t\t\t\t\t\tclassName=\"block-editor-block-styles__item-text\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ buttonText }\n\t\t\t\t\t\t\t\t\t</Truncate>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t</div>\n\t\t\t\t\t{ hoveredStyle && ! isMobileViewport && (\n\t\t\t\t\t\t<Popover\n\t\t\t\t\t\t\tplacement=\"left-start\"\n\t\t\t\t\t\t\toffset={ 34 }\n\t\t\t\t\t\t\tfocusOnMount={ false }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"block-editor-block-styles__preview-panel\"\n\t\t\t\t\t\t\t\tonMouseLeave={ () => styleItemHandler( null ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<BlockStylesPreviewPanel\n\t\t\t\t\t\t\t\t\tactiveStyle={ activeStyle }\n\t\t\t\t\t\t\t\t\tclassName={ previewClassName }\n\t\t\t\t\t\t\t\t\tgenericPreviewBlock={ genericPreviewBlock }\n\t\t\t\t\t\t\t\t\tstyle={ hoveredStyle }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Popover>\n\t\t\t\t\t) }\n\t\t\t\t</div>\n\t\t\t</ToolsPanelItem>\n\t\t</ToolsPanel>\n\t);\n}\n\nexport default BlockStyles;\n"],
5
- "mappings": "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",
6
- "names": ["import_utils", "useStylesForBlocks", "ToolsPanel", "ToolsPanelItem", "clsx", "Truncate", "BlockStylesPreviewPanel"]
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useState } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { debounce, useViewportMatch } from '@wordpress/compose';\nimport {\n\tButton,\n\t__experimentalTruncate as Truncate,\n\tPopover,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport BlockStylesPreviewPanel from './preview-panel';\nimport useStylesForBlocks from './use-styles-for-block';\nimport { useToolsPanelDropdownMenuProps } from '../global-styles/utils';\nimport { getDefaultStyle } from './utils';\nimport { store as blockEditorStore } from '../../store';\n\nconst noop = () => {};\n\n// Block Styles component for the Settings Sidebar.\nfunction BlockStyles( { clientId, onSwitch = noop, onHoverClassName = noop } ) {\n\tconst canEdit = useSelect(\n\t\t( select ) => select( blockEditorStore ).canEditBlock( clientId ),\n\t\t[ clientId ]\n\t);\n\tconst {\n\t\tonSelect,\n\t\tstylesToRender,\n\t\tactiveStyle,\n\t\tgenericPreviewBlock,\n\t\tclassName: previewClassName,\n\t} = useStylesForBlocks( {\n\t\tclientId,\n\t\tonSwitch,\n\t} );\n\tconst [ hoveredStyle, setHoveredStyle ] = useState( null );\n\tconst isMobileViewport = useViewportMatch( 'medium', '<' );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\tif ( ! canEdit || ! stylesToRender || stylesToRender.length === 0 ) {\n\t\treturn null;\n\t}\n\n\tconst debouncedSetHoveredStyle = debounce( setHoveredStyle, 250 );\n\n\tconst onSelectStylePreview = ( style ) => {\n\t\tonSelect( style );\n\t\tonHoverClassName( null );\n\t\tsetHoveredStyle( null );\n\t\tdebouncedSetHoveredStyle.cancel();\n\t};\n\n\tconst styleItemHandler = ( item ) => {\n\t\tif ( hoveredStyle === item ) {\n\t\t\tdebouncedSetHoveredStyle.cancel();\n\t\t\treturn;\n\t\t}\n\t\tdebouncedSetHoveredStyle( item );\n\t\tonHoverClassName( item?.name ?? null );\n\t};\n\n\tconst defaultStyle = getDefaultStyle( stylesToRender );\n\n\tconst hasValue = () => {\n\t\treturn activeStyle?.name !== defaultStyle?.name;\n\t};\n\n\tconst onDeselect = () => {\n\t\tonSelectStylePreview( defaultStyle );\n\t};\n\n\treturn (\n\t\t<ToolsPanel\n\t\t\tlabel={ __( 'Styles' ) }\n\t\t\tresetAll={ onDeselect }\n\t\t\tpanelId={ clientId }\n\t\t\thasInnerWrapper\n\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t>\n\t\t\t<ToolsPanelItem\n\t\t\t\thasValue={ hasValue }\n\t\t\t\tlabel={ __( 'Variation' ) }\n\t\t\t\tonDeselect={ onDeselect }\n\t\t\t\tisShownByDefault\n\t\t\t\tpanelId={ clientId }\n\t\t\t>\n\t\t\t\t<div className=\"block-editor-block-styles\">\n\t\t\t\t\t<div className=\"block-editor-block-styles__variants\">\n\t\t\t\t\t\t{ stylesToRender.map( ( style ) => {\n\t\t\t\t\t\t\tconst buttonText = style.label || style.name;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t\t\t\t'block-editor-block-styles__item',\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t'is-active':\n\t\t\t\t\t\t\t\t\t\t\t\tactiveStyle.name === style.name,\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\tkey={ style.name }\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\tlabel={ buttonText }\n\t\t\t\t\t\t\t\t\tonMouseEnter={ () =>\n\t\t\t\t\t\t\t\t\t\tstyleItemHandler( style )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonFocus={ () => styleItemHandler( style ) }\n\t\t\t\t\t\t\t\t\tonMouseLeave={ () =>\n\t\t\t\t\t\t\t\t\t\tstyleItemHandler( null )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonBlur={ () => styleItemHandler( null ) }\n\t\t\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\t\t\tonSelectStylePreview( style )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\taria-current={\n\t\t\t\t\t\t\t\t\t\tactiveStyle.name === style.name\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\t<Truncate\n\t\t\t\t\t\t\t\t\t\tnumberOfLines={ 1 }\n\t\t\t\t\t\t\t\t\t\tclassName=\"block-editor-block-styles__item-text\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ buttonText }\n\t\t\t\t\t\t\t\t\t</Truncate>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t</div>\n\t\t\t\t\t{ hoveredStyle && ! isMobileViewport && (\n\t\t\t\t\t\t<Popover\n\t\t\t\t\t\t\tplacement=\"left-start\"\n\t\t\t\t\t\t\toffset={ 34 }\n\t\t\t\t\t\t\tfocusOnMount={ false }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"block-editor-block-styles__preview-panel\"\n\t\t\t\t\t\t\t\tonMouseLeave={ () => styleItemHandler( null ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<BlockStylesPreviewPanel\n\t\t\t\t\t\t\t\t\tactiveStyle={ activeStyle }\n\t\t\t\t\t\t\t\t\tclassName={ previewClassName }\n\t\t\t\t\t\t\t\t\tgenericPreviewBlock={ genericPreviewBlock }\n\t\t\t\t\t\t\t\t\tstyle={ hoveredStyle }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Popover>\n\t\t\t\t\t) }\n\t\t\t\t</div>\n\t\t\t</ToolsPanelItem>\n\t\t</ToolsPanel>\n\t);\n}\n\nexport default BlockStyles;\n"],
5
+ "mappings": "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",
6
+ "names": ["import_utils", "blockEditorStore", "useStylesForBlocks", "ToolsPanel", "ToolsPanelItem", "clsx", "Truncate", "BlockStylesPreviewPanel"]
7
7
  }
@@ -161,6 +161,8 @@ function BlockTransformationItem({
161
161
  disabled: isDisabled,
162
162
  onMouseLeave: () => setHoveredTransformItemName(null),
163
163
  onMouseEnter: () => setHoveredTransformItemName(name),
164
+ onFocus: () => setHoveredTransformItemName(name),
165
+ onBlur: () => setHoveredTransformItemName(null),
164
166
  children: [
165
167
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_block_icon.default, { icon, showColors: true }),
166
168
  title
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/block-switcher/block-transformations-menu.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { MenuGroup, MenuItem } from '@wordpress/components';\nimport {\n\tgetBlockMenuDefaultClassName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport { useState, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport PreviewBlockPopover from './preview-block-popover';\nimport BlockVariationTransformations from './block-variation-transformations';\n\n/**\n * Helper hook to group transformations to display them in a specific order in the UI.\n * For now we group only priority content driven transformations(ex. paragraph -> heading).\n *\n * Later on we could also group 'layout' transformations(ex. paragraph -> group) and\n * display them in different sections.\n *\n * @param {Object[]} possibleBlockTransformations The available block transformations.\n * @return {Record<string, Object[]>} The grouped block transformations.\n */\nfunction useGroupedTransforms( possibleBlockTransformations ) {\n\tconst priorityContentTransformationBlocks = {\n\t\t'core/paragraph': 1,\n\t\t'core/heading': 2,\n\t\t'core/list': 3,\n\t\t'core/quote': 4,\n\t};\n\tconst transformations = useMemo( () => {\n\t\tconst priorityTextTransformsNames = Object.keys(\n\t\t\tpriorityContentTransformationBlocks\n\t\t);\n\t\tconst groupedPossibleTransforms = possibleBlockTransformations.reduce(\n\t\t\t( accumulator, item ) => {\n\t\t\t\tconst { name } = item;\n\t\t\t\tif ( priorityTextTransformsNames.includes( name ) ) {\n\t\t\t\t\taccumulator.priorityTextTransformations.push( item );\n\t\t\t\t} else {\n\t\t\t\t\taccumulator.restTransformations.push( item );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t},\n\t\t\t{ priorityTextTransformations: [], restTransformations: [] }\n\t\t);\n\t\t/**\n\t\t * If there is only one priority text transformation and it's a Quote,\n\t\t * is should move to the rest transformations. This is because Quote can\n\t\t * be a container for any block type, so in multi-block selection it will\n\t\t * always be suggested, even for non-text blocks.\n\t\t */\n\t\tif (\n\t\t\tgroupedPossibleTransforms.priorityTextTransformations.length ===\n\t\t\t\t1 &&\n\t\t\tgroupedPossibleTransforms.priorityTextTransformations[ 0 ].name ===\n\t\t\t\t'core/quote'\n\t\t) {\n\t\t\tconst singleQuote =\n\t\t\t\tgroupedPossibleTransforms.priorityTextTransformations.pop();\n\t\t\tgroupedPossibleTransforms.restTransformations.push( singleQuote );\n\t\t}\n\t\treturn groupedPossibleTransforms;\n\t}, [ possibleBlockTransformations ] );\n\n\t// Order the priority text transformations.\n\ttransformations.priorityTextTransformations.sort(\n\t\t( { name: currentName }, { name: nextName } ) => {\n\t\t\treturn priorityContentTransformationBlocks[ currentName ] <\n\t\t\t\tpriorityContentTransformationBlocks[ nextName ]\n\t\t\t\t? -1\n\t\t\t\t: 1;\n\t\t}\n\t);\n\treturn transformations;\n}\n\nconst BlockTransformationsMenu = ( {\n\tclassName,\n\tpossibleBlockTransformations,\n\tpossibleBlockVariationTransformations,\n\tonSelect,\n\tonSelectVariation,\n\tblocks,\n} ) => {\n\tconst [ hoveredTransformItemName, setHoveredTransformItemName ] =\n\t\tuseState();\n\n\tconst { priorityTextTransformations, restTransformations } =\n\t\tuseGroupedTransforms( possibleBlockTransformations );\n\t// We have to check if both content transformations(priority and rest) are set\n\t// in order to create a separate MenuGroup for them.\n\tconst hasBothContentTransformations =\n\t\tpriorityTextTransformations.length && restTransformations.length;\n\tconst restTransformItems = !! restTransformations.length && (\n\t\t<RestTransformationItems\n\t\t\trestTransformations={ restTransformations }\n\t\t\tonSelect={ onSelect }\n\t\t\tsetHoveredTransformItemName={ setHoveredTransformItemName }\n\t\t/>\n\t);\n\treturn (\n\t\t<>\n\t\t\t<MenuGroup label={ __( 'Transform to' ) } className={ className }>\n\t\t\t\t{ hoveredTransformItemName && (\n\t\t\t\t\t<PreviewBlockPopover\n\t\t\t\t\t\tblocks={ switchToBlockType(\n\t\t\t\t\t\t\tblocks,\n\t\t\t\t\t\t\thoveredTransformItemName\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ !! possibleBlockVariationTransformations?.length && (\n\t\t\t\t\t<BlockVariationTransformations\n\t\t\t\t\t\ttransformations={\n\t\t\t\t\t\t\tpossibleBlockVariationTransformations\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblocks={ blocks }\n\t\t\t\t\t\tonSelect={ onSelectVariation }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ priorityTextTransformations.map( ( item ) => (\n\t\t\t\t\t<BlockTransformationItem\n\t\t\t\t\t\tkey={ item.name }\n\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\t\tsetHoveredTransformItemName={\n\t\t\t\t\t\t\tsetHoveredTransformItemName\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t\t{ ! hasBothContentTransformations && restTransformItems }\n\t\t\t</MenuGroup>\n\t\t\t{ !! hasBothContentTransformations && (\n\t\t\t\t<MenuGroup className={ className }>\n\t\t\t\t\t{ restTransformItems }\n\t\t\t\t</MenuGroup>\n\t\t\t) }\n\t\t</>\n\t);\n};\n\nfunction RestTransformationItems( {\n\trestTransformations,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\treturn restTransformations.map( ( item ) => (\n\t\t<BlockTransformationItem\n\t\t\tkey={ item.name }\n\t\t\titem={ item }\n\t\t\tonSelect={ onSelect }\n\t\t\tsetHoveredTransformItemName={ setHoveredTransformItemName }\n\t\t/>\n\t) );\n}\n\nfunction BlockTransformationItem( {\n\titem,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\tconst { name, icon, title, isDisabled } = item;\n\treturn (\n\t\t<MenuItem\n\t\t\tclassName={ getBlockMenuDefaultClassName( name ) }\n\t\t\tonClick={ ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonSelect( name );\n\t\t\t} }\n\t\t\tdisabled={ isDisabled }\n\t\t\tonMouseLeave={ () => setHoveredTransformItemName( null ) }\n\t\t\tonMouseEnter={ () => setHoveredTransformItemName( name ) }\n\t\t>\n\t\t\t<BlockIcon icon={ icon } showColors />\n\t\t\t{ title }\n\t\t</MenuItem>\n\t);\n}\n\nexport default BlockTransformationsMenu;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { MenuGroup, MenuItem } from '@wordpress/components';\nimport {\n\tgetBlockMenuDefaultClassName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport { useState, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport PreviewBlockPopover from './preview-block-popover';\nimport BlockVariationTransformations from './block-variation-transformations';\n\n/**\n * Helper hook to group transformations to display them in a specific order in the UI.\n * For now we group only priority content driven transformations(ex. paragraph -> heading).\n *\n * Later on we could also group 'layout' transformations(ex. paragraph -> group) and\n * display them in different sections.\n *\n * @param {Object[]} possibleBlockTransformations The available block transformations.\n * @return {Record<string, Object[]>} The grouped block transformations.\n */\nfunction useGroupedTransforms( possibleBlockTransformations ) {\n\tconst priorityContentTransformationBlocks = {\n\t\t'core/paragraph': 1,\n\t\t'core/heading': 2,\n\t\t'core/list': 3,\n\t\t'core/quote': 4,\n\t};\n\tconst transformations = useMemo( () => {\n\t\tconst priorityTextTransformsNames = Object.keys(\n\t\t\tpriorityContentTransformationBlocks\n\t\t);\n\t\tconst groupedPossibleTransforms = possibleBlockTransformations.reduce(\n\t\t\t( accumulator, item ) => {\n\t\t\t\tconst { name } = item;\n\t\t\t\tif ( priorityTextTransformsNames.includes( name ) ) {\n\t\t\t\t\taccumulator.priorityTextTransformations.push( item );\n\t\t\t\t} else {\n\t\t\t\t\taccumulator.restTransformations.push( item );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t},\n\t\t\t{ priorityTextTransformations: [], restTransformations: [] }\n\t\t);\n\t\t/**\n\t\t * If there is only one priority text transformation and it's a Quote,\n\t\t * is should move to the rest transformations. This is because Quote can\n\t\t * be a container for any block type, so in multi-block selection it will\n\t\t * always be suggested, even for non-text blocks.\n\t\t */\n\t\tif (\n\t\t\tgroupedPossibleTransforms.priorityTextTransformations.length ===\n\t\t\t\t1 &&\n\t\t\tgroupedPossibleTransforms.priorityTextTransformations[ 0 ].name ===\n\t\t\t\t'core/quote'\n\t\t) {\n\t\t\tconst singleQuote =\n\t\t\t\tgroupedPossibleTransforms.priorityTextTransformations.pop();\n\t\t\tgroupedPossibleTransforms.restTransformations.push( singleQuote );\n\t\t}\n\t\treturn groupedPossibleTransforms;\n\t}, [ possibleBlockTransformations ] );\n\n\t// Order the priority text transformations.\n\ttransformations.priorityTextTransformations.sort(\n\t\t( { name: currentName }, { name: nextName } ) => {\n\t\t\treturn priorityContentTransformationBlocks[ currentName ] <\n\t\t\t\tpriorityContentTransformationBlocks[ nextName ]\n\t\t\t\t? -1\n\t\t\t\t: 1;\n\t\t}\n\t);\n\treturn transformations;\n}\n\nconst BlockTransformationsMenu = ( {\n\tclassName,\n\tpossibleBlockTransformations,\n\tpossibleBlockVariationTransformations,\n\tonSelect,\n\tonSelectVariation,\n\tblocks,\n} ) => {\n\tconst [ hoveredTransformItemName, setHoveredTransformItemName ] =\n\t\tuseState();\n\n\tconst { priorityTextTransformations, restTransformations } =\n\t\tuseGroupedTransforms( possibleBlockTransformations );\n\t// We have to check if both content transformations(priority and rest) are set\n\t// in order to create a separate MenuGroup for them.\n\tconst hasBothContentTransformations =\n\t\tpriorityTextTransformations.length && restTransformations.length;\n\tconst restTransformItems = !! restTransformations.length && (\n\t\t<RestTransformationItems\n\t\t\trestTransformations={ restTransformations }\n\t\t\tonSelect={ onSelect }\n\t\t\tsetHoveredTransformItemName={ setHoveredTransformItemName }\n\t\t/>\n\t);\n\treturn (\n\t\t<>\n\t\t\t<MenuGroup label={ __( 'Transform to' ) } className={ className }>\n\t\t\t\t{ hoveredTransformItemName && (\n\t\t\t\t\t<PreviewBlockPopover\n\t\t\t\t\t\tblocks={ switchToBlockType(\n\t\t\t\t\t\t\tblocks,\n\t\t\t\t\t\t\thoveredTransformItemName\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ !! possibleBlockVariationTransformations?.length && (\n\t\t\t\t\t<BlockVariationTransformations\n\t\t\t\t\t\ttransformations={\n\t\t\t\t\t\t\tpossibleBlockVariationTransformations\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblocks={ blocks }\n\t\t\t\t\t\tonSelect={ onSelectVariation }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ priorityTextTransformations.map( ( item ) => (\n\t\t\t\t\t<BlockTransformationItem\n\t\t\t\t\t\tkey={ item.name }\n\t\t\t\t\t\titem={ item }\n\t\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\t\tsetHoveredTransformItemName={\n\t\t\t\t\t\t\tsetHoveredTransformItemName\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t\t{ ! hasBothContentTransformations && restTransformItems }\n\t\t\t</MenuGroup>\n\t\t\t{ !! hasBothContentTransformations && (\n\t\t\t\t<MenuGroup className={ className }>\n\t\t\t\t\t{ restTransformItems }\n\t\t\t\t</MenuGroup>\n\t\t\t) }\n\t\t</>\n\t);\n};\n\nfunction RestTransformationItems( {\n\trestTransformations,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\treturn restTransformations.map( ( item ) => (\n\t\t<BlockTransformationItem\n\t\t\tkey={ item.name }\n\t\t\titem={ item }\n\t\t\tonSelect={ onSelect }\n\t\t\tsetHoveredTransformItemName={ setHoveredTransformItemName }\n\t\t/>\n\t) );\n}\n\nfunction BlockTransformationItem( {\n\titem,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\tconst { name, icon, title, isDisabled } = item;\n\treturn (\n\t\t<MenuItem\n\t\t\tclassName={ getBlockMenuDefaultClassName( name ) }\n\t\t\tonClick={ ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonSelect( name );\n\t\t\t} }\n\t\t\tdisabled={ isDisabled }\n\t\t\tonMouseLeave={ () => setHoveredTransformItemName( null ) }\n\t\t\tonMouseEnter={ () => setHoveredTransformItemName( name ) }\n\t\t\tonFocus={ () => setHoveredTransformItemName( name ) }\n\t\t\tonBlur={ () => setHoveredTransformItemName( null ) }\n\t\t>\n\t\t\t<BlockIcon icon={ icon } showColors />\n\t\t\t{ title }\n\t\t</MenuItem>\n\t);\n}\n\nexport default BlockTransformationsMenu;\n"],
5
+ "mappings": "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",
6
6
  "names": ["PreviewBlockPopover", "BlockVariationTransformations", "BlockIcon"]
7
7
  }
@@ -118,6 +118,8 @@ function BlockVariationTransformationItem({
118
118
  },
119
119
  onMouseLeave: () => setHoveredTransformItemName(null),
120
120
  onMouseEnter: () => setHoveredTransformItemName(name),
121
+ onFocus: () => setHoveredTransformItemName(name),
122
+ onBlur: () => setHoveredTransformItemName(null),
121
123
  children: [
122
124
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_block_icon.default, { icon, showColors: true }),
123
125
  title
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/block-switcher/block-variation-transformations.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport {\n\tgetBlockMenuDefaultClassName,\n\tcloneBlock,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useState, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockIcon from '../block-icon';\nimport PreviewBlockPopover from './preview-block-popover';\n\nconst EMPTY_OBJECT = {};\n\nexport function useBlockVariationTransforms( { clientIds, blocks } ) {\n\tconst { activeBlockVariation, blockVariationTransformations } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes, canRemoveBlocks } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst { getActiveBlockVariation, getBlockVariations } =\n\t\t\t\tselect( blocksStore );\n\n\t\t\tconst canRemove = canRemoveBlocks( clientIds );\n\t\t\t// Only handle single selected blocks for now.\n\t\t\tif ( blocks.length !== 1 || ! canRemove ) {\n\t\t\t\treturn EMPTY_OBJECT;\n\t\t\t}\n\t\t\tconst [ firstBlock ] = blocks;\n\t\t\treturn {\n\t\t\t\tblockVariationTransformations: getBlockVariations(\n\t\t\t\t\tfirstBlock.name,\n\t\t\t\t\t'transform'\n\t\t\t\t),\n\t\t\t\tactiveBlockVariation: getActiveBlockVariation(\n\t\t\t\t\tfirstBlock.name,\n\t\t\t\t\tgetBlockAttributes( firstBlock.clientId )\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientIds, blocks ]\n\t);\n\tconst transformations = useMemo( () => {\n\t\treturn blockVariationTransformations?.filter(\n\t\t\t( { name } ) => name !== activeBlockVariation?.name\n\t\t);\n\t}, [ blockVariationTransformations, activeBlockVariation ] );\n\treturn transformations;\n}\n\nconst BlockVariationTransformations = ( {\n\ttransformations,\n\tonSelect,\n\tblocks,\n} ) => {\n\tconst [ hoveredTransformItemName, setHoveredTransformItemName ] =\n\t\tuseState();\n\treturn (\n\t\t<>\n\t\t\t{ hoveredTransformItemName && (\n\t\t\t\t<PreviewBlockPopover\n\t\t\t\t\tblocks={ cloneBlock(\n\t\t\t\t\t\tblocks[ 0 ],\n\t\t\t\t\t\ttransformations.find(\n\t\t\t\t\t\t\t( { name } ) => name === hoveredTransformItemName\n\t\t\t\t\t\t).attributes\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ transformations?.map( ( item ) => (\n\t\t\t\t<BlockVariationTransformationItem\n\t\t\t\t\tkey={ item.name }\n\t\t\t\t\titem={ item }\n\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\tsetHoveredTransformItemName={ setHoveredTransformItemName }\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t</>\n\t);\n};\n\nfunction BlockVariationTransformationItem( {\n\titem,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\tconst { name, icon, title } = item;\n\treturn (\n\t\t<MenuItem\n\t\t\tclassName={ getBlockMenuDefaultClassName( name ) }\n\t\t\tonClick={ ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonSelect( name );\n\t\t\t} }\n\t\t\tonMouseLeave={ () => setHoveredTransformItemName( null ) }\n\t\t\tonMouseEnter={ () => setHoveredTransformItemName( name ) }\n\t\t>\n\t\t\t<BlockIcon icon={ icon } showColors />\n\t\t\t{ title }\n\t\t</MenuItem>\n\t);\n}\n\nexport default BlockVariationTransformations;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,wBAAyB;AACzB,oBAIO;AACP,kBAA0B;AAC1B,qBAAkC;AAKlC,mBAA0C;AAC1C,wBAAsB;AACtB,mCAAgC;AA+C9B;AA7CF,IAAM,eAAe,CAAC;AAEf,SAAS,4BAA6B,EAAE,WAAW,OAAO,GAAI;AACpE,QAAM,EAAE,sBAAsB,8BAA8B,QAAI;AAAA,IAC/D,CAAE,WAAY;AACb,YAAM,EAAE,oBAAoB,gBAAgB,IAC3C,OAAQ,aAAAA,KAAiB;AAC1B,YAAM,EAAE,yBAAyB,mBAAmB,IACnD,OAAQ,cAAAC,KAAY;AAErB,YAAM,YAAY,gBAAiB,SAAU;AAE7C,UAAK,OAAO,WAAW,KAAK,CAAE,WAAY;AACzC,eAAO;AAAA,MACR;AACA,YAAM,CAAE,UAAW,IAAI;AACvB,aAAO;AAAA,QACN,+BAA+B;AAAA,UAC9B,WAAW;AAAA,UACX;AAAA,QACD;AAAA,QACA,sBAAsB;AAAA,UACrB,WAAW;AAAA,UACX,mBAAoB,WAAW,QAAS;AAAA,QACzC;AAAA,MACD;AAAA,IACD;AAAA,IACA,CAAE,WAAW,MAAO;AAAA,EACrB;AACA,QAAM,sBAAkB,wBAAS,MAAM;AACtC,WAAO,+BAA+B;AAAA,MACrC,CAAE,EAAE,KAAK,MAAO,SAAS,sBAAsB;AAAA,IAChD;AAAA,EACD,GAAG,CAAE,+BAA+B,oBAAqB,CAAE;AAC3D,SAAO;AACR;AAEA,IAAM,gCAAgC,CAAE;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACD,MAAO;AACN,QAAM,CAAE,0BAA0B,2BAA4B,QAC7D,yBAAS;AACV,SACC,4EACG;AAAA,gCACD;AAAA,MAAC,6BAAAC;AAAA,MAAA;AAAA,QACA,YAAS;AAAA,UACR,OAAQ,CAAE;AAAA,UACV,gBAAgB;AAAA,YACf,CAAE,EAAE,KAAK,MAAO,SAAS;AAAA,UAC1B,EAAE;AAAA,QACH;AAAA;AAAA,IACD;AAAA,IAEC,iBAAiB,IAAK,CAAE,SACzB;AAAA,MAAC;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,MAHM,KAAK;AAAA,IAIZ,CACC;AAAA,KACH;AAEF;AAEA,SAAS,iCAAkC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM,EAAE,MAAM,MAAM,MAAM,IAAI;AAC9B,SACC;AAAA,IAAC;AAAA;AAAA,MACA,eAAY,4CAA8B,IAAK;AAAA,MAC/C,SAAU,CAAE,UAAW;AACtB,cAAM,eAAe;AACrB,iBAAU,IAAK;AAAA,MAChB;AAAA,MACA,cAAe,MAAM,4BAA6B,IAAK;AAAA,MACvD,cAAe,MAAM,4BAA6B,IAAK;AAAA,MAEvD;AAAA,oDAAC,kBAAAC,SAAA,EAAU,MAAc,YAAU,MAAC;AAAA,QAClC;AAAA;AAAA;AAAA,EACH;AAEF;AAEA,IAAO,0CAAQ;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { MenuItem } from '@wordpress/components';\nimport {\n\tgetBlockMenuDefaultClassName,\n\tcloneBlock,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { useSelect } from '@wordpress/data';\nimport { useState, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockIcon from '../block-icon';\nimport PreviewBlockPopover from './preview-block-popover';\n\nconst EMPTY_OBJECT = {};\n\nexport function useBlockVariationTransforms( { clientIds, blocks } ) {\n\tconst { activeBlockVariation, blockVariationTransformations } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockAttributes, canRemoveBlocks } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst { getActiveBlockVariation, getBlockVariations } =\n\t\t\t\tselect( blocksStore );\n\n\t\t\tconst canRemove = canRemoveBlocks( clientIds );\n\t\t\t// Only handle single selected blocks for now.\n\t\t\tif ( blocks.length !== 1 || ! canRemove ) {\n\t\t\t\treturn EMPTY_OBJECT;\n\t\t\t}\n\t\t\tconst [ firstBlock ] = blocks;\n\t\t\treturn {\n\t\t\t\tblockVariationTransformations: getBlockVariations(\n\t\t\t\t\tfirstBlock.name,\n\t\t\t\t\t'transform'\n\t\t\t\t),\n\t\t\t\tactiveBlockVariation: getActiveBlockVariation(\n\t\t\t\t\tfirstBlock.name,\n\t\t\t\t\tgetBlockAttributes( firstBlock.clientId )\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientIds, blocks ]\n\t);\n\tconst transformations = useMemo( () => {\n\t\treturn blockVariationTransformations?.filter(\n\t\t\t( { name } ) => name !== activeBlockVariation?.name\n\t\t);\n\t}, [ blockVariationTransformations, activeBlockVariation ] );\n\treturn transformations;\n}\n\nconst BlockVariationTransformations = ( {\n\ttransformations,\n\tonSelect,\n\tblocks,\n} ) => {\n\tconst [ hoveredTransformItemName, setHoveredTransformItemName ] =\n\t\tuseState();\n\treturn (\n\t\t<>\n\t\t\t{ hoveredTransformItemName && (\n\t\t\t\t<PreviewBlockPopover\n\t\t\t\t\tblocks={ cloneBlock(\n\t\t\t\t\t\tblocks[ 0 ],\n\t\t\t\t\t\ttransformations.find(\n\t\t\t\t\t\t\t( { name } ) => name === hoveredTransformItemName\n\t\t\t\t\t\t).attributes\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ transformations?.map( ( item ) => (\n\t\t\t\t<BlockVariationTransformationItem\n\t\t\t\t\tkey={ item.name }\n\t\t\t\t\titem={ item }\n\t\t\t\t\tonSelect={ onSelect }\n\t\t\t\t\tsetHoveredTransformItemName={ setHoveredTransformItemName }\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t</>\n\t);\n};\n\nfunction BlockVariationTransformationItem( {\n\titem,\n\tonSelect,\n\tsetHoveredTransformItemName,\n} ) {\n\tconst { name, icon, title } = item;\n\treturn (\n\t\t<MenuItem\n\t\t\tclassName={ getBlockMenuDefaultClassName( name ) }\n\t\t\tonClick={ ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonSelect( name );\n\t\t\t} }\n\t\t\tonMouseLeave={ () => setHoveredTransformItemName( null ) }\n\t\t\tonMouseEnter={ () => setHoveredTransformItemName( name ) }\n\t\t\tonFocus={ () => setHoveredTransformItemName( name ) }\n\t\t\tonBlur={ () => setHoveredTransformItemName( null ) }\n\t\t>\n\t\t\t<BlockIcon icon={ icon } showColors />\n\t\t\t{ title }\n\t\t</MenuItem>\n\t);\n}\n\nexport default BlockVariationTransformations;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,wBAAyB;AACzB,oBAIO;AACP,kBAA0B;AAC1B,qBAAkC;AAKlC,mBAA0C;AAC1C,wBAAsB;AACtB,mCAAgC;AA+C9B;AA7CF,IAAM,eAAe,CAAC;AAEf,SAAS,4BAA6B,EAAE,WAAW,OAAO,GAAI;AACpE,QAAM,EAAE,sBAAsB,8BAA8B,QAAI;AAAA,IAC/D,CAAE,WAAY;AACb,YAAM,EAAE,oBAAoB,gBAAgB,IAC3C,OAAQ,aAAAA,KAAiB;AAC1B,YAAM,EAAE,yBAAyB,mBAAmB,IACnD,OAAQ,cAAAC,KAAY;AAErB,YAAM,YAAY,gBAAiB,SAAU;AAE7C,UAAK,OAAO,WAAW,KAAK,CAAE,WAAY;AACzC,eAAO;AAAA,MACR;AACA,YAAM,CAAE,UAAW,IAAI;AACvB,aAAO;AAAA,QACN,+BAA+B;AAAA,UAC9B,WAAW;AAAA,UACX;AAAA,QACD;AAAA,QACA,sBAAsB;AAAA,UACrB,WAAW;AAAA,UACX,mBAAoB,WAAW,QAAS;AAAA,QACzC;AAAA,MACD;AAAA,IACD;AAAA,IACA,CAAE,WAAW,MAAO;AAAA,EACrB;AACA,QAAM,sBAAkB,wBAAS,MAAM;AACtC,WAAO,+BAA+B;AAAA,MACrC,CAAE,EAAE,KAAK,MAAO,SAAS,sBAAsB;AAAA,IAChD;AAAA,EACD,GAAG,CAAE,+BAA+B,oBAAqB,CAAE;AAC3D,SAAO;AACR;AAEA,IAAM,gCAAgC,CAAE;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACD,MAAO;AACN,QAAM,CAAE,0BAA0B,2BAA4B,QAC7D,yBAAS;AACV,SACC,4EACG;AAAA,gCACD;AAAA,MAAC,6BAAAC;AAAA,MAAA;AAAA,QACA,YAAS;AAAA,UACR,OAAQ,CAAE;AAAA,UACV,gBAAgB;AAAA,YACf,CAAE,EAAE,KAAK,MAAO,SAAS;AAAA,UAC1B,EAAE;AAAA,QACH;AAAA;AAAA,IACD;AAAA,IAEC,iBAAiB,IAAK,CAAE,SACzB;AAAA,MAAC;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,MAHM,KAAK;AAAA,IAIZ,CACC;AAAA,KACH;AAEF;AAEA,SAAS,iCAAkC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM,EAAE,MAAM,MAAM,MAAM,IAAI;AAC9B,SACC;AAAA,IAAC;AAAA;AAAA,MACA,eAAY,4CAA8B,IAAK;AAAA,MAC/C,SAAU,CAAE,UAAW;AACtB,cAAM,eAAe;AACrB,iBAAU,IAAK;AAAA,MAChB;AAAA,MACA,cAAe,MAAM,4BAA6B,IAAK;AAAA,MACvD,cAAe,MAAM,4BAA6B,IAAK;AAAA,MACvD,SAAU,MAAM,4BAA6B,IAAK;AAAA,MAClD,QAAS,MAAM,4BAA6B,IAAK;AAAA,MAEjD;AAAA,oDAAC,kBAAAC,SAAA,EAAU,MAAc,YAAU,MAAC;AAAA,QAClC;AAAA;AAAA;AAAA,EACH;AAEF;AAEA,IAAO,0CAAQ;",
6
6
  "names": ["blockEditorStore", "blocksStore", "PreviewBlockPopover", "BlockIcon"]
7
7
  }
@@ -86,7 +86,7 @@ function getBlockIconVariant({ select, clientIds }) {
86
86
  const _showPatternOverrides = hasPatternOverrides && hasParentPattern;
87
87
  if (_showBlockSwitcher) {
88
88
  return "switcher";
89
- } else if (isContentOnlyMode && hasBlockStyles && !hasPatternOverrides) {
89
+ } else if (isContentOnlyMode && hasBlockStyles && !hasPatternOverrides && canEdit) {
90
90
  return "styles-only";
91
91
  } else if (_showPatternOverrides) {
92
92
  return "pattern-overrides";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/block-toolbar/block-toolbar-icon.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { ToolbarButton } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport { copy, symbol } from '@wordpress/icons';\nimport { getBlockType, store as blocksStore } from '@wordpress/blocks';\nimport { store as preferencesStore } from '@wordpress/preferences';\n\n/**\n * Internal dependencies\n */\nimport BlockSwitcher from '../block-switcher';\nimport BlockIcon from '../block-icon';\nimport BlockStylesDropdown from './block-styles-dropdown';\nimport PatternOverridesDropdown from './pattern-overrides-dropdown';\nimport useBlockDisplayTitle from '../block-title/use-block-display-title';\nimport { store as blockEditorStore } from '../../store';\nimport { hasPatternOverridesDefaultBinding } from '../../utils/block-bindings';\nimport { unlock } from '../../lock-unlock';\n\nfunction getBlockIconVariant( { select, clientIds } ) {\n\tconst {\n\t\tgetBlockName,\n\t\tgetBlockAttributes,\n\t\tgetBlockParentsByBlockName,\n\t\tcanRemoveBlocks,\n\t\tgetTemplateLock,\n\t\tgetBlockEditingMode,\n\t\tcanEditBlock,\n\t} = unlock( select( blockEditorStore ) );\n\tconst { getBlockStyles } = select( blocksStore );\n\n\tconst hasTemplateLock = clientIds.some(\n\t\t( id ) => getTemplateLock( id ) === 'contentOnly'\n\t);\n\n\t// Calculate props only used in this function\n\tconst isSingleBlock = clientIds.length === 1;\n\tconst blockName = isSingleBlock && getBlockName( clientIds[ 0 ] );\n\tconst hasBlockStyles =\n\t\tisSingleBlock && !! getBlockStyles( blockName )?.length;\n\tconst hasPatternNameInSelection = clientIds.some(\n\t\t( id ) => !! getBlockAttributes( id )?.metadata?.patternName\n\t);\n\tconst hasPatternOverrides = clientIds.every( ( clientId ) =>\n\t\thasPatternOverridesDefaultBinding(\n\t\t\tgetBlockAttributes( clientId )?.metadata?.bindings\n\t\t)\n\t);\n\tconst hasParentPattern = clientIds.every(\n\t\t( clientId ) =>\n\t\t\tgetBlockParentsByBlockName( clientId, 'core/block', true ).length >\n\t\t\t0\n\t);\n\tconst canRemove = canRemoveBlocks( clientIds );\n\tconst canEdit = clientIds.every( ( clientId ) => canEditBlock( clientId ) );\n\tconst editingMode = getBlockEditingMode( clientIds[ 0 ] );\n\tconst isDefaultEditingMode = editingMode === 'default';\n\tconst isContentOnlyMode = editingMode === 'contentOnly';\n\tconst _hideTransformsForSections = hasPatternNameInSelection;\n\tconst _showBlockSwitcher =\n\t\t! _hideTransformsForSections &&\n\t\tisDefaultEditingMode &&\n\t\t( hasBlockStyles || canRemove ) &&\n\t\t! hasTemplateLock &&\n\t\tcanEdit;\n\n\tconst _showPatternOverrides = hasPatternOverrides && hasParentPattern;\n\n\tif ( _showBlockSwitcher ) {\n\t\treturn 'switcher';\n\t} else if ( isContentOnlyMode && hasBlockStyles && ! hasPatternOverrides ) {\n\t\treturn 'styles-only';\n\t} else if ( _showPatternOverrides ) {\n\t\treturn 'pattern-overrides';\n\t}\n\n\treturn 'default';\n}\n\nfunction getBlockIcon( { select, clientIds } ) {\n\tconst { getBlockName, getBlockAttributes } = unlock(\n\t\tselect( blockEditorStore )\n\t);\n\n\tconst _isSingleBlock = clientIds.length === 1;\n\tconst firstClientId = clientIds[ 0 ];\n\tconst blockAttributes = getBlockAttributes( firstClientId );\n\tif ( _isSingleBlock && blockAttributes?.metadata?.patternName ) {\n\t\treturn symbol;\n\t}\n\n\tconst blockName = getBlockName( firstClientId );\n\tconst blockType = getBlockType( blockName );\n\n\tif ( _isSingleBlock ) {\n\t\tconst { getActiveBlockVariation } = select( blocksStore );\n\t\tconst match = getActiveBlockVariation( blockName, blockAttributes );\n\t\treturn match?.icon || blockType?.icon;\n\t}\n\n\tconst blockNames = clientIds.map( ( id ) => getBlockName( id ) );\n\tconst isSelectionOfSameType = new Set( blockNames ).size === 1;\n\treturn isSelectionOfSameType ? blockType?.icon : copy;\n}\n\nexport default function BlockToolbarIcon( { clientIds, isSynced } ) {\n\tconst { icon, showIconLabels, variant } = useSelect(\n\t\t( select ) => {\n\t\t\treturn {\n\t\t\t\ticon: getBlockIcon( { select, clientIds } ),\n\t\t\t\tshowIconLabels: select( preferencesStore ).get(\n\t\t\t\t\t'core',\n\t\t\t\t\t'showIconLabels'\n\t\t\t\t),\n\t\t\t\tvariant: getBlockIconVariant( {\n\t\t\t\t\tselect,\n\t\t\t\t\tclientIds,\n\t\t\t\t} ),\n\t\t\t};\n\t\t},\n\t\t[ clientIds ]\n\t);\n\n\tconst blockTitle = useBlockDisplayTitle( {\n\t\tclientId: clientIds?.[ 0 ],\n\t\tmaximumLength: 35,\n\t} );\n\n\tconst isSingleBlock = clientIds.length === 1;\n\tconst showBlockTitle = isSingleBlock && isSynced && ! showIconLabels;\n\tconst label = isSingleBlock ? blockTitle : __( 'Multiple blocks selected' );\n\t// Used to hide the block icon when the showIconLabels preference is enabled, or to display the template title when it's a template.\n\tconst text = showBlockTitle && blockTitle ? blockTitle : undefined;\n\n\tconst BlockIconElement = (\n\t\t<BlockIcon\n\t\t\tclassName=\"block-editor-block-toolbar__block-icon\"\n\t\t\ticon={ icon }\n\t\t/>\n\t);\n\n\tif ( variant === 'switcher' ) {\n\t\treturn (\n\t\t\t<BlockSwitcher\n\t\t\t\tclientIds={ clientIds }\n\t\t\t\tlabel={ label }\n\t\t\t\ttext={ text }\n\t\t\t>\n\t\t\t\t{ BlockIconElement }\n\t\t\t</BlockSwitcher>\n\t\t);\n\t}\n\n\tif ( variant === 'styles-only' ) {\n\t\treturn (\n\t\t\t<BlockStylesDropdown\n\t\t\t\tclientIds={ clientIds }\n\t\t\t\tlabel={ label }\n\t\t\t\ttext={ text }\n\t\t\t>\n\t\t\t\t{ BlockIconElement }\n\t\t\t</BlockStylesDropdown>\n\t\t);\n\t}\n\n\tif ( variant === 'pattern-overrides' ) {\n\t\treturn (\n\t\t\t<PatternOverridesDropdown\n\t\t\t\ticon={ BlockIconElement }\n\t\t\t\tclientIds={ clientIds }\n\t\t\t\tblockTitle={ blockTitle }\n\t\t\t\tlabel={ label }\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ToolbarButton\n\t\t\tdisabled\n\t\t\tclassName=\"block-editor-block-toolbar__block-icon-button\"\n\t\t\ttitle={ label }\n\t\t\ticon={ BlockIconElement }\n\t\t\ttext={ text }\n\t\t/>\n\t);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { ToolbarButton } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport { copy, symbol } from '@wordpress/icons';\nimport { getBlockType, store as blocksStore } from '@wordpress/blocks';\nimport { store as preferencesStore } from '@wordpress/preferences';\n\n/**\n * Internal dependencies\n */\nimport BlockSwitcher from '../block-switcher';\nimport BlockIcon from '../block-icon';\nimport BlockStylesDropdown from './block-styles-dropdown';\nimport PatternOverridesDropdown from './pattern-overrides-dropdown';\nimport useBlockDisplayTitle from '../block-title/use-block-display-title';\nimport { store as blockEditorStore } from '../../store';\nimport { hasPatternOverridesDefaultBinding } from '../../utils/block-bindings';\nimport { unlock } from '../../lock-unlock';\n\nfunction getBlockIconVariant( { select, clientIds } ) {\n\tconst {\n\t\tgetBlockName,\n\t\tgetBlockAttributes,\n\t\tgetBlockParentsByBlockName,\n\t\tcanRemoveBlocks,\n\t\tgetTemplateLock,\n\t\tgetBlockEditingMode,\n\t\tcanEditBlock,\n\t} = unlock( select( blockEditorStore ) );\n\tconst { getBlockStyles } = select( blocksStore );\n\n\tconst hasTemplateLock = clientIds.some(\n\t\t( id ) => getTemplateLock( id ) === 'contentOnly'\n\t);\n\n\t// Calculate props only used in this function\n\tconst isSingleBlock = clientIds.length === 1;\n\tconst blockName = isSingleBlock && getBlockName( clientIds[ 0 ] );\n\tconst hasBlockStyles =\n\t\tisSingleBlock && !! getBlockStyles( blockName )?.length;\n\tconst hasPatternNameInSelection = clientIds.some(\n\t\t( id ) => !! getBlockAttributes( id )?.metadata?.patternName\n\t);\n\tconst hasPatternOverrides = clientIds.every( ( clientId ) =>\n\t\thasPatternOverridesDefaultBinding(\n\t\t\tgetBlockAttributes( clientId )?.metadata?.bindings\n\t\t)\n\t);\n\tconst hasParentPattern = clientIds.every(\n\t\t( clientId ) =>\n\t\t\tgetBlockParentsByBlockName( clientId, 'core/block', true ).length >\n\t\t\t0\n\t);\n\tconst canRemove = canRemoveBlocks( clientIds );\n\tconst canEdit = clientIds.every( ( clientId ) => canEditBlock( clientId ) );\n\tconst editingMode = getBlockEditingMode( clientIds[ 0 ] );\n\tconst isDefaultEditingMode = editingMode === 'default';\n\tconst isContentOnlyMode = editingMode === 'contentOnly';\n\tconst _hideTransformsForSections = hasPatternNameInSelection;\n\tconst _showBlockSwitcher =\n\t\t! _hideTransformsForSections &&\n\t\tisDefaultEditingMode &&\n\t\t( hasBlockStyles || canRemove ) &&\n\t\t! hasTemplateLock &&\n\t\tcanEdit;\n\n\tconst _showPatternOverrides = hasPatternOverrides && hasParentPattern;\n\n\tif ( _showBlockSwitcher ) {\n\t\treturn 'switcher';\n\t} else if (\n\t\tisContentOnlyMode &&\n\t\thasBlockStyles &&\n\t\t! hasPatternOverrides &&\n\t\tcanEdit\n\t) {\n\t\treturn 'styles-only';\n\t} else if ( _showPatternOverrides ) {\n\t\treturn 'pattern-overrides';\n\t}\n\n\treturn 'default';\n}\n\nfunction getBlockIcon( { select, clientIds } ) {\n\tconst { getBlockName, getBlockAttributes } = unlock(\n\t\tselect( blockEditorStore )\n\t);\n\n\tconst _isSingleBlock = clientIds.length === 1;\n\tconst firstClientId = clientIds[ 0 ];\n\tconst blockAttributes = getBlockAttributes( firstClientId );\n\tif ( _isSingleBlock && blockAttributes?.metadata?.patternName ) {\n\t\treturn symbol;\n\t}\n\n\tconst blockName = getBlockName( firstClientId );\n\tconst blockType = getBlockType( blockName );\n\n\tif ( _isSingleBlock ) {\n\t\tconst { getActiveBlockVariation } = select( blocksStore );\n\t\tconst match = getActiveBlockVariation( blockName, blockAttributes );\n\t\treturn match?.icon || blockType?.icon;\n\t}\n\n\tconst blockNames = clientIds.map( ( id ) => getBlockName( id ) );\n\tconst isSelectionOfSameType = new Set( blockNames ).size === 1;\n\treturn isSelectionOfSameType ? blockType?.icon : copy;\n}\n\nexport default function BlockToolbarIcon( { clientIds, isSynced } ) {\n\tconst { icon, showIconLabels, variant } = useSelect(\n\t\t( select ) => {\n\t\t\treturn {\n\t\t\t\ticon: getBlockIcon( { select, clientIds } ),\n\t\t\t\tshowIconLabels: select( preferencesStore ).get(\n\t\t\t\t\t'core',\n\t\t\t\t\t'showIconLabels'\n\t\t\t\t),\n\t\t\t\tvariant: getBlockIconVariant( {\n\t\t\t\t\tselect,\n\t\t\t\t\tclientIds,\n\t\t\t\t} ),\n\t\t\t};\n\t\t},\n\t\t[ clientIds ]\n\t);\n\n\tconst blockTitle = useBlockDisplayTitle( {\n\t\tclientId: clientIds?.[ 0 ],\n\t\tmaximumLength: 35,\n\t} );\n\n\tconst isSingleBlock = clientIds.length === 1;\n\tconst showBlockTitle = isSingleBlock && isSynced && ! showIconLabels;\n\tconst label = isSingleBlock ? blockTitle : __( 'Multiple blocks selected' );\n\t// Used to hide the block icon when the showIconLabels preference is enabled, or to display the template title when it's a template.\n\tconst text = showBlockTitle && blockTitle ? blockTitle : undefined;\n\n\tconst BlockIconElement = (\n\t\t<BlockIcon\n\t\t\tclassName=\"block-editor-block-toolbar__block-icon\"\n\t\t\ticon={ icon }\n\t\t/>\n\t);\n\n\tif ( variant === 'switcher' ) {\n\t\treturn (\n\t\t\t<BlockSwitcher\n\t\t\t\tclientIds={ clientIds }\n\t\t\t\tlabel={ label }\n\t\t\t\ttext={ text }\n\t\t\t>\n\t\t\t\t{ BlockIconElement }\n\t\t\t</BlockSwitcher>\n\t\t);\n\t}\n\n\tif ( variant === 'styles-only' ) {\n\t\treturn (\n\t\t\t<BlockStylesDropdown\n\t\t\t\tclientIds={ clientIds }\n\t\t\t\tlabel={ label }\n\t\t\t\ttext={ text }\n\t\t\t>\n\t\t\t\t{ BlockIconElement }\n\t\t\t</BlockStylesDropdown>\n\t\t);\n\t}\n\n\tif ( variant === 'pattern-overrides' ) {\n\t\treturn (\n\t\t\t<PatternOverridesDropdown\n\t\t\t\ticon={ BlockIconElement }\n\t\t\t\tclientIds={ clientIds }\n\t\t\t\tblockTitle={ blockTitle }\n\t\t\t\tlabel={ label }\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ToolbarButton\n\t\t\tdisabled\n\t\t\tclassName=\"block-editor-block-toolbar__block-icon-button\"\n\t\t\ttitle={ label }\n\t\t\ticon={ BlockIconElement }\n\t\t\ttext={ text }\n\t\t/>\n\t);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["blockEditorStore", "blocksStore", "preferencesStore", "useBlockDisplayTitle", "BlockIcon", "BlockSwitcher", "BlockStylesDropdown", "PatternOverridesDropdown"]
7
7
  }
@@ -85,8 +85,10 @@ function PrivateBlockToolbar({
85
85
  showLockButtons,
86
86
  showBlockVisibilityButton,
87
87
  showSwitchSectionStyleButton,
88
- areSelectedBlocksHiddenOnViewport
88
+ areSelectedBlocksHiddenOnViewport,
89
+ canEdit
89
90
  } = (0, import_data.useSelect)((select) => {
91
+ const { canEditBlock } = select(import_store.store);
90
92
  const {
91
93
  getBlockName,
92
94
  getBlockMode,
@@ -126,7 +128,8 @@ function PrivateBlockToolbar({
126
128
  );
127
129
  const _isZoomOut = isZoomOut();
128
130
  const _isSectionBlock = isSectionBlock(selectedBlockClientId);
129
- const _showSwitchSectionStyleButton = _isZoomOut || _isSectionBlock;
131
+ const _canEditBlock = canEditBlock(selectedBlockClientId);
132
+ const _showSwitchSectionStyleButton = _canEditBlock && (_isZoomOut || _isSectionBlock);
130
133
  const _currentDeviceType = getSettings()?.[import_private_keys.deviceTypeKey]?.toLowerCase() || "desktop";
131
134
  const _areSelectedBlocksHiddenOnViewport = selectedBlockClientIds.length > 0 && selectedBlockClientIds.every(
132
135
  (id) => isBlockHiddenAtViewport(id, _currentDeviceType)
@@ -152,7 +155,8 @@ function PrivateBlockToolbar({
152
155
  showLockButtons: !_isZoomOut,
153
156
  showBlockVisibilityButton: !_isZoomOut,
154
157
  showSwitchSectionStyleButton: _showSwitchSectionStyleButton,
155
- areSelectedBlocksHiddenOnViewport: _areSelectedBlocksHiddenOnViewport
158
+ areSelectedBlocksHiddenOnViewport: _areSelectedBlocksHiddenOnViewport,
159
+ canEdit: _canEditBlock
156
160
  };
157
161
  }, []);
158
162
  const toolbarWrapperRef = (0, import_element.useRef)(null);
@@ -215,7 +219,7 @@ function PrivateBlockToolbar({
215
219
  )
216
220
  ] }) }),
217
221
  !areSelectedBlocksHiddenOnViewport && !hasContentOnlyLocking && shouldShowVisualToolbar && isMultiToolbar && showGroupButtons && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_convert_to_group_buttons.BlockGroupToolbar, {}),
218
- !isMultiToolbar && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_edit_section_button.default, { clientId: blockClientIds[0] }),
222
+ !isMultiToolbar && canEdit && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_edit_section_button.default, { clientId: blockClientIds[0] }),
219
223
  !areSelectedBlocksHiddenOnViewport && showShuffleButton && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_change_design.default, { clientId: blockClientIds[0] }),
220
224
  !areSelectedBlocksHiddenOnViewport && showSwitchSectionStyleButton && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_switch_section_style.default, { clientId: blockClientIds[0] }),
221
225
  !areSelectedBlocksHiddenOnViewport && shouldShowVisualToolbar && showSlots && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/block-toolbar/index.js"],
4
- "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 BlockControls from '../block-controls';\nimport __unstableBlockToolbarLastItem from './block-toolbar-last-item';\nimport BlockSettingsMenu from '../block-settings-menu';\nimport { BlockLockToolbar } from '../block-lock';\nimport { ViewportVisibilityToolbar } from '../block-visibility';\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 NavigableToolbar from '../navigable-toolbar';\nimport { useHasBlockToolbar } from './use-has-block-toolbar';\nimport ChangeDesign from './change-design';\nimport SwitchSectionStyle from './switch-section-style';\nimport EditSectionButton from './edit-section-button';\nimport { unlock } from '../../lock-unlock';\nimport { deviceTypeKey } from '../../store/private-keys';\nimport BlockToolbarIcon from './block-toolbar-icon';\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\tisSectionContainer,\n\t\thasContentOnlyLocking,\n\t\tshowShuffleButton,\n\t\tshowSlots,\n\t\tshowGroupButtons,\n\t\tshowLockButtons,\n\t\tshowBlockVisibilityButton,\n\t\tshowSwitchSectionStyleButton,\n\t\tareSelectedBlocksHiddenOnViewport,\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\tgetSettings,\n\t\t\tgetTemplateLock,\n\t\t\tgetParentSectionBlock,\n\t\t\tisZoomOut,\n\t\t\tisSectionBlock,\n\t\t\tisBlockHiddenAtViewport,\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 parentSection = getParentSectionBlock( selectedBlockClientId );\n\t\tconst parentClientId = parentSection ?? parents[ parents.length - 1 ];\n\t\tconst parentBlockName = getBlockName( parentClientId );\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\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\n\t\tconst _isZoomOut = isZoomOut();\n\t\tconst _isSectionBlock = isSectionBlock( selectedBlockClientId );\n\t\tconst _showSwitchSectionStyleButton = _isZoomOut || _isSectionBlock;\n\n\t\tconst _currentDeviceType =\n\t\t\tgetSettings()?.[ deviceTypeKey ]?.toLowerCase() || 'desktop';\n\t\tconst _areSelectedBlocksHiddenOnViewport =\n\t\t\tselectedBlockClientIds.length > 0 &&\n\t\t\tselectedBlockClientIds.every( ( id ) =>\n\t\t\t\tisBlockHiddenAtViewport( id, _currentDeviceType )\n\t\t\t);\n\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 }${ parentClientId }`,\n\t\t\tshowParentSelector:\n\t\t\t\t! _isZoomOut &&\n\t\t\t\tparentBlockType &&\n\t\t\t\teditingMode !== 'contentOnly' &&\n\t\t\t\tgetBlockEditingMode( parentClientId ) !== 'disabled' &&\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\tisUsingBindings: _isUsingBindings,\n\t\t\tisSectionContainer: _isSectionBlock,\n\t\t\thasContentOnlyLocking: _hasTemplateLock,\n\t\t\tshowShuffleButton: _isZoomOut,\n\t\t\tshowSlots: ! _isZoomOut,\n\t\t\tshowGroupButtons: ! _isZoomOut,\n\t\t\tshowLockButtons: ! _isZoomOut,\n\t\t\tshowBlockVisibilityButton: ! _isZoomOut,\n\t\t\tshowSwitchSectionStyleButton: _showSwitchSectionStyleButton,\n\t\t\tareSelectedBlocksHiddenOnViewport:\n\t\t\t\t_areSelectedBlocksHiddenOnViewport,\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<div ref={ nodeRef } { ...showHoveredOrFocusedGestures }>\n\t\t\t\t\t\t<ToolbarGroup className=\"block-editor-block-toolbar__block-controls\">\n\t\t\t\t\t\t\t<BlockToolbarIcon\n\t\t\t\t\t\t\t\tclientIds={ blockClientIds }\n\t\t\t\t\t\t\t\tisSynced={ isSynced }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{ isDefaultEditingMode &&\n\t\t\t\t\t\t\t\tshowBlockVisibilityButton && (\n\t\t\t\t\t\t\t\t\t<ViewportVisibilityToolbar\n\t\t\t\t\t\t\t\t\t\tclientIds={ blockClientIds }\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{ ! isMultiToolbar &&\n\t\t\t\t\t\t\t\tisDefaultEditingMode &&\n\t\t\t\t\t\t\t\tshowLockButtons && (\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<BlockMover\n\t\t\t\t\t\t\t\tclientIds={ blockClientIds }\n\t\t\t\t\t\t\t\thideDragHandle={ hideDragHandle }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t\t{ ! areSelectedBlocksHiddenOnViewport &&\n\t\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{ ! isMultiToolbar && (\n\t\t\t\t\t<EditSectionButton clientId={ blockClientIds[ 0 ] } />\n\t\t\t\t) }\n\t\t\t\t{ ! areSelectedBlocksHiddenOnViewport && showShuffleButton && (\n\t\t\t\t\t<ChangeDesign clientId={ blockClientIds[ 0 ] } />\n\t\t\t\t) }\n\t\t\t\t{ ! areSelectedBlocksHiddenOnViewport &&\n\t\t\t\t\tshowSwitchSectionStyleButton && (\n\t\t\t\t\t\t<SwitchSectionStyle clientId={ blockClientIds[ 0 ] } />\n\t\t\t\t\t) }\n\t\t\t\t{ ! areSelectedBlocksHiddenOnViewport &&\n\t\t\t\t\tshouldShowVisualToolbar &&\n\t\t\t\t\tshowSlots && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ ! isSectionContainer && (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\t\t\t\tgroup=\"parent\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\t\t\t\tgroup=\"block\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<BlockControls.Slot className=\"block-editor-block-toolbar__slot\" />\n\t\t\t\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\t\t\t\tgroup=\"inline\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\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) }\n\t\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\t\tgroup=\"other\"\n\t\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<__unstableBlockToolbarLastItem.Slot />\n\t\t\t\t\t\t</>\n\t\t\t\t\t) }\n\t\t\t\t<BlockEditVisuallyButton clientIds={ blockClientIds } />\n\t\t\t\t<BlockSettingsMenu clientIds={ blockClientIds } />\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"],
5
- "mappings": "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",
4
+ "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 BlockControls from '../block-controls';\nimport __unstableBlockToolbarLastItem from './block-toolbar-last-item';\nimport BlockSettingsMenu from '../block-settings-menu';\nimport { BlockLockToolbar } from '../block-lock';\nimport { ViewportVisibilityToolbar } from '../block-visibility';\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 NavigableToolbar from '../navigable-toolbar';\nimport { useHasBlockToolbar } from './use-has-block-toolbar';\nimport ChangeDesign from './change-design';\nimport SwitchSectionStyle from './switch-section-style';\nimport EditSectionButton from './edit-section-button';\nimport { unlock } from '../../lock-unlock';\nimport { deviceTypeKey } from '../../store/private-keys';\nimport BlockToolbarIcon from './block-toolbar-icon';\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\tisSectionContainer,\n\t\thasContentOnlyLocking,\n\t\tshowShuffleButton,\n\t\tshowSlots,\n\t\tshowGroupButtons,\n\t\tshowLockButtons,\n\t\tshowBlockVisibilityButton,\n\t\tshowSwitchSectionStyleButton,\n\t\tareSelectedBlocksHiddenOnViewport,\n\t\tcanEdit,\n\t} = useSelect( ( select ) => {\n\t\tconst { canEditBlock } = select( blockEditorStore );\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\tgetSettings,\n\t\t\tgetTemplateLock,\n\t\t\tgetParentSectionBlock,\n\t\t\tisZoomOut,\n\t\t\tisSectionBlock,\n\t\t\tisBlockHiddenAtViewport,\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 parentSection = getParentSectionBlock( selectedBlockClientId );\n\t\tconst parentClientId = parentSection ?? parents[ parents.length - 1 ];\n\t\tconst parentBlockName = getBlockName( parentClientId );\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\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\n\t\tconst _isZoomOut = isZoomOut();\n\t\tconst _isSectionBlock = isSectionBlock( selectedBlockClientId );\n\t\tconst _canEditBlock = canEditBlock( selectedBlockClientId );\n\t\tconst _showSwitchSectionStyleButton =\n\t\t\t_canEditBlock && ( _isZoomOut || _isSectionBlock );\n\n\t\tconst _currentDeviceType =\n\t\t\tgetSettings()?.[ deviceTypeKey ]?.toLowerCase() || 'desktop';\n\t\tconst _areSelectedBlocksHiddenOnViewport =\n\t\t\tselectedBlockClientIds.length > 0 &&\n\t\t\tselectedBlockClientIds.every( ( id ) =>\n\t\t\t\tisBlockHiddenAtViewport( id, _currentDeviceType )\n\t\t\t);\n\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 }${ parentClientId }`,\n\t\t\tshowParentSelector:\n\t\t\t\t! _isZoomOut &&\n\t\t\t\tparentBlockType &&\n\t\t\t\teditingMode !== 'contentOnly' &&\n\t\t\t\tgetBlockEditingMode( parentClientId ) !== 'disabled' &&\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\tisUsingBindings: _isUsingBindings,\n\t\t\tisSectionContainer: _isSectionBlock,\n\t\t\thasContentOnlyLocking: _hasTemplateLock,\n\t\t\tshowShuffleButton: _isZoomOut,\n\t\t\tshowSlots: ! _isZoomOut,\n\t\t\tshowGroupButtons: ! _isZoomOut,\n\t\t\tshowLockButtons: ! _isZoomOut,\n\t\t\tshowBlockVisibilityButton: ! _isZoomOut,\n\t\t\tshowSwitchSectionStyleButton: _showSwitchSectionStyleButton,\n\t\t\tareSelectedBlocksHiddenOnViewport:\n\t\t\t\t_areSelectedBlocksHiddenOnViewport,\n\t\t\tcanEdit: _canEditBlock,\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<div ref={ nodeRef } { ...showHoveredOrFocusedGestures }>\n\t\t\t\t\t\t<ToolbarGroup className=\"block-editor-block-toolbar__block-controls\">\n\t\t\t\t\t\t\t<BlockToolbarIcon\n\t\t\t\t\t\t\t\tclientIds={ blockClientIds }\n\t\t\t\t\t\t\t\tisSynced={ isSynced }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{ isDefaultEditingMode &&\n\t\t\t\t\t\t\t\tshowBlockVisibilityButton && (\n\t\t\t\t\t\t\t\t\t<ViewportVisibilityToolbar\n\t\t\t\t\t\t\t\t\t\tclientIds={ blockClientIds }\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{ ! isMultiToolbar &&\n\t\t\t\t\t\t\t\tisDefaultEditingMode &&\n\t\t\t\t\t\t\t\tshowLockButtons && (\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<BlockMover\n\t\t\t\t\t\t\t\tclientIds={ blockClientIds }\n\t\t\t\t\t\t\t\thideDragHandle={ hideDragHandle }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t\t{ ! areSelectedBlocksHiddenOnViewport &&\n\t\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{ ! isMultiToolbar && canEdit && (\n\t\t\t\t\t<EditSectionButton clientId={ blockClientIds[ 0 ] } />\n\t\t\t\t) }\n\t\t\t\t{ ! areSelectedBlocksHiddenOnViewport && showShuffleButton && (\n\t\t\t\t\t<ChangeDesign clientId={ blockClientIds[ 0 ] } />\n\t\t\t\t) }\n\t\t\t\t{ ! areSelectedBlocksHiddenOnViewport &&\n\t\t\t\t\tshowSwitchSectionStyleButton && (\n\t\t\t\t\t\t<SwitchSectionStyle clientId={ blockClientIds[ 0 ] } />\n\t\t\t\t\t) }\n\t\t\t\t{ ! areSelectedBlocksHiddenOnViewport &&\n\t\t\t\t\tshouldShowVisualToolbar &&\n\t\t\t\t\tshowSlots && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ ! isSectionContainer && (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\t\t\t\tgroup=\"parent\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\t\t\t\tgroup=\"block\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<BlockControls.Slot className=\"block-editor-block-toolbar__slot\" />\n\t\t\t\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\t\t\t\tgroup=\"inline\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\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) }\n\t\t\t\t\t\t\t<BlockControls.Slot\n\t\t\t\t\t\t\t\tgroup=\"other\"\n\t\t\t\t\t\t\t\tclassName=\"block-editor-block-toolbar__slot\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<__unstableBlockToolbarLastItem.Slot />\n\t\t\t\t\t\t</>\n\t\t\t\t\t) }\n\t\t\t\t<BlockEditVisuallyButton clientIds={ blockClientIds } />\n\t\t\t\t<BlockSettingsMenu clientIds={ blockClientIds } />\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"],
5
+ "mappings": "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",
6
6
  "names": ["blockEditorStore", "clsx", "NavigableToolbar", "BlockParentSelector", "BlockToolbarIcon", "BlockMover", "EditSectionButton", "ChangeDesign", "SwitchSectionStyle", "BlockControls", "__unstableBlockToolbarLastItem", "BlockEditVisuallyButton", "BlockSettingsMenu"]
7
7
  }
@@ -95,7 +95,8 @@ function BlockTools({
95
95
  getBlockEditingMode,
96
96
  getBlockName,
97
97
  isGroupable,
98
- getEditedContentOnlySection
98
+ getEditedContentOnlySection,
99
+ canEditBlock
99
100
  } = (0, import_lock_unlock.unlock)((0, import_data.useSelect)(import_store.store));
100
101
  const { getGroupingBlockName } = (0, import_data.useSelect)(import_blocks.store);
101
102
  const { showEmptyBlockSideInserter, showBlockToolbarPopover } = (0, import_use_show_block_tools.useShowBlockTools)();
@@ -210,7 +211,7 @@ function BlockTools({
210
211
  const clientIds = getSelectedBlockClientIds();
211
212
  if (clientIds.length === 1) {
212
213
  const isContentOnly = getBlockEditingMode(clientIds[0]) === "contentOnly";
213
- const canRenameBlock = canRename && !isContentOnly;
214
+ const canRenameBlock = canRename && !isContentOnly && canEditBlock(clientIds[0]);
214
215
  if (canRenameBlock) {
215
216
  event.preventDefault();
216
217
  setRenamingBlockClientId(clientIds[0]);
@@ -228,7 +229,7 @@ function BlockTools({
228
229
  return;
229
230
  }
230
231
  if (clientIds.some(
231
- (id) => getBlockEditingMode(id) !== "default"
232
+ (id) => getBlockEditingMode(id) !== "default" || !canEditBlock(id)
232
233
  )) {
233
234
  return;
234
235
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/block-tools/index.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { isTextField } from '@wordpress/dom';\nimport { Popover } from '@wordpress/components';\nimport { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';\nimport { useRef, useState } from '@wordpress/element';\nimport {\n\tswitchToBlockType,\n\thasBlockSupport,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { speak } from '@wordpress/a11y';\nimport { __, sprintf, _n } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport EmptyBlockInserter from './empty-block-inserter';\nimport {\n\tInsertionPointOpenRef,\n\tdefault as InsertionPoint,\n} from './insertion-point';\nimport BlockToolbarPopover from './block-toolbar-popover';\nimport { store as blockEditorStore } from '../../store';\nimport usePopoverScroll from '../block-popover/use-popover-scroll';\nimport ZoomOutModeInserters from './zoom-out-mode-inserters';\nimport { useShowBlockTools } from './use-show-block-tools';\nimport { unlock } from '../../lock-unlock';\nimport usePasteStyles from '../use-paste-styles';\nimport { BlockRenameModal, useBlockRename } from '../block-rename';\nimport { BlockVisibilityModal } from '../block-visibility';\n\nfunction selector( select ) {\n\tconst {\n\t\tgetSelectedBlockClientId,\n\t\tgetFirstMultiSelectedBlockClientId,\n\t\tgetSettings,\n\t\tisTyping,\n\t\tisDragging,\n\t\tisZoomOut,\n\t\tgetViewportModalClientIds,\n\t} = unlock( select( blockEditorStore ) );\n\n\tconst clientId =\n\t\tgetSelectedBlockClientId() || getFirstMultiSelectedBlockClientId();\n\n\treturn {\n\t\tclientId,\n\t\thasFixedToolbar: getSettings().hasFixedToolbar,\n\t\tisTyping: isTyping(),\n\t\tisZoomOutMode: isZoomOut(),\n\t\tisDragging: isDragging(),\n\t\tviewportModalClientIds: getViewportModalClientIds(),\n\t};\n}\n\n/**\n * Renders block tools (the block toolbar, select/navigation mode toolbar, the\n * insertion point and a slot for the inline rich text toolbar). Must be wrapped\n * around the block content and editor styles wrapper or iframe.\n *\n * @param {Object} $0 Props.\n * @param {Object} $0.children The block content and style container.\n * @param {Object} $0.__unstableContentRef Ref holding the content scroll container.\n */\nexport default function BlockTools( {\n\tchildren,\n\t__unstableContentRef,\n\t...props\n} ) {\n\tconst {\n\t\tclientId,\n\t\thasFixedToolbar,\n\t\tisTyping,\n\t\tisZoomOutMode,\n\t\tisDragging,\n\t\tviewportModalClientIds,\n\t} = useSelect( selector, [] );\n\tconst isMatch = useShortcutEventMatch();\n\tconst {\n\t\tgetBlocksByClientId,\n\t\tgetSelectedBlockClientIds,\n\t\tgetBlockRootClientId,\n\t\tgetBlockEditingMode,\n\t\tgetBlockName,\n\t\tisGroupable,\n\t\tgetEditedContentOnlySection,\n\t} = unlock( useSelect( blockEditorStore ) );\n\tconst { getGroupingBlockName } = useSelect( blocksStore );\n\tconst { showEmptyBlockSideInserter, showBlockToolbarPopover } =\n\t\tuseShowBlockTools();\n\tconst pasteStyles = usePasteStyles();\n\tconst [ renamingBlockClientId, setRenamingBlockClientId ] =\n\t\tuseState( null );\n\n\tconst { canRename } = useBlockRename(\n\t\tgetBlockName( getSelectedBlockClientIds()[ 0 ] )\n\t);\n\tconst {\n\t\tduplicateBlocks,\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\tinsertAfterBlock,\n\t\tinsertBeforeBlock,\n\t\tselectBlock,\n\t\tmoveBlocksUp,\n\t\tmoveBlocksDown,\n\t\texpandBlock,\n\t\tstopEditingContentOnlySection,\n\t\tshowViewportModal,\n\t\thideViewportModal,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\tfunction onKeyDown( event ) {\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tisMatch( 'core/block-editor/move-up', event ) ||\n\t\t\tisMatch( 'core/block-editor/move-down', event )\n\t\t) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\t\t\t\tconst direction = isMatch( 'core/block-editor/move-up', event )\n\t\t\t\t\t? 'up'\n\t\t\t\t\t: 'down';\n\t\t\t\tif ( direction === 'up' ) {\n\t\t\t\t\tmoveBlocksUp( clientIds, rootClientId );\n\t\t\t\t} else {\n\t\t\t\t\tmoveBlocksDown( clientIds, rootClientId );\n\t\t\t\t}\n\t\t\t\tconst blockLength = Array.isArray( clientIds )\n\t\t\t\t\t? clientIds.length\n\t\t\t\t\t: 1;\n\t\t\t\tconst message = sprintf(\n\t\t\t\t\t// translators: %d: the name of the block that has been moved\n\t\t\t\t\t_n(\n\t\t\t\t\t\t'%d block moved.',\n\t\t\t\t\t\t'%d blocks moved.',\n\t\t\t\t\t\tclientIds.length\n\t\t\t\t\t),\n\t\t\t\t\tblockLength\n\t\t\t\t);\n\t\t\t\tspeak( message );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/duplicate', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tduplicateBlocks( clientIds );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/remove', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tremoveBlocks( clientIds );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/paste-styles', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst blocks = getBlocksByClientId( clientIds );\n\t\t\t\tpasteStyles( blocks );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/insert-after', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tinsertAfterBlock( clientIds[ clientIds.length - 1 ] );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/insert-before', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tinsertBeforeBlock( clientIds[ 0 ] );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/unselect', event ) ) {\n\t\t\tif ( event.target.closest( '[role=toolbar]' ) ) {\n\t\t\t\t// This shouldn't be necessary, but we have a combination of a few things all combining to create a situation where:\n\t\t\t\t// - Because the block toolbar uses createPortal to populate the block toolbar fills, we can't rely on the React event bubbling to hit the onKeyDown listener for the block toolbar\n\t\t\t\t// - Since we can't use the React tree, we use the DOM tree which _should_ handle the event bubbling correctly from a `createPortal` element.\n\t\t\t\t// - This bubbles via the React tree, which hits this `unselect` escape keypress before the block toolbar DOM event listener has access to it.\n\t\t\t\t// An alternative would be to remove the addEventListener on the navigableToolbar and use this event to handle it directly right here. That feels hacky too though.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length > 1 ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\t// If there is more than one block selected, select the first\n\t\t\t\t// block so that focus is directed back to the beginning of the selection.\n\t\t\t\t// In effect, to the user this feels like deselecting the multi-selection.\n\t\t\t\tselectBlock( clientIds[ 0 ] );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/collapse-list-view', event ) ) {\n\t\t\t// If focus is currently within a text field, such as a rich text block or other editable field,\n\t\t\t// skip collapsing the list view, and allow the keyboard shortcut to be handled by the text field.\n\t\t\t// This condition checks for both the active element and the active element within an iframed editor.\n\t\t\tif (\n\t\t\t\tisTextField( event.target ) ||\n\t\t\t\tisTextField(\n\t\t\t\t\tevent.target?.contentWindow?.document?.activeElement\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\texpandBlock( clientId );\n\t\t} else if ( isMatch( 'core/block-editor/group', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length > 1 && isGroupable( clientIds ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst blocks = getBlocksByClientId( clientIds );\n\t\t\t\tconst groupingBlockName = getGroupingBlockName();\n\t\t\t\tconst newBlocks = switchToBlockType(\n\t\t\t\t\tblocks,\n\t\t\t\t\tgroupingBlockName\n\t\t\t\t);\n\t\t\t\treplaceBlocks( clientIds, newBlocks );\n\t\t\t\tspeak( __( 'Selected blocks are grouped.' ) );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/rename', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length === 1 ) {\n\t\t\t\tconst isContentOnly =\n\t\t\t\t\tgetBlockEditingMode( clientIds[ 0 ] ) === 'contentOnly';\n\t\t\t\tconst canRenameBlock = canRename && ! isContentOnly;\n\t\t\t\tif ( canRenameBlock ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetRenamingBlockClientId( clientIds[ 0 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (\n\t\t\tisMatch( 'core/block-editor/toggle-block-visibility', event )\n\t\t) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst blocks = getBlocksByClientId( clientIds );\n\t\t\t\tconst supportsBlockVisibility = blocks.every( ( block ) =>\n\t\t\t\t\thasBlockSupport( block.name, 'visibility', true )\n\t\t\t\t);\n\n\t\t\t\tif ( ! supportsBlockVisibility ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Don't allow visibility toggle for blocks that\n\t\t\t\t// are not in the default editing mode.\n\t\t\t\tif (\n\t\t\t\t\tclientIds.some(\n\t\t\t\t\t\t( id ) => getBlockEditingMode( id ) !== 'default'\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Open the visibility breakpoints modal.\n\t\t\t\tshowViewportModal( clientIds );\n\t\t\t}\n\t\t}\n\n\t\t// Has the same keyboard shortcut as 'unselect', so can't be within the\n\t\t// if/else chain above.\n\t\tif ( isMatch( 'core/block-editor/stop-editing-as-blocks', event ) ) {\n\t\t\tif ( getEditedContentOnlySection() ) {\n\t\t\t\tstopEditingContentOnlySection();\n\t\t\t}\n\t\t}\n\t}\n\tconst blockToolbarRef = usePopoverScroll( __unstableContentRef );\n\tconst blockToolbarAfterRef = usePopoverScroll( __unstableContentRef );\n\n\treturn (\n\t\t// eslint-disable-next-line jsx-a11y/no-static-element-interactions\n\t\t<div\n\t\t\t{ ...props }\n\t\t\tonKeyDown={ onKeyDown }\n\t\t\t// Popover slots cannot be unmounted during dragging because the\n\t\t\t// will just be rendered in a fallback popover slot instead.\n\t\t\tclassName={ clsx( props.className, {\n\t\t\t\t'block-editor-block-tools--is-dragging': isDragging,\n\t\t\t} ) }\n\t\t>\n\t\t\t<InsertionPointOpenRef.Provider value={ useRef( false ) }>\n\t\t\t\t{ ! isTyping && ! isZoomOutMode && (\n\t\t\t\t\t<InsertionPoint\n\t\t\t\t\t\t__unstableContentRef={ __unstableContentRef }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t{ showEmptyBlockSideInserter && (\n\t\t\t\t\t<EmptyBlockInserter\n\t\t\t\t\t\t__unstableContentRef={ __unstableContentRef }\n\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t{ showBlockToolbarPopover && (\n\t\t\t\t\t<BlockToolbarPopover\n\t\t\t\t\t\t__unstableContentRef={ __unstableContentRef }\n\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\tisTyping={ isTyping }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t{ /* Used for the inline rich text toolbar. Until this toolbar is combined into BlockToolbar, someone implementing their own BlockToolbar will also need to use this to see the image caption toolbar. */ }\n\t\t\t\t{ ! isZoomOutMode && ! hasFixedToolbar && (\n\t\t\t\t\t<Popover.Slot\n\t\t\t\t\t\tname=\"block-toolbar\"\n\t\t\t\t\t\tref={ blockToolbarRef }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ children }\n\t\t\t\t{ /* Used for inline rich text popovers. */ }\n\t\t\t\t<Popover.Slot\n\t\t\t\t\tname=\"__unstable-block-tools-after\"\n\t\t\t\t\tref={ blockToolbarAfterRef }\n\t\t\t\t/>\n\t\t\t\t{ isZoomOutMode && ! isDragging && (\n\t\t\t\t\t<ZoomOutModeInserters\n\t\t\t\t\t\t__unstableContentRef={ __unstableContentRef }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</InsertionPointOpenRef.Provider>\n\t\t\t{ renamingBlockClientId && (\n\t\t\t\t<BlockRenameModal\n\t\t\t\t\tclientId={ renamingBlockClientId }\n\t\t\t\t\tonClose={ () => setRenamingBlockClientId( null ) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ viewportModalClientIds && (\n\t\t\t\t<BlockVisibilityModal\n\t\t\t\t\tclientIds={ viewportModalClientIds }\n\t\t\t\t\tonClose={ hideViewportModal }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { isTextField } from '@wordpress/dom';\nimport { Popover } from '@wordpress/components';\nimport { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@wordpress/keyboard-shortcuts';\nimport { useRef, useState } from '@wordpress/element';\nimport {\n\tswitchToBlockType,\n\thasBlockSupport,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { speak } from '@wordpress/a11y';\nimport { __, sprintf, _n } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport EmptyBlockInserter from './empty-block-inserter';\nimport {\n\tInsertionPointOpenRef,\n\tdefault as InsertionPoint,\n} from './insertion-point';\nimport BlockToolbarPopover from './block-toolbar-popover';\nimport { store as blockEditorStore } from '../../store';\nimport usePopoverScroll from '../block-popover/use-popover-scroll';\nimport ZoomOutModeInserters from './zoom-out-mode-inserters';\nimport { useShowBlockTools } from './use-show-block-tools';\nimport { unlock } from '../../lock-unlock';\nimport usePasteStyles from '../use-paste-styles';\nimport { BlockRenameModal, useBlockRename } from '../block-rename';\nimport { BlockVisibilityModal } from '../block-visibility';\n\nfunction selector( select ) {\n\tconst {\n\t\tgetSelectedBlockClientId,\n\t\tgetFirstMultiSelectedBlockClientId,\n\t\tgetSettings,\n\t\tisTyping,\n\t\tisDragging,\n\t\tisZoomOut,\n\t\tgetViewportModalClientIds,\n\t} = unlock( select( blockEditorStore ) );\n\n\tconst clientId =\n\t\tgetSelectedBlockClientId() || getFirstMultiSelectedBlockClientId();\n\n\treturn {\n\t\tclientId,\n\t\thasFixedToolbar: getSettings().hasFixedToolbar,\n\t\tisTyping: isTyping(),\n\t\tisZoomOutMode: isZoomOut(),\n\t\tisDragging: isDragging(),\n\t\tviewportModalClientIds: getViewportModalClientIds(),\n\t};\n}\n\n/**\n * Renders block tools (the block toolbar, select/navigation mode toolbar, the\n * insertion point and a slot for the inline rich text toolbar). Must be wrapped\n * around the block content and editor styles wrapper or iframe.\n *\n * @param {Object} $0 Props.\n * @param {Object} $0.children The block content and style container.\n * @param {Object} $0.__unstableContentRef Ref holding the content scroll container.\n */\nexport default function BlockTools( {\n\tchildren,\n\t__unstableContentRef,\n\t...props\n} ) {\n\tconst {\n\t\tclientId,\n\t\thasFixedToolbar,\n\t\tisTyping,\n\t\tisZoomOutMode,\n\t\tisDragging,\n\t\tviewportModalClientIds,\n\t} = useSelect( selector, [] );\n\tconst isMatch = useShortcutEventMatch();\n\tconst {\n\t\tgetBlocksByClientId,\n\t\tgetSelectedBlockClientIds,\n\t\tgetBlockRootClientId,\n\t\tgetBlockEditingMode,\n\t\tgetBlockName,\n\t\tisGroupable,\n\t\tgetEditedContentOnlySection,\n\t\tcanEditBlock,\n\t} = unlock( useSelect( blockEditorStore ) );\n\tconst { getGroupingBlockName } = useSelect( blocksStore );\n\tconst { showEmptyBlockSideInserter, showBlockToolbarPopover } =\n\t\tuseShowBlockTools();\n\tconst pasteStyles = usePasteStyles();\n\tconst [ renamingBlockClientId, setRenamingBlockClientId ] =\n\t\tuseState( null );\n\n\tconst { canRename } = useBlockRename(\n\t\tgetBlockName( getSelectedBlockClientIds()[ 0 ] )\n\t);\n\tconst {\n\t\tduplicateBlocks,\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\tinsertAfterBlock,\n\t\tinsertBeforeBlock,\n\t\tselectBlock,\n\t\tmoveBlocksUp,\n\t\tmoveBlocksDown,\n\t\texpandBlock,\n\t\tstopEditingContentOnlySection,\n\t\tshowViewportModal,\n\t\thideViewportModal,\n\t} = unlock( useDispatch( blockEditorStore ) );\n\n\tfunction onKeyDown( event ) {\n\t\tif ( event.defaultPrevented ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tisMatch( 'core/block-editor/move-up', event ) ||\n\t\t\tisMatch( 'core/block-editor/move-down', event )\n\t\t) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientIds[ 0 ] );\n\t\t\t\tconst direction = isMatch( 'core/block-editor/move-up', event )\n\t\t\t\t\t? 'up'\n\t\t\t\t\t: 'down';\n\t\t\t\tif ( direction === 'up' ) {\n\t\t\t\t\tmoveBlocksUp( clientIds, rootClientId );\n\t\t\t\t} else {\n\t\t\t\t\tmoveBlocksDown( clientIds, rootClientId );\n\t\t\t\t}\n\t\t\t\tconst blockLength = Array.isArray( clientIds )\n\t\t\t\t\t? clientIds.length\n\t\t\t\t\t: 1;\n\t\t\t\tconst message = sprintf(\n\t\t\t\t\t// translators: %d: the name of the block that has been moved\n\t\t\t\t\t_n(\n\t\t\t\t\t\t'%d block moved.',\n\t\t\t\t\t\t'%d blocks moved.',\n\t\t\t\t\t\tclientIds.length\n\t\t\t\t\t),\n\t\t\t\t\tblockLength\n\t\t\t\t);\n\t\t\t\tspeak( message );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/duplicate', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tduplicateBlocks( clientIds );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/remove', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tremoveBlocks( clientIds );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/paste-styles', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst blocks = getBlocksByClientId( clientIds );\n\t\t\t\tpasteStyles( blocks );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/insert-after', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tinsertAfterBlock( clientIds[ clientIds.length - 1 ] );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/insert-before', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tinsertBeforeBlock( clientIds[ 0 ] );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/unselect', event ) ) {\n\t\t\tif ( event.target.closest( '[role=toolbar]' ) ) {\n\t\t\t\t// This shouldn't be necessary, but we have a combination of a few things all combining to create a situation where:\n\t\t\t\t// - Because the block toolbar uses createPortal to populate the block toolbar fills, we can't rely on the React event bubbling to hit the onKeyDown listener for the block toolbar\n\t\t\t\t// - Since we can't use the React tree, we use the DOM tree which _should_ handle the event bubbling correctly from a `createPortal` element.\n\t\t\t\t// - This bubbles via the React tree, which hits this `unselect` escape keypress before the block toolbar DOM event listener has access to it.\n\t\t\t\t// An alternative would be to remove the addEventListener on the navigableToolbar and use this event to handle it directly right here. That feels hacky too though.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length > 1 ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\t// If there is more than one block selected, select the first\n\t\t\t\t// block so that focus is directed back to the beginning of the selection.\n\t\t\t\t// In effect, to the user this feels like deselecting the multi-selection.\n\t\t\t\tselectBlock( clientIds[ 0 ] );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/collapse-list-view', event ) ) {\n\t\t\t// If focus is currently within a text field, such as a rich text block or other editable field,\n\t\t\t// skip collapsing the list view, and allow the keyboard shortcut to be handled by the text field.\n\t\t\t// This condition checks for both the active element and the active element within an iframed editor.\n\t\t\tif (\n\t\t\t\tisTextField( event.target ) ||\n\t\t\t\tisTextField(\n\t\t\t\t\tevent.target?.contentWindow?.document?.activeElement\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\texpandBlock( clientId );\n\t\t} else if ( isMatch( 'core/block-editor/group', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length > 1 && isGroupable( clientIds ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst blocks = getBlocksByClientId( clientIds );\n\t\t\t\tconst groupingBlockName = getGroupingBlockName();\n\t\t\t\tconst newBlocks = switchToBlockType(\n\t\t\t\t\tblocks,\n\t\t\t\t\tgroupingBlockName\n\t\t\t\t);\n\t\t\t\treplaceBlocks( clientIds, newBlocks );\n\t\t\t\tspeak( __( 'Selected blocks are grouped.' ) );\n\t\t\t}\n\t\t} else if ( isMatch( 'core/block-editor/rename', event ) ) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length === 1 ) {\n\t\t\t\tconst isContentOnly =\n\t\t\t\t\tgetBlockEditingMode( clientIds[ 0 ] ) === 'contentOnly';\n\t\t\t\tconst canRenameBlock =\n\t\t\t\t\tcanRename &&\n\t\t\t\t\t! isContentOnly &&\n\t\t\t\t\tcanEditBlock( clientIds[ 0 ] );\n\t\t\t\tif ( canRenameBlock ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetRenamingBlockClientId( clientIds[ 0 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (\n\t\t\tisMatch( 'core/block-editor/toggle-block-visibility', event )\n\t\t) {\n\t\t\tconst clientIds = getSelectedBlockClientIds();\n\t\t\tif ( clientIds.length ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst blocks = getBlocksByClientId( clientIds );\n\t\t\t\tconst supportsBlockVisibility = blocks.every( ( block ) =>\n\t\t\t\t\thasBlockSupport( block.name, 'visibility', true )\n\t\t\t\t);\n\n\t\t\t\tif ( ! supportsBlockVisibility ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Don't allow visibility toggle for blocks that are not in the\n\t\t\t\t// default editing mode or when block editing is disabled\n\t\t\t\t// (e.g. Revisions UI with isPreviewMode).\n\t\t\t\tif (\n\t\t\t\t\tclientIds.some(\n\t\t\t\t\t\t( id ) =>\n\t\t\t\t\t\t\tgetBlockEditingMode( id ) !== 'default' ||\n\t\t\t\t\t\t\t! canEditBlock( id )\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Open the visibility breakpoints modal.\n\t\t\t\tshowViewportModal( clientIds );\n\t\t\t}\n\t\t}\n\n\t\t// Has the same keyboard shortcut as 'unselect', so can't be within the\n\t\t// if/else chain above.\n\t\tif ( isMatch( 'core/block-editor/stop-editing-as-blocks', event ) ) {\n\t\t\tif ( getEditedContentOnlySection() ) {\n\t\t\t\tstopEditingContentOnlySection();\n\t\t\t}\n\t\t}\n\t}\n\tconst blockToolbarRef = usePopoverScroll( __unstableContentRef );\n\tconst blockToolbarAfterRef = usePopoverScroll( __unstableContentRef );\n\n\treturn (\n\t\t// eslint-disable-next-line jsx-a11y/no-static-element-interactions\n\t\t<div\n\t\t\t{ ...props }\n\t\t\tonKeyDown={ onKeyDown }\n\t\t\t// Popover slots cannot be unmounted during dragging because the\n\t\t\t// will just be rendered in a fallback popover slot instead.\n\t\t\tclassName={ clsx( props.className, {\n\t\t\t\t'block-editor-block-tools--is-dragging': isDragging,\n\t\t\t} ) }\n\t\t>\n\t\t\t<InsertionPointOpenRef.Provider value={ useRef( false ) }>\n\t\t\t\t{ ! isTyping && ! isZoomOutMode && (\n\t\t\t\t\t<InsertionPoint\n\t\t\t\t\t\t__unstableContentRef={ __unstableContentRef }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t{ showEmptyBlockSideInserter && (\n\t\t\t\t\t<EmptyBlockInserter\n\t\t\t\t\t\t__unstableContentRef={ __unstableContentRef }\n\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t{ showBlockToolbarPopover && (\n\t\t\t\t\t<BlockToolbarPopover\n\t\t\t\t\t\t__unstableContentRef={ __unstableContentRef }\n\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\tisTyping={ isTyping }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t{ /* Used for the inline rich text toolbar. Until this toolbar is combined into BlockToolbar, someone implementing their own BlockToolbar will also need to use this to see the image caption toolbar. */ }\n\t\t\t\t{ ! isZoomOutMode && ! hasFixedToolbar && (\n\t\t\t\t\t<Popover.Slot\n\t\t\t\t\t\tname=\"block-toolbar\"\n\t\t\t\t\t\tref={ blockToolbarRef }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ children }\n\t\t\t\t{ /* Used for inline rich text popovers. */ }\n\t\t\t\t<Popover.Slot\n\t\t\t\t\tname=\"__unstable-block-tools-after\"\n\t\t\t\t\tref={ blockToolbarAfterRef }\n\t\t\t\t/>\n\t\t\t\t{ isZoomOutMode && ! isDragging && (\n\t\t\t\t\t<ZoomOutModeInserters\n\t\t\t\t\t\t__unstableContentRef={ __unstableContentRef }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</InsertionPointOpenRef.Provider>\n\t\t\t{ renamingBlockClientId && (\n\t\t\t\t<BlockRenameModal\n\t\t\t\t\tclientId={ renamingBlockClientId }\n\t\t\t\t\tonClose={ () => setRenamingBlockClientId( null ) }\n\t\t\t\t/>\n\t\t\t) }\n\t\t\t{ viewportModalClientIds && (\n\t\t\t\t<BlockVisibilityModal\n\t\t\t\t\tclientIds={ viewportModalClientIds }\n\t\t\t\t\tonClose={ hideViewportModal }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["blockEditorStore", "useShortcutEventMatch", "blocksStore", "usePasteStyles", "usePopoverScroll", "clsx", "InsertionPoint", "EmptyBlockInserter", "BlockToolbarPopover", "ZoomOutModeInserters"]
7
7
  }
@@ -139,7 +139,13 @@ function VariationsToggleGroupControl({
139
139
  }
140
140
  function __experimentalBlockVariationTransforms({ blockClientId }) {
141
141
  const { updateBlockAttributes } = (0, import_data.useDispatch)(import_store.store);
142
- const { activeBlockVariation, variations, isContentOnly, isSection } = (0, import_data.useSelect)(
142
+ const {
143
+ activeBlockVariation,
144
+ variations,
145
+ canEdit,
146
+ isContentOnly,
147
+ isSection
148
+ } = (0, import_data.useSelect)(
143
149
  (select) => {
144
150
  const { getActiveBlockVariation, getBlockVariations } = select(import_blocks.store);
145
151
  const {
@@ -148,10 +154,9 @@ function __experimentalBlockVariationTransforms({ blockClientId }) {
148
154
  getBlockEditingMode,
149
155
  isSectionBlock
150
156
  } = (0, import_lock_unlock.unlock)(select(import_store.store));
157
+ const { canEditBlock } = select(import_store.store);
151
158
  const name = blockClientId && getBlockName(blockClientId);
152
- const { hasContentRoleAttribute } = (0, import_lock_unlock.unlock)(
153
- select(import_blocks.store)
154
- );
159
+ const { hasContentRoleAttribute } = (0, import_lock_unlock.unlock)(select(import_blocks.store));
155
160
  const isContentBlock = hasContentRoleAttribute(name);
156
161
  return {
157
162
  activeBlockVariation: getActiveBlockVariation(
@@ -160,6 +165,7 @@ function __experimentalBlockVariationTransforms({ blockClientId }) {
160
165
  "transform"
161
166
  ),
162
167
  variations: name && getBlockVariations(name, "transform"),
168
+ canEdit: canEditBlock(blockClientId),
163
169
  isContentOnly: getBlockEditingMode(blockClientId) === "contentOnly" && !isContentBlock,
164
170
  isSection: isSectionBlock(blockClientId)
165
171
  };
@@ -184,7 +190,7 @@ function __experimentalBlockVariationTransforms({ blockClientId }) {
184
190
  ...variations.find(({ name }) => name === variationName).attributes
185
191
  });
186
192
  };
187
- if (!variations?.length || isContentOnly || isSection) {
193
+ if (!variations?.length || !canEdit || isContentOnly || isSection) {
188
194
  return null;
189
195
  }
190
196
  const baseClass = "block-editor-block-variation-transforms";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/block-variation-transforms/index.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tButton,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n\tVisuallyHidden,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nconst { Menu } = unlock( componentsPrivateApis );\n\nfunction VariationsButtons( {\n\tclassName,\n\tonSelectVariation,\n\tselectedValue,\n\tvariations,\n} ) {\n\treturn (\n\t\t<fieldset className={ className }>\n\t\t\t<VisuallyHidden as=\"legend\">\n\t\t\t\t{ __( 'Transform to variation' ) }\n\t\t\t</VisuallyHidden>\n\t\t\t{ variations.map( ( variation ) => (\n\t\t\t\t<Button\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\tkey={ variation.name }\n\t\t\t\t\ticon={ <BlockIcon icon={ variation.icon } showColors /> }\n\t\t\t\t\tisPressed={ selectedValue === variation.name }\n\t\t\t\t\tlabel={\n\t\t\t\t\t\tselectedValue === variation.name\n\t\t\t\t\t\t\t? variation.title\n\t\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t\t/* translators: %s: Block or block variation name. */\n\t\t\t\t\t\t\t\t\t__( 'Transform to %s' ),\n\t\t\t\t\t\t\t\t\tvariation.title\n\t\t\t\t\t\t\t )\n\t\t\t\t\t}\n\t\t\t\t\tonClick={ () => onSelectVariation( variation.name ) }\n\t\t\t\t\taria-label={ variation.title }\n\t\t\t\t\tshowTooltip\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t</fieldset>\n\t);\n}\n\nfunction VariationsDropdown( {\n\tclassName,\n\tonSelectVariation,\n\tselectedValue,\n\tvariations,\n} ) {\n\treturn (\n\t\t<div className={ className }>\n\t\t\t<Menu>\n\t\t\t\t<Menu.TriggerButton\n\t\t\t\t\trender={\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tclassName=\"block-editor-block-variation-transforms__button\"\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Transform to variation' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<Menu.Popover position=\"bottom\">\n\t\t\t\t\t<Menu.Group>\n\t\t\t\t\t\t{ variations.map( ( variation ) => (\n\t\t\t\t\t\t\t<Menu.RadioItem\n\t\t\t\t\t\t\t\tkey={ variation.name }\n\t\t\t\t\t\t\t\tvalue={ variation.name }\n\t\t\t\t\t\t\t\tchecked={ selectedValue === variation.name }\n\t\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\t\tonSelectVariation( variation.name )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Menu.ItemLabel>\n\t\t\t\t\t\t\t\t\t{ variation.title }\n\t\t\t\t\t\t\t\t</Menu.ItemLabel>\n\t\t\t\t\t\t\t\t{ variation.description && (\n\t\t\t\t\t\t\t\t\t<Menu.ItemHelpText>\n\t\t\t\t\t\t\t\t\t\t{ variation.description }\n\t\t\t\t\t\t\t\t\t</Menu.ItemHelpText>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</Menu.RadioItem>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</Menu.Group>\n\t\t\t\t</Menu.Popover>\n\t\t\t</Menu>\n\t\t</div>\n\t);\n}\n\nfunction VariationsToggleGroupControl( {\n\tclassName,\n\tonSelectVariation,\n\tselectedValue,\n\tvariations,\n} ) {\n\treturn (\n\t\t<div className={ className }>\n\t\t\t<ToggleGroupControl\n\t\t\t\tlabel={ __( 'Transform to variation' ) }\n\t\t\t\tvalue={ selectedValue }\n\t\t\t\thideLabelFromVision\n\t\t\t\tonChange={ onSelectVariation }\n\t\t\t\t__next40pxDefaultSize\n\t\t\t>\n\t\t\t\t{ variations.map( ( variation ) => (\n\t\t\t\t\t<ToggleGroupControlOptionIcon\n\t\t\t\t\t\tkey={ variation.name }\n\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t<BlockIcon icon={ variation.icon } showColors />\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue={ variation.name }\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tselectedValue === variation.name\n\t\t\t\t\t\t\t\t? variation.title\n\t\t\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t\t\t/* translators: %s: Block or block variation name. */\n\t\t\t\t\t\t\t\t\t\t__( 'Transform to %s' ),\n\t\t\t\t\t\t\t\t\t\tvariation.title\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t</ToggleGroupControl>\n\t\t</div>\n\t);\n}\n\nfunction __experimentalBlockVariationTransforms( { blockClientId } ) {\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst { activeBlockVariation, variations, isContentOnly, isSection } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst { getActiveBlockVariation, getBlockVariations } =\n\t\t\t\t\tselect( blocksStore );\n\n\t\t\t\tconst {\n\t\t\t\t\tgetBlockName,\n\t\t\t\t\tgetBlockAttributes,\n\t\t\t\t\tgetBlockEditingMode,\n\t\t\t\t\tisSectionBlock,\n\t\t\t\t} = unlock( select( blockEditorStore ) );\n\n\t\t\t\tconst name = blockClientId && getBlockName( blockClientId );\n\n\t\t\t\tconst { hasContentRoleAttribute } = unlock(\n\t\t\t\t\tselect( blocksStore )\n\t\t\t\t);\n\t\t\t\tconst isContentBlock = hasContentRoleAttribute( name );\n\n\t\t\t\treturn {\n\t\t\t\t\tactiveBlockVariation: getActiveBlockVariation(\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tgetBlockAttributes( blockClientId ),\n\t\t\t\t\t\t'transform'\n\t\t\t\t\t),\n\t\t\t\t\tvariations: name && getBlockVariations( name, 'transform' ),\n\t\t\t\t\tisContentOnly:\n\t\t\t\t\t\tgetBlockEditingMode( blockClientId ) ===\n\t\t\t\t\t\t\t'contentOnly' && ! isContentBlock,\n\t\t\t\t\tisSection: isSectionBlock( blockClientId ),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ blockClientId ]\n\t\t);\n\n\tconst selectedValue = activeBlockVariation?.name;\n\n\t// Check if each variation has a unique icon.\n\tconst hasUniqueIcons = useMemo( () => {\n\t\tconst variationIcons = new Set();\n\t\tif ( ! variations ) {\n\t\t\treturn false;\n\t\t}\n\t\tvariations.forEach( ( variation ) => {\n\t\t\tif ( variation.icon ) {\n\t\t\t\tvariationIcons.add( variation.icon?.src || variation.icon );\n\t\t\t}\n\t\t} );\n\t\treturn variationIcons.size === variations.length;\n\t}, [ variations ] );\n\n\tconst onSelectVariation = ( variationName ) => {\n\t\tupdateBlockAttributes( blockClientId, {\n\t\t\t...variations.find( ( { name } ) => name === variationName )\n\t\t\t\t.attributes,\n\t\t} );\n\t};\n\n\tif ( ! variations?.length || isContentOnly || isSection ) {\n\t\treturn null;\n\t}\n\n\tconst baseClass = 'block-editor-block-variation-transforms';\n\n\t// Show buttons if there are more than 6 variations because the ToggleGroupControl does not wrap\n\tconst showButtons = variations.length > 6;\n\n\tconst ButtonComponent = showButtons\n\t\t? VariationsButtons\n\t\t: VariationsToggleGroupControl;\n\n\tconst Component = hasUniqueIcons ? ButtonComponent : VariationsDropdown;\n\n\treturn (\n\t\t<Component\n\t\t\tclassName={ baseClass }\n\t\t\tonSelectVariation={ onSelectVariation }\n\t\t\tselectedValue={ selectedValue }\n\t\t\tvariations={ variations }\n\t\t/>\n\t);\n}\n\nexport default __experimentalBlockVariationTransforms;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { store as blocksStore } from '@wordpress/blocks';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tButton,\n\t__experimentalToggleGroupControl as ToggleGroupControl,\n\t__experimentalToggleGroupControlOptionIcon as ToggleGroupControlOptionIcon,\n\tVisuallyHidden,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockIcon from '../block-icon';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\nconst { Menu } = unlock( componentsPrivateApis );\n\nfunction VariationsButtons( {\n\tclassName,\n\tonSelectVariation,\n\tselectedValue,\n\tvariations,\n} ) {\n\treturn (\n\t\t<fieldset className={ className }>\n\t\t\t<VisuallyHidden as=\"legend\">\n\t\t\t\t{ __( 'Transform to variation' ) }\n\t\t\t</VisuallyHidden>\n\t\t\t{ variations.map( ( variation ) => (\n\t\t\t\t<Button\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\tsize=\"compact\"\n\t\t\t\t\tkey={ variation.name }\n\t\t\t\t\ticon={ <BlockIcon icon={ variation.icon } showColors /> }\n\t\t\t\t\tisPressed={ selectedValue === variation.name }\n\t\t\t\t\tlabel={\n\t\t\t\t\t\tselectedValue === variation.name\n\t\t\t\t\t\t\t? variation.title\n\t\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t\t/* translators: %s: Block or block variation name. */\n\t\t\t\t\t\t\t\t\t__( 'Transform to %s' ),\n\t\t\t\t\t\t\t\t\tvariation.title\n\t\t\t\t\t\t\t )\n\t\t\t\t\t}\n\t\t\t\t\tonClick={ () => onSelectVariation( variation.name ) }\n\t\t\t\t\taria-label={ variation.title }\n\t\t\t\t\tshowTooltip\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t</fieldset>\n\t);\n}\n\nfunction VariationsDropdown( {\n\tclassName,\n\tonSelectVariation,\n\tselectedValue,\n\tvariations,\n} ) {\n\treturn (\n\t\t<div className={ className }>\n\t\t\t<Menu>\n\t\t\t\t<Menu.TriggerButton\n\t\t\t\t\trender={\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tclassName=\"block-editor-block-variation-transforms__button\"\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Transform to variation' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<Menu.Popover position=\"bottom\">\n\t\t\t\t\t<Menu.Group>\n\t\t\t\t\t\t{ variations.map( ( variation ) => (\n\t\t\t\t\t\t\t<Menu.RadioItem\n\t\t\t\t\t\t\t\tkey={ variation.name }\n\t\t\t\t\t\t\t\tvalue={ variation.name }\n\t\t\t\t\t\t\t\tchecked={ selectedValue === variation.name }\n\t\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\t\tonSelectVariation( variation.name )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Menu.ItemLabel>\n\t\t\t\t\t\t\t\t\t{ variation.title }\n\t\t\t\t\t\t\t\t</Menu.ItemLabel>\n\t\t\t\t\t\t\t\t{ variation.description && (\n\t\t\t\t\t\t\t\t\t<Menu.ItemHelpText>\n\t\t\t\t\t\t\t\t\t\t{ variation.description }\n\t\t\t\t\t\t\t\t\t</Menu.ItemHelpText>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</Menu.RadioItem>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</Menu.Group>\n\t\t\t\t</Menu.Popover>\n\t\t\t</Menu>\n\t\t</div>\n\t);\n}\n\nfunction VariationsToggleGroupControl( {\n\tclassName,\n\tonSelectVariation,\n\tselectedValue,\n\tvariations,\n} ) {\n\treturn (\n\t\t<div className={ className }>\n\t\t\t<ToggleGroupControl\n\t\t\t\tlabel={ __( 'Transform to variation' ) }\n\t\t\t\tvalue={ selectedValue }\n\t\t\t\thideLabelFromVision\n\t\t\t\tonChange={ onSelectVariation }\n\t\t\t\t__next40pxDefaultSize\n\t\t\t>\n\t\t\t\t{ variations.map( ( variation ) => (\n\t\t\t\t\t<ToggleGroupControlOptionIcon\n\t\t\t\t\t\tkey={ variation.name }\n\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t<BlockIcon icon={ variation.icon } showColors />\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue={ variation.name }\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tselectedValue === variation.name\n\t\t\t\t\t\t\t\t? variation.title\n\t\t\t\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t\t\t\t/* translators: %s: Block or block variation name. */\n\t\t\t\t\t\t\t\t\t\t__( 'Transform to %s' ),\n\t\t\t\t\t\t\t\t\t\tvariation.title\n\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t</ToggleGroupControl>\n\t\t</div>\n\t);\n}\n\nfunction __experimentalBlockVariationTransforms( { blockClientId } ) {\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst {\n\t\tactiveBlockVariation,\n\t\tvariations,\n\t\tcanEdit,\n\t\tisContentOnly,\n\t\tisSection,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getActiveBlockVariation, getBlockVariations } =\n\t\t\t\tselect( blocksStore );\n\n\t\t\tconst {\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\tisSectionBlock,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\t\t\tconst { canEditBlock } = select( blockEditorStore );\n\n\t\t\tconst name = blockClientId && getBlockName( blockClientId );\n\n\t\t\tconst { hasContentRoleAttribute } = unlock( select( blocksStore ) );\n\t\t\tconst isContentBlock = hasContentRoleAttribute( name );\n\n\t\t\treturn {\n\t\t\t\tactiveBlockVariation: getActiveBlockVariation(\n\t\t\t\t\tname,\n\t\t\t\t\tgetBlockAttributes( blockClientId ),\n\t\t\t\t\t'transform'\n\t\t\t\t),\n\t\t\t\tvariations: name && getBlockVariations( name, 'transform' ),\n\t\t\t\tcanEdit: canEditBlock( blockClientId ),\n\t\t\t\tisContentOnly:\n\t\t\t\t\tgetBlockEditingMode( blockClientId ) === 'contentOnly' &&\n\t\t\t\t\t! isContentBlock,\n\t\t\t\tisSection: isSectionBlock( blockClientId ),\n\t\t\t};\n\t\t},\n\t\t[ blockClientId ]\n\t);\n\n\tconst selectedValue = activeBlockVariation?.name;\n\n\t// Check if each variation has a unique icon.\n\tconst hasUniqueIcons = useMemo( () => {\n\t\tconst variationIcons = new Set();\n\t\tif ( ! variations ) {\n\t\t\treturn false;\n\t\t}\n\t\tvariations.forEach( ( variation ) => {\n\t\t\tif ( variation.icon ) {\n\t\t\t\tvariationIcons.add( variation.icon?.src || variation.icon );\n\t\t\t}\n\t\t} );\n\t\treturn variationIcons.size === variations.length;\n\t}, [ variations ] );\n\n\tconst onSelectVariation = ( variationName ) => {\n\t\tupdateBlockAttributes( blockClientId, {\n\t\t\t...variations.find( ( { name } ) => name === variationName )\n\t\t\t\t.attributes,\n\t\t} );\n\t};\n\n\tif ( ! variations?.length || ! canEdit || isContentOnly || isSection ) {\n\t\treturn null;\n\t}\n\n\tconst baseClass = 'block-editor-block-variation-transforms';\n\n\t// Show buttons if there are more than 6 variations because the ToggleGroupControl does not wrap\n\tconst showButtons = variations.length > 6;\n\n\tconst ButtonComponent = showButtons\n\t\t? VariationsButtons\n\t\t: VariationsToggleGroupControl;\n\n\tconst Component = hasUniqueIcons ? ButtonComponent : VariationsDropdown;\n\n\treturn (\n\t\t<Component\n\t\t\tclassName={ baseClass }\n\t\t\tonSelectVariation={ onSelectVariation }\n\t\t\tselectedValue={ selectedValue }\n\t\t\tvariations={ variations }\n\t\t/>\n\t);\n}\n\nexport default __experimentalBlockVariationTransforms;\n"],
5
+ "mappings": "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",
6
6
  "names": ["componentsPrivateApis", "BlockIcon", "ToggleGroupControl", "ToggleGroupControlOptionIcon", "blockEditorStore", "blocksStore"]
7
7
  }
@@ -46,9 +46,9 @@ var import_utils = require("../../hooks/utils.cjs");
46
46
  var import_utils2 = require("./utils.cjs");
47
47
 
48
48
  // packages/block-editor/src/components/block-visibility/style.scss
49
- if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='9dfb5c843f']")) {
49
+ if (typeof document !== "undefined" && !document.head.querySelector("style[data-wp-hash='4334c7deb6']")) {
50
50
  const style = document.createElement("style");
51
- style.setAttribute("data-wp-hash", "9dfb5c843f");
51
+ style.setAttribute("data-wp-hash", "4334c7deb6");
52
52
  style.appendChild(document.createTextNode(".block-editor-block-visibility-modal{z-index:1000001}.block-editor-block-visibility-modal__options{border:0;list-style:none;margin:24px 0;padding:0}.block-editor-block-visibility-modal__options-item{align-items:center;display:flex;gap:24px;justify-content:space-between;margin:0 0 16px}.block-editor-block-visibility-modal__options-item:last-child{margin:0}.block-editor-block-visibility-modal__options-item--everywhere{align-items:start;flex-direction:column}.block-editor-block-visibility-modal__options-checkbox--everywhere{font-weight:600}.block-editor-block-visibility-modal__options-icon--checked{fill:#ddd}.block-editor-block-visibility-modal__sub-options{padding-inline-start:12px;width:100%}.block-editor-block-visibility-modal__description{color:#757575;font-size:12px}.block-editor-block-visibility-info{align-items:center;display:flex;justify-content:start;margin:0 16px 16px;padding-bottom:4px;padding-top:4px}"));
53
53
  document.head.appendChild(style);
54
54
  }