@wordpress/block-editor 8.5.1 → 8.5.4

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 (100) hide show
  1. package/build/components/block-alignment-control/ui.js +1 -1
  2. package/build/components/block-alignment-control/ui.js.map +1 -1
  3. package/build/components/block-content-overlay/index.js +4 -13
  4. package/build/components/block-content-overlay/index.js.map +1 -1
  5. package/build/components/block-lock/menu-item.js +1 -1
  6. package/build/components/block-lock/menu-item.js.map +1 -1
  7. package/build/components/block-lock/modal.js +5 -35
  8. package/build/components/block-lock/modal.js.map +1 -1
  9. package/build/components/block-lock/toolbar.js +1 -2
  10. package/build/components/block-lock/toolbar.js.map +1 -1
  11. package/build/components/block-lock/use-block-lock.js +4 -10
  12. package/build/components/block-lock/use-block-lock.js.map +1 -1
  13. package/build/components/copy-handler/index.js +44 -9
  14. package/build/components/copy-handler/index.js.map +1 -1
  15. package/build/components/inserter/index.js +21 -7
  16. package/build/components/inserter/index.js.map +1 -1
  17. package/build/components/inserter/quick-inserter.js +4 -5
  18. package/build/components/inserter/quick-inserter.js.map +1 -1
  19. package/build/components/link-control/index.js +6 -7
  20. package/build/components/link-control/index.js.map +1 -1
  21. package/build/components/list-view/block.js +13 -2
  22. package/build/components/list-view/block.js.map +1 -1
  23. package/build/components/writing-flow/use-click-selection.js +1 -3
  24. package/build/components/writing-flow/use-click-selection.js.map +1 -1
  25. package/build/components/writing-flow/use-selection-observer.js +49 -8
  26. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  27. package/build/hooks/duotone.js +66 -16
  28. package/build/hooks/duotone.js.map +1 -1
  29. package/build/hooks/index.js +7 -1
  30. package/build/hooks/index.js.map +1 -1
  31. package/build/index.js +7 -0
  32. package/build/index.js.map +1 -1
  33. package/build/store/actions.js +22 -29
  34. package/build/store/actions.js.map +1 -1
  35. package/build/store/selectors.js +96 -25
  36. package/build/store/selectors.js.map +1 -1
  37. package/build/store/utils.js +27 -0
  38. package/build/store/utils.js.map +1 -0
  39. package/build-module/components/block-alignment-control/ui.js +2 -2
  40. package/build-module/components/block-alignment-control/ui.js.map +1 -1
  41. package/build-module/components/block-content-overlay/index.js +4 -13
  42. package/build-module/components/block-content-overlay/index.js.map +1 -1
  43. package/build-module/components/block-lock/menu-item.js +1 -1
  44. package/build-module/components/block-lock/menu-item.js.map +1 -1
  45. package/build-module/components/block-lock/modal.js +6 -35
  46. package/build-module/components/block-lock/modal.js.map +1 -1
  47. package/build-module/components/block-lock/toolbar.js +1 -2
  48. package/build-module/components/block-lock/toolbar.js.map +1 -1
  49. package/build-module/components/block-lock/use-block-lock.js +4 -10
  50. package/build-module/components/block-lock/use-block-lock.js.map +1 -1
  51. package/build-module/components/copy-handler/index.js +44 -9
  52. package/build-module/components/copy-handler/index.js.map +1 -1
  53. package/build-module/components/inserter/index.js +21 -7
  54. package/build-module/components/inserter/index.js.map +1 -1
  55. package/build-module/components/inserter/quick-inserter.js +4 -5
  56. package/build-module/components/inserter/quick-inserter.js.map +1 -1
  57. package/build-module/components/link-control/index.js +6 -7
  58. package/build-module/components/link-control/index.js.map +1 -1
  59. package/build-module/components/list-view/block.js +13 -2
  60. package/build-module/components/list-view/block.js.map +1 -1
  61. package/build-module/components/writing-flow/use-click-selection.js +1 -3
  62. package/build-module/components/writing-flow/use-click-selection.js.map +1 -1
  63. package/build-module/components/writing-flow/use-selection-observer.js +49 -8
  64. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  65. package/build-module/hooks/duotone.js +63 -16
  66. package/build-module/hooks/duotone.js.map +1 -1
  67. package/build-module/hooks/index.js +1 -0
  68. package/build-module/hooks/index.js.map +1 -1
  69. package/build-module/index.js +1 -1
  70. package/build-module/index.js.map +1 -1
  71. package/build-module/store/actions.js +5 -14
  72. package/build-module/store/actions.js.map +1 -1
  73. package/build-module/store/selectors.js +88 -22
  74. package/build-module/store/selectors.js.map +1 -1
  75. package/build-module/store/utils.js +20 -0
  76. package/build-module/store/utils.js.map +1 -0
  77. package/build-style/style-rtl.css +1 -3
  78. package/build-style/style.css +1 -3
  79. package/package.json +28 -28
  80. package/src/components/block-alignment-control/ui.js +2 -2
  81. package/src/components/block-content-overlay/index.js +2 -19
  82. package/src/components/block-content-overlay/style.scss +0 -1
  83. package/src/components/block-lock/menu-item.js +1 -1
  84. package/src/components/block-lock/modal.js +3 -42
  85. package/src/components/block-lock/style.scss +1 -2
  86. package/src/components/block-lock/toolbar.js +2 -2
  87. package/src/components/block-lock/use-block-lock.js +5 -12
  88. package/src/components/copy-handler/index.js +52 -10
  89. package/src/components/inserter/index.js +20 -0
  90. package/src/components/inserter/quick-inserter.js +3 -11
  91. package/src/components/link-control/index.js +5 -5
  92. package/src/components/list-view/block.js +16 -7
  93. package/src/components/writing-flow/use-click-selection.js +1 -4
  94. package/src/components/writing-flow/use-selection-observer.js +55 -10
  95. package/src/hooks/duotone.js +98 -62
  96. package/src/hooks/index.js +1 -0
  97. package/src/index.js +1 -0
  98. package/src/store/actions.js +5 -13
  99. package/src/store/selectors.js +126 -20
  100. package/src/store/utils.js +19 -0
@@ -35,7 +35,7 @@ var _useAvailableAlignments = _interopRequireDefault(require("./use-available-al
35
35
  const BLOCK_ALIGNMENTS_CONTROLS = {
36
36
  none: {
37
37
  icon: _icons.alignNone,
38
- title: (0, _i18n.__)('None')
38
+ title: (0, _i18n._x)('None', 'Alignment option')
39
39
  },
40
40
  left: {
41
41
  icon: _icons.positionLeft,
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/block-alignment-control/ui.js"],"names":["BLOCK_ALIGNMENTS_CONTROLS","none","icon","alignNone","title","left","positionLeft","center","positionCenter","right","positionRight","wide","stretchWide","full","stretchFullWidth","DEFAULT_CONTROL","POPOVER_PROPS","isAlternate","BlockAlignmentUI","value","onChange","controls","isToolbar","isCollapsed","enabledControls","hasEnabledControls","length","onChangeAlignment","align","includes","undefined","activeAlignmentControl","defaultAlignmentControl","UIComponent","ToolbarGroup","ToolbarDropdownMenu","commonProps","popoverProps","label","toggleProps","describedBy","extraProps","Platform","isNative","map","name","controlName","isActive","role","onClick","children","onClose","info","isSelected"],"mappings":";;;;;;;;;AAuBA;;;;AApBA;;AAKA;;AACA;;AAMA;;AAaA;;AA5BA;AACA;AACA;;AAGA;AACA;AACA;;AAkBA;AACA;AACA;AAGA,MAAMA,yBAAyB,GAAG;AACjCC,EAAAA,IAAI,EAAE;AACLC,IAAAA,IAAI,EAAEC,gBADD;AAELC,IAAAA,KAAK,EAAE,cAAI,MAAJ;AAFF,GAD2B;AAKjCC,EAAAA,IAAI,EAAE;AACLH,IAAAA,IAAI,EAAEI,mBADD;AAELF,IAAAA,KAAK,EAAE,cAAI,YAAJ;AAFF,GAL2B;AASjCG,EAAAA,MAAM,EAAE;AACPL,IAAAA,IAAI,EAAEM,qBADC;AAEPJ,IAAAA,KAAK,EAAE,cAAI,cAAJ;AAFA,GATyB;AAajCK,EAAAA,KAAK,EAAE;AACNP,IAAAA,IAAI,EAAEQ,oBADA;AAENN,IAAAA,KAAK,EAAE,cAAI,aAAJ;AAFD,GAb0B;AAiBjCO,EAAAA,IAAI,EAAE;AACLT,IAAAA,IAAI,EAAEU,kBADD;AAELR,IAAAA,KAAK,EAAE,cAAI,YAAJ;AAFF,GAjB2B;AAqBjCS,EAAAA,IAAI,EAAE;AACLX,IAAAA,IAAI,EAAEY,uBADD;AAELV,IAAAA,KAAK,EAAE,cAAI,YAAJ;AAFF;AArB2B,CAAlC;AA2BA,MAAMW,eAAe,GAAG,MAAxB;AAEA,MAAMC,aAAa,GAAG;AACrBC,EAAAA,WAAW,EAAE;AADQ,CAAtB;;AAIA,SAASC,gBAAT,OAMI;AAAA,MANuB;AAC1BC,IAAAA,KAD0B;AAE1BC,IAAAA,QAF0B;AAG1BC,IAAAA,QAH0B;AAI1BC,IAAAA,SAJ0B;AAK1BC,IAAAA,WAAW,GAAG;AALY,GAMvB;AACH,QAAMC,eAAe,GAAG,qCAAwBH,QAAxB,CAAxB;AACA,QAAMI,kBAAkB,GAAG,CAAC,CAAED,eAAe,CAACE,MAA9C;;AAEA,MAAK,CAAED,kBAAP,EAA4B;AAC3B,WAAO,IAAP;AACA;;AAED,WAASE,iBAAT,CAA4BC,KAA5B,EAAoC;AACnCR,IAAAA,QAAQ,CAAE,CAAED,KAAF,EAAS,MAAT,EAAkBU,QAAlB,CAA4BD,KAA5B,IAAsCE,SAAtC,GAAkDF,KAApD,CAAR;AACA;;AAED,QAAMG,sBAAsB,GAAG/B,yBAAyB,CAAEmB,KAAF,CAAxD;AACA,QAAMa,uBAAuB,GAC5BhC,yBAAyB,CAAEe,eAAF,CAD1B;AAGA,QAAMkB,WAAW,GAAGX,SAAS,GAAGY,wBAAH,GAAkBC,+BAA/C;AACA,QAAMC,WAAW,GAAG;AACnBC,IAAAA,YAAY,EAAErB,aADK;AAEnBd,IAAAA,IAAI,EAAE6B,sBAAsB,GACzBA,sBAAsB,CAAC7B,IADE,GAEzB8B,uBAAuB,CAAC9B,IAJR;AAKnBoC,IAAAA,KAAK,EAAE,cAAI,OAAJ,CALY;AAMnBC,IAAAA,WAAW,EAAE;AAAEC,MAAAA,WAAW,EAAE,cAAI,kBAAJ;AAAf;AANM,GAApB;AAQA,QAAMC,UAAU,GACfnB,SAAS,IAAIoB,kBAASC,QAAtB,GACG;AACApB,IAAAA,WAAW,EAAED,SAAS,GAAGC,WAAH,GAAiBO,SADvC;AAEAT,IAAAA,QAAQ,EAAEG,eAAe,CAACoB,GAAhB,CACT,SAA6B;AAAA,UAA3B;AAAEC,QAAAA,IAAI,EAAEC;AAAR,OAA2B;AAC5B,aAAO,EACN,GAAG9C,yBAAyB,CAAE8C,WAAF,CADtB;AAENC,QAAAA,QAAQ,EACP5B,KAAK,KAAK2B,WAAV,IACE,CAAE3B,KAAF,IAAW2B,WAAW,KAAK,MAJxB;AAKNE,QAAAA,IAAI,EAAEzB,WAAW,GAAG,eAAH,GAAqBO,SALhC;AAMNmB,QAAAA,OAAO,EAAE,MAAMtB,iBAAiB,CAAEmB,WAAF;AAN1B,OAAP;AAQA,KAVQ;AAFV,GADH,GAgBG;AACAI,IAAAA,QAAQ,EAAE,SAAmB;AAAA,UAAjB;AAAEC,QAAAA;AAAF,OAAiB;AAC5B,aACC,qDACC,4BAAC,qBAAD;AAAW,QAAA,SAAS,EAAC;AAArB,SACG3B,eAAe,CAACoB,GAAhB,CACD,SAAmC;AAAA,YAAjC;AAAEC,UAAAA,IAAI,EAAEC,WAAR;AAAqBM,UAAAA;AAArB,SAAiC;AAClC,cAAM;AACLlD,UAAAA,IADK;AAELE,UAAAA;AAFK,YAGFJ,yBAAyB,CAC5B8C,WAD4B,CAH7B,CADkC,CAOlC;;AACA,cAAMO,UAAU,GACfP,WAAW,KAAK3B,KAAhB,IACE,CAAEA,KAAF,IACD2B,WAAW,KAAK,MAHlB;AAIA,eACC,4BAAC,oBAAD;AACC,UAAA,GAAG,EAAGA,WADP;AAEC,UAAA,IAAI,EAAG5C,IAFR;AAGC,UAAA,YAAY,EAAC,MAHd;AAIC,UAAA,SAAS,EAAG,yBACX,qCADW,EAEX;AACC,yBAAamD;AADd,WAFW,CAJb;AAUC,UAAA,UAAU,EAAGA,UAVd;AAWC,UAAA,OAAO,EAAG,MAAM;AACf1B,YAAAA,iBAAiB,CAChBmB,WADgB,CAAjB;AAGAK,YAAAA,OAAO;AACP,WAhBF;AAiBC,UAAA,IAAI,EAAC,eAjBN;AAkBC,UAAA,IAAI,EAAGC;AAlBR,WAoBGhD,KApBH,CADD;AAwBA,OArCA,CADH,CADD,CADD;AA6CA;AA/CD,GAjBJ;AAmEA,SAAO,4BAAC,WAAD,6BAAkBgC,WAAlB,EAAqCK,UAArC,EAAP;AACA;;eAEcvB,gB","sourcesContent":["/**\n * External dependencies\n */\nimport classNames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tToolbarDropdownMenu,\n\tToolbarGroup,\n\tMenuGroup,\n\tMenuItem,\n} from '@wordpress/components';\nimport {\n\talignNone,\n\tpositionCenter,\n\tpositionLeft,\n\tpositionRight,\n\tstretchFullWidth,\n\tstretchWide,\n} from '@wordpress/icons';\nimport { Platform } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useAvailableAlignments from './use-available-alignments';\n\nconst BLOCK_ALIGNMENTS_CONTROLS = {\n\tnone: {\n\t\ticon: alignNone,\n\t\ttitle: __( 'None' ),\n\t},\n\tleft: {\n\t\ticon: positionLeft,\n\t\ttitle: __( 'Align left' ),\n\t},\n\tcenter: {\n\t\ticon: positionCenter,\n\t\ttitle: __( 'Align center' ),\n\t},\n\tright: {\n\t\ticon: positionRight,\n\t\ttitle: __( 'Align right' ),\n\t},\n\twide: {\n\t\ticon: stretchWide,\n\t\ttitle: __( 'Wide width' ),\n\t},\n\tfull: {\n\t\ticon: stretchFullWidth,\n\t\ttitle: __( 'Full width' ),\n\t},\n};\n\nconst DEFAULT_CONTROL = 'none';\n\nconst POPOVER_PROPS = {\n\tisAlternate: true,\n};\n\nfunction BlockAlignmentUI( {\n\tvalue,\n\tonChange,\n\tcontrols,\n\tisToolbar,\n\tisCollapsed = true,\n} ) {\n\tconst enabledControls = useAvailableAlignments( controls );\n\tconst hasEnabledControls = !! enabledControls.length;\n\n\tif ( ! hasEnabledControls ) {\n\t\treturn null;\n\t}\n\n\tfunction onChangeAlignment( align ) {\n\t\tonChange( [ value, 'none' ].includes( align ) ? undefined : align );\n\t}\n\n\tconst activeAlignmentControl = BLOCK_ALIGNMENTS_CONTROLS[ value ];\n\tconst defaultAlignmentControl =\n\t\tBLOCK_ALIGNMENTS_CONTROLS[ DEFAULT_CONTROL ];\n\n\tconst UIComponent = isToolbar ? ToolbarGroup : ToolbarDropdownMenu;\n\tconst commonProps = {\n\t\tpopoverProps: POPOVER_PROPS,\n\t\ticon: activeAlignmentControl\n\t\t\t? activeAlignmentControl.icon\n\t\t\t: defaultAlignmentControl.icon,\n\t\tlabel: __( 'Align' ),\n\t\ttoggleProps: { describedBy: __( 'Change alignment' ) },\n\t};\n\tconst extraProps =\n\t\tisToolbar || Platform.isNative\n\t\t\t? {\n\t\t\t\t\tisCollapsed: isToolbar ? isCollapsed : undefined,\n\t\t\t\t\tcontrols: enabledControls.map(\n\t\t\t\t\t\t( { name: controlName } ) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...BLOCK_ALIGNMENTS_CONTROLS[ controlName ],\n\t\t\t\t\t\t\t\tisActive:\n\t\t\t\t\t\t\t\t\tvalue === controlName ||\n\t\t\t\t\t\t\t\t\t( ! value && controlName === 'none' ),\n\t\t\t\t\t\t\t\trole: isCollapsed ? 'menuitemradio' : undefined,\n\t\t\t\t\t\t\t\tonClick: () => onChangeAlignment( controlName ),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t }\n\t\t\t: {\n\t\t\t\t\tchildren: ( { onClose } ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<MenuGroup className=\"block-editor-block-alignment-control__menu-group\">\n\t\t\t\t\t\t\t\t\t{ enabledControls.map(\n\t\t\t\t\t\t\t\t\t\t( { name: controlName, info } ) => {\n\t\t\t\t\t\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\t\t\t\t\t\ticon,\n\t\t\t\t\t\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\t\t\t\t\t} = BLOCK_ALIGNMENTS_CONTROLS[\n\t\t\t\t\t\t\t\t\t\t\t\tcontrolName\n\t\t\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\t\t\t// If no value is provided, mark as selected the `none` option.\n\t\t\t\t\t\t\t\t\t\t\tconst isSelected =\n\t\t\t\t\t\t\t\t\t\t\t\tcontrolName === value ||\n\t\t\t\t\t\t\t\t\t\t\t\t( ! value &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontrolName === 'none' );\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={ controlName }\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon={ icon }\n\t\t\t\t\t\t\t\t\t\t\t\t\ticonPosition=\"left\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={ classNames(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'components-dropdown-menu__menu-item',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'is-active': isSelected,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChangeAlignment(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontrolName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tinfo={ info }\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ title }\n\t\t\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t };\n\n\treturn <UIComponent { ...commonProps } { ...extraProps } />;\n}\n\nexport default BlockAlignmentUI;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/block-alignment-control/ui.js"],"names":["BLOCK_ALIGNMENTS_CONTROLS","none","icon","alignNone","title","left","positionLeft","center","positionCenter","right","positionRight","wide","stretchWide","full","stretchFullWidth","DEFAULT_CONTROL","POPOVER_PROPS","isAlternate","BlockAlignmentUI","value","onChange","controls","isToolbar","isCollapsed","enabledControls","hasEnabledControls","length","onChangeAlignment","align","includes","undefined","activeAlignmentControl","defaultAlignmentControl","UIComponent","ToolbarGroup","ToolbarDropdownMenu","commonProps","popoverProps","label","toggleProps","describedBy","extraProps","Platform","isNative","map","name","controlName","isActive","role","onClick","children","onClose","info","isSelected"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classNames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { __, _x } from '@wordpress/i18n';\nimport {\n\tToolbarDropdownMenu,\n\tToolbarGroup,\n\tMenuGroup,\n\tMenuItem,\n} from '@wordpress/components';\nimport {\n\talignNone,\n\tpositionCenter,\n\tpositionLeft,\n\tpositionRight,\n\tstretchFullWidth,\n\tstretchWide,\n} from '@wordpress/icons';\nimport { Platform } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useAvailableAlignments from './use-available-alignments';\n\nconst BLOCK_ALIGNMENTS_CONTROLS = {\n\tnone: {\n\t\ticon: alignNone,\n\t\ttitle: _x( 'None', 'Alignment option' ),\n\t},\n\tleft: {\n\t\ticon: positionLeft,\n\t\ttitle: __( 'Align left' ),\n\t},\n\tcenter: {\n\t\ticon: positionCenter,\n\t\ttitle: __( 'Align center' ),\n\t},\n\tright: {\n\t\ticon: positionRight,\n\t\ttitle: __( 'Align right' ),\n\t},\n\twide: {\n\t\ticon: stretchWide,\n\t\ttitle: __( 'Wide width' ),\n\t},\n\tfull: {\n\t\ticon: stretchFullWidth,\n\t\ttitle: __( 'Full width' ),\n\t},\n};\n\nconst DEFAULT_CONTROL = 'none';\n\nconst POPOVER_PROPS = {\n\tisAlternate: true,\n};\n\nfunction BlockAlignmentUI( {\n\tvalue,\n\tonChange,\n\tcontrols,\n\tisToolbar,\n\tisCollapsed = true,\n} ) {\n\tconst enabledControls = useAvailableAlignments( controls );\n\tconst hasEnabledControls = !! enabledControls.length;\n\n\tif ( ! hasEnabledControls ) {\n\t\treturn null;\n\t}\n\n\tfunction onChangeAlignment( align ) {\n\t\tonChange( [ value, 'none' ].includes( align ) ? undefined : align );\n\t}\n\n\tconst activeAlignmentControl = BLOCK_ALIGNMENTS_CONTROLS[ value ];\n\tconst defaultAlignmentControl =\n\t\tBLOCK_ALIGNMENTS_CONTROLS[ DEFAULT_CONTROL ];\n\n\tconst UIComponent = isToolbar ? ToolbarGroup : ToolbarDropdownMenu;\n\tconst commonProps = {\n\t\tpopoverProps: POPOVER_PROPS,\n\t\ticon: activeAlignmentControl\n\t\t\t? activeAlignmentControl.icon\n\t\t\t: defaultAlignmentControl.icon,\n\t\tlabel: __( 'Align' ),\n\t\ttoggleProps: { describedBy: __( 'Change alignment' ) },\n\t};\n\tconst extraProps =\n\t\tisToolbar || Platform.isNative\n\t\t\t? {\n\t\t\t\t\tisCollapsed: isToolbar ? isCollapsed : undefined,\n\t\t\t\t\tcontrols: enabledControls.map(\n\t\t\t\t\t\t( { name: controlName } ) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...BLOCK_ALIGNMENTS_CONTROLS[ controlName ],\n\t\t\t\t\t\t\t\tisActive:\n\t\t\t\t\t\t\t\t\tvalue === controlName ||\n\t\t\t\t\t\t\t\t\t( ! value && controlName === 'none' ),\n\t\t\t\t\t\t\t\trole: isCollapsed ? 'menuitemradio' : undefined,\n\t\t\t\t\t\t\t\tonClick: () => onChangeAlignment( controlName ),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t }\n\t\t\t: {\n\t\t\t\t\tchildren: ( { onClose } ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<MenuGroup className=\"block-editor-block-alignment-control__menu-group\">\n\t\t\t\t\t\t\t\t\t{ enabledControls.map(\n\t\t\t\t\t\t\t\t\t\t( { name: controlName, info } ) => {\n\t\t\t\t\t\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\t\t\t\t\t\ticon,\n\t\t\t\t\t\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\t\t\t\t\t} = BLOCK_ALIGNMENTS_CONTROLS[\n\t\t\t\t\t\t\t\t\t\t\t\tcontrolName\n\t\t\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\t\t\t// If no value is provided, mark as selected the `none` option.\n\t\t\t\t\t\t\t\t\t\t\tconst isSelected =\n\t\t\t\t\t\t\t\t\t\t\t\tcontrolName === value ||\n\t\t\t\t\t\t\t\t\t\t\t\t( ! value &&\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontrolName === 'none' );\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={ controlName }\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon={ icon }\n\t\t\t\t\t\t\t\t\t\t\t\t\ticonPosition=\"left\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={ classNames(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'components-dropdown-menu__menu-item',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'is-active': isSelected,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChangeAlignment(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontrolName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tinfo={ info }\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ title }\n\t\t\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</MenuGroup>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t };\n\n\treturn <UIComponent { ...commonProps } { ...extraProps } />;\n}\n\nexport default BlockAlignmentUI;\n"]}
@@ -39,7 +39,6 @@ function BlockContentOverlay(_ref) {
39
39
  const [isOverlayActive, setIsOverlayActive] = (0, _element.useState)(true);
40
40
  const [isHovered, setIsHovered] = (0, _element.useState)(false);
41
41
  const {
42
- canEdit,
43
42
  isParentSelected,
44
43
  hasChildSelected,
45
44
  isDraggingBlocks,
@@ -49,11 +48,9 @@ function BlockContentOverlay(_ref) {
49
48
  isBlockSelected,
50
49
  hasSelectedInnerBlock,
51
50
  isDraggingBlocks: _isDraggingBlocks,
52
- isBlockHighlighted,
53
- canEditBlock
51
+ isBlockHighlighted
54
52
  } = select(_store.store);
55
53
  return {
56
- canEdit: canEditBlock(clientId),
57
54
  isParentSelected: isBlockSelected(clientId),
58
55
  hasChildSelected: hasSelectedInnerBlock(clientId, true),
59
56
  isDraggingBlocks: _isDraggingBlocks(),
@@ -66,13 +63,7 @@ function BlockContentOverlay(_ref) {
66
63
  'is-dragging-blocks': isDraggingBlocks
67
64
  });
68
65
  (0, _element.useEffect)(() => {
69
- // The overlay is always active when editing is locked.
70
- if (!canEdit) {
71
- setIsOverlayActive(true);
72
- return;
73
- } // Reenable when blocks are not in use.
74
-
75
-
66
+ // Reenable when blocks are not in use.
76
67
  if (!isParentSelected && !hasChildSelected && !isOverlayActive) {
77
68
  setIsOverlayActive(true);
78
69
  } // Disable if parent selected by another means (such as list view).
@@ -90,7 +81,7 @@ function BlockContentOverlay(_ref) {
90
81
  if (hasChildSelected && isOverlayActive) {
91
82
  setIsOverlayActive(false);
92
83
  }
93
- }, [isParentSelected, hasChildSelected, isOverlayActive, isHovered, canEdit]); // Disabled because the overlay div doesn't actually have a role or functionality
84
+ }, [isParentSelected, hasChildSelected, isOverlayActive, isHovered]); // Disabled because the overlay div doesn't actually have a role or functionality
94
85
  // as far as the a11y is concerned. We're just catching the first click so that
95
86
  // the block can be selected without interacting with its contents.
96
87
 
@@ -100,7 +91,7 @@ function BlockContentOverlay(_ref) {
100
91
  className: classes,
101
92
  onMouseEnter: () => setIsHovered(true),
102
93
  onMouseLeave: () => setIsHovered(false),
103
- onMouseUp: isOverlayActive && canEdit ? () => setIsOverlayActive(false) : undefined
94
+ onMouseUp: isOverlayActive ? () => setIsOverlayActive(false) : undefined
104
95
  }), wrapperProps === null || wrapperProps === void 0 ? void 0 : wrapperProps.children);
105
96
  }
106
97
  /* eslint-enable jsx-a11y/no-static-element-interactions */
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/block-content-overlay/index.js"],"names":["BlockContentOverlay","clientId","tagName","TagName","wrapperProps","className","baseClassName","isOverlayActive","setIsOverlayActive","isHovered","setIsHovered","canEdit","isParentSelected","hasChildSelected","isDraggingBlocks","isParentHighlighted","select","isBlockSelected","hasSelectedInnerBlock","_isDraggingBlocks","isBlockHighlighted","canEditBlock","blockEditorStore","classes","undefined","children"],"mappings":";;;;;;;;;AAIA;;;;AADA;;AAMA;;AAKA;;AAdA;AACA;AACA;;AAIA;AACA;AACA;;AAGA;AACA;AACA;AAGe,SAASA,mBAAT,OAKX;AAAA,MALyC;AAC5CC,IAAAA,QAD4C;AAE5CC,IAAAA,OAAO,EAAEC,OAAO,GAAG,KAFyB;AAG5CC,IAAAA,YAH4C;AAI5CC,IAAAA;AAJ4C,GAKzC;AACH,QAAMC,aAAa,GAAG,oCAAtB;AACA,QAAM,CAAEC,eAAF,EAAmBC,kBAAnB,IAA0C,uBAAU,IAAV,CAAhD;AACA,QAAM,CAAEC,SAAF,EAAaC,YAAb,IAA8B,uBAAU,KAAV,CAApC;AAEA,QAAM;AACLC,IAAAA,OADK;AAELC,IAAAA,gBAFK;AAGLC,IAAAA,gBAHK;AAILC,IAAAA,gBAJK;AAKLC,IAAAA;AALK,MAMF,qBACDC,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,eADK;AAELC,MAAAA,qBAFK;AAGLJ,MAAAA,gBAAgB,EAAEK,iBAHb;AAILC,MAAAA,kBAJK;AAKLC,MAAAA;AALK,QAMFL,MAAM,CAAEM,YAAF,CANV;AAOA,WAAO;AACNX,MAAAA,OAAO,EAAEU,YAAY,CAAEpB,QAAF,CADf;AAENW,MAAAA,gBAAgB,EAAEK,eAAe,CAAEhB,QAAF,CAF3B;AAGNY,MAAAA,gBAAgB,EAAEK,qBAAqB,CAAEjB,QAAF,EAAY,IAAZ,CAHjC;AAINa,MAAAA,gBAAgB,EAAEK,iBAAiB,EAJ7B;AAKNJ,MAAAA,mBAAmB,EAAEK,kBAAkB,CAAEnB,QAAF;AALjC,KAAP;AAOA,GAhBE,EAiBH,CAAEA,QAAF,CAjBG,CANJ;AA0BA,QAAMsB,OAAO,GAAG,yBACfjB,aADe,EAEfF,YAFe,aAEfA,YAFe,uBAEfA,YAAY,CAAEC,SAFC,EAGfA,SAHe,EAIf;AACC,sBAAkBE,eADnB;AAEC,0BAAsBQ,mBAFvB;AAGC,0BAAsBD;AAHvB,GAJe,CAAhB;AAWA,0BAAW,MAAM;AAChB;AACA,QAAK,CAAEH,OAAP,EAAiB;AAChBH,MAAAA,kBAAkB,CAAE,IAAF,CAAlB;AACA;AACA,KALe,CAOhB;;;AACA,QAAK,CAAEI,gBAAF,IAAsB,CAAEC,gBAAxB,IAA4C,CAAEN,eAAnD,EAAqE;AACpEC,MAAAA,kBAAkB,CAAE,IAAF,CAAlB;AACA,KAVe,CAWhB;AACA;AACA;AACA;AACA;;;AACA,QAAKI,gBAAgB,IAAI,CAAEH,SAAtB,IAAmCF,eAAxC,EAA0D;AACzDC,MAAAA,kBAAkB,CAAE,KAAF,CAAlB;AACA,KAlBe,CAmBhB;;;AACA,QAAKK,gBAAgB,IAAIN,eAAzB,EAA2C;AAC1CC,MAAAA,kBAAkB,CAAE,KAAF,CAAlB;AACA;AACD,GAvBD,EAuBG,CACFI,gBADE,EAEFC,gBAFE,EAGFN,eAHE,EAIFE,SAJE,EAKFE,OALE,CAvBH,EA1CG,CAyEH;AACA;AACA;;AACA;;AACA,SACC,4BAAC,OAAD,6BACMP,YADN;AAEC,IAAA,SAAS,EAAGmB,OAFb;AAGC,IAAA,YAAY,EAAG,MAAMb,YAAY,CAAE,IAAF,CAHlC;AAIC,IAAA,YAAY,EAAG,MAAMA,YAAY,CAAE,KAAF,CAJlC;AAKC,IAAA,SAAS,EACRH,eAAe,IAAII,OAAnB,GACG,MAAMH,kBAAkB,CAAE,KAAF,CAD3B,GAEGgB;AARL,MAWGpB,YAXH,aAWGA,YAXH,uBAWGA,YAAY,CAAEqB,QAXjB,CADD;AAeA;AACD","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useState, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\nexport default function BlockContentOverlay( {\n\tclientId,\n\ttagName: TagName = 'div',\n\twrapperProps,\n\tclassName,\n} ) {\n\tconst baseClassName = 'block-editor-block-content-overlay';\n\tconst [ isOverlayActive, setIsOverlayActive ] = useState( true );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\n\tconst {\n\t\tcanEdit,\n\t\tisParentSelected,\n\t\thasChildSelected,\n\t\tisDraggingBlocks,\n\t\tisParentHighlighted,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tisBlockSelected,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tisDraggingBlocks: _isDraggingBlocks,\n\t\t\t\tisBlockHighlighted,\n\t\t\t\tcanEditBlock,\n\t\t\t} = select( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tcanEdit: canEditBlock( clientId ),\n\t\t\t\tisParentSelected: isBlockSelected( clientId ),\n\t\t\t\thasChildSelected: hasSelectedInnerBlock( clientId, true ),\n\t\t\t\tisDraggingBlocks: _isDraggingBlocks(),\n\t\t\t\tisParentHighlighted: isBlockHighlighted( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst classes = classnames(\n\t\tbaseClassName,\n\t\twrapperProps?.className,\n\t\tclassName,\n\t\t{\n\t\t\t'overlay-active': isOverlayActive,\n\t\t\t'parent-highlighted': isParentHighlighted,\n\t\t\t'is-dragging-blocks': isDraggingBlocks,\n\t\t}\n\t);\n\n\tuseEffect( () => {\n\t\t// The overlay is always active when editing is locked.\n\t\tif ( ! canEdit ) {\n\t\t\tsetIsOverlayActive( true );\n\t\t\treturn;\n\t\t}\n\n\t\t// Reenable when blocks are not in use.\n\t\tif ( ! isParentSelected && ! hasChildSelected && ! isOverlayActive ) {\n\t\t\tsetIsOverlayActive( true );\n\t\t}\n\t\t// Disable if parent selected by another means (such as list view).\n\t\t// We check hover to ensure the overlay click interaction is not taking place.\n\t\t// Trying to click the overlay will select the parent block via its 'focusin'\n\t\t// listener on the wrapper, so if the block is selected while hovered we will\n\t\t// let the mouseup disable the overlay instead.\n\t\tif ( isParentSelected && ! isHovered && isOverlayActive ) {\n\t\t\tsetIsOverlayActive( false );\n\t\t}\n\t\t// Ensure overlay is disabled if a child block is selected.\n\t\tif ( hasChildSelected && isOverlayActive ) {\n\t\t\tsetIsOverlayActive( false );\n\t\t}\n\t}, [\n\t\tisParentSelected,\n\t\thasChildSelected,\n\t\tisOverlayActive,\n\t\tisHovered,\n\t\tcanEdit,\n\t] );\n\n\t// Disabled because the overlay div doesn't actually have a role or functionality\n\t// as far as the a11y is concerned. We're just catching the first click so that\n\t// the block can be selected without interacting with its contents.\n\t/* eslint-disable jsx-a11y/no-static-element-interactions */\n\treturn (\n\t\t<TagName\n\t\t\t{ ...wrapperProps }\n\t\t\tclassName={ classes }\n\t\t\tonMouseEnter={ () => setIsHovered( true ) }\n\t\t\tonMouseLeave={ () => setIsHovered( false ) }\n\t\t\tonMouseUp={\n\t\t\t\tisOverlayActive && canEdit\n\t\t\t\t\t? () => setIsOverlayActive( false )\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t>\n\t\t\t{ wrapperProps?.children }\n\t\t</TagName>\n\t);\n}\n/* eslint-enable jsx-a11y/no-static-element-interactions */\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/block-content-overlay/index.js"],"names":["BlockContentOverlay","clientId","tagName","TagName","wrapperProps","className","baseClassName","isOverlayActive","setIsOverlayActive","isHovered","setIsHovered","isParentSelected","hasChildSelected","isDraggingBlocks","isParentHighlighted","select","isBlockSelected","hasSelectedInnerBlock","_isDraggingBlocks","isBlockHighlighted","blockEditorStore","classes","undefined","children"],"mappings":";;;;;;;;;AAIA;;;;AADA;;AAMA;;AAKA;;AAdA;AACA;AACA;;AAIA;AACA;AACA;;AAGA;AACA;AACA;AAGe,SAASA,mBAAT,OAKX;AAAA,MALyC;AAC5CC,IAAAA,QAD4C;AAE5CC,IAAAA,OAAO,EAAEC,OAAO,GAAG,KAFyB;AAG5CC,IAAAA,YAH4C;AAI5CC,IAAAA;AAJ4C,GAKzC;AACH,QAAMC,aAAa,GAAG,oCAAtB;AACA,QAAM,CAAEC,eAAF,EAAmBC,kBAAnB,IAA0C,uBAAU,IAAV,CAAhD;AACA,QAAM,CAAEC,SAAF,EAAaC,YAAb,IAA8B,uBAAU,KAAV,CAApC;AAEA,QAAM;AACLC,IAAAA,gBADK;AAELC,IAAAA,gBAFK;AAGLC,IAAAA,gBAHK;AAILC,IAAAA;AAJK,MAKF,qBACDC,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,eADK;AAELC,MAAAA,qBAFK;AAGLJ,MAAAA,gBAAgB,EAAEK,iBAHb;AAILC,MAAAA;AAJK,QAKFJ,MAAM,CAAEK,YAAF,CALV;AAMA,WAAO;AACNT,MAAAA,gBAAgB,EAAEK,eAAe,CAAEf,QAAF,CAD3B;AAENW,MAAAA,gBAAgB,EAAEK,qBAAqB,CAAEhB,QAAF,EAAY,IAAZ,CAFjC;AAGNY,MAAAA,gBAAgB,EAAEK,iBAAiB,EAH7B;AAINJ,MAAAA,mBAAmB,EAAEK,kBAAkB,CAAElB,QAAF;AAJjC,KAAP;AAMA,GAdE,EAeH,CAAEA,QAAF,CAfG,CALJ;AAuBA,QAAMoB,OAAO,GAAG,yBACff,aADe,EAEfF,YAFe,aAEfA,YAFe,uBAEfA,YAAY,CAAEC,SAFC,EAGfA,SAHe,EAIf;AACC,sBAAkBE,eADnB;AAEC,0BAAsBO,mBAFvB;AAGC,0BAAsBD;AAHvB,GAJe,CAAhB;AAWA,0BAAW,MAAM;AAChB;AACA,QAAK,CAAEF,gBAAF,IAAsB,CAAEC,gBAAxB,IAA4C,CAAEL,eAAnD,EAAqE;AACpEC,MAAAA,kBAAkB,CAAE,IAAF,CAAlB;AACA,KAJe,CAKhB;AACA;AACA;AACA;AACA;;;AACA,QAAKG,gBAAgB,IAAI,CAAEF,SAAtB,IAAmCF,eAAxC,EAA0D;AACzDC,MAAAA,kBAAkB,CAAE,KAAF,CAAlB;AACA,KAZe,CAahB;;;AACA,QAAKI,gBAAgB,IAAIL,eAAzB,EAA2C;AAC1CC,MAAAA,kBAAkB,CAAE,KAAF,CAAlB;AACA;AACD,GAjBD,EAiBG,CAAEG,gBAAF,EAAoBC,gBAApB,EAAsCL,eAAtC,EAAuDE,SAAvD,CAjBH,EAvCG,CA0DH;AACA;AACA;;AACA;;AACA,SACC,4BAAC,OAAD,6BACML,YADN;AAEC,IAAA,SAAS,EAAGiB,OAFb;AAGC,IAAA,YAAY,EAAG,MAAMX,YAAY,CAAE,IAAF,CAHlC;AAIC,IAAA,YAAY,EAAG,MAAMA,YAAY,CAAE,KAAF,CAJlC;AAKC,IAAA,SAAS,EACRH,eAAe,GAAG,MAAMC,kBAAkB,CAAE,KAAF,CAA3B,GAAuCc;AANxD,MASGlB,YATH,aASGA,YATH,uBASGA,YAAY,CAAEmB,QATjB,CADD;AAaA;AACD","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useState, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\nexport default function BlockContentOverlay( {\n\tclientId,\n\ttagName: TagName = 'div',\n\twrapperProps,\n\tclassName,\n} ) {\n\tconst baseClassName = 'block-editor-block-content-overlay';\n\tconst [ isOverlayActive, setIsOverlayActive ] = useState( true );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\n\tconst {\n\t\tisParentSelected,\n\t\thasChildSelected,\n\t\tisDraggingBlocks,\n\t\tisParentHighlighted,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tisBlockSelected,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tisDraggingBlocks: _isDraggingBlocks,\n\t\t\t\tisBlockHighlighted,\n\t\t\t} = select( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tisParentSelected: isBlockSelected( clientId ),\n\t\t\t\thasChildSelected: hasSelectedInnerBlock( clientId, true ),\n\t\t\t\tisDraggingBlocks: _isDraggingBlocks(),\n\t\t\t\tisParentHighlighted: isBlockHighlighted( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst classes = classnames(\n\t\tbaseClassName,\n\t\twrapperProps?.className,\n\t\tclassName,\n\t\t{\n\t\t\t'overlay-active': isOverlayActive,\n\t\t\t'parent-highlighted': isParentHighlighted,\n\t\t\t'is-dragging-blocks': isDraggingBlocks,\n\t\t}\n\t);\n\n\tuseEffect( () => {\n\t\t// Reenable when blocks are not in use.\n\t\tif ( ! isParentSelected && ! hasChildSelected && ! isOverlayActive ) {\n\t\t\tsetIsOverlayActive( true );\n\t\t}\n\t\t// Disable if parent selected by another means (such as list view).\n\t\t// We check hover to ensure the overlay click interaction is not taking place.\n\t\t// Trying to click the overlay will select the parent block via its 'focusin'\n\t\t// listener on the wrapper, so if the block is selected while hovered we will\n\t\t// let the mouseup disable the overlay instead.\n\t\tif ( isParentSelected && ! isHovered && isOverlayActive ) {\n\t\t\tsetIsOverlayActive( false );\n\t\t}\n\t\t// Ensure overlay is disabled if a child block is selected.\n\t\tif ( hasChildSelected && isOverlayActive ) {\n\t\t\tsetIsOverlayActive( false );\n\t\t}\n\t}, [ isParentSelected, hasChildSelected, isOverlayActive, isHovered ] );\n\n\t// Disabled because the overlay div doesn't actually have a role or functionality\n\t// as far as the a11y is concerned. We're just catching the first click so that\n\t// the block can be selected without interacting with its contents.\n\t/* eslint-disable jsx-a11y/no-static-element-interactions */\n\treturn (\n\t\t<TagName\n\t\t\t{ ...wrapperProps }\n\t\t\tclassName={ classes }\n\t\t\tonMouseEnter={ () => setIsHovered( true ) }\n\t\t\tonMouseLeave={ () => setIsHovered( false ) }\n\t\t\tonMouseUp={\n\t\t\t\tisOverlayActive ? () => setIsOverlayActive( false ) : undefined\n\t\t\t}\n\t\t>\n\t\t\t{ wrapperProps?.children }\n\t\t</TagName>\n\t);\n}\n/* eslint-enable jsx-a11y/no-static-element-interactions */\n"]}
@@ -33,7 +33,7 @@ function BlockLockMenuItem(_ref) {
33
33
  const {
34
34
  canLock,
35
35
  isLocked
36
- } = (0, _useBlockLock.default)(clientId, true);
36
+ } = (0, _useBlockLock.default)(clientId);
37
37
  const [isModalOpen, toggleModal] = (0, _element.useReducer)(isActive => !isActive, false);
38
38
 
39
39
  if (!canLock) {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/menu-item.js"],"names":["BlockLockMenuItem","clientId","canLock","isLocked","isModalOpen","toggleModal","isActive","label","unlock","lock"],"mappings":";;;;;;;;;AAIA;;AADA;;AAEA;;AACA;;AAKA;;AACA;;AAZA;AACA;AACA;;AAMA;AACA;AACA;AAIe,SAASA,iBAAT,OAA2C;AAAA,MAAf;AAAEC,IAAAA;AAAF,GAAe;AACzD,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA;AAAX,MAAwB,2BAAcF,QAAd,EAAwB,IAAxB,CAA9B;AAEA,QAAM,CAAEG,WAAF,EAAeC,WAAf,IAA+B,yBAClCC,QAAF,IAAgB,CAAEA,QADkB,EAEpC,KAFoC,CAArC;;AAKA,MAAK,CAAEJ,OAAP,EAAiB;AAChB,WAAO,IAAP;AACA;;AAED,QAAMK,KAAK,GAAGJ,QAAQ,GAAG,cAAI,QAAJ,CAAH,GAAoB,cAAI,MAAJ,CAA1C;AAEA,SACC,qDACC,4BAAC,oBAAD;AAAU,IAAA,IAAI,EAAGA,QAAQ,GAAGK,aAAH,GAAYC,WAArC;AAA4C,IAAA,OAAO,EAAGJ;AAAtD,KACGE,KADH,CADD,EAIGH,WAAW,IACZ,4BAAC,cAAD;AAAgB,IAAA,QAAQ,EAAGH,QAA3B;AAAsC,IAAA,OAAO,EAAGI;AAAhD,IALF,CADD;AAUA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useReducer } from '@wordpress/element';\nimport { MenuItem } from '@wordpress/components';\nimport { lock, unlock } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport useBlockLock from './use-block-lock';\nimport BlockLockModal from './modal';\n\nexport default function BlockLockMenuItem( { clientId } ) {\n\tconst { canLock, isLocked } = useBlockLock( clientId, true );\n\n\tconst [ isModalOpen, toggleModal ] = useReducer(\n\t\t( isActive ) => ! isActive,\n\t\tfalse\n\t);\n\n\tif ( ! canLock ) {\n\t\treturn null;\n\t}\n\n\tconst label = isLocked ? __( 'Unlock' ) : __( 'Lock' );\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem icon={ isLocked ? unlock : lock } onClick={ toggleModal }>\n\t\t\t\t{ label }\n\t\t\t</MenuItem>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<BlockLockModal clientId={ clientId } onClose={ toggleModal } />\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/menu-item.js"],"names":["BlockLockMenuItem","clientId","canLock","isLocked","isModalOpen","toggleModal","isActive","label","unlock","lock"],"mappings":";;;;;;;;;AAIA;;AADA;;AAEA;;AACA;;AAKA;;AACA;;AAZA;AACA;AACA;;AAMA;AACA;AACA;AAIe,SAASA,iBAAT,OAA2C;AAAA,MAAf;AAAEC,IAAAA;AAAF,GAAe;AACzD,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA;AAAX,MAAwB,2BAAcF,QAAd,CAA9B;AAEA,QAAM,CAAEG,WAAF,EAAeC,WAAf,IAA+B,yBAClCC,QAAF,IAAgB,CAAEA,QADkB,EAEpC,KAFoC,CAArC;;AAKA,MAAK,CAAEJ,OAAP,EAAiB;AAChB,WAAO,IAAP;AACA;;AAED,QAAMK,KAAK,GAAGJ,QAAQ,GAAG,cAAI,QAAJ,CAAH,GAAoB,cAAI,MAAJ,CAA1C;AAEA,SACC,qDACC,4BAAC,oBAAD;AAAU,IAAA,IAAI,EAAGA,QAAQ,GAAGK,aAAH,GAAYC,WAArC;AAA4C,IAAA,OAAO,EAAGJ;AAAtD,KACGE,KADH,CADD,EAIGH,WAAW,IACZ,4BAAC,cAAD;AAAgB,IAAA,QAAQ,EAAGH,QAA3B;AAAsC,IAAA,OAAO,EAAGI;AAAhD,IALF,CADD;AAUA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useReducer } from '@wordpress/element';\nimport { MenuItem } from '@wordpress/components';\nimport { lock, unlock } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport useBlockLock from './use-block-lock';\nimport BlockLockModal from './modal';\n\nexport default function BlockLockMenuItem( { clientId } ) {\n\tconst { canLock, isLocked } = useBlockLock( clientId );\n\n\tconst [ isModalOpen, toggleModal ] = useReducer(\n\t\t( isActive ) => ! isActive,\n\t\tfalse\n\t);\n\n\tif ( ! canLock ) {\n\t\treturn null;\n\t}\n\n\tconst label = isLocked ? __( 'Unlock' ) : __( 'Lock' );\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem icon={ isLocked ? unlock : lock } onClick={ toggleModal }>\n\t\t\t\t{ label }\n\t\t\t</MenuItem>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<BlockLockModal clientId={ clientId } onClose={ toggleModal } />\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
@@ -19,8 +19,6 @@ var _compose = require("@wordpress/compose");
19
19
 
20
20
  var _data = require("@wordpress/data");
21
21
 
22
- var _blocks = require("@wordpress/blocks");
23
-
24
22
  var _useBlockLock = _interopRequireDefault(require("./use-block-lock"));
25
23
 
26
24
  var _useBlockDisplayInformation = _interopRequireDefault(require("../use-block-display-information"));
@@ -44,21 +42,9 @@ function BlockLockModal(_ref) {
44
42
  remove: false
45
43
  });
46
44
  const {
47
- canEdit,
48
45
  canMove,
49
46
  canRemove
50
- } = (0, _useBlockLock.default)(clientId, true);
51
- const {
52
- isReusable
53
- } = (0, _data.useSelect)(select => {
54
- const {
55
- getBlockName
56
- } = select(_store.store);
57
- const blockName = getBlockName(clientId);
58
- return {
59
- isReusable: (0, _blocks.isReusableBlock)((0, _blocks.getBlockType)(blockName))
60
- };
61
- }, [clientId]);
47
+ } = (0, _useBlockLock.default)(clientId);
62
48
  const {
63
49
  updateBlockAttributes
64
50
  } = (0, _data.useDispatch)(_store.store);
@@ -67,12 +53,9 @@ function BlockLockModal(_ref) {
67
53
  (0, _element.useEffect)(() => {
68
54
  setLock({
69
55
  move: !canMove,
70
- remove: !canRemove,
71
- ...(isReusable ? {
72
- edit: !canEdit
73
- } : {})
56
+ remove: !canRemove
74
57
  });
75
- }, [canEdit, canMove, canRemove, isReusable]);
58
+ }, [canMove, canRemove]);
76
59
  const isAllChecked = Object.values(lock).every(Boolean);
77
60
  const isMixed = Object.values(lock).some(Boolean) && !isAllChecked;
78
61
  return (0, _element.createElement)(_components.Modal, {
@@ -103,24 +86,11 @@ function BlockLockModal(_ref) {
103
86
  indeterminate: isMixed,
104
87
  onChange: newValue => setLock({
105
88
  move: newValue,
106
- remove: newValue,
107
- ...(isReusable ? {
108
- edit: newValue
109
- } : {})
89
+ remove: newValue
110
90
  })
111
91
  }), (0, _element.createElement)("ul", {
112
92
  className: "block-editor-block-lock-modal__checklist"
113
- }, isReusable && (0, _element.createElement)("li", {
114
- className: "block-editor-block-lock-modal__checklist-item"
115
- }, (0, _element.createElement)(_components.CheckboxControl, {
116
- label: (0, _element.createElement)(_element.Fragment, null, (0, _i18n.__)('Restrict editing'), (0, _element.createElement)(_components.Icon, {
117
- icon: lock.edit ? _icons.lock : _icons.unlock
118
- })),
119
- checked: !!lock.edit,
120
- onChange: edit => setLock(prevLock => ({ ...prevLock,
121
- edit
122
- }))
123
- })), (0, _element.createElement)("li", {
93
+ }, (0, _element.createElement)("li", {
124
94
  className: "block-editor-block-lock-modal__checklist-item"
125
95
  }, (0, _element.createElement)(_components.CheckboxControl, {
126
96
  label: (0, _element.createElement)(_element.Fragment, null, (0, _i18n.__)('Disable movement'), (0, _element.createElement)(_components.Icon, {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/modal.js"],"names":["BlockLockModal","clientId","onClose","lock","setLock","move","remove","canEdit","canMove","canRemove","isReusable","select","getBlockName","blockEditorStore","blockName","updateBlockAttributes","blockInformation","instanceId","edit","isAllChecked","Object","values","every","Boolean","isMixed","some","title","event","preventDefault","newValue","lockIcon","unlockIcon","prevLock"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useEffect, useState } from '@wordpress/element';\nimport {\n\tButton,\n\tCheckboxControl,\n\tFlex,\n\tFlexItem,\n\tIcon,\n\tModal,\n} from '@wordpress/components';\nimport { lock as lockIcon, unlock as unlockIcon } from '@wordpress/icons';\nimport { useInstanceId } from '@wordpress/compose';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { isReusableBlock, getBlockType } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport useBlockLock from './use-block-lock';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockLockModal( { clientId, onClose } ) {\n\tconst [ lock, setLock ] = useState( { move: false, remove: false } );\n\tconst { canEdit, canMove, canRemove } = useBlockLock( clientId, true );\n\tconst { isReusable } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockName } = select( blockEditorStore );\n\t\t\tconst blockName = getBlockName( clientId );\n\n\t\t\treturn {\n\t\t\t\tisReusable: isReusableBlock( getBlockType( blockName ) ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst instanceId = useInstanceId(\n\t\tBlockLockModal,\n\t\t'block-editor-block-lock-modal__options-title'\n\t);\n\n\tuseEffect( () => {\n\t\tsetLock( {\n\t\t\tmove: ! canMove,\n\t\t\tremove: ! canRemove,\n\t\t\t...( isReusable ? { edit: ! canEdit } : {} ),\n\t\t} );\n\t}, [ canEdit, canMove, canRemove, isReusable ] );\n\n\tconst isAllChecked = Object.values( lock ).every( Boolean );\n\tconst isMixed = Object.values( lock ).some( Boolean ) && ! isAllChecked;\n\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ sprintf(\n\t\t\t\t/* translators: %s: Name of the block. */\n\t\t\t\t__( 'Lock %s' ),\n\t\t\t\tblockInformation.title\n\t\t\t) }\n\t\t\toverlayClassName=\"block-editor-block-lock-modal\"\n\t\t\tcloseLabel={ __( 'Close' ) }\n\t\t\tonRequestClose={ onClose }\n\t\t>\n\t\t\t<form\n\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tupdateBlockAttributes( [ clientId ], { lock } );\n\t\t\t\t\tonClose();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<p>\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Choose specific attributes to restrict or lock all available options.'\n\t\t\t\t\t) }\n\t\t\t\t</p>\n\t\t\t\t<div\n\t\t\t\t\trole=\"group\"\n\t\t\t\t\taria-labelledby={ instanceId }\n\t\t\t\t\tclassName=\"block-editor-block-lock-modal__options\"\n\t\t\t\t>\n\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\tclassName=\"block-editor-block-lock-modal__options-title\"\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t<span id={ instanceId }>{ __( 'Lock all' ) }</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchecked={ isAllChecked }\n\t\t\t\t\t\tindeterminate={ isMixed }\n\t\t\t\t\t\tonChange={ ( newValue ) =>\n\t\t\t\t\t\t\tsetLock( {\n\t\t\t\t\t\t\t\tmove: newValue,\n\t\t\t\t\t\t\t\tremove: newValue,\n\t\t\t\t\t\t\t\t...( isReusable ? { edit: newValue } : {} ),\n\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\t<ul className=\"block-editor-block-lock-modal__checklist\">\n\t\t\t\t\t\t{ isReusable && (\n\t\t\t\t\t\t\t<li className=\"block-editor-block-lock-modal__checklist-item\">\n\t\t\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Restrict editing' ) }\n\t\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\t\tlock.edit\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? lockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: unlockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tchecked={ !! lock.edit }\n\t\t\t\t\t\t\t\t\tonChange={ ( edit ) =>\n\t\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\t\tedit,\n\t\t\t\t\t\t\t\t\t\t} ) )\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<li className=\"block-editor-block-lock-modal__checklist-item\">\n\t\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Disable movement' ) }\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\tlock.move\n\t\t\t\t\t\t\t\t\t\t\t\t\t? lockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t: unlockIcon\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchecked={ lock.move }\n\t\t\t\t\t\t\t\tonChange={ ( move ) =>\n\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\tmove,\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</li>\n\t\t\t\t\t\t<li className=\"block-editor-block-lock-modal__checklist-item\">\n\t\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Prevent removal' ) }\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\tlock.remove\n\t\t\t\t\t\t\t\t\t\t\t\t\t? lockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t: unlockIcon\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchecked={ lock.remove }\n\t\t\t\t\t\t\t\tonChange={ ( remove ) =>\n\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\tremove,\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</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<Flex\n\t\t\t\t\tclassName=\"block-editor-block-lock-modal__actions\"\n\t\t\t\t\tjustify=\"flex-end\"\n\t\t\t\t\texpanded={ false }\n\t\t\t\t>\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<Button variant=\"tertiary\" onClick={ onClose }>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t{ __( 'Apply' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t</Flex>\n\t\t\t</form>\n\t\t</Modal>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/modal.js"],"names":["BlockLockModal","clientId","onClose","lock","setLock","move","remove","canMove","canRemove","updateBlockAttributes","blockEditorStore","blockInformation","instanceId","isAllChecked","Object","values","every","Boolean","isMixed","some","title","event","preventDefault","newValue","lockIcon","unlockIcon","prevLock"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useEffect, useState } from '@wordpress/element';\nimport {\n\tButton,\n\tCheckboxControl,\n\tFlex,\n\tFlexItem,\n\tIcon,\n\tModal,\n} from '@wordpress/components';\nimport { lock as lockIcon, unlock as unlockIcon } from '@wordpress/icons';\nimport { useInstanceId } from '@wordpress/compose';\nimport { useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport useBlockLock from './use-block-lock';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockLockModal( { clientId, onClose } ) {\n\tconst [ lock, setLock ] = useState( { move: false, remove: false } );\n\tconst { canMove, canRemove } = useBlockLock( clientId );\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst instanceId = useInstanceId(\n\t\tBlockLockModal,\n\t\t'block-editor-block-lock-modal__options-title'\n\t);\n\n\tuseEffect( () => {\n\t\tsetLock( {\n\t\t\tmove: ! canMove,\n\t\t\tremove: ! canRemove,\n\t\t} );\n\t}, [ canMove, canRemove ] );\n\n\tconst isAllChecked = Object.values( lock ).every( Boolean );\n\tconst isMixed = Object.values( lock ).some( Boolean ) && ! isAllChecked;\n\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ sprintf(\n\t\t\t\t/* translators: %s: Name of the block. */\n\t\t\t\t__( 'Lock %s' ),\n\t\t\t\tblockInformation.title\n\t\t\t) }\n\t\t\toverlayClassName=\"block-editor-block-lock-modal\"\n\t\t\tcloseLabel={ __( 'Close' ) }\n\t\t\tonRequestClose={ onClose }\n\t\t>\n\t\t\t<form\n\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tupdateBlockAttributes( [ clientId ], { lock } );\n\t\t\t\t\tonClose();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<p>\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Choose specific attributes to restrict or lock all available options.'\n\t\t\t\t\t) }\n\t\t\t\t</p>\n\t\t\t\t<div\n\t\t\t\t\trole=\"group\"\n\t\t\t\t\taria-labelledby={ instanceId }\n\t\t\t\t\tclassName=\"block-editor-block-lock-modal__options\"\n\t\t\t\t>\n\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\tclassName=\"block-editor-block-lock-modal__options-title\"\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t<span id={ instanceId }>{ __( 'Lock all' ) }</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchecked={ isAllChecked }\n\t\t\t\t\t\tindeterminate={ isMixed }\n\t\t\t\t\t\tonChange={ ( newValue ) =>\n\t\t\t\t\t\t\tsetLock( {\n\t\t\t\t\t\t\t\tmove: newValue,\n\t\t\t\t\t\t\t\tremove: newValue,\n\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\t<ul className=\"block-editor-block-lock-modal__checklist\">\n\t\t\t\t\t\t<li className=\"block-editor-block-lock-modal__checklist-item\">\n\t\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Disable movement' ) }\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\tlock.move\n\t\t\t\t\t\t\t\t\t\t\t\t\t? lockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t: unlockIcon\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchecked={ lock.move }\n\t\t\t\t\t\t\t\tonChange={ ( move ) =>\n\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\tmove,\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</li>\n\t\t\t\t\t\t<li className=\"block-editor-block-lock-modal__checklist-item\">\n\t\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Prevent removal' ) }\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\tlock.remove\n\t\t\t\t\t\t\t\t\t\t\t\t\t? lockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t: unlockIcon\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchecked={ lock.remove }\n\t\t\t\t\t\t\t\tonChange={ ( remove ) =>\n\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\tremove,\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</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<Flex\n\t\t\t\t\tclassName=\"block-editor-block-lock-modal__actions\"\n\t\t\t\t\tjustify=\"flex-end\"\n\t\t\t\t\texpanded={ false }\n\t\t\t\t>\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<Button variant=\"tertiary\" onClick={ onClose }>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t{ __( 'Apply' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t</Flex>\n\t\t\t</form>\n\t\t</Modal>\n\t);\n}\n"]}
@@ -34,7 +34,6 @@ function BlockLockToolbar(_ref) {
34
34
  } = _ref;
35
35
  const blockInformation = (0, _useBlockDisplayInformation.default)(clientId);
36
36
  const {
37
- canEdit,
38
37
  canMove,
39
38
  canRemove,
40
39
  canLock
@@ -45,7 +44,7 @@ function BlockLockToolbar(_ref) {
45
44
  return null;
46
45
  }
47
46
 
48
- if (canEdit && canMove && canRemove) {
47
+ if (canMove && canRemove) {
49
48
  return null;
50
49
  }
51
50
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/toolbar.js"],"names":["BlockLockToolbar","clientId","blockInformation","canEdit","canMove","canRemove","canLock","isModalOpen","toggleModal","isActive","lock","title"],"mappings":";;;;;;;;;AAKA;;AAFA;;AACA;;AAEA;;AAKA;;AACA;;AACA;;AAbA;AACA;AACA;;AAMA;AACA;AACA;AAKe,SAASA,gBAAT,OAA0C;AAAA,MAAf;AAAEC,IAAAA;AAAF,GAAe;AACxD,QAAMC,gBAAgB,GAAG,yCAA4BD,QAA5B,CAAzB;AACA,QAAM;AAAEE,IAAAA,OAAF;AAAWC,IAAAA,OAAX;AAAoBC,IAAAA,SAApB;AAA+BC,IAAAA;AAA/B,MAA2C,2BAAcL,QAAd,CAAjD;AAEA,QAAM,CAAEM,WAAF,EAAeC,WAAf,IAA+B,yBAClCC,QAAF,IAAgB,CAAEA,QADkB,EAEpC,KAFoC,CAArC;;AAKA,MAAK,CAAEH,OAAP,EAAiB;AAChB,WAAO,IAAP;AACA;;AAED,MAAKH,OAAO,IAAIC,OAAX,IAAsBC,SAA3B,EAAuC;AACtC,WAAO,IAAP;AACA;;AAED,SACC,qDACC,4BAAC,wBAAD;AAAc,IAAA,SAAS,EAAC;AAAxB,KACC,4BAAC,yBAAD;AACC,IAAA,IAAI,EAAGK,WADR;AAEC,IAAA,KAAK,EAAG;AACP;AACA,kBAAI,WAAJ,CAFO,EAGPR,gBAAgB,CAACS,KAHV,CAFT;AAOC,IAAA,OAAO,EAAGH;AAPX,IADD,CADD,EAYGD,WAAW,IACZ,4BAAC,cAAD;AAAgB,IAAA,QAAQ,EAAGN,QAA3B;AAAsC,IAAA,OAAO,EAAGO;AAAhD,IAbF,CADD;AAkBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { useReducer } from '@wordpress/element';\nimport { lock } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockLockModal from './modal';\nimport useBlockLock from './use-block-lock';\nimport useBlockDisplayInformation from '../use-block-display-information';\n\nexport default function BlockLockToolbar( { clientId } ) {\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst { canEdit, canMove, canRemove, canLock } = useBlockLock( clientId );\n\n\tconst [ isModalOpen, toggleModal ] = useReducer(\n\t\t( isActive ) => ! isActive,\n\t\tfalse\n\t);\n\n\tif ( ! canLock ) {\n\t\treturn null;\n\t}\n\n\tif ( canEdit && canMove && canRemove ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<ToolbarGroup className=\"block-editor-block-lock-toolbar\">\n\t\t\t\t<ToolbarButton\n\t\t\t\t\ticon={ lock }\n\t\t\t\t\tlabel={ sprintf(\n\t\t\t\t\t\t/* translators: %s: block name */\n\t\t\t\t\t\t__( 'Unlock %s' ),\n\t\t\t\t\t\tblockInformation.title\n\t\t\t\t\t) }\n\t\t\t\t\tonClick={ toggleModal }\n\t\t\t\t/>\n\t\t\t</ToolbarGroup>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<BlockLockModal clientId={ clientId } onClose={ toggleModal } />\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/toolbar.js"],"names":["BlockLockToolbar","clientId","blockInformation","canMove","canRemove","canLock","isModalOpen","toggleModal","isActive","lock","title"],"mappings":";;;;;;;;;AAKA;;AAFA;;AACA;;AAEA;;AAKA;;AACA;;AACA;;AAbA;AACA;AACA;;AAMA;AACA;AACA;AAKe,SAASA,gBAAT,OAA0C;AAAA,MAAf;AAAEC,IAAAA;AAAF,GAAe;AACxD,QAAMC,gBAAgB,GAAG,yCAA4BD,QAA5B,CAAzB;AACA,QAAM;AAAEE,IAAAA,OAAF;AAAWC,IAAAA,SAAX;AAAsBC,IAAAA;AAAtB,MAAkC,2BAAcJ,QAAd,CAAxC;AAEA,QAAM,CAAEK,WAAF,EAAeC,WAAf,IAA+B,yBAClCC,QAAF,IAAgB,CAAEA,QADkB,EAEpC,KAFoC,CAArC;;AAKA,MAAK,CAAEH,OAAP,EAAiB;AAChB,WAAO,IAAP;AACA;;AAED,MAAKF,OAAO,IAAIC,SAAhB,EAA4B;AAC3B,WAAO,IAAP;AACA;;AAED,SACC,qDACC,4BAAC,wBAAD;AAAc,IAAA,SAAS,EAAC;AAAxB,KACC,4BAAC,yBAAD;AACC,IAAA,IAAI,EAAGK,WADR;AAEC,IAAA,KAAK,EAAG;AACP;AACA,kBAAI,WAAJ,CAFO,EAGPP,gBAAgB,CAACQ,KAHV,CAFT;AAOC,IAAA,OAAO,EAAGH;AAPX,IADD,CADD,EAYGD,WAAW,IACZ,4BAAC,cAAD;AAAgB,IAAA,QAAQ,EAAGL,QAA3B;AAAsC,IAAA,OAAO,EAAGM;AAAhD,IAbF,CADD;AAkBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { useReducer } from '@wordpress/element';\nimport { lock } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockLockModal from './modal';\nimport useBlockLock from './use-block-lock';\nimport useBlockDisplayInformation from '../use-block-display-information';\n\nexport default function BlockLockToolbar( { clientId } ) {\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst { canMove, canRemove, canLock } = useBlockLock( clientId );\n\n\tconst [ isModalOpen, toggleModal ] = useReducer(\n\t\t( isActive ) => ! isActive,\n\t\tfalse\n\t);\n\n\tif ( ! canLock ) {\n\t\treturn null;\n\t}\n\n\tif ( canMove && canRemove ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<ToolbarGroup className=\"block-editor-block-lock-toolbar\">\n\t\t\t\t<ToolbarButton\n\t\t\t\t\ticon={ lock }\n\t\t\t\t\tlabel={ sprintf(\n\t\t\t\t\t\t/* translators: %s: block name */\n\t\t\t\t\t\t__( 'Unlock %s' ),\n\t\t\t\t\t\tblockInformation.title\n\t\t\t\t\t) }\n\t\t\t\t\tonClick={ toggleModal }\n\t\t\t\t/>\n\t\t\t</ToolbarGroup>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<BlockLockModal clientId={ clientId } onClose={ toggleModal } />\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
@@ -20,34 +20,28 @@ var _store = require("../../store");
20
20
  /**
21
21
  * Return details about the block lock status.
22
22
  *
23
- * @param {string} clientId The block client Id.
24
- * @param {boolean} checkParent Optional. The status is derived from the parent `templateLock`
25
- * when the current block's lock state isn't defined.
23
+ * @param {string} clientId The block client Id.
26
24
  *
27
25
  * @return {Object} Block lock status
28
26
  */
29
27
  function useBlockLock(clientId) {
30
- let checkParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
31
28
  return (0, _data.useSelect)(select => {
32
29
  const {
33
- canEditBlock,
34
30
  canMoveBlock,
35
31
  canRemoveBlock,
36
32
  canLockBlockType,
37
33
  getBlockName,
38
34
  getBlockRootClientId
39
35
  } = select(_store.store);
40
- const rootClientId = checkParent ? getBlockRootClientId(clientId) : null;
41
- const canEdit = canEditBlock(clientId);
36
+ const rootClientId = getBlockRootClientId(clientId);
42
37
  const canMove = canMoveBlock(clientId, rootClientId);
43
38
  const canRemove = canRemoveBlock(clientId, rootClientId);
44
39
  return {
45
- canEdit,
46
40
  canMove,
47
41
  canRemove,
48
42
  canLock: canLockBlockType(getBlockName(clientId)),
49
- isLocked: !canEdit || !canMove || !canRemove
43
+ isLocked: !canMove || !canRemove
50
44
  };
51
- }, [clientId, checkParent]);
45
+ }, [clientId]);
52
46
  }
53
47
  //# sourceMappingURL=use-block-lock.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/use-block-lock.js"],"names":["useBlockLock","clientId","checkParent","select","canEditBlock","canMoveBlock","canRemoveBlock","canLockBlockType","getBlockName","getBlockRootClientId","blockEditorStore","rootClientId","canEdit","canMove","canRemove","canLock","isLocked"],"mappings":";;;;;;;AAGA;;AAKA;;AARA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,YAAT,CAAuBC,QAAvB,EAAuD;AAAA,MAAtBC,WAAsB,uEAAR,KAAQ;AACrE,SAAO,qBACJC,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,YADK;AAELC,MAAAA,YAFK;AAGLC,MAAAA,cAHK;AAILC,MAAAA,gBAJK;AAKLC,MAAAA,YALK;AAMLC,MAAAA;AANK,QAOFN,MAAM,CAAEO,YAAF,CAPV;AAQA,UAAMC,YAAY,GAAGT,WAAW,GAC7BO,oBAAoB,CAAER,QAAF,CADS,GAE7B,IAFH;AAIA,UAAMW,OAAO,GAAGR,YAAY,CAAEH,QAAF,CAA5B;AACA,UAAMY,OAAO,GAAGR,YAAY,CAAEJ,QAAF,EAAYU,YAAZ,CAA5B;AACA,UAAMG,SAAS,GAAGR,cAAc,CAAEL,QAAF,EAAYU,YAAZ,CAAhC;AAEA,WAAO;AACNC,MAAAA,OADM;AAENC,MAAAA,OAFM;AAGNC,MAAAA,SAHM;AAINC,MAAAA,OAAO,EAAER,gBAAgB,CAAEC,YAAY,CAAEP,QAAF,CAAd,CAJnB;AAKNe,MAAAA,QAAQ,EAAE,CAAEJ,OAAF,IAAa,CAAEC,OAAf,IAA0B,CAAEC;AALhC,KAAP;AAOA,GAzBK,EA0BN,CAAEb,QAAF,EAAYC,WAAZ,CA1BM,CAAP;AA4BA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Return details about the block lock status.\n *\n * @param {string} clientId The block client Id.\n * @param {boolean} checkParent Optional. The status is derived from the parent `templateLock`\n * when the current block's lock state isn't defined.\n *\n * @return {Object} Block lock status\n */\nexport default function useBlockLock( clientId, checkParent = false ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tcanEditBlock,\n\t\t\t\tcanMoveBlock,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tcanLockBlockType,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst rootClientId = checkParent\n\t\t\t\t? getBlockRootClientId( clientId )\n\t\t\t\t: null;\n\n\t\t\tconst canEdit = canEditBlock( clientId );\n\t\t\tconst canMove = canMoveBlock( clientId, rootClientId );\n\t\t\tconst canRemove = canRemoveBlock( clientId, rootClientId );\n\n\t\t\treturn {\n\t\t\t\tcanEdit,\n\t\t\t\tcanMove,\n\t\t\t\tcanRemove,\n\t\t\t\tcanLock: canLockBlockType( getBlockName( clientId ) ),\n\t\t\t\tisLocked: ! canEdit || ! canMove || ! canRemove,\n\t\t\t};\n\t\t},\n\t\t[ clientId, checkParent ]\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/use-block-lock.js"],"names":["useBlockLock","clientId","select","canMoveBlock","canRemoveBlock","canLockBlockType","getBlockName","getBlockRootClientId","blockEditorStore","rootClientId","canMove","canRemove","canLock","isLocked"],"mappings":";;;;;;;AAGA;;AAKA;;AARA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,YAAT,CAAuBC,QAAvB,EAAkC;AAChD,SAAO,qBACJC,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,YADK;AAELC,MAAAA,cAFK;AAGLC,MAAAA,gBAHK;AAILC,MAAAA,YAJK;AAKLC,MAAAA;AALK,QAMFL,MAAM,CAAEM,YAAF,CANV;AAOA,UAAMC,YAAY,GAAGF,oBAAoB,CAAEN,QAAF,CAAzC;AAEA,UAAMS,OAAO,GAAGP,YAAY,CAAEF,QAAF,EAAYQ,YAAZ,CAA5B;AACA,UAAME,SAAS,GAAGP,cAAc,CAAEH,QAAF,EAAYQ,YAAZ,CAAhC;AAEA,WAAO;AACNC,MAAAA,OADM;AAENC,MAAAA,SAFM;AAGNC,MAAAA,OAAO,EAAEP,gBAAgB,CAAEC,YAAY,CAAEL,QAAF,CAAd,CAHnB;AAINY,MAAAA,QAAQ,EAAE,CAAEH,OAAF,IAAa,CAAEC;AAJnB,KAAP;AAMA,GApBK,EAqBN,CAAEV,QAAF,CArBM,CAAP;AAuBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Return details about the block lock status.\n *\n * @param {string} clientId The block client Id.\n *\n * @return {Object} Block lock status\n */\nexport default function useBlockLock( clientId ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tcanMoveBlock,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tcanLockBlockType,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\t\tconst canMove = canMoveBlock( clientId, rootClientId );\n\t\t\tconst canRemove = canRemoveBlock( clientId, rootClientId );\n\n\t\t\treturn {\n\t\t\t\tcanMove,\n\t\t\t\tcanRemove,\n\t\t\t\tcanLock: canLockBlockType( getBlockName( clientId ) ),\n\t\t\t\tisLocked: ! canMove || ! canRemove,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n}\n"]}
@@ -70,12 +70,18 @@ function useClipboardHandler() {
70
70
  getBlocksByClientId,
71
71
  getSelectedBlockClientIds,
72
72
  hasMultiSelection,
73
- getSettings
73
+ getSettings,
74
+ __unstableIsFullySelected,
75
+ __unstableIsSelectionCollapsed,
76
+ __unstableIsSelectionMergeable,
77
+ __unstableGetSelectedBlocksWithPartialSelection
74
78
  } = (0, _data.useSelect)(_store.store);
75
79
  const {
76
80
  flashBlock,
77
81
  removeBlocks,
78
- replaceBlocks
82
+ replaceBlocks,
83
+ __unstableDeleteSelection,
84
+ __unstableExpandSelection
79
85
  } = (0, _data.useDispatch)(_store.store);
80
86
  const notifyCopy = useNotifyCopy();
81
87
  return (0, _compose.useRefEffect)(node => {
@@ -110,20 +116,49 @@ function useClipboardHandler() {
110
116
  const eventDefaultPrevented = event.defaultPrevented;
111
117
  event.preventDefault();
112
118
 
119
+ const isSelectionMergeable = __unstableIsSelectionMergeable();
120
+
121
+ const shouldHandleWholeBlocks = __unstableIsSelectionCollapsed() || __unstableIsFullySelected();
122
+
123
+ const expandSelectionIsNeeded = !shouldHandleWholeBlocks && !isSelectionMergeable;
124
+
113
125
  if (event.type === 'copy' || event.type === 'cut') {
114
126
  if (selectedBlockClientIds.length === 1) {
115
127
  flashBlock(selectedBlockClientIds[0]);
116
- }
128
+ } // If we have a partial selection that is not mergeable, just
129
+ // expand the selection to the whole blocks.
130
+
117
131
 
118
- notifyCopy(event.type, selectedBlockClientIds);
119
- const blocks = getBlocksByClientId(selectedBlockClientIds);
120
- const serialized = (0, _blocks.serialize)(blocks);
121
- event.clipboardData.setData('text/plain', serialized);
122
- event.clipboardData.setData('text/html', serialized);
132
+ if (expandSelectionIsNeeded) {
133
+ __unstableExpandSelection();
134
+ } else {
135
+ notifyCopy(event.type, selectedBlockClientIds);
136
+ let blocks; // Check if we have partial selection.
137
+
138
+ if (shouldHandleWholeBlocks) {
139
+ blocks = getBlocksByClientId(selectedBlockClientIds);
140
+ } else {
141
+ const [head, tail] = __unstableGetSelectedBlocksWithPartialSelection();
142
+
143
+ const inBetweenBlocks = getBlocksByClientId(selectedBlockClientIds.slice(1, selectedBlockClientIds.length - 1));
144
+ blocks = [head, ...inBetweenBlocks, tail];
145
+ }
146
+
147
+ const serialized = (0, _blocks.serialize)(blocks);
148
+ event.clipboardData.setData('text/plain', serialized);
149
+ event.clipboardData.setData('text/html', serialized);
150
+ }
123
151
  }
124
152
 
125
153
  if (event.type === 'cut') {
126
- removeBlocks(selectedBlockClientIds);
154
+ // We need to also check if at the start we needed to
155
+ // expand the selection, as in this point we might have
156
+ // programmatically fully selected the blocks above.
157
+ if (shouldHandleWholeBlocks && !expandSelectionIsNeeded) {
158
+ removeBlocks(selectedBlockClientIds);
159
+ } else {
160
+ __unstableDeleteSelection();
161
+ }
127
162
  } else if (event.type === 'paste') {
128
163
  if (eventDefaultPrevented) {
129
164
  // This was likely already handled in rich-text/use-paste-handler.js.
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/copy-handler/index.js"],"names":["useNotifyCopy","getBlockName","blockEditorStore","getBlockType","blocksStore","createSuccessNotice","noticesStore","eventType","selectedBlockClientIds","notice","length","clientId","title","type","useClipboardHandler","getBlocksByClientId","getSelectedBlockClientIds","hasMultiSelection","getSettings","flashBlock","removeBlocks","replaceBlocks","notifyCopy","node","handler","event","target","ownerDocument","hasSelection","contains","activeElement","eventDefaultPrevented","defaultPrevented","preventDefault","blocks","serialized","clipboardData","setData","__experimentalCanUserUseUnfilteredHTML","canUserUseUnfilteredHTML","plainText","html","HTML","mode","addEventListener","removeEventListener","CopyHandler","children"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport {\n\tserialize,\n\tpasteHandler,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport {\n\tdocumentHasSelection,\n\tdocumentHasUncollapsedSelection,\n} from '@wordpress/dom';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { getPasteEventData } from '../../utils/pasting';\nimport { store as blockEditorStore } from '../../store';\n\nexport function useNotifyCopy() {\n\tconst { getBlockName } = useSelect( blockEditorStore );\n\tconst { getBlockType } = useSelect( blocksStore );\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\n\treturn useCallback( ( eventType, selectedBlockClientIds ) => {\n\t\tlet notice = '';\n\t\tif ( selectedBlockClientIds.length === 1 ) {\n\t\t\tconst clientId = selectedBlockClientIds[ 0 ];\n\t\t\tconst title = getBlockType( getBlockName( clientId ) )?.title;\n\t\t\tnotice =\n\t\t\t\teventType === 'copy'\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t// Translators: Name of the block being copied, e.g. \"Paragraph\".\n\t\t\t\t\t\t\t__( 'Copied \"%s\" to clipboard.' ),\n\t\t\t\t\t\t\ttitle\n\t\t\t\t\t )\n\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t// Translators: Name of the block being cut, e.g. \"Paragraph\".\n\t\t\t\t\t\t\t__( 'Moved \"%s\" to clipboard.' ),\n\t\t\t\t\t\t\ttitle\n\t\t\t\t\t );\n\t\t} else {\n\t\t\tnotice =\n\t\t\t\teventType === 'copy'\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t// Translators: %d: Number of blocks being copied.\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'Copied %d block to clipboard.',\n\t\t\t\t\t\t\t\t'Copied %d blocks to clipboard.',\n\t\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t )\n\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t// Translators: %d: Number of blocks being cut.\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'Moved %d block to clipboard.',\n\t\t\t\t\t\t\t\t'Moved %d blocks to clipboard.',\n\t\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t );\n\t\t}\n\t\tcreateSuccessNotice( notice, {\n\t\t\ttype: 'snackbar',\n\t\t} );\n\t}, [] );\n}\n\nexport function useClipboardHandler() {\n\tconst {\n\t\tgetBlocksByClientId,\n\t\tgetSelectedBlockClientIds,\n\t\thasMultiSelection,\n\t\tgetSettings,\n\t} = useSelect( blockEditorStore );\n\tconst { flashBlock, removeBlocks, replaceBlocks } = useDispatch(\n\t\tblockEditorStore\n\t);\n\tconst notifyCopy = useNotifyCopy();\n\n\treturn useRefEffect( ( node ) => {\n\t\tfunction handler( event ) {\n\t\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\t\t\tif ( selectedBlockClientIds.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Always handle multiple selected blocks.\n\t\t\tif ( ! hasMultiSelection() ) {\n\t\t\t\tconst { target } = event;\n\t\t\t\tconst { ownerDocument } = target;\n\t\t\t\t// If copying, only consider actual text selection as selection.\n\t\t\t\t// Otherwise, any focus on an input field is considered.\n\t\t\t\tconst hasSelection =\n\t\t\t\t\tevent.type === 'copy' || event.type === 'cut'\n\t\t\t\t\t\t? documentHasUncollapsedSelection( ownerDocument )\n\t\t\t\t\t\t: documentHasSelection( ownerDocument );\n\n\t\t\t\t// Let native copy behaviour take over in input fields.\n\t\t\t\tif ( hasSelection ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( ! node.contains( event.target.ownerDocument.activeElement ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst eventDefaultPrevented = event.defaultPrevented;\n\t\t\tevent.preventDefault();\n\n\t\t\tif ( event.type === 'copy' || event.type === 'cut' ) {\n\t\t\t\tif ( selectedBlockClientIds.length === 1 ) {\n\t\t\t\t\tflashBlock( selectedBlockClientIds[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnotifyCopy( event.type, selectedBlockClientIds );\n\t\t\t\tconst blocks = getBlocksByClientId( selectedBlockClientIds );\n\t\t\t\tconst serialized = serialize( blocks );\n\n\t\t\t\tevent.clipboardData.setData( 'text/plain', serialized );\n\t\t\t\tevent.clipboardData.setData( 'text/html', serialized );\n\t\t\t}\n\n\t\t\tif ( event.type === 'cut' ) {\n\t\t\t\tremoveBlocks( selectedBlockClientIds );\n\t\t\t} else if ( event.type === 'paste' ) {\n\t\t\t\tif ( eventDefaultPrevented ) {\n\t\t\t\t\t// This was likely already handled in rich-text/use-paste-handler.js.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst {\n\t\t\t\t\t__experimentalCanUserUseUnfilteredHTML: canUserUseUnfilteredHTML,\n\t\t\t\t} = getSettings();\n\t\t\t\tconst { plainText, html } = getPasteEventData( event );\n\t\t\t\tconst blocks = pasteHandler( {\n\t\t\t\t\tHTML: html,\n\t\t\t\t\tplainText,\n\t\t\t\t\tmode: 'BLOCKS',\n\t\t\t\t\tcanUserUseUnfilteredHTML,\n\t\t\t\t} );\n\n\t\t\t\treplaceBlocks(\n\t\t\t\t\tselectedBlockClientIds,\n\t\t\t\t\tblocks,\n\t\t\t\t\tblocks.length - 1,\n\t\t\t\t\t-1\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tnode.ownerDocument.addEventListener( 'copy', handler );\n\t\tnode.ownerDocument.addEventListener( 'cut', handler );\n\t\tnode.ownerDocument.addEventListener( 'paste', handler );\n\n\t\treturn () => {\n\t\t\tnode.ownerDocument.removeEventListener( 'copy', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'cut', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'paste', handler );\n\t\t};\n\t}, [] );\n}\n\nfunction CopyHandler( { children } ) {\n\treturn <div ref={ useClipboardHandler() }>{ children }</div>;\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/copy-handler/README.md\n */\nexport default CopyHandler;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/components/copy-handler/index.js"],"names":["useNotifyCopy","getBlockName","blockEditorStore","getBlockType","blocksStore","createSuccessNotice","noticesStore","eventType","selectedBlockClientIds","notice","length","clientId","title","type","useClipboardHandler","getBlocksByClientId","getSelectedBlockClientIds","hasMultiSelection","getSettings","__unstableIsFullySelected","__unstableIsSelectionCollapsed","__unstableIsSelectionMergeable","__unstableGetSelectedBlocksWithPartialSelection","flashBlock","removeBlocks","replaceBlocks","__unstableDeleteSelection","__unstableExpandSelection","notifyCopy","node","handler","event","target","ownerDocument","hasSelection","contains","activeElement","eventDefaultPrevented","defaultPrevented","preventDefault","isSelectionMergeable","shouldHandleWholeBlocks","expandSelectionIsNeeded","blocks","head","tail","inBetweenBlocks","slice","serialized","clipboardData","setData","__experimentalCanUserUseUnfilteredHTML","canUserUseUnfilteredHTML","plainText","html","HTML","mode","addEventListener","removeEventListener","CopyHandler","children"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport {\n\tserialize,\n\tpasteHandler,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport {\n\tdocumentHasSelection,\n\tdocumentHasUncollapsedSelection,\n} from '@wordpress/dom';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { __, _n, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { useRefEffect } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { getPasteEventData } from '../../utils/pasting';\nimport { store as blockEditorStore } from '../../store';\n\nexport function useNotifyCopy() {\n\tconst { getBlockName } = useSelect( blockEditorStore );\n\tconst { getBlockType } = useSelect( blocksStore );\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\n\treturn useCallback( ( eventType, selectedBlockClientIds ) => {\n\t\tlet notice = '';\n\t\tif ( selectedBlockClientIds.length === 1 ) {\n\t\t\tconst clientId = selectedBlockClientIds[ 0 ];\n\t\t\tconst title = getBlockType( getBlockName( clientId ) )?.title;\n\t\t\tnotice =\n\t\t\t\teventType === 'copy'\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t// Translators: Name of the block being copied, e.g. \"Paragraph\".\n\t\t\t\t\t\t\t__( 'Copied \"%s\" to clipboard.' ),\n\t\t\t\t\t\t\ttitle\n\t\t\t\t\t )\n\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t// Translators: Name of the block being cut, e.g. \"Paragraph\".\n\t\t\t\t\t\t\t__( 'Moved \"%s\" to clipboard.' ),\n\t\t\t\t\t\t\ttitle\n\t\t\t\t\t );\n\t\t} else {\n\t\t\tnotice =\n\t\t\t\teventType === 'copy'\n\t\t\t\t\t? sprintf(\n\t\t\t\t\t\t\t// Translators: %d: Number of blocks being copied.\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'Copied %d block to clipboard.',\n\t\t\t\t\t\t\t\t'Copied %d blocks to clipboard.',\n\t\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t )\n\t\t\t\t\t: sprintf(\n\t\t\t\t\t\t\t// Translators: %d: Number of blocks being cut.\n\t\t\t\t\t\t\t_n(\n\t\t\t\t\t\t\t\t'Moved %d block to clipboard.',\n\t\t\t\t\t\t\t\t'Moved %d blocks to clipboard.',\n\t\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tselectedBlockClientIds.length\n\t\t\t\t\t );\n\t\t}\n\t\tcreateSuccessNotice( notice, {\n\t\t\ttype: 'snackbar',\n\t\t} );\n\t}, [] );\n}\n\nexport function useClipboardHandler() {\n\tconst {\n\t\tgetBlocksByClientId,\n\t\tgetSelectedBlockClientIds,\n\t\thasMultiSelection,\n\t\tgetSettings,\n\t\t__unstableIsFullySelected,\n\t\t__unstableIsSelectionCollapsed,\n\t\t__unstableIsSelectionMergeable,\n\t\t__unstableGetSelectedBlocksWithPartialSelection,\n\t} = useSelect( blockEditorStore );\n\tconst {\n\t\tflashBlock,\n\t\tremoveBlocks,\n\t\treplaceBlocks,\n\t\t__unstableDeleteSelection,\n\t\t__unstableExpandSelection,\n\t} = useDispatch( blockEditorStore );\n\tconst notifyCopy = useNotifyCopy();\n\n\treturn useRefEffect( ( node ) => {\n\t\tfunction handler( event ) {\n\t\t\tconst selectedBlockClientIds = getSelectedBlockClientIds();\n\n\t\t\tif ( selectedBlockClientIds.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Always handle multiple selected blocks.\n\t\t\tif ( ! hasMultiSelection() ) {\n\t\t\t\tconst { target } = event;\n\t\t\t\tconst { ownerDocument } = target;\n\t\t\t\t// If copying, only consider actual text selection as selection.\n\t\t\t\t// Otherwise, any focus on an input field is considered.\n\t\t\t\tconst hasSelection =\n\t\t\t\t\tevent.type === 'copy' || event.type === 'cut'\n\t\t\t\t\t\t? documentHasUncollapsedSelection( ownerDocument )\n\t\t\t\t\t\t: documentHasSelection( ownerDocument );\n\n\t\t\t\t// Let native copy behaviour take over in input fields.\n\t\t\t\tif ( hasSelection ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( ! node.contains( event.target.ownerDocument.activeElement ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst eventDefaultPrevented = event.defaultPrevented;\n\t\t\tevent.preventDefault();\n\n\t\t\tconst isSelectionMergeable = __unstableIsSelectionMergeable();\n\t\t\tconst shouldHandleWholeBlocks =\n\t\t\t\t__unstableIsSelectionCollapsed() || __unstableIsFullySelected();\n\t\t\tconst expandSelectionIsNeeded =\n\t\t\t\t! shouldHandleWholeBlocks && ! isSelectionMergeable;\n\t\t\tif ( event.type === 'copy' || event.type === 'cut' ) {\n\t\t\t\tif ( selectedBlockClientIds.length === 1 ) {\n\t\t\t\t\tflashBlock( selectedBlockClientIds[ 0 ] );\n\t\t\t\t}\n\t\t\t\t// If we have a partial selection that is not mergeable, just\n\t\t\t\t// expand the selection to the whole blocks.\n\t\t\t\tif ( expandSelectionIsNeeded ) {\n\t\t\t\t\t__unstableExpandSelection();\n\t\t\t\t} else {\n\t\t\t\t\tnotifyCopy( event.type, selectedBlockClientIds );\n\t\t\t\t\tlet blocks;\n\t\t\t\t\t// Check if we have partial selection.\n\t\t\t\t\tif ( shouldHandleWholeBlocks ) {\n\t\t\t\t\t\tblocks = getBlocksByClientId( selectedBlockClientIds );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst [\n\t\t\t\t\t\t\thead,\n\t\t\t\t\t\t\ttail,\n\t\t\t\t\t\t] = __unstableGetSelectedBlocksWithPartialSelection();\n\t\t\t\t\t\tconst inBetweenBlocks = getBlocksByClientId(\n\t\t\t\t\t\t\tselectedBlockClientIds.slice(\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\tselectedBlockClientIds.length - 1\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tblocks = [ head, ...inBetweenBlocks, tail ];\n\t\t\t\t\t}\n\t\t\t\t\tconst serialized = serialize( blocks );\n\n\t\t\t\t\tevent.clipboardData.setData( 'text/plain', serialized );\n\t\t\t\t\tevent.clipboardData.setData( 'text/html', serialized );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( event.type === 'cut' ) {\n\t\t\t\t// We need to also check if at the start we needed to\n\t\t\t\t// expand the selection, as in this point we might have\n\t\t\t\t// programmatically fully selected the blocks above.\n\t\t\t\tif ( shouldHandleWholeBlocks && ! expandSelectionIsNeeded ) {\n\t\t\t\t\tremoveBlocks( selectedBlockClientIds );\n\t\t\t\t} else {\n\t\t\t\t\t__unstableDeleteSelection();\n\t\t\t\t}\n\t\t\t} else if ( event.type === 'paste' ) {\n\t\t\t\tif ( eventDefaultPrevented ) {\n\t\t\t\t\t// This was likely already handled in rich-text/use-paste-handler.js.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst {\n\t\t\t\t\t__experimentalCanUserUseUnfilteredHTML: canUserUseUnfilteredHTML,\n\t\t\t\t} = getSettings();\n\t\t\t\tconst { plainText, html } = getPasteEventData( event );\n\t\t\t\tconst blocks = pasteHandler( {\n\t\t\t\t\tHTML: html,\n\t\t\t\t\tplainText,\n\t\t\t\t\tmode: 'BLOCKS',\n\t\t\t\t\tcanUserUseUnfilteredHTML,\n\t\t\t\t} );\n\n\t\t\t\treplaceBlocks(\n\t\t\t\t\tselectedBlockClientIds,\n\t\t\t\t\tblocks,\n\t\t\t\t\tblocks.length - 1,\n\t\t\t\t\t-1\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tnode.ownerDocument.addEventListener( 'copy', handler );\n\t\tnode.ownerDocument.addEventListener( 'cut', handler );\n\t\tnode.ownerDocument.addEventListener( 'paste', handler );\n\n\t\treturn () => {\n\t\t\tnode.ownerDocument.removeEventListener( 'copy', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'cut', handler );\n\t\t\tnode.ownerDocument.removeEventListener( 'paste', handler );\n\t\t};\n\t}, [] );\n}\n\nfunction CopyHandler( { children } ) {\n\treturn <div ref={ useClipboardHandler() }>{ children }</div>;\n}\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/copy-handler/README.md\n */\nexport default CopyHandler;\n"]}
@@ -53,13 +53,16 @@ const defaultRenderToggle = _ref => {
53
53
  isOpen,
54
54
  blockTitle,
55
55
  hasSingleBlockType,
56
- toggleProps = {}
56
+ toggleProps = {},
57
+ prioritizePatterns
57
58
  } = _ref;
58
59
  let label;
59
60
 
60
61
  if (hasSingleBlockType) {
61
62
  label = (0, _i18n.sprintf)( // translators: %s: the name of the block when there is only one
62
63
  (0, _i18n._x)('Add %s', 'directly add the only allowed block'), blockTitle);
64
+ } else if (prioritizePatterns) {
65
+ label = (0, _i18n.__)('Add pattern');
63
66
  } else {
64
67
  label = (0, _i18n._x)('Add block', 'Generic label for block inserter button');
65
68
  }
@@ -132,7 +135,8 @@ class Inserter extends _element.Component {
132
135
  directInsertBlock,
133
136
  toggleProps,
134
137
  hasItems,
135
- renderToggle = defaultRenderToggle
138
+ renderToggle = defaultRenderToggle,
139
+ prioritizePatterns
136
140
  } = this.props;
137
141
  return renderToggle({
138
142
  onToggle,
@@ -141,7 +145,8 @@ class Inserter extends _element.Component {
141
145
  blockTitle,
142
146
  hasSingleBlockType,
143
147
  directInsertBlock,
144
- toggleProps
148
+ toggleProps,
149
+ prioritizePatterns
145
150
  });
146
151
  }
147
152
  /**
@@ -166,7 +171,8 @@ class Inserter extends _element.Component {
166
171
  showInserterHelpPanel,
167
172
  // This prop is experimental to give some time for the quick inserter to mature
168
173
  // Feel free to make them stable after a few releases.
169
- __experimentalIsQuick: isQuick
174
+ __experimentalIsQuick: isQuick,
175
+ prioritizePatterns
170
176
  } = this.props;
171
177
 
172
178
  if (isQuick) {
@@ -176,7 +182,8 @@ class Inserter extends _element.Component {
176
182
  },
177
183
  rootClientId: rootClientId,
178
184
  clientId: clientId,
179
- isAppender: isAppender
185
+ isAppender: isAppender,
186
+ prioritizePatterns: prioritizePatterns
180
187
  });
181
188
  }
182
189
 
@@ -233,7 +240,10 @@ var _default = (0, _compose.compose)([(0, _data.withSelect)((select, _ref4) => {
233
240
  getBlockRootClientId,
234
241
  hasInserterItems,
235
242
  __experimentalGetAllowedBlocks,
236
- __experimentalGetDirectInsertBlock
243
+ __experimentalGetDirectInsertBlock,
244
+ getBlockIndex,
245
+ getBlockCount,
246
+ getSettings
237
247
  } = select(_store.store);
238
248
  const {
239
249
  getBlockVariations
@@ -244,6 +254,9 @@ var _default = (0, _compose.compose)([(0, _data.withSelect)((select, _ref4) => {
244
254
 
245
255
  const directInsertBlock = __experimentalGetDirectInsertBlock(rootClientId);
246
256
 
257
+ const index = getBlockIndex(clientId);
258
+ const blockCount = getBlockCount();
259
+ const settings = getSettings();
247
260
  const hasSingleBlockType = (0, _lodash.size)(allowedBlocks) === 1 && (0, _lodash.size)(getBlockVariations(allowedBlocks[0].name, 'inserter')) === 0;
248
261
  let allowedBlockType = false;
249
262
 
@@ -257,7 +270,8 @@ var _default = (0, _compose.compose)([(0, _data.withSelect)((select, _ref4) => {
257
270
  blockTitle: allowedBlockType ? allowedBlockType.title : '',
258
271
  allowedBlockType,
259
272
  directInsertBlock,
260
- rootClientId
273
+ rootClientId,
274
+ prioritizePatterns: settings.__experimentalPreferPatternsOnRoot && !rootClientId && index > 0 && (index < blockCount || blockCount === 0)
261
275
  };
262
276
  }), (0, _data.withDispatch)((dispatch, ownProps, _ref5) => {
263
277
  let {